From ed96e0a2f65a0cf38990fe17bccd7fe3aeeda82a Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 8 Mar 2022 16:26:19 +0100 Subject: [PATCH 001/677] PL translation update THX strebski --- advancedcontentfilter/lang/pl/messages.po | 70 ++--- blackout/lang/pl/messages.po | 44 +-- blackout/lang/pl/strings.php | 6 +- blockem/lang/pl/messages.po | 36 +-- blockem/lang/pl/strings.php | 5 +- buglink/lang/pl/messages.po | 8 +- catavatar/lang/pl/messages.po | 45 ++-- catavatar/lang/pl/strings.php | 5 +- cookienotice/lang/pl/messages.po | 32 +-- cookienotice/lang/pl/strings.php | 4 - curweather/lang/pl/messages.po | 81 +++--- curweather/lang/pl/strings.php | 8 +- diaspora/lang/pl/messages.po | 56 ++-- diaspora/lang/pl/strings.php | 5 +- dwpost/lang/pl/messages.po | 45 ++-- dwpost/lang/pl/strings.php | 11 +- forumdirectory/lang/pl/messages.po | 62 ++--- forumdirectory/lang/pl/strings.php | 11 +- fromapp/lang/pl/messages.po | 24 +- fromapp/lang/pl/strings.php | 4 +- geonames/lang/pl/messages.po | 28 +- geonames/lang/pl/strings.php | 4 +- gnot/lang/pl/messages.po | 28 +- gnot/lang/pl/strings.php | 4 +- gravatar/lang/pl/messages.po | 41 ++- gravatar/lang/pl/strings.php | 3 +- group_text/lang/pl/messages.po | 24 +- group_text/lang/pl/strings.php | 4 +- ifttt/lang/pl/messages.po | 43 +-- ifttt/lang/pl/strings.php | 3 +- ijpost/lang/pl/messages.po | 30 +-- ijpost/lang/pl/strings.php | 4 +- impressum/lang/pl/messages.po | 53 ++-- impressum/lang/pl/strings.php | 9 +- .../lang/pl/messages.po | 8 +- irc/lang/pl/messages.po | 40 ++- irc/lang/pl/strings.php | 5 +- js_upload/lang/pl/messages.po | 42 +-- js_upload/lang/pl/strings.php | 5 +- krynn/lang/pl/messages.po | 20 +- krynn/lang/pl/strings.php | 3 +- langfilter/lang/pl/messages.po | 49 ++-- langfilter/lang/pl/strings.php | 7 +- libertree/lang/pl/messages.po | 34 ++- libertree/lang/pl/strings.php | 4 +- libravatar/lang/pl/messages.po | 58 ++-- libravatar/lang/pl/strings.php | 7 +- ljpost/lang/pl/messages.po | 52 ++-- ljpost/lang/pl/strings.php | 12 +- mailstream/lang/pl/messages.po | 48 ++-- mailstream/lang/pl/strings.php | 6 +- mathjax/lang/pl/messages.po | 34 +-- mathjax/lang/pl/strings.php | 5 - morechoice/lang/pl/messages.po | 171 ++++++------ morechoice/lang/pl/strings.php | 2 +- morepokes/lang/pl/messages.po | 6 +- newmemberwidget/lang/pl/messages.po | 40 +-- newmemberwidget/lang/pl/strings.php | 3 +- notifyall/lang/pl/messages.po | 35 +-- notifyall/lang/pl/strings.php | 4 +- nsfw/lang/pl/messages.po | 34 +-- nsfw/lang/pl/strings.php | 4 +- numfriends/lang/pl/messages.po | 24 +- numfriends/lang/pl/strings.php | 4 +- openstreetmap/lang/pl/messages.po | 51 ++-- openstreetmap/lang/pl/strings.php | 3 - pageheader/lang/pl/messages.po | 20 +- pageheader/lang/pl/strings.php | 1 - piwik/lang/pl/messages.po | 26 +- piwik/lang/pl/strings.php | 1 - planets/lang/pl/messages.po | 20 +- planets/lang/pl/strings.php | 3 +- public_server/lang/pl/messages.po | 25 +- public_server/lang/pl/strings.php | 1 + pumpio/lang/pl/messages.po | 82 +++--- pumpio/lang/pl/strings.php | 11 +- qcomment/lang/pl/messages.po | 34 +-- qcomment/lang/pl/strings.php | 5 +- randplace/lang/pl/messages.po | 20 +- randplace/lang/pl/strings.php | 3 +- rendertime/lang/pl/messages.po | 33 ++- rendertime/lang/pl/strings.php | 1 + securemail/lang/pl/messages.po | 45 ++-- securemail/lang/pl/strings.php | 7 +- showmore/lang/pl/messages.po | 32 +-- showmore/lang/pl/strings.php | 5 +- smileybutton/lang/pl/messages.po | 4 +- startpage/lang/pl/messages.po | 26 +- startpage/lang/pl/strings.php | 3 - statusnet/lang/pl/messages.po | 250 +++++++++--------- statusnet/lang/pl/strings.php | 24 +- superblock/lang/pl/messages.po | 32 +-- superblock/lang/pl/strings.php | 4 - testdrive/lang/pl/messages.po | 20 +- testdrive/lang/pl/strings.php | 5 - tictac/lang/pl/messages.po | 30 +-- tumblr/lang/pl/messages.po | 67 +++-- tumblr/lang/pl/strings.php | 7 +- twitter/lang/pl/messages.po | 125 +++++---- twitter/lang/pl/strings.php | 12 +- viewsrc/lang/pl/messages.po | 11 +- webrtc/lang/pl/messages.po | 26 +- webrtc/lang/pl/strings.php | 1 - windowsphonepush/lang/pl/messages.po | 36 +++ windowsphonepush/lang/pl/strings.php | 10 + wppost/lang/pl/messages.po | 56 ++-- wppost/lang/pl/strings.php | 7 +- 107 files changed, 1290 insertions(+), 1501 deletions(-) create mode 100644 windowsphonepush/lang/pl/messages.po create mode 100644 windowsphonepush/lang/pl/strings.php diff --git a/advancedcontentfilter/lang/pl/messages.po b/advancedcontentfilter/lang/pl/messages.po index 6f9e5a59..0e87acb6 100644 --- a/advancedcontentfilter/lang/pl/messages.po +++ b/advancedcontentfilter/lang/pl/messages.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-07-25 13:15+0000\n" +"POT-Creation-Date: 2021-11-21 19:13-0500\n" "PO-Revision-Date: 2018-05-24 06:41+0000\n" "Last-Translator: Joe Doe, 2021\n" "Language-Team: Polish (https://www.transifex.com/Friendica/teams/12172/pl/)\n" @@ -22,28 +22,28 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: advancedcontentfilter.php:153 +#: advancedcontentfilter.php:154 #, php-format msgid "Filtered by rule: %s" msgstr " Filtruj według reguły: %s" -#: advancedcontentfilter.php:167 advancedcontentfilter.php:224 +#: advancedcontentfilter.php:170 advancedcontentfilter.php:225 msgid "Advanced Content Filter" msgstr "Zaawansowany filtr zawartości" -#: advancedcontentfilter.php:223 +#: advancedcontentfilter.php:224 msgid "Back to Addon Settings" msgstr "Powrót do ustawień dodatków" -#: advancedcontentfilter.php:225 +#: advancedcontentfilter.php:226 msgid "Add a Rule" msgstr "Dodaj regułę" -#: advancedcontentfilter.php:226 +#: advancedcontentfilter.php:227 msgid "Help" msgstr "Pomoc" -#: advancedcontentfilter.php:227 +#: advancedcontentfilter.php:228 msgid "" "Add and manage your personal content filter rules in this screen. Rules have" " a name and an arbitrary expression that will be matched against post data. " @@ -55,11 +55,11 @@ msgstr "" "przyrównywane będą posty. Aby uzyskć więcej informacji na temat dostępnych " "opracji oraz zmiennych, zapoznaj się ze stronę pomocy." -#: advancedcontentfilter.php:228 +#: advancedcontentfilter.php:229 msgid "Your rules" msgstr "Twoje zasady" -#: advancedcontentfilter.php:229 +#: advancedcontentfilter.php:230 msgid "" "You have no rules yet! Start adding one by clicking on the button above next" " to the title." @@ -67,98 +67,98 @@ msgstr "" "Nie masz jeszcze żadnych zasad! Zacznij dodawać jedną, klikając przycisk " "znajdujący się nad tytułem." -#: advancedcontentfilter.php:230 +#: advancedcontentfilter.php:231 msgid "Disabled" msgstr "Wyłącz" -#: advancedcontentfilter.php:231 +#: advancedcontentfilter.php:232 msgid "Enabled" msgstr "Włącz" -#: advancedcontentfilter.php:232 +#: advancedcontentfilter.php:233 msgid "Disable this rule" msgstr "Wyłącz tę regułę" -#: advancedcontentfilter.php:233 +#: advancedcontentfilter.php:234 msgid "Enable this rule" msgstr "Włącz tę regułę" -#: advancedcontentfilter.php:234 +#: advancedcontentfilter.php:235 msgid "Edit this rule" msgstr "Edytuj tę regułę" -#: advancedcontentfilter.php:235 +#: advancedcontentfilter.php:236 msgid "Edit the rule" msgstr "Edytuj regułę" -#: advancedcontentfilter.php:236 +#: advancedcontentfilter.php:237 msgid "Save this rule" msgstr "Zapisz tę regułę" -#: advancedcontentfilter.php:237 +#: advancedcontentfilter.php:238 msgid "Delete this rule" msgstr "Usuń tę regułę" -#: advancedcontentfilter.php:238 +#: advancedcontentfilter.php:239 msgid "Rule" msgstr "Reguła" -#: advancedcontentfilter.php:239 +#: advancedcontentfilter.php:240 msgid "Close" msgstr "Zamknij" -#: advancedcontentfilter.php:240 +#: advancedcontentfilter.php:241 msgid "Add new rule" msgstr "Dodaj nową regułę" -#: advancedcontentfilter.php:241 +#: advancedcontentfilter.php:242 msgid "Rule Name" msgstr "Nazwa reguły" -#: advancedcontentfilter.php:242 +#: advancedcontentfilter.php:243 msgid "Rule Expression" msgstr "Wyrażanie reguły" -#: advancedcontentfilter.php:243 +#: advancedcontentfilter.php:244 msgid "Cancel" msgstr "Anuluj" -#: advancedcontentfilter.php:310 advancedcontentfilter.php:321 -#: advancedcontentfilter.php:332 advancedcontentfilter.php:366 -#: advancedcontentfilter.php:395 advancedcontentfilter.php:416 +#: advancedcontentfilter.php:312 advancedcontentfilter.php:323 +#: advancedcontentfilter.php:334 advancedcontentfilter.php:370 +#: advancedcontentfilter.php:401 advancedcontentfilter.php:424 msgid "You must be logged in to use this method" msgstr "Musisz być zalogowany, aby skorzystać z tej metody" -#: advancedcontentfilter.php:336 advancedcontentfilter.php:370 -#: advancedcontentfilter.php:399 +#: advancedcontentfilter.php:338 advancedcontentfilter.php:374 +#: advancedcontentfilter.php:405 msgid "Invalid form security token, please refresh the page." msgstr "Nieprawidłowy token zabezpieczający formularz, odśwież stronę." -#: advancedcontentfilter.php:348 +#: advancedcontentfilter.php:350 msgid "The rule name and expression are required." msgstr "Nazwa reguły i wyrażenie są wymagane." -#: advancedcontentfilter.php:360 +#: advancedcontentfilter.php:364 msgid "Rule successfully added" msgstr "Reguła została pomyślnie dodana" -#: advancedcontentfilter.php:374 advancedcontentfilter.php:403 +#: advancedcontentfilter.php:378 advancedcontentfilter.php:409 msgid "Rule doesn't exist or doesn't belong to you." msgstr "Reguła nie istnieje lub nie należy do ciebie." -#: advancedcontentfilter.php:389 +#: advancedcontentfilter.php:395 msgid "Rule successfully updated" msgstr "Reguła została pomyślnie zaktualizowana" -#: advancedcontentfilter.php:410 +#: advancedcontentfilter.php:418 msgid "Rule successfully deleted" msgstr "Reguła została pomyślnie usunięta" -#: advancedcontentfilter.php:420 +#: advancedcontentfilter.php:428 msgid "Missing argument: guid." msgstr "Brakujący argument: guid." -#: advancedcontentfilter.php:428 +#: advancedcontentfilter.php:436 #, php-format msgid "Unknown post with guid: %s" msgstr "Nieznany post z guid:%s" diff --git a/blackout/lang/pl/messages.po b/blackout/lang/pl/messages.po index 811e7388..07424121 100644 --- a/blackout/lang/pl/messages.po +++ b/blackout/lang/pl/messages.po @@ -4,15 +4,16 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018-2020 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-03-12 09:26+0100\n" -"PO-Revision-Date: 2020-04-09 11:01+0000\n" -"Last-Translator: Waldemar Stoczkowski\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2022-03-08 14:09+0000\n" +"Last-Translator: Piotr Strębski \n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,48 +21,49 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: blackout.php:101 +#: blackout.php:97 msgid "" -"The end-date is prior to the start-date of the blackout, you should fix this" -msgstr "Data zakończenia jest przed datą rozpoczęcia, powinieneś to naprawić" +"The end-date is prior to the start-date of the blackout, you should fix " +"this." +msgstr "Data końcowa jest wcześniejsza niż data rozpoczęcia blackoutu, powinieneś to naprawić." -#: blackout.php:103 +#: blackout.php:99 #, php-format msgid "" -"Please double check that the current settings for the blackout. Begin will " -"be %s and it will end %s." -msgstr "Sprawdź dokładnie, czy aktualne ustawienia zaciemnienia. Rozpocznie się %s i zakończy się %s." +"Please double check the current settings for the blackout. It will begin on " +"%s and end on %s." +msgstr "" -#: blackout.php:106 +#: blackout.php:102 msgid "Save Settings" msgstr "Zapisz ustawienia" -#: blackout.php:107 +#: blackout.php:103 msgid "Redirect URL" msgstr "Przekierowanie URL" -#: blackout.php:107 -msgid "all your visitors from the web will be redirected to this URL" -msgstr "wszyscy Twoi goście z internetu zostaną przekierowani na ten adres URL" +#: blackout.php:103 +msgid "All your visitors from the web will be redirected to this URL." +msgstr "Wszyscy Twoi goście z Internetu zostaną przekierowani na ten adres URL." -#: blackout.php:108 +#: blackout.php:104 msgid "Begin of the Blackout" msgstr "Rozpocznij Blackout" -#: blackout.php:108 +#: blackout.php:104 msgid "" "Format is YYYY-MM-DD hh:mm; YYYY year, MM month, " "DD day, hh hour and mm minute." msgstr "Format to RRRR-MM-DD gg:mm; RRRR rok, MM miesiąc, DD dzień, gg godzina i mm minuta." -#: blackout.php:109 +#: blackout.php:105 msgid "End of the Blackout" msgstr "Koniec Blackout" -#: blackout.php:111 +#: blackout.php:107 msgid "" "Note: The redirect will be active from the moment you press" " the submit button. Users currently logged in will not be " -"thrown out but can't login again after logging out should the blackout is " +"thrown out but can't login again after logging out while the blackout is " "still in place." -msgstr "Uwaga: Przekierowanie będzie aktywne od momentu naciśnięcia przycisku przesyłania. Użytkownicy aktualnie zalogowani nie zostaną wyrzuceni, ale nie będą mogli zalogować się ponownie po wylogowaniu, jeśli zaciemnienie będzie nadal obowiązywać." +msgstr "" diff --git a/blackout/lang/pl/strings.php b/blackout/lang/pl/strings.php index 7772f455..132c19d8 100644 --- a/blackout/lang/pl/strings.php +++ b/blackout/lang/pl/strings.php @@ -5,12 +5,10 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['The end-date is prior to the start-date of the blackout, you should fix this'] = 'Data zakończenia jest przed datą rozpoczęcia, powinieneś to naprawić'; -$a->strings['Please double check that the current settings for the blackout. Begin will be %s and it will end %s.'] = 'Sprawdź dokładnie, czy aktualne ustawienia zaciemnienia. Rozpocznie się %s i zakończy się %s.'; +$a->strings['The end-date is prior to the start-date of the blackout, you should fix this.'] = 'Data końcowa jest wcześniejsza niż data rozpoczęcia blackoutu, powinieneś to naprawić.'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Redirect URL'] = 'Przekierowanie URL'; -$a->strings['all your visitors from the web will be redirected to this URL'] = 'wszyscy Twoi goście z internetu zostaną przekierowani na ten adres URL'; +$a->strings['All your visitors from the web will be redirected to this URL.'] = 'Wszyscy Twoi goście z Internetu zostaną przekierowani na ten adres URL.'; $a->strings['Begin of the Blackout'] = 'Rozpocznij Blackout'; $a->strings['Format is YYYY-MM-DD hh:mm; YYYY year, MM month, DD day, hh hour and mm minute.'] = 'Format to RRRR-MM-DD gg:mm; RRRR rok, MM miesiąc, DD dzień, gg godzina i mm minuta.'; $a->strings['End of the Blackout'] = 'Koniec Blackout'; -$a->strings['Note: The redirect will be active from the moment you press the submit button. Users currently logged in will not be thrown out but can\'t login again after logging out should the blackout is still in place.'] = 'Uwaga: Przekierowanie będzie aktywne od momentu naciśnięcia przycisku przesyłania. Użytkownicy aktualnie zalogowani nie zostaną wyrzuceni, ale nie będą mogli zalogować się ponownie po wylogowaniu, jeśli zaciemnienie będzie nadal obowiązywać.'; diff --git a/blockem/lang/pl/messages.po b/blockem/lang/pl/messages.po index 0df09273..e27c0d9d 100644 --- a/blockem/lang/pl/messages.po +++ b/blockem/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-08-17 10:23+0200\n" -"PO-Revision-Date: 2018-08-20 13:44+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:13-0500\n" +"PO-Revision-Date: 2021-12-22 15:27+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,41 +19,29 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: blockem.php:54 blockem.php:58 -msgid "Blockem" -msgstr "Zablokowanie" - -#: blockem.php:62 +#: blockem.php:39 msgid "" "Hides user's content by collapsing posts. Also replaces their avatar with " "generic image." msgstr "Ukrywa zawartość użytkownika, zwijając posty. Zastępuje również awatar wygenerowanym obrazem." -#: blockem.php:63 +#: blockem.php:40 msgid "Comma separated profile URLS:" msgstr "Rozdzielone przecinkami adresy URL profilu:" -#: blockem.php:67 -msgid "Save Settings" -msgstr "Zapisz ustawienia" +#: blockem.php:45 +msgid "Blockem" +msgstr "Zablokowanie" -#: blockem.php:81 -msgid "BLOCKEM Settings saved." -msgstr "BLOCKEM Ustawienia zapisane." - -#: blockem.php:143 +#: blockem.php:120 #, php-format msgid "Filtered user: %s" msgstr "Użytkownik filtrowany: %s" -#: blockem.php:202 +#: blockem.php:183 msgid "Unblock Author" msgstr "Odblokuj autora" -#: blockem.php:204 +#: blockem.php:185 msgid "Block Author" msgstr "Zablokuj autora" - -#: blockem.php:244 -msgid "blockem settings updated" -msgstr "ustawienia blockem zostały zaktualizowane" diff --git a/blockem/lang/pl/strings.php b/blockem/lang/pl/strings.php index db16aeaf..49951a68 100644 --- a/blockem/lang/pl/strings.php +++ b/blockem/lang/pl/strings.php @@ -5,12 +5,9 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Blockem'] = 'Zablokowanie'; $a->strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Ukrywa zawartość użytkownika, zwijając posty. Zastępuje również awatar wygenerowanym obrazem.'; $a->strings['Comma separated profile URLS:'] = 'Rozdzielone przecinkami adresy URL profilu:'; -$a->strings['Save Settings'] = 'Zapisz ustawienia'; -$a->strings['BLOCKEM Settings saved.'] = 'BLOCKEM Ustawienia zapisane.'; +$a->strings['Blockem'] = 'Zablokowanie'; $a->strings['Filtered user: %s'] = 'Użytkownik filtrowany: %s'; $a->strings['Unblock Author'] = 'Odblokuj autora'; $a->strings['Block Author'] = 'Zablokuj autora'; -$a->strings['blockem settings updated'] = 'ustawienia blockem zostały zaktualizowane'; diff --git a/buglink/lang/pl/messages.po b/buglink/lang/pl/messages.po index 5300e8df..099a4c55 100644 --- a/buglink/lang/pl/messages.po +++ b/buglink/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-22 13:18+0200\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" "PO-Revision-Date: 2018-03-30 17:07+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"Last-Translator: Waldemar Stoczkowski\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,6 +19,6 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: buglink.php:15 +#: buglink.php:20 msgid "Report Bug" msgstr "Zgłoś błąd" diff --git a/catavatar/lang/pl/messages.po b/catavatar/lang/pl/messages.po index b1d66bc7..b5642a47 100644 --- a/catavatar/lang/pl/messages.po +++ b/catavatar/lang/pl/messages.po @@ -3,14 +3,17 @@ # This file is distributed under the same license as the Friendica catavatar addon package. # # +# Translators: +# Waldemar Stoczkowski, 2018 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-13 09:35+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Waldemar Stoczkowski , 2018\n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2018-04-07 05:23+0000\n" +"Last-Translator: Waldemar Stoczkowski, 2018\n" "Language-Team: Polish (https://www.transifex.com/Friendica/teams/12172/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,34 +21,38 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: catavatar.php:60 -msgid "Use Cat as Avatar" -msgstr "Użyj kota jako awatara" +#: catavatar.php:48 +msgid "Set default profile avatar or randomize the cat." +msgstr "" -#: catavatar.php:61 -msgid "More Random Cat!" -msgstr "Więcej losowych kotów!" - -#: catavatar.php:62 -msgid "Reset to email Cat" -msgstr "Resetuj na e-mail Kot" - -#: catavatar.php:64 +#: catavatar.php:53 msgid "Cat Avatar Settings" msgstr "Ustawienia Kot Avatar" -#: catavatar.php:100 +#: catavatar.php:56 +msgid "Use Cat as Avatar" +msgstr "Użyj kota jako awatara" + +#: catavatar.php:57 +msgid "Another random Cat!" +msgstr "" + +#: catavatar.php:58 +msgid "Reset to email Cat" +msgstr "Resetuj Kota na e-mail" + +#: catavatar.php:77 msgid "The cat hadn't found itself." msgstr "Kot się nie znalazł." -#: catavatar.php:109 +#: catavatar.php:86 msgid "There was an error, the cat ran away." msgstr "Wystąpił błąd, kot uciekł." -#: catavatar.php:115 +#: catavatar.php:92 msgid "Profile Photos" msgstr "Zdjęcie profilowe" -#: catavatar.php:130 +#: catavatar.php:102 msgid "Meow!" msgstr "Miau!" diff --git a/catavatar/lang/pl/strings.php b/catavatar/lang/pl/strings.php index 25a7ce2a..531ffe14 100644 --- a/catavatar/lang/pl/strings.php +++ b/catavatar/lang/pl/strings.php @@ -5,10 +5,9 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Use Cat as Avatar'] = 'Użyj kota jako awatara'; -$a->strings['More Random Cat!'] = 'Więcej losowych kotów!'; -$a->strings['Reset to email Cat'] = 'Resetuj na e-mail Kot'; $a->strings['Cat Avatar Settings'] = 'Ustawienia Kot Avatar'; +$a->strings['Use Cat as Avatar'] = 'Użyj kota jako awatara'; +$a->strings['Reset to email Cat'] = 'Resetuj Kota na e-mail'; $a->strings['The cat hadn\'t found itself.'] = 'Kot się nie znalazł.'; $a->strings['There was an error, the cat ran away.'] = 'Wystąpił błąd, kot uciekł.'; $a->strings['Profile Photos'] = 'Zdjęcie profilowe'; diff --git a/cookienotice/lang/pl/messages.po b/cookienotice/lang/pl/messages.po index be47f834..f1fc16b8 100644 --- a/cookienotice/lang/pl/messages.po +++ b/cookienotice/lang/pl/messages.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-30 10:48+0100\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" "PO-Revision-Date: 2019-01-23 16:01+0000\n" "Last-Translator: Waldemar Stoczkowski, 2019\n" "Language-Team: Polish (https://www.transifex.com/Friendica/teams/12172/pl/)\n" @@ -21,7 +21,7 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: cookienotice.php:63 +#: cookienotice.php:42 msgid "" "This website uses cookies. If you continue browsing this website, you agree " "to the usage of cookies." @@ -29,15 +29,11 @@ msgstr "" "Ta strona używa plików cookie. Jeśli będziesz kontynuować przeglądanie tej " "strony, zgadzasz się na użycie plików cookie." -#: cookienotice.php:64 cookienotice.php:133 +#: cookienotice.php:43 cookienotice.php:108 msgid "OK" msgstr "OK" -#: cookienotice.php:68 -msgid "\"cookienotice\" Settings" -msgstr "Ustawienia \"plików cookie\"" - -#: cookienotice.php:69 +#: cookienotice.php:47 msgid "" "Configure your cookie usage notice. It should just be a notice, " "saying that the website uses cookies. It is shown as long as a user didnt " @@ -47,31 +43,19 @@ msgstr "" "prostu komunikat, że strona korzysta z plików cookie. Jest wyświetlany, o " "ile użytkownik nie potwierdził, klikając przycisk OK." -#: cookienotice.php:70 +#: cookienotice.php:48 msgid "Cookie Usage Notice" msgstr "Użyciu plików cookie" -#: cookienotice.php:70 -msgid "The cookie usage notice" -msgstr "Powiadomienie o użyciu plików cookie" - -#: cookienotice.php:71 +#: cookienotice.php:49 msgid "OK Button Text" msgstr "Tekst przycisku OK" -#: cookienotice.php:71 -msgid "The OK Button text" -msgstr "Tekst przycisku OK" - -#: cookienotice.php:72 +#: cookienotice.php:50 msgid "Save Settings" msgstr "Zapisz ustawienia" -#: cookienotice.php:97 -msgid "cookienotice Settings saved." -msgstr "Zapisano stawienia plików cookie." - -#: cookienotice.php:132 +#: cookienotice.php:107 msgid "" "This website uses cookies to recognize revisiting and logged in users. You " "accept the usage of these cookies by continue browsing this website." diff --git a/cookienotice/lang/pl/strings.php b/cookienotice/lang/pl/strings.php index 6589e9f6..b46c1647 100644 --- a/cookienotice/lang/pl/strings.php +++ b/cookienotice/lang/pl/strings.php @@ -7,12 +7,8 @@ function string_plural_select_pl($n){ }} $a->strings['This website uses cookies. If you continue browsing this website, you agree to the usage of cookies.'] = 'Ta strona używa plików cookie. Jeśli będziesz kontynuować przeglądanie tej strony, zgadzasz się na użycie plików cookie.'; $a->strings['OK'] = 'OK'; -$a->strings['"cookienotice" Settings'] = 'Ustawienia "plików cookie"'; $a->strings['Configure your cookie usage notice. It should just be a notice, saying that the website uses cookies. It is shown as long as a user didnt confirm clicking the OK button.'] = 'Skonfiguruj zawiadomienie o użyciu plików cookie. Powinien to być po prostu komunikat, że strona korzysta z plików cookie. Jest wyświetlany, o ile użytkownik nie potwierdził, klikając przycisk OK.'; $a->strings['Cookie Usage Notice'] = 'Użyciu plików cookie'; -$a->strings['The cookie usage notice'] = 'Powiadomienie o użyciu plików cookie'; $a->strings['OK Button Text'] = 'Tekst przycisku OK'; -$a->strings['The OK Button text'] = 'Tekst przycisku OK'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; -$a->strings['cookienotice Settings saved.'] = 'Zapisano stawienia plików cookie.'; $a->strings['This website uses cookies to recognize revisiting and logged in users. You accept the usage of these cookies by continue browsing this website.'] = 'Ta strona używa plików cookie do rozpoznawania ponownych odwiedzin i zalogowanych użytkowników. Akceptujesz użycie tych plików cookie, kontynuując przeglądanie tej witryny.'; diff --git a/curweather/lang/pl/messages.po b/curweather/lang/pl/messages.po index f71410e0..a21d02bb 100644 --- a/curweather/lang/pl/messages.po +++ b/curweather/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Piotr Strębski , 2022 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-09-25 17:17+0200\n" -"PO-Revision-Date: 2018-08-04 12:10+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2022-03-08 14:06+0000\n" +"Last-Translator: Piotr Strębski \n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,114 +20,106 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: curweather.php:31 -msgid "Error fetching weather data.\\nError was: " -msgstr "Błąd podczas pobierania danych pogodowych. \\nError był:" +#: curweather.php:47 +msgid "Error fetching weather data. Error was: " +msgstr "Błąd podczas pobierania danych pogodowych. Wystąpił błąd:" -#: curweather.php:111 curweather.php:172 +#: curweather.php:130 msgid "Current Weather" msgstr "Obecna pogoda" -#: curweather.php:118 +#: curweather.php:137 msgid "Relative Humidity" msgstr "Względna wilgotność" -#: curweather.php:119 +#: curweather.php:138 msgid "Pressure" msgstr "Ciśnienie" -#: curweather.php:120 +#: curweather.php:139 msgid "Wind" msgstr "Wiatr" -#: curweather.php:121 +#: curweather.php:140 msgid "Last Updated" msgstr "Ostatnio zaktualizowano" -#: curweather.php:122 +#: curweather.php:141 msgid "Data by" msgstr "Dane wg" -#: curweather.php:123 +#: curweather.php:142 msgid "Show on map" msgstr "Pokaż na mapie" -#: curweather.php:128 +#: curweather.php:147 msgid "There was a problem accessing the weather data. But have a look" msgstr "Wystąpił problem z dostępem do danych pogodowych. Ale spójrz" -#: curweather.php:130 +#: curweather.php:149 msgid "at OpenWeatherMap" msgstr "w OpenWeatherMap" -#: curweather.php:146 -msgid "Current Weather settings updated." -msgstr "Zaktualizowano bieżące ustawienia pogody." - -#: curweather.php:161 +#: curweather.php:178 msgid "No APPID found, please contact your admin to obtain one." msgstr "Nie znaleziono APPID, skontaktuj się z administratorem, aby go uzyskać." -#: curweather.php:171 curweather.php:200 -msgid "Save Settings" -msgstr "Zapisz ustawienia" - -#: curweather.php:172 -msgid "Settings" -msgstr "Ustawienia" - -#: curweather.php:174 +#: curweather.php:188 msgid "Enter either the name of your location or the zip code." msgstr "Wprowadź nazwę swojej lokalizacji lub kod pocztowy." -#: curweather.php:175 +#: curweather.php:189 msgid "Your Location" msgstr "Twoja lokalizacja" -#: curweather.php:175 +#: curweather.php:189 msgid "" "Identifier of your location (name or zip code), e.g. Berlin,DE or " "14476,DE." msgstr "Identyfikator Twojej lokalizacji (nazwa lub kod pocztowy), np. Lublin, LU lub 20001, LU." -#: curweather.php:176 +#: curweather.php:190 msgid "Units" msgstr "Jednostka" -#: curweather.php:176 +#: curweather.php:190 msgid "select if the temperature should be displayed in °C or °F" msgstr "wybierz, czy temperatura powinna być wyświetlana w °C lub °F" -#: curweather.php:177 +#: curweather.php:191 msgid "Show weather data" msgstr "Pokaż dane pogodowe" -#: curweather.php:190 -msgid "Curweather settings saved." -msgstr "Ustawienia pogodowe zostały zapisane." +#: curweather.php:196 +msgid "Current Weather Settings" +msgstr "Bieżące ustawienia pogody" -#: curweather.php:201 +#: curweather.php:227 +msgid "Save Settings" +msgstr "Zapisz ustawienia" + +#: curweather.php:230 msgid "Caching Interval" msgstr "Interwał buforowania" -#: curweather.php:201 +#: curweather.php:232 msgid "" "For how long should the weather data be cached? Choose according your " "OpenWeatherMap account type." msgstr "Od jak dawna powinny być buforowane dane pogodowe? Wybierz zgodnie z typem konta OpenWeatherMap." -#: curweather.php:201 +#: curweather.php:233 msgid "no cache" msgstr "Brak pamięci podręcznej" -#: curweather.php:201 +#: curweather.php:234 curweather.php:235 curweather.php:236 curweather.php:237 msgid "minutes" msgstr "minut" -#: curweather.php:202 +#: curweather.php:240 msgid "Your APPID" msgstr "Twój APPID" -#: curweather.php:202 +#: curweather.php:240 msgid "Your API key provided by OpenWeatherMap" msgstr "Twój klucz API dostarczony przez OpenWeatherMap" diff --git a/curweather/lang/pl/strings.php b/curweather/lang/pl/strings.php index 9e269dec..c0e588be 100644 --- a/curweather/lang/pl/strings.php +++ b/curweather/lang/pl/strings.php @@ -5,7 +5,7 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Error fetching weather data.\nError was: '] = 'Błąd podczas pobierania danych pogodowych. \nError był:'; +$a->strings['Error fetching weather data. Error was: '] = 'Błąd podczas pobierania danych pogodowych. Wystąpił błąd:'; $a->strings['Current Weather'] = 'Obecna pogoda'; $a->strings['Relative Humidity'] = 'Względna wilgotność'; $a->strings['Pressure'] = 'Ciśnienie'; @@ -15,17 +15,15 @@ $a->strings['Data by'] = 'Dane wg'; $a->strings['Show on map'] = 'Pokaż na mapie'; $a->strings['There was a problem accessing the weather data. But have a look'] = 'Wystąpił problem z dostępem do danych pogodowych. Ale spójrz'; $a->strings['at OpenWeatherMap'] = 'w OpenWeatherMap'; -$a->strings['Current Weather settings updated.'] = 'Zaktualizowano bieżące ustawienia pogody.'; $a->strings['No APPID found, please contact your admin to obtain one.'] = 'Nie znaleziono APPID, skontaktuj się z administratorem, aby go uzyskać.'; -$a->strings['Save Settings'] = 'Zapisz ustawienia'; -$a->strings['Settings'] = 'Ustawienia'; $a->strings['Enter either the name of your location or the zip code.'] = 'Wprowadź nazwę swojej lokalizacji lub kod pocztowy.'; $a->strings['Your Location'] = 'Twoja lokalizacja'; $a->strings['Identifier of your location (name or zip code), e.g. Berlin,DE or 14476,DE.'] = 'Identyfikator Twojej lokalizacji (nazwa lub kod pocztowy), np. Lublin, LU lub 20001, LU.'; $a->strings['Units'] = 'Jednostka'; $a->strings['select if the temperature should be displayed in °C or °F'] = 'wybierz, czy temperatura powinna być wyświetlana w °C lub °F'; $a->strings['Show weather data'] = 'Pokaż dane pogodowe'; -$a->strings['Curweather settings saved.'] = 'Ustawienia pogodowe zostały zapisane.'; +$a->strings['Current Weather Settings'] = 'Bieżące ustawienia pogody'; +$a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Caching Interval'] = 'Interwał buforowania'; $a->strings['For how long should the weather data be cached? Choose according your OpenWeatherMap account type.'] = 'Od jak dawna powinny być buforowane dane pogodowe? Wybierz zgodnie z typem konta OpenWeatherMap.'; $a->strings['no cache'] = 'Brak pamięci podręcznej'; diff --git a/diaspora/lang/pl/messages.po b/diaspora/lang/pl/messages.po index 18c21efd..1f0b0786 100644 --- a/diaspora/lang/pl/messages.po +++ b/diaspora/lang/pl/messages.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-07 00:15-0400\n" -"PO-Revision-Date: 2020-06-17 19:25+0000\n" -"Last-Translator: Waldemar Stoczkowski\n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2021-12-22 15:27+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,96 +19,84 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: diaspora.php:53 +#: diaspora.php:44 msgid "Post to Diaspora" msgstr "Napisz do Diaspory" -#: diaspora.php:78 +#: diaspora.php:67 #, php-format msgid "" "Please remember: You can always be reached from Diaspora with your Friendica" " handle %s. " msgstr "" -#: diaspora.php:79 +#: diaspora.php:68 msgid "" "This connector is only meant if you still want to use your old Diaspora " "account for some time. " msgstr "Ten łącznik jest przeznaczony do tego, gdy nadal chcesz korzystać ze starego konta Diaspora przez jakiś czas." -#: diaspora.php:80 +#: diaspora.php:69 #, php-format msgid "" "However, it is preferred that you tell your Diaspora contacts the new handle" " %s instead." msgstr "" -#: diaspora.php:90 +#: diaspora.php:79 msgid "All aspects" msgstr "Wszystkie aspekty" -#: diaspora.php:91 +#: diaspora.php:80 msgid "Public" msgstr "Publiczny" -#: diaspora.php:97 +#: diaspora.php:86 msgid "Post to aspect:" msgstr "" -#: diaspora.php:98 +#: diaspora.php:87 #, php-format msgid "Connected with your Diaspora account %s" msgstr "Połączony ze swoim kontem Diaspora %s" -#: diaspora.php:101 +#: diaspora.php:90 msgid "" "Can't login to your Diaspora account. Please check handle (in the format " "user@domain.tld) and password." msgstr "" -#: diaspora.php:109 -msgid "Diaspora Export" -msgstr "Eksportuj do Diaspory" - -#: diaspora.php:110 +#: diaspora.php:97 msgid "Information" msgstr "Informacja" -#: diaspora.php:111 +#: diaspora.php:98 msgid "Error" msgstr "Błąd" -#: diaspora.php:112 -msgid "Save Settings" -msgstr "Zapisz ustawienia" - -#: diaspora.php:116 +#: diaspora.php:104 msgid "Enable Diaspora Post Addon" msgstr "Włącz dodatek Diaspora" -#: diaspora.php:117 +#: diaspora.php:105 msgid "Diaspora handle" msgstr "" -#: diaspora.php:118 +#: diaspora.php:106 msgid "Diaspora password" msgstr "Hasło Diaspora" -#: diaspora.php:118 +#: diaspora.php:106 msgid "" "Privacy notice: Your Diaspora password will be stored unencrypted to " "authenticate you with your Diaspora pod. This means your Friendica node " "administrator can have access to it." msgstr "Informacja o ochronie prywatności: Twoje hasło Diaspora będzie przechowywane w postaci niezaszyfrowanej w celu uwierzytelnienia użytkownika za pomocą Diaspora. Oznacza to, że administrator węzła Friendica może mieć do niego dostęp." -#: diaspora.php:120 +#: diaspora.php:108 msgid "Post to Diaspora by default" msgstr "Wyślij domyślnie do Diaspory" -#: diaspora.php:138 -msgid "Diaspora settings updated." -msgstr "Zaktualizowano ustawienia Diaspora." - -#: diaspora.php:141 -msgid "Diaspora connector disabled." -msgstr "Połączenie z Diaspora wyłączone." +#: diaspora.php:113 +msgid "Diaspora Export" +msgstr "Eksportuj do Diaspory" diff --git a/diaspora/lang/pl/strings.php b/diaspora/lang/pl/strings.php index dbf75f9f..54b1f519 100644 --- a/diaspora/lang/pl/strings.php +++ b/diaspora/lang/pl/strings.php @@ -10,13 +10,10 @@ $a->strings['This connector is only meant if you still want to use your old Dias $a->strings['All aspects'] = 'Wszystkie aspekty'; $a->strings['Public'] = 'Publiczny'; $a->strings['Connected with your Diaspora account %s'] = 'Połączony ze swoim kontem Diaspora %s'; -$a->strings['Diaspora Export'] = 'Eksportuj do Diaspory'; $a->strings['Information'] = 'Informacja'; $a->strings['Error'] = 'Błąd'; -$a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Enable Diaspora Post Addon'] = 'Włącz dodatek Diaspora'; $a->strings['Diaspora password'] = 'Hasło Diaspora'; $a->strings['Privacy notice: Your Diaspora password will be stored unencrypted to authenticate you with your Diaspora pod. This means your Friendica node administrator can have access to it.'] = 'Informacja o ochronie prywatności: Twoje hasło Diaspora będzie przechowywane w postaci niezaszyfrowanej w celu uwierzytelnienia użytkownika za pomocą Diaspora. Oznacza to, że administrator węzła Friendica może mieć do niego dostęp.'; $a->strings['Post to Diaspora by default'] = 'Wyślij domyślnie do Diaspory'; -$a->strings['Diaspora settings updated.'] = 'Zaktualizowano ustawienia Diaspora.'; -$a->strings['Diaspora connector disabled.'] = 'Połączenie z Diaspora wyłączone.'; +$a->strings['Diaspora Export'] = 'Eksportuj do Diaspory'; diff --git a/dwpost/lang/pl/messages.po b/dwpost/lang/pl/messages.po index 3eb0942e..5de99fe9 100644 --- a/dwpost/lang/pl/messages.po +++ b/dwpost/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Piotr Strębski , 2022 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-08-04 10:46+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2022-03-08 14:14+0000\n" +"Last-Translator: Piotr Strębski \n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,30 +20,26 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: dwpost.php:39 +#: dwpost.php:43 msgid "Post to Dreamwidth" msgstr "Opublikuj w Dreamwidth" -#: dwpost.php:70 -msgid "Dreamwidth Post Settings" -msgstr "Ustawienia postów w Dreamwerze" +#: dwpost.php:63 +msgid "Enable Dreamwidth Post Addon" +msgstr "Włącz dodatek Dreamwidth Post" -#: dwpost.php:72 -msgid "Enable dreamwidth Post Addon" -msgstr "Włącz dodatek dreamwidth Post" +#: dwpost.php:64 +msgid "Dreamwidth username" +msgstr "Nazwa użytkownika Dreamwidth" -#: dwpost.php:77 -msgid "dreamwidth username" -msgstr "nazwa użytkownika dreamwidth" +#: dwpost.php:65 +msgid "Dreamwidth password" +msgstr "Hasło Dreamwidth" -#: dwpost.php:82 -msgid "dreamwidth password" -msgstr "hasło dreamwidth" +#: dwpost.php:66 +msgid "Post to Dreamwidth by default" +msgstr "Publikuj domyślnie w serwisie Dreamwidth" -#: dwpost.php:87 -msgid "Post to dreamwidth by default" -msgstr "Opublikuj domyślnie w serwisie dreamwidth" - -#: dwpost.php:93 -msgid "Submit" -msgstr "Wyślij" +#: dwpost.php:71 +msgid "Dreamwidth Export" +msgstr "Eksport do Dreamwidth" diff --git a/dwpost/lang/pl/strings.php b/dwpost/lang/pl/strings.php index 98ff8ee1..699e2493 100644 --- a/dwpost/lang/pl/strings.php +++ b/dwpost/lang/pl/strings.php @@ -6,9 +6,8 @@ function string_plural_select_pl($n){ if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} $a->strings['Post to Dreamwidth'] = 'Opublikuj w Dreamwidth'; -$a->strings['Dreamwidth Post Settings'] = 'Ustawienia postów w Dreamwerze'; -$a->strings['Enable dreamwidth Post Addon'] = 'Włącz dodatek dreamwidth Post'; -$a->strings['dreamwidth username'] = 'nazwa użytkownika dreamwidth'; -$a->strings['dreamwidth password'] = 'hasło dreamwidth'; -$a->strings['Post to dreamwidth by default'] = 'Opublikuj domyślnie w serwisie dreamwidth'; -$a->strings['Submit'] = 'Wyślij'; +$a->strings['Enable Dreamwidth Post Addon'] = 'Włącz dodatek Dreamwidth Post'; +$a->strings['Dreamwidth username'] = 'Nazwa użytkownika Dreamwidth'; +$a->strings['Dreamwidth password'] = 'Hasło Dreamwidth'; +$a->strings['Post to Dreamwidth by default'] = 'Publikuj domyślnie w serwisie Dreamwidth'; +$a->strings['Dreamwidth Export'] = 'Eksport do Dreamwidth'; diff --git a/forumdirectory/lang/pl/messages.po b/forumdirectory/lang/pl/messages.po index d0f056fb..892432a2 100644 --- a/forumdirectory/lang/pl/messages.po +++ b/forumdirectory/lang/pl/messages.po @@ -5,14 +5,14 @@ # # Translators: # TORminator , 2015 -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-04-18 20:34+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2021-02-01 19:21+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,7 +20,7 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: forumdirectory.php:22 +#: forumdirectory.php:33 forumdirectory.php:137 msgid "Forum Directory" msgstr "Katalog forum" @@ -28,54 +28,22 @@ msgstr "Katalog forum" msgid "Public access denied." msgstr "Odmowa dostępu publicznego." -#: forumdirectory.php:71 +#: forumdirectory.php:125 +msgid "No entries (some entries may be hidden)." +msgstr "Brak wpisów (niektóre wpisy mogą być ukryte)." + +#: forumdirectory.php:131 msgid "Global Directory" msgstr "Globalny katalog" -#: forumdirectory.php:79 +#: forumdirectory.php:133 msgid "Find on this site" msgstr "Znajdź na tej stronie" -#: forumdirectory.php:81 -msgid "Finding: " -msgstr "Odkrycie:" +#: forumdirectory.php:135 +msgid "Results for:" +msgstr "" -#: forumdirectory.php:82 -msgid "Site Directory" -msgstr "Katalog Strony" - -#: forumdirectory.php:83 +#: forumdirectory.php:139 msgid "Find" msgstr "Szukaj" - -#: forumdirectory.php:133 -msgid "Age: " -msgstr "Wiek:" - -#: forumdirectory.php:136 -msgid "Gender: " -msgstr "Płeć:" - -#: forumdirectory.php:156 -msgid "Location:" -msgstr "Lokalizacja" - -#: forumdirectory.php:158 -msgid "Gender:" -msgstr "Płeć:" - -#: forumdirectory.php:160 -msgid "Status:" -msgstr "Status" - -#: forumdirectory.php:162 -msgid "Homepage:" -msgstr "Strona główna:" - -#: forumdirectory.php:164 -msgid "About:" -msgstr "O sobie:" - -#: forumdirectory.php:201 -msgid "No entries (some entries may be hidden)." -msgstr "Brak wpisów (niektóre wpisy mogą być ukryte)." diff --git a/forumdirectory/lang/pl/strings.php b/forumdirectory/lang/pl/strings.php index ed89feb4..b353550c 100644 --- a/forumdirectory/lang/pl/strings.php +++ b/forumdirectory/lang/pl/strings.php @@ -7,16 +7,7 @@ function string_plural_select_pl($n){ }} $a->strings['Forum Directory'] = 'Katalog forum'; $a->strings['Public access denied.'] = 'Odmowa dostępu publicznego.'; +$a->strings['No entries (some entries may be hidden).'] = 'Brak wpisów (niektóre wpisy mogą być ukryte).'; $a->strings['Global Directory'] = 'Globalny katalog'; $a->strings['Find on this site'] = 'Znajdź na tej stronie'; -$a->strings['Finding: '] = 'Odkrycie:'; -$a->strings['Site Directory'] = 'Katalog Strony'; $a->strings['Find'] = 'Szukaj'; -$a->strings['Age: '] = 'Wiek:'; -$a->strings['Gender: '] = 'Płeć:'; -$a->strings['Location:'] = 'Lokalizacja'; -$a->strings['Gender:'] = 'Płeć:'; -$a->strings['Status:'] = 'Status'; -$a->strings['Homepage:'] = 'Strona główna:'; -$a->strings['About:'] = 'O sobie:'; -$a->strings['No entries (some entries may be hidden).'] = 'Brak wpisów (niektóre wpisy mogą być ukryte).'; diff --git a/fromapp/lang/pl/messages.po b/fromapp/lang/pl/messages.po index e34a8541..8c20178d 100644 --- a/fromapp/lang/pl/messages.po +++ b/fromapp/lang/pl/messages.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-02-19 16:42+0100\n" -"PO-Revision-Date: 2019-03-07 19:25+0000\n" -"Last-Translator: Waldemar Stoczkowski\n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2021-12-22 15:15+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,25 +19,17 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: fromapp.php:40 -msgid "Fromapp settings updated." -msgstr "Zaktualizowano ustawienia Fromapp." - -#: fromapp.php:65 fromapp.php:69 -msgid "FromApp Settings" -msgstr "Ustawienia FromApp" - -#: fromapp.php:72 +#: fromapp.php:45 msgid "" "The application name you would like to show your posts originating from. " "Separate different app names with a comma. A random one will then be " "selected for every posting." msgstr "Nazwa aplikacji, z której chcesz wyświetlać swoje posty. Oddziel różne nazwy aplikacji przecinkami. Zostanie losowo wybrana dla każdej lokalizacji." -#: fromapp.php:76 +#: fromapp.php:46 msgid "Use this application name even if another application was used." msgstr "Użyj tej nazwy aplikacji, nawet jeśli użyto innej aplikacji." -#: fromapp.php:83 -msgid "Save Settings" -msgstr "Zapisz ustawienia" +#: fromapp.php:51 +msgid "FromApp Settings" +msgstr "Ustawienia FromApp" diff --git a/fromapp/lang/pl/strings.php b/fromapp/lang/pl/strings.php index 77f4e1ac..f7b2da50 100644 --- a/fromapp/lang/pl/strings.php +++ b/fromapp/lang/pl/strings.php @@ -5,8 +5,6 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Fromapp settings updated.'] = 'Zaktualizowano ustawienia Fromapp.'; -$a->strings['FromApp Settings'] = 'Ustawienia FromApp'; $a->strings['The application name you would like to show your posts originating from. Separate different app names with a comma. A random one will then be selected for every posting.'] = 'Nazwa aplikacji, z której chcesz wyświetlać swoje posty. Oddziel różne nazwy aplikacji przecinkami. Zostanie losowo wybrana dla każdej lokalizacji.'; $a->strings['Use this application name even if another application was used.'] = 'Użyj tej nazwy aplikacji, nawet jeśli użyto innej aplikacji.'; -$a->strings['Save Settings'] = 'Zapisz ustawienia'; +$a->strings['FromApp Settings'] = 'Ustawienia FromApp'; diff --git a/geonames/lang/pl/messages.po b/geonames/lang/pl/messages.po index 16164435..8e54e60b 100644 --- a/geonames/lang/pl/messages.po +++ b/geonames/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-03-31 19:23+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2021-12-22 17:23+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,18 +19,16 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: geonames.php:143 -msgid "Geonames settings updated." -msgstr "Zaktualizowano ustawienia Geonames." +#: geonames.php:135 +msgid "" +"Replace numerical coordinates by the nearest populated location name in your" +" posts." +msgstr "" -#: geonames.php:179 -msgid "Geonames Settings" -msgstr "Ustawienia Geonames" - -#: geonames.php:181 +#: geonames.php:136 msgid "Enable Geonames Addon" msgstr "Włącz dodatek Geonames" -#: geonames.php:187 -msgid "Submit" -msgstr "Wyślij" +#: geonames.php:141 +msgid "Geonames Settings" +msgstr "Ustawienia Geonames" diff --git a/geonames/lang/pl/strings.php b/geonames/lang/pl/strings.php index 150a0020..3ad19016 100644 --- a/geonames/lang/pl/strings.php +++ b/geonames/lang/pl/strings.php @@ -5,7 +5,5 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Geonames settings updated.'] = 'Zaktualizowano ustawienia Geonames.'; -$a->strings['Geonames Settings'] = 'Ustawienia Geonames'; $a->strings['Enable Geonames Addon'] = 'Włącz dodatek Geonames'; -$a->strings['Submit'] = 'Wyślij'; +$a->strings['Geonames Settings'] = 'Ustawienia Geonames'; diff --git a/gnot/lang/pl/messages.po b/gnot/lang/pl/messages.po index f3fba738..3cf307ce 100644 --- a/gnot/lang/pl/messages.po +++ b/gnot/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-03-31 19:43+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2021-12-22 15:27+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,29 +19,21 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: gnot.php:48 -msgid "Gnot settings updated." -msgstr "Zaktualizowano ustawienia Gnot." - -#: gnot.php:79 -msgid "Gnot Settings" -msgstr "Ustawienia Gnot" - -#: gnot.php:81 +#: gnot.php:63 msgid "" "Allows threading of email comment notifications on Gmail and anonymising the" " subject line." msgstr "Umożliwia nawiązywanie powiadomień o komentarzach e-mail w Gmailu i anonimizowanie wiersza tematu." -#: gnot.php:82 +#: gnot.php:64 msgid "Enable this addon?" msgstr "Włączyć ten dodatek?" -#: gnot.php:88 -msgid "Submit" -msgstr "Wyślij" +#: gnot.php:69 +msgid "Gnot Settings" +msgstr "Ustawienia Gnot" -#: gnot.php:97 +#: gnot.php:79 #, php-format msgid "[Friendica:Notify] Comment to conversation #%d" msgstr "[Friendica:Powiadomienie] Komentarz do rozmowy #%d" diff --git a/gnot/lang/pl/strings.php b/gnot/lang/pl/strings.php index a32a434c..8e6ff419 100644 --- a/gnot/lang/pl/strings.php +++ b/gnot/lang/pl/strings.php @@ -5,9 +5,7 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Gnot settings updated.'] = 'Zaktualizowano ustawienia Gnot.'; -$a->strings['Gnot Settings'] = 'Ustawienia Gnot'; $a->strings['Allows threading of email comment notifications on Gmail and anonymising the subject line.'] = 'Umożliwia nawiązywanie powiadomień o komentarzach e-mail w Gmailu i anonimizowanie wiersza tematu.'; $a->strings['Enable this addon?'] = 'Włączyć ten dodatek?'; -$a->strings['Submit'] = 'Wyślij'; +$a->strings['Gnot Settings'] = 'Ustawienia Gnot'; $a->strings['[Friendica:Notify] Comment to conversation #%d'] = '[Friendica:Powiadomienie] Komentarz do rozmowy #%d'; diff --git a/gravatar/lang/pl/messages.po b/gravatar/lang/pl/messages.po index 763f5c04..c924f95f 100644 --- a/gravatar/lang/pl/messages.po +++ b/gravatar/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Piotr Strębski , 2022 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-08-04 11:41+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2022-03-08 14:32+0000\n" +"Last-Translator: Piotr Strębski \n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,57 +20,53 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: gravatar.php:71 +#: gravatar.php:78 msgid "generic profile image" msgstr "ogólny obraz profilu" -#: gravatar.php:72 +#: gravatar.php:79 msgid "random geometric pattern" msgstr "losowy wzór geometryczny" -#: gravatar.php:73 +#: gravatar.php:80 msgid "monster face" msgstr "twarz potwora" -#: gravatar.php:74 +#: gravatar.php:81 msgid "computer generated face" msgstr "wygenerowana komputerowo twarz" -#: gravatar.php:75 +#: gravatar.php:82 msgid "retro arcade style face" msgstr "twarz w stylu retro arcade" -#: gravatar.php:89 +#: gravatar.php:96 msgid "Information" msgstr "Informacje" -#: gravatar.php:89 +#: gravatar.php:96 msgid "" "Libravatar addon is installed, too. Please disable Libravatar addon or this " "Gravatar addon.
The Libravatar addon will fall back to Gravatar if " "nothing was found at Libravatar." msgstr "Zainstalowany jest także dodatek Libravatar. Wyłącz dodatek Libravatar lub dodatek Gravatar.
Dodatek Libravatar powróci do Gravatar, jeśli w Libravatar nie zostanie znaleziony żaden przedmiot." -#: gravatar.php:95 -msgid "Submit" -msgstr "Zatwierdź" +#: gravatar.php:102 +msgid "Save Settings" +msgstr "Zapisz ustawienia" -#: gravatar.php:96 +#: gravatar.php:103 msgid "Default avatar image" msgstr "Domyślny obraz awatara" -#: gravatar.php:96 +#: gravatar.php:103 msgid "Select default avatar image if none was found at Gravatar. See README" msgstr "Wybierz domyślny obraz awatara, jeśli nie znaleziono go w Gravatar. Zobacz README" -#: gravatar.php:97 +#: gravatar.php:104 msgid "Rating of images" msgstr "Ocena zdjęć" -#: gravatar.php:97 +#: gravatar.php:104 msgid "Select the appropriate avatar rating for your site. See README" msgstr "Wybierz odpowiednią ocenę awatara dla swojej witryny. Zobacz README" - -#: gravatar.php:111 -msgid "Gravatar settings updated." -msgstr "Zaktualizowano ustawienia Gravatar." diff --git a/gravatar/lang/pl/strings.php b/gravatar/lang/pl/strings.php index ea84e62a..bfefbccb 100644 --- a/gravatar/lang/pl/strings.php +++ b/gravatar/lang/pl/strings.php @@ -12,9 +12,8 @@ $a->strings['computer generated face'] = 'wygenerowana komputerowo twarz'; $a->strings['retro arcade style face'] = 'twarz w stylu retro arcade'; $a->strings['Information'] = 'Informacje'; $a->strings['Libravatar addon is installed, too. Please disable Libravatar addon or this Gravatar addon.
The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar.'] = 'Zainstalowany jest także dodatek Libravatar. Wyłącz dodatek Libravatar lub dodatek Gravatar.
Dodatek Libravatar powróci do Gravatar, jeśli w Libravatar nie zostanie znaleziony żaden przedmiot.'; -$a->strings['Submit'] = 'Zatwierdź'; +$a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Default avatar image'] = 'Domyślny obraz awatara'; $a->strings['Select default avatar image if none was found at Gravatar. See README'] = 'Wybierz domyślny obraz awatara, jeśli nie znaleziono go w Gravatar. Zobacz README'; $a->strings['Rating of images'] = 'Ocena zdjęć'; $a->strings['Select the appropriate avatar rating for your site. See README'] = 'Wybierz odpowiednią ocenę awatara dla swojej witryny. Zobacz README'; -$a->strings['Gravatar settings updated.'] = 'Zaktualizowano ustawienia Gravatar.'; diff --git a/group_text/lang/pl/messages.po b/group_text/lang/pl/messages.po index 402bd26b..afa159ab 100644 --- a/group_text/lang/pl/messages.po +++ b/group_text/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-03-30 17:29+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2021-12-22 15:27+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,18 +19,10 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: group_text.php:46 -msgid "Group Text settings updated." -msgstr "Zaktualizowano ustawienia tekstu grupowego." +#: group_text.php:58 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "Użyj tylko tekst (bez obrazu) selektor grupy w menu \"Edycja grupy\"" -#: group_text.php:76 +#: group_text.php:63 msgid "Group Text" msgstr "Grupuj tekst" - -#: group_text.php:78 -msgid "Use a text only (non-image) group selector in the \"group edit\" menu" -msgstr "Użyj selektora grupy tylko tekst (inny niż obraz) w menu \"Edycja grupy\"" - -#: group_text.php:84 -msgid "Submit" -msgstr "Zatwierdź" diff --git a/group_text/lang/pl/strings.php b/group_text/lang/pl/strings.php index fe37dc9b..96157c99 100644 --- a/group_text/lang/pl/strings.php +++ b/group_text/lang/pl/strings.php @@ -5,7 +5,5 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Group Text settings updated.'] = 'Zaktualizowano ustawienia tekstu grupowego.'; +$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Użyj tylko tekst (bez obrazu) selektor grupy w menu "Edycja grupy"'; $a->strings['Group Text'] = 'Grupuj tekst'; -$a->strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Użyj selektora grupy tylko tekst (inny niż obraz) w menu "Edycja grupy"'; -$a->strings['Submit'] = 'Zatwierdź'; diff --git a/ifttt/lang/pl/messages.po b/ifttt/lang/pl/messages.po index 38d889ea..b1cb5307 100644 --- a/ifttt/lang/pl/messages.po +++ b/ifttt/lang/pl/messages.po @@ -3,14 +3,17 @@ # This file is distributed under the same license as the Friendica ifttt addon package. # # +# Translators: +# Waldemar Stoczkowski, 2018 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-11-27 09:30+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Waldemar Stoczkowski , 2018\n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2017-11-27 10:37+0000\n" +"Last-Translator: Waldemar Stoczkowski, 2018\n" "Language-Team: Polish (https://www.transifex.com/Friendica/teams/12172/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,11 +21,7 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: ifttt.php:53 ifttt.php:57 -msgid "IFTTT Mirror" -msgstr "Lustro IFTTT" - -#: ifttt.php:61 +#: ifttt.php:52 msgid "" "Create an account at IFTTT. Create " "three Facebook recipes that are connected with Maker (W formie \"jeśli Facebook " "następnie Maker\") z następujących parametrów:" -#: ifttt.php:68 +#: ifttt.php:53 +msgid "URL" +msgstr "" + +#: ifttt.php:54 +msgid "Method" +msgstr "" + +#: ifttt.php:55 +msgid "Content Type" +msgstr "" + +#: ifttt.php:56 msgid "Body for \"new status message\"" msgstr "Treść dla \"nowy status wiadomości\"" -#: ifttt.php:70 +#: ifttt.php:57 msgid "Body for \"new photo upload\"" msgstr "Treść dla \"nowe przesyłanie zdjęć\"" -#: ifttt.php:72 +#: ifttt.php:58 msgid "Body for \"new link post\"" msgstr "Treść dla \"nowe łącza postu\"" -#: ifttt.php:77 +#: ifttt.php:68 +msgid "IFTTT Mirror" +msgstr "Lustro IFTTT" + +#: ifttt.php:71 msgid "Generate new key" msgstr "Wygeneruj nowy klucz" - -#: ifttt.php:81 -msgid "Save Settings" -msgstr "Zapisz ustawienia" diff --git a/ifttt/lang/pl/strings.php b/ifttt/lang/pl/strings.php index 19d0ff8f..a1b2ef03 100644 --- a/ifttt/lang/pl/strings.php +++ b/ifttt/lang/pl/strings.php @@ -5,10 +5,9 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['IFTTT Mirror'] = 'Lustro IFTTT'; $a->strings['Create an account at IFTTT. Create three Facebook recipes that are connected with Maker (In the form "if Facebook then Maker") with the following parameters:'] = 'Utwórz konto na IFTTT. Utwórz trzy przepisy na Facebooku, które są powiązane z Maker (W formie "jeśli Facebook następnie Maker") z następujących parametrów:'; $a->strings['Body for "new status message"'] = 'Treść dla "nowy status wiadomości"'; $a->strings['Body for "new photo upload"'] = 'Treść dla "nowe przesyłanie zdjęć"'; $a->strings['Body for "new link post"'] = 'Treść dla "nowe łącza postu"'; +$a->strings['IFTTT Mirror'] = 'Lustro IFTTT'; $a->strings['Generate new key'] = 'Wygeneruj nowy klucz'; -$a->strings['Save Settings'] = 'Zapisz ustawienia'; diff --git a/ijpost/lang/pl/messages.po b/ijpost/lang/pl/messages.po index 84154384..f2c1160b 100644 --- a/ijpost/lang/pl/messages.po +++ b/ijpost/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-03-31 19:43+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2021-12-22 16:19+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,30 +19,26 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: ijpost.php:39 +#: ijpost.php:42 msgid "Post to Insanejournal" msgstr "Opublikuj w Insanejournal" -#: ijpost.php:70 -msgid "InsaneJournal Post Settings" -msgstr "InsaneJournal Ustawienia Post" - -#: ijpost.php:72 +#: ijpost.php:61 msgid "Enable InsaneJournal Post Addon" msgstr "Włącz dodatek InsaneJournal" -#: ijpost.php:77 +#: ijpost.php:62 msgid "InsaneJournal username" -msgstr "InsaneJournal nazwa użytkownika" +msgstr "nazwa użytkownika InsaneJournal" -#: ijpost.php:82 +#: ijpost.php:63 msgid "InsaneJournal password" msgstr "Hasło InsaneJournal" -#: ijpost.php:87 +#: ijpost.php:64 msgid "Post to InsaneJournal by default" msgstr "Wyślij domyślnie do InsaneJournal" -#: ijpost.php:93 -msgid "Submit" -msgstr "Wyślij" +#: ijpost.php:69 +msgid "InsaneJournal Export" +msgstr "" diff --git a/ijpost/lang/pl/strings.php b/ijpost/lang/pl/strings.php index 2316e4f7..c6d61235 100644 --- a/ijpost/lang/pl/strings.php +++ b/ijpost/lang/pl/strings.php @@ -6,9 +6,7 @@ function string_plural_select_pl($n){ if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} $a->strings['Post to Insanejournal'] = 'Opublikuj w Insanejournal'; -$a->strings['InsaneJournal Post Settings'] = 'InsaneJournal Ustawienia Post'; $a->strings['Enable InsaneJournal Post Addon'] = 'Włącz dodatek InsaneJournal'; -$a->strings['InsaneJournal username'] = 'InsaneJournal nazwa użytkownika'; +$a->strings['InsaneJournal username'] = 'nazwa użytkownika InsaneJournal'; $a->strings['InsaneJournal password'] = 'Hasło InsaneJournal'; $a->strings['Post to InsaneJournal by default'] = 'Wyślij domyślnie do InsaneJournal'; -$a->strings['Submit'] = 'Wyślij'; diff --git a/impressum/lang/pl/messages.po b/impressum/lang/pl/messages.po index 142b0aa9..23948352 100644 --- a/impressum/lang/pl/messages.po +++ b/impressum/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Piotr Strębski , 2022 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-04-01 14:36+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2022-03-08 14:33+0000\n" +"Last-Translator: Piotr Strębski \n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,71 +20,67 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: impressum.php:37 +#: impressum.php:53 msgid "Impressum" msgstr "Stopka redakcyjna" -#: impressum.php:50 impressum.php:52 impressum.php:84 +#: impressum.php:66 impressum.php:68 impressum.php:99 msgid "Site Owner" msgstr "Właściciel witryny" -#: impressum.php:50 impressum.php:88 +#: impressum.php:66 impressum.php:103 msgid "Email Address" msgstr "Adres e-mail" -#: impressum.php:55 impressum.php:86 +#: impressum.php:71 impressum.php:101 msgid "Postal Address" msgstr "Adres pocztowy" -#: impressum.php:61 +#: impressum.php:77 msgid "" "The impressum addon needs to be configured!
Please add at least the " "owner variable to your config file. For other variables please " "refer to the README file of the addon." msgstr "Dodatek impressum musi zostać skonfigurowany!
Dodaj co najmniej zmienną właściciela do pliku konfiguracyjnego. Inne zmienne można znaleźć w pliku README dodatku." -#: impressum.php:78 -msgid "Settings updated." -msgstr "Ustawienia zaktualizowane." +#: impressum.php:98 +msgid "Save Settings" +msgstr "Zapisz ustawienia" -#: impressum.php:83 -msgid "Submit" -msgstr "Wyślij" - -#: impressum.php:84 +#: impressum.php:99 msgid "The page operators name." msgstr "Nazwa operatora strony." -#: impressum.php:85 +#: impressum.php:100 msgid "Site Owners Profile" msgstr "Profil właściciela witryny" -#: impressum.php:85 +#: impressum.php:100 msgid "Profile address of the operator." msgstr "Adres profilu operatora." -#: impressum.php:86 +#: impressum.php:101 msgid "How to contact the operator via snail mail. You can use BBCode here." -msgstr "Jak skontaktować się z operatorem za pośrednictwem poczty elektronicznej. Możesz użyć BBCode tutaj." +msgstr "Jak skontaktować się z operatorem za pośrednictwem poczty elektronicznej. Możesz tutaj użyć BBCode." -#: impressum.php:87 +#: impressum.php:102 msgid "Notes" msgstr "Notatki" -#: impressum.php:87 +#: impressum.php:102 msgid "" "Additional notes that are displayed beneath the contact information. You can" " use BBCode here." -msgstr "Dodatkowe uwagi, które są wyświetlane pod danymi kontaktowymi. Możesz użyć BBCode tutaj." +msgstr "Dodatkowe uwagi, które są wyświetlane pod danymi kontaktowymi. Możesz tutaj użyć BBCode." -#: impressum.php:88 +#: impressum.php:103 msgid "How to contact the operator via email. (will be displayed obfuscated)" msgstr "Jak skontaktować się z operatorem za pośrednictwem poczty elektronicznej. (zostanie wyświetlony ukryty)" -#: impressum.php:89 +#: impressum.php:104 msgid "Footer note" msgstr "Notatka w stopce" -#: impressum.php:89 +#: impressum.php:104 msgid "Text for the footer. You can use BBCode here." -msgstr "Tekst stopki. Tutaj można użyć BBCode." +msgstr "Tekst stopki. Możesz tutaj użyć BBCode." diff --git a/impressum/lang/pl/strings.php b/impressum/lang/pl/strings.php index 7491978a..1a5cd98a 100644 --- a/impressum/lang/pl/strings.php +++ b/impressum/lang/pl/strings.php @@ -10,14 +10,13 @@ $a->strings['Site Owner'] = 'Właściciel witryny'; $a->strings['Email Address'] = 'Adres e-mail'; $a->strings['Postal Address'] = 'Adres pocztowy'; $a->strings['The impressum addon needs to be configured!
Please add at least the owner variable to your config file. For other variables please refer to the README file of the addon.'] = 'Dodatek impressum musi zostać skonfigurowany!
Dodaj co najmniej zmienną właściciela do pliku konfiguracyjnego. Inne zmienne można znaleźć w pliku README dodatku.'; -$a->strings['Settings updated.'] = 'Ustawienia zaktualizowane.'; -$a->strings['Submit'] = 'Wyślij'; +$a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['The page operators name.'] = 'Nazwa operatora strony.'; $a->strings['Site Owners Profile'] = 'Profil właściciela witryny'; $a->strings['Profile address of the operator.'] = 'Adres profilu operatora.'; -$a->strings['How to contact the operator via snail mail. You can use BBCode here.'] = 'Jak skontaktować się z operatorem za pośrednictwem poczty elektronicznej. Możesz użyć BBCode tutaj.'; +$a->strings['How to contact the operator via snail mail. You can use BBCode here.'] = 'Jak skontaktować się z operatorem za pośrednictwem poczty elektronicznej. Możesz tutaj użyć BBCode.'; $a->strings['Notes'] = 'Notatki'; -$a->strings['Additional notes that are displayed beneath the contact information. You can use BBCode here.'] = 'Dodatkowe uwagi, które są wyświetlane pod danymi kontaktowymi. Możesz użyć BBCode tutaj.'; +$a->strings['Additional notes that are displayed beneath the contact information. You can use BBCode here.'] = 'Dodatkowe uwagi, które są wyświetlane pod danymi kontaktowymi. Możesz tutaj użyć BBCode.'; $a->strings['How to contact the operator via email. (will be displayed obfuscated)'] = 'Jak skontaktować się z operatorem za pośrednictwem poczty elektronicznej. (zostanie wyświetlony ukryty)'; $a->strings['Footer note'] = 'Notatka w stopce'; -$a->strings['Text for the footer. You can use BBCode here.'] = 'Tekst stopki. Tutaj można użyć BBCode.'; +$a->strings['Text for the footer. You can use BBCode here.'] = 'Tekst stopki. Możesz tutaj użyć BBCode.'; diff --git a/infiniteimprobabilitydrive/lang/pl/messages.po b/infiniteimprobabilitydrive/lang/pl/messages.po index 34848456..31183bc8 100644 --- a/infiniteimprobabilitydrive/lang/pl/messages.po +++ b/infiniteimprobabilitydrive/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" "PO-Revision-Date: 2018-04-20 20:59+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"Last-Translator: Waldemar Stoczkowski\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,6 +19,6 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: infiniteimprobabilitydrive.php:19 +#: infiniteimprobabilitydrive.php:18 msgid "Infinite Improbability Drive" msgstr "Wyświetl losowego użytkownika" diff --git a/irc/lang/pl/messages.po b/irc/lang/pl/messages.po index c39003c2..d84896f7 100644 --- a/irc/lang/pl/messages.po +++ b/irc/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-08 13:17+0200\n" -"PO-Revision-Date: 2018-03-31 20:41+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2021-02-01 18:19+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,49 +19,45 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: irc.php:37 -msgid "IRC Settings" -msgstr "Ustawienia IRC" - -#: irc.php:38 +#: irc.php:32 msgid "" "Here you can change the system wide settings for the channels to " "automatically join and access via the side bar. Note the changes you do " "here, only effect the channel selection if you are logged in." msgstr "Tutaj możesz zmienić ustawienia systemowe dla kanałów, aby automatycznie łączyć się i uzyskać dostęp za pomocą paska bocznego. Zwróć uwagę na zmiany, które tu zrobisz, wpływają tylko na wybór kanału, jeśli jesteś zalogowany." -#: irc.php:39 irc.php:136 -msgid "Save Settings" -msgstr "Zapisz ustawienia" - -#: irc.php:40 irc.php:137 +#: irc.php:33 irc.php:133 msgid "Channel(s) to auto connect (comma separated)" msgstr "Kanał(y) do ​​automatycznego połączenia (oddzielone przecinkami)" -#: irc.php:40 irc.php:137 +#: irc.php:33 irc.php:133 msgid "" "List of channels that shall automatically connected to when the app is " "launched." msgstr "Lista kanałów, które będą automatycznie połączone z uruchomieniem aplikacji." -#: irc.php:41 irc.php:138 +#: irc.php:34 irc.php:134 msgid "Popular Channels (comma separated)" msgstr "Popularne kanały (oddzielone przecinkami)" -#: irc.php:41 irc.php:138 +#: irc.php:34 irc.php:134 msgid "" "List of popular channels, will be displayed at the side and hotlinked for " "easy joining." msgstr "Lista popularnych kanałów zostanie wyświetlona z boku i połączona w celu łatwego dołączenia." -#: irc.php:57 irc.php:128 -msgid "IRC settings saved." -msgstr "Zapisano ustawienia IRC." +#: irc.php:39 +msgid "IRC Settings" +msgstr "Ustawienia IRC" -#: irc.php:62 +#: irc.php:60 msgid "IRC Chatroom" msgstr "Czat na IRC" -#: irc.php:90 +#: irc.php:88 msgid "Popular Channels" msgstr "Popularne kanały" + +#: irc.php:132 +msgid "Save Settings" +msgstr "Zapisz ustawienia" diff --git a/irc/lang/pl/strings.php b/irc/lang/pl/strings.php index f0c71a75..48d88e71 100644 --- a/irc/lang/pl/strings.php +++ b/irc/lang/pl/strings.php @@ -5,13 +5,12 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['IRC Settings'] = 'Ustawienia IRC'; $a->strings['Here you can change the system wide settings for the channels to automatically join and access via the side bar. Note the changes you do here, only effect the channel selection if you are logged in.'] = 'Tutaj możesz zmienić ustawienia systemowe dla kanałów, aby automatycznie łączyć się i uzyskać dostęp za pomocą paska bocznego. Zwróć uwagę na zmiany, które tu zrobisz, wpływają tylko na wybór kanału, jeśli jesteś zalogowany.'; -$a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Channel(s) to auto connect (comma separated)'] = 'Kanał(y) do ​​automatycznego połączenia (oddzielone przecinkami)'; $a->strings['List of channels that shall automatically connected to when the app is launched.'] = 'Lista kanałów, które będą automatycznie połączone z uruchomieniem aplikacji.'; $a->strings['Popular Channels (comma separated)'] = 'Popularne kanały (oddzielone przecinkami)'; $a->strings['List of popular channels, will be displayed at the side and hotlinked for easy joining.'] = 'Lista popularnych kanałów zostanie wyświetlona z boku i połączona w celu łatwego dołączenia.'; -$a->strings['IRC settings saved.'] = 'Zapisano ustawienia IRC.'; +$a->strings['IRC Settings'] = 'Ustawienia IRC'; $a->strings['IRC Chatroom'] = 'Czat na IRC'; $a->strings['Popular Channels'] = 'Popularne kanały'; +$a->strings['Save Settings'] = 'Zapisz ustawienia'; diff --git a/js_upload/lang/pl/messages.po b/js_upload/lang/pl/messages.po index 32aad058..81f33176 100644 --- a/js_upload/lang/pl/messages.po +++ b/js_upload/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-03-30 17:58+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-03-23 23:53-0400\n" +"PO-Revision-Date: 2021-04-26 08:29+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,38 +19,40 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: js_upload.php:43 -msgid "Upload a file" -msgstr "Prześlij plik" +#: js_upload.php:34 +msgid "Select files for upload" +msgstr "" -#: js_upload.php:44 +#: js_upload.php:35 msgid "Drop files here to upload" -msgstr "Upuść pliki tutaj, aby przesłać" +msgstr "Aby przesłać pliki upuść tutaj" -#: js_upload.php:45 +#: js_upload.php:36 msgid "Cancel" msgstr "Anuluj" -#: js_upload.php:46 +#: js_upload.php:37 msgid "Failed" msgstr "Nie powiodło się" -#: js_upload.php:303 +#: js_upload.php:215 msgid "No files were uploaded." msgstr "Żadne pliki nie zostały przesłane." -#: js_upload.php:309 +#: js_upload.php:221 msgid "Uploaded file is empty" msgstr "Przesłany plik jest pusty" -#: js_upload.php:321 -msgid "Image exceeds size limit of " -msgstr "Obraz przekracza limit rozmiaru wynoszący" +#: js_upload.php:233 +#, php-format +msgid "Image exceeds size limit of %s" +msgstr "" -#: js_upload.php:332 -msgid "File has an invalid extension, it should be one of " -msgstr "Plik ma nieprawidłowe rozszerzenie, powinno być jednym z nich" +#: js_upload.php:245 +#, php-format +msgid "File has an invalid extension, it should be one of %s." +msgstr "" -#: js_upload.php:343 +#: js_upload.php:256 msgid "Upload was cancelled, or server error encountered" msgstr "Przesyłanie zostało anulowane lub wystąpił błąd serwera" diff --git a/js_upload/lang/pl/strings.php b/js_upload/lang/pl/strings.php index 7bdf85a7..198dd605 100644 --- a/js_upload/lang/pl/strings.php +++ b/js_upload/lang/pl/strings.php @@ -5,12 +5,9 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Upload a file'] = 'Prześlij plik'; -$a->strings['Drop files here to upload'] = 'Upuść pliki tutaj, aby przesłać'; +$a->strings['Drop files here to upload'] = 'Aby przesłać pliki upuść tutaj'; $a->strings['Cancel'] = 'Anuluj'; $a->strings['Failed'] = 'Nie powiodło się'; $a->strings['No files were uploaded.'] = 'Żadne pliki nie zostały przesłane.'; $a->strings['Uploaded file is empty'] = 'Przesłany plik jest pusty'; -$a->strings['Image exceeds size limit of '] = 'Obraz przekracza limit rozmiaru wynoszący'; -$a->strings['File has an invalid extension, it should be one of '] = 'Plik ma nieprawidłowe rozszerzenie, powinno być jednym z nich'; $a->strings['Upload was cancelled, or server error encountered'] = 'Przesyłanie zostało anulowane lub wystąpił błąd serwera'; diff --git a/krynn/lang/pl/messages.po b/krynn/lang/pl/messages.po index c1adfcc2..3416fa53 100644 --- a/krynn/lang/pl/messages.po +++ b/krynn/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-03-31 19:11+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2021-12-22 16:22+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,14 +19,10 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: krynn.php:150 -msgid "Krynn Settings" -msgstr "Ustawienia Krynn" - -#: krynn.php:152 +#: krynn.php:127 msgid "Enable Krynn Addon" msgstr "Włącz dodatek Krynn" -#: krynn.php:158 -msgid "Submit" -msgstr "Wyślij" +#: krynn.php:132 +msgid "Krynn Settings" +msgstr "Ustawienia Krynn" diff --git a/krynn/lang/pl/strings.php b/krynn/lang/pl/strings.php index bd7bb901..13c5bc1e 100644 --- a/krynn/lang/pl/strings.php +++ b/krynn/lang/pl/strings.php @@ -5,6 +5,5 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Krynn Settings'] = 'Ustawienia Krynn'; $a->strings['Enable Krynn Addon'] = 'Włącz dodatek Krynn'; -$a->strings['Submit'] = 'Wyślij'; +$a->strings['Krynn Settings'] = 'Ustawienia Krynn'; diff --git a/langfilter/lang/pl/messages.po b/langfilter/lang/pl/messages.po index ab3c7286..284b9440 100644 --- a/langfilter/lang/pl/messages.po +++ b/langfilter/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Piotr Strębski , 2022 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 11:11-0400\n" -"PO-Revision-Date: 2018-08-04 11:31+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2022-03-08 14:08+0000\n" +"Last-Translator: Piotr Strębski \n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,62 +20,58 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: langfilter.php:58 -msgid "Language Filter" -msgstr "Filtr językowy" - -#: langfilter.php:59 +#: langfilter.php:49 msgid "" "This addon tries to identify the language posts are written in. If it does " "not match any language specified below, posts will be hidden by collapsing " "them." -msgstr "Ten dodatek próbuje zidentyfikować posty językowe, które są zapisywane. Jeśli nie pasuje do żadnego z języków określonych poniżej, posty będą ukrywane przez ich zwijanie." +msgstr "Ten dodatek próbuje zidentyfikować wpisy językowe, które są zapisywane. Jeśli nie pasuje do żadnego z języków określonych poniżej, wpisy będą ukrywane przez ich zwijanie." -#: langfilter.php:60 +#: langfilter.php:50 msgid "Use the language filter" msgstr "Użyj filtru językowego" -#: langfilter.php:61 +#: langfilter.php:51 msgid "Able to read" msgstr "Może odczytać" -#: langfilter.php:61 +#: langfilter.php:51 msgid "" -"List of abbreviations (iso2 codes) for languages you speak, comma separated." -" For example \"de,it\"." -msgstr "Lista skrótów (kodów iso2) dla języków, które znasz, oddzielonych przecinkami. Na przykład \"pl,de,it\"." +"List of abbreviations (ISO 639-1 codes) for languages you speak, comma " +"separated. For example \"de,it\"." +msgstr "Lista skrótów (kody ISO 639-1) dla języków, które znasz, oddzielonych przecinkami. Na przykład \"pl,de,it\"." -#: langfilter.php:62 +#: langfilter.php:52 msgid "Minimum confidence in language detection" msgstr "Minimalne zaufanie do wykrywania języka" -#: langfilter.php:62 +#: langfilter.php:52 msgid "" "Minimum confidence in language detection being correct, from 0 to 100. Posts" " will not be filtered when the confidence of language detection is below " "this percent value." msgstr "Minimalne zaufanie do wykrywania języka jest poprawne, od 0 do 100. Wpisy nie będą filtrowane, gdy pewność wykrycia języka jest poniżej tej wartości procentowej." -#: langfilter.php:63 +#: langfilter.php:53 msgid "Minimum length of message body" msgstr "Minimalna długość treści wiadomości" -#: langfilter.php:63 +#: langfilter.php:53 msgid "" "Minimum number of characters in message body for filter to be used. Posts " "shorter than this will not be filtered. Note: Language detection is " "unreliable for short content (<200 characters)." msgstr "Minimalna liczba znaków w treści wiadomości dla używanego filtra. Wpisy krótsze niż te nie będą filtrowane. Uwaga: Wykrywanie języka nie jest wiarygodne dla krótkiej treści (<200 znaków)." -#: langfilter.php:64 +#: langfilter.php:58 +msgid "Language Filter" +msgstr "Filtr językowy" + +#: langfilter.php:60 msgid "Save Settings" msgstr "Zapisz ustawienia" -#: langfilter.php:105 -msgid "Language Filter Settings saved." -msgstr "Ustawienia filtra języka zostały zapisane." - -#: langfilter.php:182 +#: langfilter.php:193 #, php-format msgid "Filtered language: %s" msgstr "Język filtrowany: %s" diff --git a/langfilter/lang/pl/strings.php b/langfilter/lang/pl/strings.php index 8eab79cc..39a44625 100644 --- a/langfilter/lang/pl/strings.php +++ b/langfilter/lang/pl/strings.php @@ -5,15 +5,14 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Language Filter'] = 'Filtr językowy'; -$a->strings['This addon tries to identify the language posts are written in. If it does not match any language specified below, posts will be hidden by collapsing them.'] = 'Ten dodatek próbuje zidentyfikować posty językowe, które są zapisywane. Jeśli nie pasuje do żadnego z języków określonych poniżej, posty będą ukrywane przez ich zwijanie.'; +$a->strings['This addon tries to identify the language posts are written in. If it does not match any language specified below, posts will be hidden by collapsing them.'] = 'Ten dodatek próbuje zidentyfikować wpisy językowe, które są zapisywane. Jeśli nie pasuje do żadnego z języków określonych poniżej, wpisy będą ukrywane przez ich zwijanie.'; $a->strings['Use the language filter'] = 'Użyj filtru językowego'; $a->strings['Able to read'] = 'Może odczytać'; -$a->strings['List of abbreviations (iso2 codes) for languages you speak, comma separated. For example "de,it".'] = 'Lista skrótów (kodów iso2) dla języków, które znasz, oddzielonych przecinkami. Na przykład "pl,de,it".'; +$a->strings['List of abbreviations (ISO 639-1 codes) for languages you speak, comma separated. For example "de,it".'] = 'Lista skrótów (kody ISO 639-1) dla języków, które znasz, oddzielonych przecinkami. Na przykład "pl,de,it".'; $a->strings['Minimum confidence in language detection'] = 'Minimalne zaufanie do wykrywania języka'; $a->strings['Minimum confidence in language detection being correct, from 0 to 100. Posts will not be filtered when the confidence of language detection is below this percent value.'] = 'Minimalne zaufanie do wykrywania języka jest poprawne, od 0 do 100. Wpisy nie będą filtrowane, gdy pewność wykrycia języka jest poniżej tej wartości procentowej.'; $a->strings['Minimum length of message body'] = 'Minimalna długość treści wiadomości'; $a->strings['Minimum number of characters in message body for filter to be used. Posts shorter than this will not be filtered. Note: Language detection is unreliable for short content (<200 characters).'] = 'Minimalna liczba znaków w treści wiadomości dla używanego filtra. Wpisy krótsze niż te nie będą filtrowane. Uwaga: Wykrywanie języka nie jest wiarygodne dla krótkiej treści (<200 znaków).'; +$a->strings['Language Filter'] = 'Filtr językowy'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; -$a->strings['Language Filter Settings saved.'] = 'Ustawienia filtra języka zostały zapisane.'; $a->strings['Filtered language: %s'] = 'Język filtrowany: %s'; diff --git a/libertree/lang/pl/messages.po b/libertree/lang/pl/messages.po index a119f691..37ffea0c 100644 --- a/libertree/lang/pl/messages.po +++ b/libertree/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-08-04 11:56+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2021-12-22 15:27+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,30 +19,26 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: libertree.php:36 +#: libertree.php:39 msgid "Post to libertree" msgstr "Opublikuj na libertree" -#: libertree.php:67 -msgid "libertree Post Settings" -msgstr "Ustawienia libertree Post" - -#: libertree.php:69 +#: libertree.php:60 msgid "Enable Libertree Post Addon" msgstr "Włącz dodatek Libertree Post" -#: libertree.php:74 -msgid "Libertree API token" -msgstr "Token API Libertree" - -#: libertree.php:79 +#: libertree.php:61 msgid "Libertree site URL" msgstr "Adres URL witryny Libertree" -#: libertree.php:84 +#: libertree.php:62 +msgid "Libertree API token" +msgstr "Token API Libertree" + +#: libertree.php:63 msgid "Post to Libertree by default" msgstr "Wyślij domyślnie do Libertree" -#: libertree.php:90 -msgid "Submit" -msgstr "Wyślij" +#: libertree.php:68 +msgid "Libertree Export" +msgstr "" diff --git a/libertree/lang/pl/strings.php b/libertree/lang/pl/strings.php index 481227ab..0ed774d4 100644 --- a/libertree/lang/pl/strings.php +++ b/libertree/lang/pl/strings.php @@ -6,9 +6,7 @@ function string_plural_select_pl($n){ if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} $a->strings['Post to libertree'] = 'Opublikuj na libertree'; -$a->strings['libertree Post Settings'] = 'Ustawienia libertree Post'; $a->strings['Enable Libertree Post Addon'] = 'Włącz dodatek Libertree Post'; -$a->strings['Libertree API token'] = 'Token API Libertree'; $a->strings['Libertree site URL'] = 'Adres URL witryny Libertree'; +$a->strings['Libertree API token'] = 'Token API Libertree'; $a->strings['Post to Libertree by default'] = 'Wyślij domyślnie do Libertree'; -$a->strings['Submit'] = 'Wyślij'; diff --git a/libravatar/lang/pl/messages.po b/libravatar/lang/pl/messages.po index 2b3a896e..014636fa 100644 --- a/libravatar/lang/pl/messages.po +++ b/libravatar/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Piotr Strębski , 2022 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-08-05 15:27+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2022-03-08 14:31+0000\n" +"Last-Translator: Piotr Strębski \n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,66 +20,53 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: libravatar.php:14 -msgid "Could NOT install Libravatar successfully.
It requires PHP >= 5.3" -msgstr "Nie można zainstalować dodatku Libravatar.
Wymaga PHP> = 5.3" - -#: libravatar.php:73 +#: libravatar.php:68 msgid "generic profile image" msgstr "ogólny obraz profilu" -#: libravatar.php:74 +#: libravatar.php:69 msgid "random geometric pattern" msgstr "losowy wzór geometryczny" -#: libravatar.php:75 +#: libravatar.php:70 msgid "monster face" msgstr "twarz potwora" -#: libravatar.php:76 +#: libravatar.php:71 msgid "computer generated face" msgstr "twarz wygenerowana komputerowo" -#: libravatar.php:77 +#: libravatar.php:72 msgid "retro arcade style face" msgstr "twarz w stylu retro arcade" -#: libravatar.php:82 -msgid "Warning" -msgstr "Ostrzeżenie" +#: libravatar.php:73 +msgid "roboter face" +msgstr "" -#: libravatar.php:83 -#, php-format -msgid "Your PHP version %s is lower than the required PHP >= 5.3." -msgstr "Twoja wersja PHP %s jest niższa niż wymagana PHP> = 5.3." +#: libravatar.php:74 +msgid "retro adventure game character" +msgstr "" -#: libravatar.php:84 -msgid "This addon is not functional on your server." -msgstr "Ten dodatek nie działa na twoim serwerze." - -#: libravatar.php:93 +#: libravatar.php:78 msgid "Information" msgstr "Informacja" -#: libravatar.php:93 +#: libravatar.php:78 msgid "" "Gravatar addon is installed. Please disable the Gravatar addon.
The " "Libravatar addon will fall back to Gravatar if nothing was found at " "Libravatar." msgstr "Dodatek Gravatar jest zainstalowany. Wyłącz dodatek Gravatar. Dodatek Libravatar powróci do Gravatar, jeśli w Libravatar nie zostanie znaleziony żaden przedmiot." -#: libravatar.php:99 -msgid "Submit" -msgstr "Prześlij" +#: libravatar.php:83 +msgid "Save Settings" +msgstr "Zapisz ustawienia" -#: libravatar.php:100 +#: libravatar.php:84 msgid "Default avatar image" msgstr "Domyślny obraz awatara" -#: libravatar.php:100 +#: libravatar.php:84 msgid "Select default avatar image if none was found. See README" msgstr "Wybierz domyślny obraz awatara, jeśli nie został znaleziony. Zobacz README" - -#: libravatar.php:112 -msgid "Libravatar settings updated." -msgstr "Zaktualizowano ustawienia Libravatar." diff --git a/libravatar/lang/pl/strings.php b/libravatar/lang/pl/strings.php index bc53dcb8..6e4e2efa 100644 --- a/libravatar/lang/pl/strings.php +++ b/libravatar/lang/pl/strings.php @@ -5,18 +5,13 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Could NOT install Libravatar successfully.
It requires PHP >= 5.3'] = 'Nie można zainstalować dodatku Libravatar.
Wymaga PHP> = 5.3'; $a->strings['generic profile image'] = 'ogólny obraz profilu'; $a->strings['random geometric pattern'] = 'losowy wzór geometryczny'; $a->strings['monster face'] = 'twarz potwora'; $a->strings['computer generated face'] = 'twarz wygenerowana komputerowo'; $a->strings['retro arcade style face'] = 'twarz w stylu retro arcade'; -$a->strings['Warning'] = 'Ostrzeżenie'; -$a->strings['Your PHP version %s is lower than the required PHP >= 5.3.'] = 'Twoja wersja PHP %s jest niższa niż wymagana PHP> = 5.3.'; -$a->strings['This addon is not functional on your server.'] = 'Ten dodatek nie działa na twoim serwerze.'; $a->strings['Information'] = 'Informacja'; $a->strings['Gravatar addon is installed. Please disable the Gravatar addon.
The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar.'] = 'Dodatek Gravatar jest zainstalowany. Wyłącz dodatek Gravatar. Dodatek Libravatar powróci do Gravatar, jeśli w Libravatar nie zostanie znaleziony żaden przedmiot.'; -$a->strings['Submit'] = 'Prześlij'; +$a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Default avatar image'] = 'Domyślny obraz awatara'; $a->strings['Select default avatar image if none was found. See README'] = 'Wybierz domyślny obraz awatara, jeśli nie został znaleziony. Zobacz README'; -$a->strings['Libravatar settings updated.'] = 'Zaktualizowano ustawienia Libravatar.'; diff --git a/ljpost/lang/pl/messages.po b/ljpost/lang/pl/messages.po index 36d225bf..50d4c5fe 100644 --- a/ljpost/lang/pl/messages.po +++ b/ljpost/lang/pl/messages.po @@ -1,17 +1,17 @@ -# ADDON ijpost +# ADDON ljpost # Copyright (C) -# This file is distributed under the same license as the Friendica ijpost addon package. +# This file is distributed under the same license as the Friendica ljpost addon package. # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-08-04 10:48+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2021-12-22 17:23+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,30 +19,26 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: ijpost.php:39 -msgid "Post to Insanejournal" -msgstr "Opublikuj w Insanejournal" +#: ljpost.php:43 +msgid "Post to LiveJournal" +msgstr "Opublikuj w LiveJournal" -#: ijpost.php:70 -msgid "InsaneJournal Post Settings" -msgstr "Ustawienia InsaneJournal Post" +#: ljpost.php:63 +msgid "Enable LiveJournal Post Addon" +msgstr "Włącz dodatek LiveJournal" -#: ijpost.php:72 -msgid "Enable InsaneJournal Post Addon" -msgstr "Włącz dodatek InsaneJournal" +#: ljpost.php:64 +msgid "LiveJournal username" +msgstr "Nazwa użytkownika LiveJournal" -#: ijpost.php:77 -msgid "InsaneJournal username" -msgstr "nazwa użytkownika InsaneJournal" +#: ljpost.php:65 +msgid "LiveJournal password" +msgstr "Hasło LiveJournal" -#: ijpost.php:82 -msgid "InsaneJournal password" -msgstr "Hasło InsaneJournal" +#: ljpost.php:66 +msgid "Post to LiveJournal by default" +msgstr "Opublikuj domyślnie w LiveJournal" -#: ijpost.php:87 -msgid "Post to InsaneJournal by default" -msgstr "Wyślij domyślnie do InsaneJournal" - -#: ijpost.php:93 -msgid "Submit" -msgstr "Wyślij" +#: ljpost.php:71 +msgid "LiveJournal Export" +msgstr "" diff --git a/ljpost/lang/pl/strings.php b/ljpost/lang/pl/strings.php index 92c07c52..666fee01 100644 --- a/ljpost/lang/pl/strings.php +++ b/ljpost/lang/pl/strings.php @@ -5,10 +5,8 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Post to Insanejournal'] = 'Opublikuj w Insanejournal'; -$a->strings['InsaneJournal Post Settings'] = 'Ustawienia InsaneJournal Post'; -$a->strings['Enable InsaneJournal Post Addon'] = 'Włącz dodatek InsaneJournal'; -$a->strings['InsaneJournal username'] = 'nazwa użytkownika InsaneJournal'; -$a->strings['InsaneJournal password'] = 'Hasło InsaneJournal'; -$a->strings['Post to InsaneJournal by default'] = 'Wyślij domyślnie do InsaneJournal'; -$a->strings['Submit'] = 'Wyślij'; +$a->strings['Post to LiveJournal'] = 'Opublikuj w LiveJournal'; +$a->strings['Enable LiveJournal Post Addon'] = 'Włącz dodatek LiveJournal'; +$a->strings['LiveJournal username'] = 'Nazwa użytkownika LiveJournal'; +$a->strings['LiveJournal password'] = 'Hasło LiveJournal'; +$a->strings['Post to LiveJournal by default'] = 'Opublikuj domyślnie w LiveJournal'; diff --git a/mailstream/lang/pl/messages.po b/mailstream/lang/pl/messages.po index 25cd1776..6fed10bb 100644 --- a/mailstream/lang/pl/messages.po +++ b/mailstream/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-11 19:13+0100\n" -"PO-Revision-Date: 2018-04-01 14:39+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2018-04-30 20:13+0000\n" +"Last-Translator: Waldemar Stoczkowski\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -27,72 +27,72 @@ msgstr "Z adresu" msgid "Email address that stream items will appear to be from." msgstr "Adres e-mail, z którego będą przesyłane strumienie pochodzące z." -#: mailstream.php:82 mailstream.php:380 +#: mailstream.php:82 msgid "Save Settings" msgstr "Zapisz ustawienia" -#: mailstream.php:223 +#: mailstream.php:301 msgid "Re:" msgstr "Re:" -#: mailstream.php:231 +#: mailstream.php:314 mailstream.php:317 msgid "Friendica post" msgstr "Friendica post" -#: mailstream.php:234 +#: mailstream.php:320 msgid "Diaspora post" msgstr "Post Diaspora" -#: mailstream.php:244 +#: mailstream.php:330 msgid "Feed item" msgstr "Element kanału" -#: mailstream.php:247 +#: mailstream.php:333 msgid "Email" msgstr "E-mail" -#: mailstream.php:249 +#: mailstream.php:335 msgid "Friendica Item" msgstr "Pozycja Friendica" -#: mailstream.php:293 +#: mailstream.php:404 msgid "Upstream" msgstr "Nadrzędny" -#: mailstream.php:294 +#: mailstream.php:405 msgid "Local" msgstr "Lokalny" -#: mailstream.php:362 +#: mailstream.php:481 msgid "Enabled" msgstr "Włączone" -#: mailstream.php:366 +#: mailstream.php:486 msgid "Email Address" msgstr "Adres e-mail" -#: mailstream.php:368 +#: mailstream.php:488 msgid "Leave blank to use your account email address" -msgstr "Pozostaw puste, aby użyć adresu e-mail swojego konta" +msgstr "Aby użyć adresu e-mail swojego konta pozostaw pole puste" -#: mailstream.php:371 +#: mailstream.php:492 msgid "Exclude Likes" -msgstr "Wykluczanie polubień" +msgstr "Wyłącz polubienia" -#: mailstream.php:373 +#: mailstream.php:494 msgid "Check this to omit mailing \"Like\" notifications" msgstr "Zaznacz to pole, aby pominąć wysyłanie powiadomień typu \"Lubię to\"" -#: mailstream.php:376 +#: mailstream.php:498 msgid "Attach Images" msgstr "Dołącz zdjęcia" -#: mailstream.php:378 +#: mailstream.php:500 msgid "" "Download images in posts and attach them to the email. Useful for reading " "email while offline." -msgstr "Pobierz zdjęcia w postach i dołącz je do wiadomości e-mail. Przydatny do czytania wiadomości e-mail w trybie offline." +msgstr "Pobierz zdjęcia w postach i dołącz je do wiadomości e-mail. Przydatne do czytania wiadomości e-mail w trybie offline." -#: mailstream.php:379 +#: mailstream.php:507 msgid "Mail Stream Settings" msgstr "Ustawienia strumienia poczty" diff --git a/mailstream/lang/pl/strings.php b/mailstream/lang/pl/strings.php index 2705afaa..d4a2932f 100644 --- a/mailstream/lang/pl/strings.php +++ b/mailstream/lang/pl/strings.php @@ -18,9 +18,9 @@ $a->strings['Upstream'] = 'Nadrzędny'; $a->strings['Local'] = 'Lokalny'; $a->strings['Enabled'] = 'Włączone'; $a->strings['Email Address'] = 'Adres e-mail'; -$a->strings['Leave blank to use your account email address'] = 'Pozostaw puste, aby użyć adresu e-mail swojego konta'; -$a->strings['Exclude Likes'] = 'Wykluczanie polubień'; +$a->strings['Leave blank to use your account email address'] = 'Aby użyć adresu e-mail swojego konta pozostaw pole puste'; +$a->strings['Exclude Likes'] = 'Wyłącz polubienia'; $a->strings['Check this to omit mailing "Like" notifications'] = 'Zaznacz to pole, aby pominąć wysyłanie powiadomień typu "Lubię to"'; $a->strings['Attach Images'] = 'Dołącz zdjęcia'; -$a->strings['Download images in posts and attach them to the email. Useful for reading email while offline.'] = 'Pobierz zdjęcia w postach i dołącz je do wiadomości e-mail. Przydatny do czytania wiadomości e-mail w trybie offline.'; +$a->strings['Download images in posts and attach them to the email. Useful for reading email while offline.'] = 'Pobierz zdjęcia w postach i dołącz je do wiadomości e-mail. Przydatne do czytania wiadomości e-mail w trybie offline.'; $a->strings['Mail Stream Settings'] = 'Ustawienia strumienia poczty'; diff --git a/mathjax/lang/pl/messages.po b/mathjax/lang/pl/messages.po index 63c56a11..94703fa3 100644 --- a/mathjax/lang/pl/messages.po +++ b/mathjax/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-04-01 14:40+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2021-12-22 16:24+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,35 +19,13 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: mathjax.php:36 -msgid "Settings" -msgstr "Ustawienia" - -#: mathjax.php:37 +#: mathjax.php:42 msgid "" "The MathJax addon renders mathematical formulae written using the LaTeX " "syntax surrounded by the usual $$ or an eqnarray block in the postings of " "your wall,network tab and private mail." msgstr "Dodatek MathJax renderuje formuły matematyczne napisane przy użyciu składni LaTeX otoczonej zwykłym blokiem $$ lub eqnarray w wiadomościach na ścianie, karcie sieciowej i prywatnej korespondencji." -#: mathjax.php:38 +#: mathjax.php:43 msgid "Use the MathJax renderer" msgstr "Użyj renderer MathJax" - -#: mathjax.php:42 -msgid "Submit" -msgstr "Wyślij" - -#: mathjax.php:66 -msgid "Settings updated." -msgstr "Ustawienia zaktualizowane." - -#: mathjax.php:75 -msgid "MathJax Base URL" -msgstr "Podstawowy adres URL MathJax" - -#: mathjax.php:75 -msgid "" -"The URL for the javascript file that should be included to use MathJax. Can " -"be either the MathJax CDN or another installation of MathJax." -msgstr "Adres URL pliku javascript, który powinien być dołączony do korzystania z MathJax. Może to być MathJax CDN lub inna instalacja MathJax." diff --git a/mathjax/lang/pl/strings.php b/mathjax/lang/pl/strings.php index 4bfb2704..512525c0 100644 --- a/mathjax/lang/pl/strings.php +++ b/mathjax/lang/pl/strings.php @@ -5,10 +5,5 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Settings'] = 'Ustawienia'; $a->strings['The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail.'] = 'Dodatek MathJax renderuje formuły matematyczne napisane przy użyciu składni LaTeX otoczonej zwykłym blokiem $$ lub eqnarray w wiadomościach na ścianie, karcie sieciowej i prywatnej korespondencji.'; $a->strings['Use the MathJax renderer'] = 'Użyj renderer MathJax'; -$a->strings['Submit'] = 'Wyślij'; -$a->strings['Settings updated.'] = 'Ustawienia zaktualizowane.'; -$a->strings['MathJax Base URL'] = 'Podstawowy adres URL MathJax'; -$a->strings['The URL for the javascript file that should be included to use MathJax. Can be either the MathJax CDN or another installation of MathJax.'] = 'Adres URL pliku javascript, który powinien być dołączony do korzystania z MathJax. Może to być MathJax CDN lub inna instalacja MathJax.'; diff --git a/morechoice/lang/pl/messages.po b/morechoice/lang/pl/messages.po index f0a39e7a..27af08eb 100644 --- a/morechoice/lang/pl/messages.po +++ b/morechoice/lang/pl/messages.po @@ -3,14 +3,17 @@ # This file is distributed under the same license as the Friendica morechoice addon package. # # +# Translators: +# Waldemar Stoczkowski, 2018 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-08-07 15:04+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Waldemar Stoczkowski , 2018\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2018-08-07 18:18+0000\n" +"Last-Translator: Waldemar Stoczkowski, 2018\n" "Language-Team: Polish (https://www.transifex.com/Friendica/teams/12172/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,322 +21,322 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: morechoice.php:34 +#: morechoice.php:22 msgid "Androgyne" msgstr "Androgyniczny" -#: morechoice.php:35 +#: morechoice.php:23 msgid "Bear" msgstr "Urodzić" -#: morechoice.php:36 +#: morechoice.php:24 msgid "Bigender" msgstr "Większy" -#: morechoice.php:37 +#: morechoice.php:25 msgid "Cross dresser" msgstr "Transwestyta" -#: morechoice.php:38 +#: morechoice.php:26 msgid "Drag queen" msgstr "Transwestyta" -#: morechoice.php:39 +#: morechoice.php:27 msgid "Eunuch" msgstr "Kastrat" -#: morechoice.php:40 +#: morechoice.php:28 msgid "Faux queen" msgstr "Fałszywa dama" -#: morechoice.php:41 +#: morechoice.php:29 msgid "Gender fluid" msgstr "Płyn płciowy" -#: morechoice.php:42 +#: morechoice.php:30 msgid "Kathoey" msgstr "Kathoey" -#: morechoice.php:43 +#: morechoice.php:31 msgid "Lady" msgstr "Pani" -#: morechoice.php:44 +#: morechoice.php:32 msgid "Lipstick lesbian" msgstr "Szminka lesbijek" -#: morechoice.php:45 +#: morechoice.php:33 msgid "Metrosexual" msgstr "Metroseksualny" -#: morechoice.php:46 +#: morechoice.php:34 msgid "Monk" msgstr "Mnich" -#: morechoice.php:47 +#: morechoice.php:35 msgid "Nun" msgstr "Obecnie" -#: morechoice.php:48 +#: morechoice.php:36 msgid "Soft butch" msgstr "Miękka lesbijka" -#: morechoice.php:49 +#: morechoice.php:37 msgid "Stone femme" msgstr "Kamienna kobieta" -#: morechoice.php:50 +#: morechoice.php:38 msgid "Tomboy" msgstr "Lesbijka" -#: morechoice.php:51 +#: morechoice.php:39 msgid "Transman" msgstr "Męszczyzna Transseklualny" -#: morechoice.php:52 +#: morechoice.php:40 msgid "Transwoman" msgstr "Kobieta Transseklualna" -#: morechoice.php:53 +#: morechoice.php:41 msgid "Transvesti" msgstr "Transwestyta" -#: morechoice.php:54 +#: morechoice.php:42 msgid "Trigender" msgstr "Trójpłciowość" -#: morechoice.php:55 +#: morechoice.php:43 msgid "Can't remember" msgstr "Nie pamiętam" -#: morechoice.php:56 +#: morechoice.php:44 msgid "Hard to tell these days" msgstr "Trudno powiedzieć w te dni" -#: morechoice.php:60 +#: morechoice.php:48 msgid "Girls with big tits" msgstr "Dziewczyny z dużymi piersiami" -#: morechoice.php:61 +#: morechoice.php:49 msgid "Millionaires" msgstr "Milionerzy" -#: morechoice.php:62 +#: morechoice.php:50 msgid "Guys with big schlongs" msgstr "Faceci z dużymi penisami" -#: morechoice.php:63 +#: morechoice.php:51 msgid "Easy women" msgstr "Łatwe kobiety" -#: morechoice.php:64 +#: morechoice.php:52 msgid "People with impaired mobility" msgstr "Osoby z upośledzeniem ruchowym" -#: morechoice.php:65 +#: morechoice.php:53 msgid "Amputees" msgstr "Po amputacji" -#: morechoice.php:66 +#: morechoice.php:54 msgid "Statues, mannequins and immobility" msgstr "Posągi, manekiny i nieruchomość" -#: morechoice.php:67 +#: morechoice.php:55 msgid "Pain" msgstr "Ból" -#: morechoice.php:68 +#: morechoice.php:56 msgid "Trans men" msgstr "Transseklualny męszczyzna" -#: morechoice.php:69 +#: morechoice.php:57 msgid "Older women" msgstr "Starsze kobiety" -#: morechoice.php:70 +#: morechoice.php:58 msgid "Asphyxiation" -msgstr "Uduszenie się" +msgstr "Duszę się" -#: morechoice.php:71 +#: morechoice.php:59 msgid "In public" msgstr "Publicznie" -#: morechoice.php:72 +#: morechoice.php:60 msgid "In danger" msgstr "W niebezpieczeństwie" -#: morechoice.php:73 +#: morechoice.php:61 msgid "Pretending to be male" msgstr "Udawanie mężczyzny" -#: morechoice.php:74 +#: morechoice.php:62 msgid "Pretending to be female" msgstr "Udając płeć żeńską" -#: morechoice.php:75 +#: morechoice.php:63 msgid "Breats" msgstr "Biust" -#: morechoice.php:76 +#: morechoice.php:64 msgid "Scat" msgstr "Zwiać" -#: morechoice.php:77 +#: morechoice.php:65 msgid "Crying" msgstr "Płacz" -#: morechoice.php:78 +#: morechoice.php:66 msgid "Nappies/Diapers" msgstr "Pieluchy/pampersy" -#: morechoice.php:79 +#: morechoice.php:67 msgid "Trees" msgstr "Drzewo" -#: morechoice.php:80 +#: morechoice.php:68 msgid "Vomit" msgstr "Zwymiotować" -#: morechoice.php:81 +#: morechoice.php:69 msgid "Murder" msgstr "Morderstwo" -#: morechoice.php:82 +#: morechoice.php:70 msgid "Fat people" msgstr "Otyli przyjaciele" -#: morechoice.php:83 +#: morechoice.php:71 msgid "Feet" msgstr "Stopy" -#: morechoice.php:84 +#: morechoice.php:72 msgid "Covered in insects" msgstr "Pokryty owadami" -#: morechoice.php:85 +#: morechoice.php:73 msgid "Turning a human being into furniture" msgstr "Przekształcając człowieka meble" -#: morechoice.php:86 +#: morechoice.php:74 msgid "Elderly people" msgstr "Osób w podeszłym wieku" -#: morechoice.php:87 +#: morechoice.php:75 msgid "Transgender people" msgstr "Osoby transpłciowe" -#: morechoice.php:88 +#: morechoice.php:76 msgid "Criminals" msgstr "Przestępca" -#: morechoice.php:89 +#: morechoice.php:77 msgid "Stealing" msgstr "Kradzież" -#: morechoice.php:90 +#: morechoice.php:78 msgid "Breast milk" msgstr "Mleko matki" -#: morechoice.php:91 +#: morechoice.php:79 msgid "Immersing genitals in liquids" msgstr "Zanurzenie narządów płciowych w cieczach" -#: morechoice.php:92 +#: morechoice.php:80 msgid "Giants" msgstr "Giganci" -#: morechoice.php:93 +#: morechoice.php:81 msgid "Masochism" msgstr "Masochizm" -#: morechoice.php:94 +#: morechoice.php:82 msgid "Cars" msgstr "Samochody" -#: morechoice.php:95 +#: morechoice.php:83 msgid "Menstruation" msgstr "Miesiączka" -#: morechoice.php:96 +#: morechoice.php:84 msgid "Mucus" msgstr "Wydzielina" -#: morechoice.php:97 +#: morechoice.php:85 msgid "Obscene language" msgstr "Nieprzyzwoity język" -#: morechoice.php:98 +#: morechoice.php:86 msgid "Noses" msgstr "Nosy" -#: morechoice.php:99 +#: morechoice.php:87 msgid "Navels" msgstr "Pępki" -#: morechoice.php:100 +#: morechoice.php:88 msgid "Corpses" msgstr "Zwłoki" -#: morechoice.php:101 +#: morechoice.php:89 msgid "Smells" msgstr "Odór" -#: morechoice.php:102 +#: morechoice.php:90 msgid "Buttocks" msgstr "Tyłek" -#: morechoice.php:103 +#: morechoice.php:91 msgid "Nonliving objects" msgstr "Nieżyjący obiekt" -#: morechoice.php:104 +#: morechoice.php:92 msgid "Sleeping people" msgstr "Śpiący ludzie" -#: morechoice.php:105 +#: morechoice.php:93 msgid "Urination" msgstr "Oddawanie moczu" -#: morechoice.php:106 +#: morechoice.php:94 msgid "Eating people" msgstr "Pożywienie dla ludzi" -#: morechoice.php:107 +#: morechoice.php:95 msgid "Being eaten" msgstr "Bycie zjedzonym" -#: morechoice.php:108 +#: morechoice.php:96 msgid "Animals" msgstr "Zwierzęta" -#: morechoice.php:109 +#: morechoice.php:97 msgid "I'd rather just have some chocolate" msgstr "Wolałbym tylko trochę czekolady" -#: morechoice.php:113 +#: morechoice.php:101 msgid "Married to my job" msgstr "Żonaty z moją pracą" -#: morechoice.php:114 +#: morechoice.php:102 msgid "Polygamist" msgstr "Poligamista" -#: morechoice.php:115 +#: morechoice.php:103 msgid "Half married" msgstr "Pół żonaty" -#: morechoice.php:116 +#: morechoice.php:104 msgid "Living in the past" msgstr "Życie w przeszłości" -#: morechoice.php:117 +#: morechoice.php:105 msgid "Pretending to be over my ex" msgstr "Udawanie, że jestem ponad moim byłym" -#: morechoice.php:118 +#: morechoice.php:106 msgid "Hurt in the past" msgstr "Boli w przeszłości" -#: morechoice.php:119 +#: morechoice.php:107 msgid "Wallowing in self-pity" msgstr "Miauczenie w użalaniu się nad sobą" diff --git a/morechoice/lang/pl/strings.php b/morechoice/lang/pl/strings.php index 88025aec..921ad3b1 100644 --- a/morechoice/lang/pl/strings.php +++ b/morechoice/lang/pl/strings.php @@ -38,7 +38,7 @@ $a->strings['Statues, mannequins and immobility'] = 'Posągi, manekiny i nieruch $a->strings['Pain'] = 'Ból'; $a->strings['Trans men'] = 'Transseklualny męszczyzna'; $a->strings['Older women'] = 'Starsze kobiety'; -$a->strings['Asphyxiation'] = 'Uduszenie się'; +$a->strings['Asphyxiation'] = 'Duszę się'; $a->strings['In public'] = 'Publicznie'; $a->strings['In danger'] = 'W niebezpieczeństwie'; $a->strings['Pretending to be male'] = 'Udawanie mężczyzny'; diff --git a/morepokes/lang/pl/messages.po b/morepokes/lang/pl/messages.po index f00a63e9..e36ccf36 100644 --- a/morepokes/lang/pl/messages.po +++ b/morepokes/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" "PO-Revision-Date: 2018-08-05 15:36+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"Last-Translator: Waldemar Stoczkowski\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/newmemberwidget/lang/pl/messages.po b/newmemberwidget/lang/pl/messages.po index 8d9f6fbe..62c7ca27 100644 --- a/newmemberwidget/lang/pl/messages.po +++ b/newmemberwidget/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-01 14:12+0200\n" -"PO-Revision-Date: 2018-03-31 20:24+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2021-02-01 18:24+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,57 +19,57 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: newmemberwidget.php:21 +#: newmemberwidget.php:29 msgid "New Member" msgstr "Nowy Użytkownik" -#: newmemberwidget.php:22 +#: newmemberwidget.php:30 msgid "Tips for New Members" msgstr "Wskazówki dla nowych członków" -#: newmemberwidget.php:24 +#: newmemberwidget.php:33 msgid "Global Support Forum" msgstr "Globalne forum pomocy technicznej" -#: newmemberwidget.php:26 +#: newmemberwidget.php:37 msgid "Local Support Forum" msgstr "Lokalne Forum Wsparcia" -#: newmemberwidget.php:49 +#: newmemberwidget.php:65 msgid "Save Settings" msgstr "Zapisz ustawienia" -#: newmemberwidget.php:50 +#: newmemberwidget.php:66 msgid "Message" msgstr "Wiadomość" -#: newmemberwidget.php:50 +#: newmemberwidget.php:66 msgid "Your message for new members. You can use bbcode here." -msgstr "Twoja wiadomość dla nowych członków. Możesz użyć bbcode tutaj." +msgstr "Twoja wiadomość dla nowych członków. Możesz tutaj użyć bbcode." -#: newmemberwidget.php:51 +#: newmemberwidget.php:67 msgid "Add a link to global support forum" msgstr "Dodaj link do globalnego forum pomocy technicznej" -#: newmemberwidget.php:51 +#: newmemberwidget.php:67 msgid "Should a link to the global support forum be displayed?" msgstr "Czy powinien być wyświetlany link do globalnego forum pomocy technicznej?" -#: newmemberwidget.php:52 +#: newmemberwidget.php:68 msgid "Add a link to the local support forum" msgstr "Dodaj link do lokalnego forum pomocy technicznej" -#: newmemberwidget.php:52 +#: newmemberwidget.php:68 msgid "" -"If you have a local support forum and wand to have a link displayed in the " +"If you have a local support forum and want to have a link displayed in the " "widget, check this box." -msgstr "Jeżeli masz lokalne wsparcie forum i różdżki, aby mieć łącze wyświetlane w widżecie, zaznacz to pole wyboru." +msgstr "" -#: newmemberwidget.php:53 +#: newmemberwidget.php:69 msgid "Name of the local support group" msgstr "Nazwa grupy lokalnej pomocy technicznej" -#: newmemberwidget.php:53 +#: newmemberwidget.php:69 msgid "" "If you checked the above, specify the nickname of the local support" " group here (i.e. helpers)" diff --git a/newmemberwidget/lang/pl/strings.php b/newmemberwidget/lang/pl/strings.php index a5ae39c7..da134495 100644 --- a/newmemberwidget/lang/pl/strings.php +++ b/newmemberwidget/lang/pl/strings.php @@ -11,10 +11,9 @@ $a->strings['Global Support Forum'] = 'Globalne forum pomocy technicznej'; $a->strings['Local Support Forum'] = 'Lokalne Forum Wsparcia'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Message'] = 'Wiadomość'; -$a->strings['Your message for new members. You can use bbcode here.'] = 'Twoja wiadomość dla nowych członków. Możesz użyć bbcode tutaj.'; +$a->strings['Your message for new members. You can use bbcode here.'] = 'Twoja wiadomość dla nowych członków. Możesz tutaj użyć bbcode.'; $a->strings['Add a link to global support forum'] = 'Dodaj link do globalnego forum pomocy technicznej'; $a->strings['Should a link to the global support forum be displayed?'] = 'Czy powinien być wyświetlany link do globalnego forum pomocy technicznej?'; $a->strings['Add a link to the local support forum'] = 'Dodaj link do lokalnego forum pomocy technicznej'; -$a->strings['If you have a local support forum and wand to have a link displayed in the widget, check this box.'] = 'Jeżeli masz lokalne wsparcie forum i różdżki, aby mieć łącze wyświetlane w widżecie, zaznacz to pole wyboru.'; $a->strings['Name of the local support group'] = 'Nazwa grupy lokalnej pomocy technicznej'; $a->strings['If you checked the above, specify the nickname of the local support group here (i.e. helpers)'] = 'Jeśli zaznaczyłeś powyższe, określ tutaj pseudonim lokalnej grupy wsparcia (np. Pomocnicy)'; diff --git a/notifyall/lang/pl/messages.po b/notifyall/lang/pl/messages.po index a8110249..494d2c38 100644 --- a/notifyall/lang/pl/messages.po +++ b/notifyall/lang/pl/messages.po @@ -3,14 +3,17 @@ # This file is distributed under the same license as the Friendica notifyall addon package. # # +# Translators: +# Waldemar Stoczkowski, 2018 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-08-14 16:41+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Waldemar Stoczkowski , 2018\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2016-08-14 19:29+0000\n" +"Last-Translator: Waldemar Stoczkowski, 2018\n" "Language-Team: Polish (https://www.transifex.com/Friendica/teams/12172/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,41 +21,41 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: notifyall.php:26 -msgid "Send email to all members" -msgstr "Wyślij e-mail do wszystkich członków" - -#: notifyall.php:42 +#: NotifyAllEmail.php:40 #, php-format msgid "%s Administrator" msgstr "%s Administrator" -#: notifyall.php:44 +#: NotifyAllEmail.php:42 #, php-format msgid "%1$s, %2$s Administrator" msgstr "%1$s, %2$s Administrator" -#: notifyall.php:60 +#: notifyall.php:22 +msgid "Send email to all members" +msgstr "Wyślij e-mail do wszystkich członków" + +#: notifyall.php:49 msgid "No recipients found." msgstr "Nie znaleziono adresatów." -#: notifyall.php:78 +#: notifyall.php:59 msgid "Emails sent" msgstr "Wysłane wiadomości e-mail" -#: notifyall.php:86 +#: notifyall.php:69 msgid "Send email to all members of this Friendica instance." msgstr "" "Wyślij wiadomość e-mail do wszystkich członków tej instancji Friendica." -#: notifyall.php:91 +#: notifyall.php:74 msgid "Message subject" msgstr "Temat wiadomości" -#: notifyall.php:92 +#: notifyall.php:75 msgid "Test mode (only send to administrator)" -msgstr "Tryb testowy (wysyłany tylko do administratora)" +msgstr "Tryb testowy (wiadomość wysyłana tylko do administratora)" -#: notifyall.php:93 +#: notifyall.php:76 msgid "Submit" msgstr "Zatwierdź" diff --git a/notifyall/lang/pl/strings.php b/notifyall/lang/pl/strings.php index 6a2d30c8..453f2479 100644 --- a/notifyall/lang/pl/strings.php +++ b/notifyall/lang/pl/strings.php @@ -5,12 +5,12 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Send email to all members'] = 'Wyślij e-mail do wszystkich członków'; $a->strings['%s Administrator'] = '%s Administrator'; $a->strings['%1$s, %2$s Administrator'] = '%1$s, %2$s Administrator'; +$a->strings['Send email to all members'] = 'Wyślij e-mail do wszystkich członków'; $a->strings['No recipients found.'] = 'Nie znaleziono adresatów.'; $a->strings['Emails sent'] = 'Wysłane wiadomości e-mail'; $a->strings['Send email to all members of this Friendica instance.'] = 'Wyślij wiadomość e-mail do wszystkich członków tej instancji Friendica.'; $a->strings['Message subject'] = 'Temat wiadomości'; -$a->strings['Test mode (only send to administrator)'] = 'Tryb testowy (wysyłany tylko do administratora)'; +$a->strings['Test mode (only send to administrator)'] = 'Tryb testowy (wiadomość wysyłana tylko do administratora)'; $a->strings['Submit'] = 'Zatwierdź'; diff --git a/nsfw/lang/pl/messages.po b/nsfw/lang/pl/messages.po index 3345750f..b865b7c5 100644 --- a/nsfw/lang/pl/messages.po +++ b/nsfw/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 11:11-0400\n" -"PO-Revision-Date: 2018-04-07 16:56+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2021-12-22 17:22+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,11 +19,7 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: nsfw.php:77 nsfw.php:81 -msgid "Content Filter (NSFW and more)" -msgstr "Filtr zawartości (NSFW i więcej)" - -#: nsfw.php:85 +#: nsfw.php:65 msgid "" "This addon searches for specified words/text in posts and collapses them. It" " can be used to filter content tagged with for instance #NSFW that may be " @@ -31,32 +27,28 @@ msgid "" "is also useful for hiding irrelevant or annoying content from direct view." msgstr "Ten dodatek szuka określonych słów/tekstów w postach i zwija je. Może służyć do filtrowania treści oznaczonych np. NSFW, które mogą zostać uznane za nieodpowiednie w określonych momentach lub miejscach, na przykład w pracy. Jest to również przydatne do ukrywania nieistotnych lub irytujących treści z bezpośredniego widoku." -#: nsfw.php:86 +#: nsfw.php:66 msgid "Enable Content filter" msgstr "Włącz filtr treści" -#: nsfw.php:89 +#: nsfw.php:67 msgid "Comma separated list of keywords to hide" msgstr "Rozdzielana przecinkami lista słów kluczowych do ukrycia" -#: nsfw.php:93 -msgid "Save Settings" -msgstr "Zapisz ustawienia" - -#: nsfw.php:94 +#: nsfw.php:67 msgid "Use /expression/ to provide regular expressions" msgstr "Użyj /wyrażenia/, aby zapewnić wyrażenia regularne" -#: nsfw.php:109 -msgid "NSFW Settings saved." -msgstr "Ustawienia NSFW zostały zapisane." +#: nsfw.php:72 +msgid "Content Filter (NSFW and more)" +msgstr "Filtr zawartości (NSFW i więcej)" -#: nsfw.php:162 +#: nsfw.php:140 #, php-format msgid "Filtered tag: %s" msgstr "Filtrowane tagów: %s" -#: nsfw.php:164 +#: nsfw.php:142 #, php-format msgid "Filtered word: %s" msgstr "Filtrowane słowo: %s" diff --git a/nsfw/lang/pl/strings.php b/nsfw/lang/pl/strings.php index 7b8e9545..3e7cbd98 100644 --- a/nsfw/lang/pl/strings.php +++ b/nsfw/lang/pl/strings.php @@ -5,12 +5,10 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Content Filter (NSFW and more)'] = 'Filtr zawartości (NSFW i więcej)'; $a->strings['This addon searches for specified words/text in posts and collapses them. It can be used to filter content tagged with for instance #NSFW that may be deemed inappropriate at certain times or places, such as being at work. It is also useful for hiding irrelevant or annoying content from direct view.'] = 'Ten dodatek szuka określonych słów/tekstów w postach i zwija je. Może służyć do filtrowania treści oznaczonych np. NSFW, które mogą zostać uznane za nieodpowiednie w określonych momentach lub miejscach, na przykład w pracy. Jest to również przydatne do ukrywania nieistotnych lub irytujących treści z bezpośredniego widoku.'; $a->strings['Enable Content filter'] = 'Włącz filtr treści'; $a->strings['Comma separated list of keywords to hide'] = 'Rozdzielana przecinkami lista słów kluczowych do ukrycia'; -$a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Use /expression/ to provide regular expressions'] = 'Użyj /wyrażenia/, aby zapewnić wyrażenia regularne'; -$a->strings['NSFW Settings saved.'] = 'Ustawienia NSFW zostały zapisane.'; +$a->strings['Content Filter (NSFW and more)'] = 'Filtr zawartości (NSFW i więcej)'; $a->strings['Filtered tag: %s'] = 'Filtrowane tagów: %s'; $a->strings['Filtered word: %s'] = 'Filtrowane słowo: %s'; diff --git a/numfriends/lang/pl/messages.po b/numfriends/lang/pl/messages.po index d63e4cdb..5a791939 100644 --- a/numfriends/lang/pl/messages.po +++ b/numfriends/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-03-31 19:18+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2021-12-22 15:27+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,18 +19,10 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: numfriends.php:46 -msgid "Numfriends settings updated." -msgstr "Zaktualizowano ustawienia Numfriends." - -#: numfriends.php:77 -msgid "Numfriends Settings" -msgstr "Ustawienia Numfriends" - -#: numfriends.php:79 +#: numfriends.php:55 msgid "How many contacts to display on profile sidebar" msgstr "Ile kontaktów można wyświetlić na pasku bocznym profilu" -#: numfriends.php:85 -msgid "Submit" -msgstr "Wyślij" +#: numfriends.php:60 +msgid "Numfriends Settings" +msgstr "Ustawienia Liczba kontaktów" diff --git a/numfriends/lang/pl/strings.php b/numfriends/lang/pl/strings.php index 97b0c778..6693c0f2 100644 --- a/numfriends/lang/pl/strings.php +++ b/numfriends/lang/pl/strings.php @@ -5,7 +5,5 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Numfriends settings updated.'] = 'Zaktualizowano ustawienia Numfriends.'; -$a->strings['Numfriends Settings'] = 'Ustawienia Numfriends'; $a->strings['How many contacts to display on profile sidebar'] = 'Ile kontaktów można wyświetlić na pasku bocznym profilu'; -$a->strings['Submit'] = 'Wyślij'; +$a->strings['Numfriends Settings'] = 'Ustawienia Liczba kontaktów'; diff --git a/openstreetmap/lang/pl/messages.po b/openstreetmap/lang/pl/messages.po index 38be16a3..a31d668b 100644 --- a/openstreetmap/lang/pl/messages.po +++ b/openstreetmap/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-08-04 10:52+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2021-02-01 19:14+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,28 +19,47 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: openstreetmap.php:94 +#: openstreetmap.php:167 +msgid "View Larger" +msgstr "" + +#: openstreetmap.php:194 msgid "Submit" msgstr "Zatwierdź" -#: openstreetmap.php:95 +#: openstreetmap.php:195 msgid "Tile Server URL" msgstr "Adres URL serwera sąsiadująco" -#: openstreetmap.php:95 +#: openstreetmap.php:195 msgid "" "A list of public tile servers" -msgstr "Lista serwerów publicznych" +"target=\"_blank\" rel=\"noopener noreferrer\">public tile servers" +msgstr "" -#: openstreetmap.php:96 +#: openstreetmap.php:196 +msgid "Nominatim (reverse geocoding) Server URL" +msgstr "" + +#: openstreetmap.php:196 +msgid "" +"A list of Nominatim servers" +msgstr "" + +#: openstreetmap.php:197 msgid "Default zoom" msgstr "Domyślne powiększenie" -#: openstreetmap.php:96 -msgid "The default zoom level. (1:world, 18:highest)" -msgstr "Domyślny poziom powiększenia. (1:świat, 18:najwyższy)" +#: openstreetmap.php:197 +msgid "" +"The default zoom level. (1:world, 18:highest, also depends on tile server)" +msgstr "" -#: openstreetmap.php:104 -msgid "Settings updated." -msgstr "Zaktualizowano ustawienia." +#: openstreetmap.php:198 +msgid "Include marker on map" +msgstr "" + +#: openstreetmap.php:198 +msgid "Include a marker on the map." +msgstr "" diff --git a/openstreetmap/lang/pl/strings.php b/openstreetmap/lang/pl/strings.php index dcf58de0..b02b17d9 100644 --- a/openstreetmap/lang/pl/strings.php +++ b/openstreetmap/lang/pl/strings.php @@ -7,7 +7,4 @@ function string_plural_select_pl($n){ }} $a->strings['Submit'] = 'Zatwierdź'; $a->strings['Tile Server URL'] = 'Adres URL serwera sąsiadująco'; -$a->strings['A list of public tile servers'] = 'Lista serwerów publicznych'; $a->strings['Default zoom'] = 'Domyślne powiększenie'; -$a->strings['The default zoom level. (1:world, 18:highest)'] = 'Domyślny poziom powiększenia. (1:świat, 18:najwyższy)'; -$a->strings['Settings updated.'] = 'Zaktualizowano ustawienia.'; diff --git a/pageheader/lang/pl/messages.po b/pageheader/lang/pl/messages.po index d0b2d9a4..41ed9ad7 100644 --- a/pageheader/lang/pl/messages.po +++ b/pageheader/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-11 18:52+0100\n" -"PO-Revision-Date: 2018-04-10 16:56+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2021-02-01 20:21+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,24 +19,20 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: pageheader.php:53 +#: pageheader.php:36 msgid "\"pageheader\" Settings" msgstr "Ustawienia \"nagłówek strony\"" -#: pageheader.php:54 +#: pageheader.php:37 msgid "Message" msgstr "Wiadomość" -#: pageheader.php:54 +#: pageheader.php:37 msgid "" "Message to display on every page on this server (or put a pageheader.html " "file in your docroot)" msgstr "Komunikat wyświetlany na każdej stronie, na tym serwerze (lub umieść plik pageheader.html w swoim dokumencie roboczym)" -#: pageheader.php:55 +#: pageheader.php:38 msgid "Save Settings" msgstr "Zapisz ustawienia" - -#: pageheader.php:69 -msgid "pageheader Settings saved." -msgstr "nagłówek strony Ustawienia zapisane." diff --git a/pageheader/lang/pl/strings.php b/pageheader/lang/pl/strings.php index 3c03b8a0..edeb0a85 100644 --- a/pageheader/lang/pl/strings.php +++ b/pageheader/lang/pl/strings.php @@ -9,4 +9,3 @@ $a->strings['"pageheader" Settings'] = 'Ustawienia "nagłówek strony"'; $a->strings['Message'] = 'Wiadomość'; $a->strings['Message to display on every page on this server (or put a pageheader.html file in your docroot)'] = 'Komunikat wyświetlany na każdej stronie, na tym serwerze (lub umieść plik pageheader.html w swoim dokumencie roboczym)'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; -$a->strings['pageheader Settings saved.'] = 'nagłówek strony Ustawienia zapisane.'; diff --git a/piwik/lang/pl/messages.po b/piwik/lang/pl/messages.po index 6226c4bc..41a079d1 100644 --- a/piwik/lang/pl/messages.po +++ b/piwik/lang/pl/messages.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-02-19 10:42+0100\n" -"PO-Revision-Date: 2019-03-07 19:29+0000\n" -"Last-Translator: Waldemar Stoczkowski\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2021-02-01 18:23+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,13 +19,13 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: piwik.php:94 +#: piwik.php:87 msgid "" "This website is tracked using the Matomo" " analytics tool." msgstr "Ta strona internetowa jest śledzona za pomocą narzędzia analitycznego Matomo." -#: piwik.php:97 +#: piwik.php:90 #, php-format msgid "" "If you do not want that your visits are logged in this way you (opt-out)." msgstr "Jeśli nie chcesz, aby twoje wizyty były rejestrowane w ten sposób, możesz ustawić plik cookie, aby uniemożliwić Matomo / Piwik śledzenie dalszych wizyt w witrynie (rezygnacja)." -#: piwik.php:104 +#: piwik.php:97 msgid "Save Settings" msgstr "Zapisz ustawienia" -#: piwik.php:105 +#: piwik.php:98 msgid "Matomo (Piwik) Base URL" msgstr "Podstawowy adres URL Matomo (Piwik)" -#: piwik.php:105 +#: piwik.php:98 msgid "" "Absolute path to your Matomo (Piwik) installation. (without protocol " "(http/s), with trailing slash)" msgstr "Ścieżka bezwzględna do instalacji Matomo (Piwik). (bez protokołu (http/s), z ukośnikiem)" -#: piwik.php:106 +#: piwik.php:99 msgid "Site ID" msgstr "Identyfikator ID witryny" -#: piwik.php:107 +#: piwik.php:100 msgid "Show opt-out cookie link?" msgstr "Pokazać link do rezygnacji z plików cookie?" -#: piwik.php:108 +#: piwik.php:101 msgid "Asynchronous tracking" msgstr "Śledzenie asynchroniczne" - -#: piwik.php:120 -msgid "Settings updated." -msgstr "Zaktualizowano ustawienia." diff --git a/piwik/lang/pl/strings.php b/piwik/lang/pl/strings.php index 00b87a3c..c00a5966 100644 --- a/piwik/lang/pl/strings.php +++ b/piwik/lang/pl/strings.php @@ -13,4 +13,3 @@ $a->strings['Absolute path to your Matomo (Piwik) installation. (without protoco $a->strings['Site ID'] = 'Identyfikator ID witryny'; $a->strings['Show opt-out cookie link?'] = 'Pokazać link do rezygnacji z plików cookie?'; $a->strings['Asynchronous tracking'] = 'Śledzenie asynchroniczne'; -$a->strings['Settings updated.'] = 'Zaktualizowano ustawienia.'; diff --git a/planets/lang/pl/messages.po b/planets/lang/pl/messages.po index 3018da60..59b6d338 100644 --- a/planets/lang/pl/messages.po +++ b/planets/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-03-31 19:10+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2021-12-22 16:22+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,14 +19,10 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: planets.php:150 -msgid "Planets Settings" -msgstr "Ustawienia Planet" - -#: planets.php:152 +#: planets.php:126 msgid "Enable Planets Addon" msgstr "Włącz dodatek Planets" -#: planets.php:158 -msgid "Submit" -msgstr "Wyślij" +#: planets.php:131 +msgid "Planets Settings" +msgstr "Ustawienia Planet" diff --git a/planets/lang/pl/strings.php b/planets/lang/pl/strings.php index 8b9ff87e..1636bc8f 100644 --- a/planets/lang/pl/strings.php +++ b/planets/lang/pl/strings.php @@ -5,6 +5,5 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Planets Settings'] = 'Ustawienia Planet'; $a->strings['Enable Planets Addon'] = 'Włącz dodatek Planets'; -$a->strings['Submit'] = 'Wyślij'; +$a->strings['Planets Settings'] = 'Ustawienia Planet'; diff --git a/public_server/lang/pl/messages.po b/public_server/lang/pl/messages.po index 92ea576e..7777bec6 100644 --- a/public_server/lang/pl/messages.po +++ b/public_server/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Piotr Strębski , 2022 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-03-31 16:44+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2022-03-08 14:32+0000\n" +"Last-Translator: Piotr Strębski \n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,23 +20,31 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: public_server.php:62 +#: public_server.php:64 msgid "Administrator" msgstr "Administrator" -#: public_server.php:126 +#: public_server.php:118 #, php-format msgid "Your account on %s will expire in a few days." msgstr "Twoje konto na %s wygaśnie w ciągu kilku dni." -#: public_server.php:127 +#: public_server.php:119 msgid "Your Friendica account is about to expire." msgstr "Twoje konto Friendica jest w trakcie wygaszania" -#: public_server.php:128 +#: public_server.php:120 #, php-format msgid "" "Hi %1$s,\n" "\n" "Your account on %2$s will expire in less than five days. You may keep your account by logging in at least once every 30 days" msgstr "Cześć ,%1$s\n\nTwoje konto wygaśnie za %2$s mniej niż pięć dni. Możesz zachować swoje konto logując się przynajmniej raz na 30 dni" + +#: public_server.php:158 +msgid "Save Settings" +msgstr "Zapisz ustawienia" + +#: public_server.php:160 +msgid "Set any of these options to 0 to deactivate it." +msgstr "" diff --git a/public_server/lang/pl/strings.php b/public_server/lang/pl/strings.php index fad3ccea..228d5219 100644 --- a/public_server/lang/pl/strings.php +++ b/public_server/lang/pl/strings.php @@ -13,3 +13,4 @@ $a->strings['Hi %1$s, Your account on %2$s will expire in less than five days. You may keep your account by logging in at least once every 30 days'] = 'Cześć ,%1$s Twoje konto wygaśnie za %2$s mniej niż pięć dni. Możesz zachować swoje konto logując się przynajmniej raz na 30 dni'; +$a->strings['Save Settings'] = 'Zapisz ustawienia'; diff --git a/pumpio/lang/pl/messages.po b/pumpio/lang/pl/messages.po index 98e910a7..2af16167 100644 --- a/pumpio/lang/pl/messages.po +++ b/pumpio/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-23 14:45+0200\n" -"PO-Revision-Date: 2018-08-05 15:43+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2021-12-22 17:23+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,84 +19,76 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: pumpio.php:38 +#: pumpio.php:57 msgid "Permission denied." msgstr "Odmowa dostępu." -#: pumpio.php:124 +#: pumpio.php:152 #, php-format msgid "Unable to register the client at the pump.io server '%s'." msgstr "Nie można zarejestrować klienta na serwerze pump.io '%s'." -#: pumpio.php:164 +#: pumpio.php:192 msgid "You are now authenticated to pumpio." msgstr "Jesteś teraz uwierzytelniony w trybie pumpio." -#: pumpio.php:165 +#: pumpio.php:193 msgid "return to the connector page" msgstr "powrót do strony łączenia" -#: pumpio.php:183 +#: pumpio.php:213 msgid "Post to pumpio" msgstr "Prześlij do pumpio" -#: pumpio.php:221 pumpio.php:225 -msgid "Pump.io Import/Export/Mirror" -msgstr "Pump.io Import/Export/Mirror" +#: pumpio.php:237 +msgid "Save Settings" +msgstr "Zapisz ustawienia" -#: pumpio.php:229 -msgid "pump.io username (without the servername)" -msgstr "nazwa użytkownika pump.io (bez nazwy serwera)" +#: pumpio.php:239 +msgid "Delete this preset" +msgstr "" -#: pumpio.php:234 -msgid "pump.io servername (without \"http://\" or \"https://\" )" -msgstr "pump.io nazwa_serwera (bez \"http://\" lub \"https://\")" - -#: pumpio.php:246 +#: pumpio.php:245 msgid "Authenticate your pump.io connection" msgstr "Uwierzytelnij swoje połączenie pump.io" -#: pumpio.php:250 +#: pumpio.php:252 +msgid "Pump.io servername (without \"http://\" or \"https://\" )" +msgstr "" + +#: pumpio.php:253 +msgid "Pump.io username (without the servername)" +msgstr "" + +#: pumpio.php:254 msgid "Import the remote timeline" msgstr "Zaimportuj zdalną oś czasu" #: pumpio.php:255 -msgid "Enable pump.io Post Addon" -msgstr "Włącz dodatek pump.io" +msgid "Enable Pump.io Post Addon" +msgstr "" -#: pumpio.php:260 -msgid "Post to pump.io by default" -msgstr "Opublikuj domyślnie w pump.io" +#: pumpio.php:256 +msgid "Post to Pump.io by default" +msgstr "" -#: pumpio.php:265 +#: pumpio.php:257 msgid "Should posts be public?" msgstr "Czy posty powinny być publiczne?" -#: pumpio.php:270 +#: pumpio.php:258 msgid "Mirror all public posts" msgstr "Odbij wszystkie publiczne posty" -#: pumpio.php:275 -msgid "Check to delete this preset" -msgstr "Zaznacz, aby usunąć to ustawienie wstępne" +#: pumpio.php:263 +msgid "Pump.io Import/Export/Mirror" +msgstr "Pump.io Import/Export/Mirror" -#: pumpio.php:285 -msgid "Save Settings" -msgstr "Zapisz ustawienia" - -#: pumpio.php:515 -msgid "Pump.io post failed. Queued for retry." -msgstr "Błąd Pump.io post. W kolejce do ponowienia." - -#: pumpio.php:587 -msgid "Pump.io like failed. Queued for retry." -msgstr "Błąd Pump.io. W kolejce do ponowienia." - -#: pumpio.php:875 +#: pumpio.php:920 msgid "status" msgstr "status" -#: pumpio.php:879 +#: pumpio.php:924 #, php-format msgid "%1$s likes %2$s's %3$s" msgstr "%1$slubi %2$s %3$s " diff --git a/pumpio/lang/pl/strings.php b/pumpio/lang/pl/strings.php index 8a019aa0..17f3aa82 100644 --- a/pumpio/lang/pl/strings.php +++ b/pumpio/lang/pl/strings.php @@ -10,18 +10,11 @@ $a->strings['Unable to register the client at the pump.io server \'%s\'.'] = 'Ni $a->strings['You are now authenticated to pumpio.'] = 'Jesteś teraz uwierzytelniony w trybie pumpio.'; $a->strings['return to the connector page'] = 'powrót do strony łączenia'; $a->strings['Post to pumpio'] = 'Prześlij do pumpio'; -$a->strings['Pump.io Import/Export/Mirror'] = 'Pump.io Import/Export/Mirror'; -$a->strings['pump.io username (without the servername)'] = 'nazwa użytkownika pump.io (bez nazwy serwera)'; -$a->strings['pump.io servername (without "http://" or "https://" )'] = 'pump.io nazwa_serwera (bez "http://" lub "https://")'; +$a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Authenticate your pump.io connection'] = 'Uwierzytelnij swoje połączenie pump.io'; $a->strings['Import the remote timeline'] = 'Zaimportuj zdalną oś czasu'; -$a->strings['Enable pump.io Post Addon'] = 'Włącz dodatek pump.io'; -$a->strings['Post to pump.io by default'] = 'Opublikuj domyślnie w pump.io'; $a->strings['Should posts be public?'] = 'Czy posty powinny być publiczne?'; $a->strings['Mirror all public posts'] = 'Odbij wszystkie publiczne posty'; -$a->strings['Check to delete this preset'] = 'Zaznacz, aby usunąć to ustawienie wstępne'; -$a->strings['Save Settings'] = 'Zapisz ustawienia'; -$a->strings['Pump.io post failed. Queued for retry.'] = 'Błąd Pump.io post. W kolejce do ponowienia.'; -$a->strings['Pump.io like failed. Queued for retry.'] = 'Błąd Pump.io. W kolejce do ponowienia.'; +$a->strings['Pump.io Import/Export/Mirror'] = 'Pump.io Import/Export/Mirror'; $a->strings['status'] = 'status'; $a->strings['%1$s likes %2$s\'s %3$s'] = '%1$slubi %2$s %3$s '; diff --git a/qcomment/lang/pl/messages.po b/qcomment/lang/pl/messages.po index 7574a2c3..ced34ed9 100644 --- a/qcomment/lang/pl/messages.po +++ b/qcomment/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-03-31 20:01+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2021-12-22 16:24+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,36 +19,28 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: qcomment.php:51 +#: qcomment.php:45 msgid ":-)" msgstr ":-)" -#: qcomment.php:51 +#: qcomment.php:45 msgid ":-(" msgstr ":-(" -#: qcomment.php:51 +#: qcomment.php:45 msgid "lol" msgstr "lol" -#: qcomment.php:54 -msgid "Quick Comment Settings" -msgstr "Ustawienia szybkiego komentowania" - -#: qcomment.php:56 +#: qcomment.php:49 msgid "" "Quick comments are found near comment boxes, sometimes hidden. Click them to" " provide simple replies." msgstr "Szybkie komentarze znajdują się w pobliżu pól komentarza, czasami są ukryte. Kliknij je, aby zapewnić proste odpowiedzi." -#: qcomment.php:57 +#: qcomment.php:50 msgid "Enter quick comments, one per line" -msgstr "" +msgstr "Wprowadź szybkie komentarze, po jednym w wierszu" -#: qcomment.php:61 -msgid "Submit" -msgstr "Wyślij" - -#: qcomment.php:75 -msgid "Quick Comment settings saved." -msgstr "Zapisano szybkie ustawienia komentarzy." +#: qcomment.php:55 +msgid "Quick Comment Settings" +msgstr "Ustawienia szybkiego komentowania" diff --git a/qcomment/lang/pl/strings.php b/qcomment/lang/pl/strings.php index 19fcad9e..d2cdf52c 100644 --- a/qcomment/lang/pl/strings.php +++ b/qcomment/lang/pl/strings.php @@ -8,7 +8,6 @@ function string_plural_select_pl($n){ $a->strings[':-)'] = ':-)'; $a->strings[':-('] = ':-('; $a->strings['lol'] = 'lol'; -$a->strings['Quick Comment Settings'] = 'Ustawienia szybkiego komentowania'; $a->strings['Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies.'] = 'Szybkie komentarze znajdują się w pobliżu pól komentarza, czasami są ukryte. Kliknij je, aby zapewnić proste odpowiedzi.'; -$a->strings['Submit'] = 'Wyślij'; -$a->strings['Quick Comment settings saved.'] = 'Zapisano szybkie ustawienia komentarzy.'; +$a->strings['Enter quick comments, one per line'] = 'Wprowadź szybkie komentarze, po jednym w wierszu'; +$a->strings['Quick Comment Settings'] = 'Ustawienia szybkiego komentowania'; diff --git a/randplace/lang/pl/messages.po b/randplace/lang/pl/messages.po index 14e59112..cfb6a3d4 100644 --- a/randplace/lang/pl/messages.po +++ b/randplace/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-03-31 19:11+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2021-12-22 17:21+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,14 +19,10 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: randplace.php:169 -msgid "Randplace Settings" -msgstr "Ustawienia Randplace" - -#: randplace.php:171 +#: randplace.php:161 msgid "Enable Randplace Addon" msgstr "Włącz dodatek Randplace" -#: randplace.php:177 -msgid "Submit" -msgstr "Wyślij" +#: randplace.php:166 +msgid "Randplace Settings" +msgstr "Ustawienia Randplace" diff --git a/randplace/lang/pl/strings.php b/randplace/lang/pl/strings.php index 42d38a06..73771c9a 100644 --- a/randplace/lang/pl/strings.php +++ b/randplace/lang/pl/strings.php @@ -5,6 +5,5 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Randplace Settings'] = 'Ustawienia Randplace'; $a->strings['Enable Randplace Addon'] = 'Włącz dodatek Randplace'; -$a->strings['Submit'] = 'Wyślij'; +$a->strings['Randplace Settings'] = 'Ustawienia Randplace'; diff --git a/rendertime/lang/pl/messages.po b/rendertime/lang/pl/messages.po index 8d7f8454..0af16640 100644 --- a/rendertime/lang/pl/messages.po +++ b/rendertime/lang/pl/messages.po @@ -5,14 +5,15 @@ # # Translators: # Joe Doe, 2021 +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-11-15 19:24+0000\n" -"Last-Translator: Joe Doe\n" +"POT-Creation-Date: 2021-12-12 22:09+0000\n" +"PO-Revision-Date: 2022-03-08 14:32+0000\n" +"Last-Translator: Piotr Strębski \n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,14 +21,36 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: rendertime.php:36 +#: rendertime.php:30 +msgid "Save Settings" +msgstr "Zapisz ustawienia" + +#: rendertime.php:31 +msgid "Show callstack" +msgstr "" + +#: rendertime.php:31 +msgid "" +"Show detailed performance measures in the callstack. When deactivated, only " +"the summary will be displayed." +msgstr "" + +#: rendertime.php:32 +msgid "Minimal time" +msgstr "" + +#: rendertime.php:32 +msgid "Minimal time that an activity needs to be listed in the callstack." +msgstr "" + +#: rendertime.php:57 #, php-format msgid "" "Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: " "%s, Total: %s" msgstr "Baza danych: %s/%s, Sieć: %s, Rendering: %s, Sesja: %s, I/O: %s, Inne: %s, Łacznie: %s" -#: rendertime.php:53 +#: rendertime.php:74 #, php-format msgid "Class-Init: %s, Boot: %s, Init: %s, Content: %s, Other: %s, Total: %s" msgstr "" diff --git a/rendertime/lang/pl/strings.php b/rendertime/lang/pl/strings.php index b8e9f3a8..668123fb 100644 --- a/rendertime/lang/pl/strings.php +++ b/rendertime/lang/pl/strings.php @@ -5,4 +5,5 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} +$a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: %s, Total: %s'] = 'Baza danych: %s/%s, Sieć: %s, Rendering: %s, Sesja: %s, I/O: %s, Inne: %s, Łacznie: %s'; diff --git a/securemail/lang/pl/messages.po b/securemail/lang/pl/messages.po index df52edf7..f5dd16c7 100644 --- a/securemail/lang/pl/messages.po +++ b/securemail/lang/pl/messages.po @@ -3,14 +3,17 @@ # This file is distributed under the same license as the Friendica securemail addon package. # # +# Translators: +# Waldemar Stoczkowski, 2018 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-11 21:14+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Waldemar Stoczkowski , 2018\n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2018-03-20 07:26+0000\n" +"Last-Translator: Waldemar Stoczkowski, 2018\n" "Language-Team: Polish (https://www.transifex.com/Friendica/teams/12172/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,38 +21,34 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: securemail.php:53 -msgid "\"Secure Mail\" Settings" -msgstr "Ustawienia \"Bezpieczna poczta\"" - -#: securemail.php:54 -msgid "Save Settings" -msgstr "Zapisz ustawienia" - -#: securemail.php:55 securemail.php:76 -msgid "Save and send test" -msgstr "Zapisz i wyślij test" - -#: securemail.php:56 +#: securemail.php:50 msgid "Enable Secure Mail" msgstr "Włącz bezpieczną pocztę" -#: securemail.php:57 +#: securemail.php:51 msgid "Public key" msgstr "Klucz publiczny" -#: securemail.php:57 +#: securemail.php:51 msgid "Your public PGP key, ascii armored format" msgstr "Twój publiczny klucz PGP, rekomendowany format ascii" -#: securemail.php:74 -msgid "Secure Mail Settings saved." -msgstr "Ustawienia bezpiecznej poczty zostały zapisane." +#: securemail.php:56 +msgid "\"Secure Mail\" Settings" +msgstr "Ustawienia \"Bezpieczna poczta\"" -#: securemail.php:111 +#: securemail.php:59 +msgid "Save Settings" +msgstr "Zapisz ustawienia" + +#: securemail.php:60 +msgid "Save and send test" +msgstr "Zapisz i wyślij test" + +#: securemail.php:93 msgid "Test email sent" msgstr "Wysłano testowy e-mail" -#: securemail.php:113 +#: securemail.php:95 msgid "There was an error sending the test email" msgstr "Wystąpił błąd podczas wysyłania e-maila testowego" diff --git a/securemail/lang/pl/strings.php b/securemail/lang/pl/strings.php index 90adbf31..7a5ad8b4 100644 --- a/securemail/lang/pl/strings.php +++ b/securemail/lang/pl/strings.php @@ -5,12 +5,11 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['"Secure Mail" Settings'] = 'Ustawienia "Bezpieczna poczta"'; -$a->strings['Save Settings'] = 'Zapisz ustawienia'; -$a->strings['Save and send test'] = 'Zapisz i wyślij test'; $a->strings['Enable Secure Mail'] = 'Włącz bezpieczną pocztę'; $a->strings['Public key'] = 'Klucz publiczny'; $a->strings['Your public PGP key, ascii armored format'] = 'Twój publiczny klucz PGP, rekomendowany format ascii'; -$a->strings['Secure Mail Settings saved.'] = 'Ustawienia bezpiecznej poczty zostały zapisane.'; +$a->strings['"Secure Mail" Settings'] = 'Ustawienia "Bezpieczna poczta"'; +$a->strings['Save Settings'] = 'Zapisz ustawienia'; +$a->strings['Save and send test'] = 'Zapisz i wyślij test'; $a->strings['Test email sent'] = 'Wysłano testowy e-mail'; $a->strings['There was an error sending the test email'] = 'Wystąpił błąd podczas wysyłania e-maila testowego'; diff --git a/showmore/lang/pl/messages.po b/showmore/lang/pl/messages.po index 39e66c54..4ce198f3 100644 --- a/showmore/lang/pl/messages.po +++ b/showmore/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 11:11-0400\n" -"PO-Revision-Date: 2018-08-04 11:01+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2021-12-22 15:27+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,26 +19,18 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: showmore.php:41 showmore.php:45 -msgid "\"Show more\" Settings" -msgstr "Ustawienia \"Pokaż więcej\"" - -#: showmore.php:50 +#: showmore.php:37 msgid "Enable Show More" msgstr "Włącz Pokaż więcej" -#: showmore.php:53 -msgid "Cutting posts after how much characters" -msgstr "Cięcie postów po ilości znaków" +#: showmore.php:38 +msgid "Cutting posts after how many characters" +msgstr "" -#: showmore.php:57 -msgid "Save Settings" -msgstr "Zapisz ustawienia" +#: showmore.php:43 +msgid "\"Show more\" Settings" +msgstr "Ustawienia \"Pokaż więcej\"" -#: showmore.php:74 -msgid "Show More Settings saved." -msgstr "Zapisano ustawienia Pokaż więcej." - -#: showmore.php:134 +#: showmore.php:119 msgid "show more" msgstr "pokaż więcej" diff --git a/showmore/lang/pl/strings.php b/showmore/lang/pl/strings.php index 980e94bb..d464809d 100644 --- a/showmore/lang/pl/strings.php +++ b/showmore/lang/pl/strings.php @@ -5,9 +5,6 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['"Show more" Settings'] = 'Ustawienia "Pokaż więcej"'; $a->strings['Enable Show More'] = 'Włącz Pokaż więcej'; -$a->strings['Cutting posts after how much characters'] = 'Cięcie postów po ilości znaków'; -$a->strings['Save Settings'] = 'Zapisz ustawienia'; -$a->strings['Show More Settings saved.'] = 'Zapisano ustawienia Pokaż więcej.'; +$a->strings['"Show more" Settings'] = 'Ustawienia "Pokaż więcej"'; $a->strings['show more'] = 'pokaż więcej'; diff --git a/smileybutton/lang/pl/messages.po b/smileybutton/lang/pl/messages.po index 467c5705..d0db1a1f 100644 --- a/smileybutton/lang/pl/messages.po +++ b/smileybutton/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-06-23 14:45+0200\n" "PO-Revision-Date: 2018-08-04 10:17+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"Last-Translator: Waldemar Stoczkowski\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/startpage/lang/pl/messages.po b/startpage/lang/pl/messages.po index f6c05c3a..3b57c265 100644 --- a/startpage/lang/pl/messages.po +++ b/startpage/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-04-18 20:55+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2021-12-22 15:27+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,18 +19,14 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: startpage.php:83 -msgid "Startpage Settings" -msgstr "Ustawienia strony startowej" - -#: startpage.php:85 +#: startpage.php:70 msgid "Home page to load after login - leave blank for profile wall" msgstr "Strona główna do załadowania po zalogowaniu - pozostaw puste pole dla strony profilowej" -#: startpage.php:88 -msgid "Examples: "network" or "notifications/system"" -msgstr "Przykłady: "network" lub "notifications/system" albo "profile/Nazwa profilu"" +#: startpage.php:70 +msgid "Examples: \"network\" or \"notifications/system\"" +msgstr "" -#: startpage.php:92 -msgid "Submit" -msgstr "Prześlij" +#: startpage.php:75 +msgid "Startpage" +msgstr "" diff --git a/startpage/lang/pl/strings.php b/startpage/lang/pl/strings.php index 2b29c7bc..9486d3c8 100644 --- a/startpage/lang/pl/strings.php +++ b/startpage/lang/pl/strings.php @@ -5,7 +5,4 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Startpage Settings'] = 'Ustawienia strony startowej'; $a->strings['Home page to load after login - leave blank for profile wall'] = 'Strona główna do załadowania po zalogowaniu - pozostaw puste pole dla strony profilowej'; -$a->strings['Examples: "network" or "notifications/system"'] = 'Przykłady: "network" lub "notifications/system" albo "profile/Nazwa profilu"'; -$a->strings['Submit'] = 'Prześlij'; diff --git a/statusnet/lang/pl/messages.po b/statusnet/lang/pl/messages.po index 2de973ed..dabd54d4 100644 --- a/statusnet/lang/pl/messages.po +++ b/statusnet/lang/pl/messages.po @@ -5,14 +5,14 @@ # # Translators: # TORminator , 2014 -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-27 07:21+0200\n" -"PO-Revision-Date: 2018-08-04 12:18+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2021-12-22 17:23+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,109 +20,30 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: statusnet.php:151 +#: statusnet.php:97 msgid "Post to GNU Social" msgstr "Opublikuj w GNU Social" -#: statusnet.php:196 +#: statusnet.php:148 msgid "" "Please contact your site administrator.
The provided API URL is not " "valid." msgstr "Skontaktuj się z administratorem witryny.
Podany adres URL interfejsu API jest nieprawidłowy." -#: statusnet.php:225 +#: statusnet.php:176 msgid "We could not contact the GNU Social API with the Path you entered." msgstr "Nie mogliśmy skontaktować się z GNU Social API z wprowadzoną ścieżką." -#: statusnet.php:259 -msgid "GNU Social settings updated." -msgstr "Zaktualizowano ustawienia społeczności GNU." - -#: statusnet.php:294 statusnet.php:298 -msgid "GNU Social Import/Export/Mirror" -msgstr "GNU Social Import/Export/Mirror" - -#: statusnet.php:313 -msgid "Globally Available GNU Social OAuthKeys" -msgstr "Globalnie dostępne GNU Social OAuthKeys" - -#: statusnet.php:314 -msgid "" -"There are preconfigured OAuth key pairs for some GNU Social servers " -"available. If you are using one of them, please use these credentials. If " -"not feel free to connect to any other GNU Social instance (see below)." -msgstr "Istnieją wstępnie skonfigurowane pary kluczy OAuth dla niektórych serwerów społecznościowych GNU. Jeśli używasz jednego z nich, użyj tych poświadczeń. Jeśli nie, możesz połączyć się z dowolną inną instancją społecznościową GNU (patrz poniżej)." - -#: statusnet.php:320 statusnet.php:337 statusnet.php:364 statusnet.php:371 -#: statusnet.php:416 statusnet.php:699 +#: statusnet.php:243 statusnet.php:656 msgid "Save Settings" msgstr "Zapisz ustawienia" -#: statusnet.php:322 -msgid "Provide your own OAuth Credentials" -msgstr "Podaj własne dane uwierzytelniające OAuth" +#: statusnet.php:255 +#, php-format +msgid "Currently connected to: %s" +msgstr "" -#: statusnet.php:323 -msgid "" -"No consumer key pair for GNU Social found. Register your Friendica Account " -"as an desktop client on your GNU Social account, copy the consumer key pair " -"here and enter the API base root.
Before you register your own OAuth " -"key pair ask the administrator if there is already a key pair for this " -"Friendica installation at your favorited GNU Social installation." -msgstr "Nie znaleziono pary kluczy konsumenta dla GNU Social. Zarejestruj swoje konto Friendica jako klienta komputerowego na koncie GNU Social, skopiuj tutaj parę kluczy konsumenta i wprowadź podstawową bazę interfejsu API.
Zanim zarejestrujesz swoją własną parę kluczy OAuth, zapytaj administratora, czy istnieje już para kluczy do instalacji tej aplikacji na stronie Twoja ulubiona instalacja społecznościowa GNU." - -#: statusnet.php:325 -msgid "OAuth Consumer Key" -msgstr "Klucz klienta OAuth" - -#: statusnet.php:328 -msgid "OAuth Consumer Secret" -msgstr "Tajny klucz klienta OAuth" - -#: statusnet.php:331 statusnet.php:679 statusnet.php:691 -msgid "Base API Path (remember the trailing /)" -msgstr "Podstawowa ścieżka interfejsu API (pamiętaj na końcu /)" - -#: statusnet.php:356 -msgid "" -"To connect to your GNU Social account click the button below to get a " -"security code from GNU Social which you have to copy into the input box " -"below and submit the form. Only your public posts will be " -"posted to GNU Social." -msgstr "Aby połączyć się z kontem społecznościowym GNU, kliknij przycisk poniżej, aby uzyskać kod bezpieczeństwa z GNU Social, który musisz skopiować do poniższego pola wprowadzania i przesłać formularz. Tylko twoje publiczne posty będą publikowane w GNU Social." - -#: statusnet.php:357 -msgid "Log in with GNU Social" -msgstr "Zaloguj się za pomocą GNU Social" - -#: statusnet.php:359 -msgid "Copy the security code from GNU Social here" -msgstr "Skopiuj tutaj kod bezpieczeństwa z GNU Social" - -#: statusnet.php:365 -msgid "Cancel Connection Process" -msgstr "Anuluj proces połączenia" - -#: statusnet.php:367 -msgid "Current GNU Social API is" -msgstr "Obecne API GNU Social to" - -#: statusnet.php:368 -msgid "Cancel GNU Social Connection" -msgstr "Anuluj GNU Social Connection" - -#: statusnet.php:379 -msgid "Currently connected to: " -msgstr "Obecnie podłączony do:" - -#: statusnet.php:380 -msgid "" -"If enabled all your public postings can be posted to the " -"associated GNU Social account. You can choose to do so by default (here) or " -"for every posting separately in the posting options when writing the entry." -msgstr "Jeśli ta opcja jest włączona, wszystkie twoje publiczne ogłoszenia mogą zostać wysłane na powiązane konto społecznościowe GNU. Możesz to zrobić domyślnie (tutaj) lub dla każdego komentarza osobno w opcjach komentarza podczas pisania wpisu." - -#: statusnet.php:382 +#: statusnet.php:260 msgid "" "Note: Due your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " @@ -130,47 +51,126 @@ msgid "" "informing the visitor that the access to your profile has been restricted." msgstr "Uwaga: Ze względu na ustawienia prywatności (Ukryć szczegóły Twojego profilu, przed nieznanymi użytkownikami?) link potencjalnie zawarty w publicznych komentarzach do Twitter doprowadzi użytkownika do pustej strony informowania odwiedzających, że dostęp do Twojego profilu został ograniczony." -#: statusnet.php:385 -msgid "Allow posting to GNU Social" -msgstr "Zezwalaj na publikowanie w GNU Social" - -#: statusnet.php:388 -msgid "Send public postings to GNU Social by default" -msgstr "Domyślnie wysyłaj publiczne ogłoszenia do GNU Social" - -#: statusnet.php:392 -msgid "" -"Mirror all posts from GNU Social that are no replies or repeated messages" -msgstr "Odblokuj wszystkie posty z GNU Social, które nie są odpowiedziami lub powtarzającymi się wiadomościami" - -#: statusnet.php:398 -msgid "Import the remote timeline" -msgstr "Zaimportuj na zdalnej oś czasu" - -#: statusnet.php:402 -msgid "Disabled" -msgstr "Wyłącz" - -#: statusnet.php:403 -msgid "Full Timeline" -msgstr "Pełna oś czasu" - -#: statusnet.php:404 -msgid "Only Mentions" -msgstr "Tylko wzmianki" - -#: statusnet.php:413 +#: statusnet.php:263 msgid "Clear OAuth configuration" msgstr "Wyczyść konfigurację OAuth" -#: statusnet.php:690 +#: statusnet.php:275 +msgid "Cancel GNU Social Connection" +msgstr "Anuluj GNU Social Connection" + +#: statusnet.php:283 +msgid "Globally Available GNU Social OAuthKeys" +msgstr "Globalnie dostępne GNU Social OAuthKeys" + +#: statusnet.php:284 +msgid "" +"There are preconfigured OAuth key pairs for some GNU Social servers " +"available. If you are using one of them, please use these credentials. If " +"not feel free to connect to any other GNU Social instance (see below)." +msgstr "Istnieją wstępnie skonfigurowane pary kluczy OAuth dla niektórych serwerów społecznościowych GNU. Jeśli używasz jednego z nich, użyj tych poświadczeń. Jeśli nie, możesz połączyć się z dowolną inną instancją społecznościową GNU (patrz poniżej)." + +#: statusnet.php:285 +msgid "Provide your own OAuth Credentials" +msgstr "Podaj własne dane uwierzytelniające OAuth" + +#: statusnet.php:286 +msgid "" +"No consumer key pair for GNU Social found. Register your Friendica Account " +"as a desktop application on your GNU Social account, copy the consumer key " +"pair here and enter the API base root.
Before you register your own " +"OAuth key pair ask the administrator if there is already a key pair for this" +" Friendica installation at your favorite GNU Social installation." +msgstr "" + +#: statusnet.php:287 +msgid "" +"To connect to your GNU Social account click the button below to get a " +"security code from GNU Social which you have to copy into the input box " +"below and submit the form. Only your public posts will be " +"posted to GNU Social." +msgstr "Aby połączyć się z kontem społecznościowym GNU, kliknij przycisk poniżej, aby uzyskać kod bezpieczeństwa z GNU Social, który musisz skopiować do poniższego pola wprowadzania i przesłać formularz. Tylko twoje publiczne posty będą publikowane w GNU Social." + +#: statusnet.php:288 +msgid "Log in with GNU Social" +msgstr "Zaloguj się za pomocą GNU Social" + +#: statusnet.php:289 +msgid "Cancel Connection Process" +msgstr "Anuluj proces połączenia" + +#: statusnet.php:290 +#, php-format +msgid "Current GNU Social API is: %s" +msgstr "" + +#: statusnet.php:307 +msgid "OAuth Consumer Key" +msgstr "Klucz klienta OAuth" + +#: statusnet.php:308 +msgid "OAuth Consumer Secret" +msgstr "Tajny klucz klienta OAuth" + +#: statusnet.php:310 statusnet.php:636 statusnet.php:648 +msgid "Base API Path (remember the trailing /)" +msgstr "Podstawowa ścieżka interfejsu API (pamiętaj na końcu /)" + +#: statusnet.php:311 +msgid "Copy the security code from GNU Social here" +msgstr "Skopiuj tutaj kod bezpieczeństwa z GNU Social" + +#: statusnet.php:313 +msgid "Allow posting to GNU Social" +msgstr "Zezwalaj na publikowanie w GNU Social" + +#: statusnet.php:313 +msgid "" +"If enabled all your public postings can be posted to the " +"associated GNU Social account. You can choose to do so by default (here) or " +"for every posting separately in the posting options when writing the entry." +msgstr "Jeśli ta opcja jest włączona, wszystkie twoje publiczne ogłoszenia mogą zostać wysłane na powiązane konto społecznościowe GNU. Możesz to zrobić domyślnie (tutaj) lub dla każdego komentarza osobno w opcjach komentarza podczas pisania wpisu." + +#: statusnet.php:314 +msgid "Post to GNU Social by default" +msgstr "" + +#: statusnet.php:315 +msgid "Mirror all public posts" +msgstr "" + +#: statusnet.php:316 +msgid "Automatically create contacts" +msgstr "" + +#: statusnet.php:317 +msgid "Import the remote timeline" +msgstr "Zaimportuj na zdalnej oś czasu" + +#: statusnet.php:318 +msgid "Disabled" +msgstr "Wyłącz" + +#: statusnet.php:319 +msgid "Full Timeline" +msgstr "Pełna oś czasu" + +#: statusnet.php:320 +msgid "Only Mentions" +msgstr "Tylko wzmianki" + +#: statusnet.php:326 +msgid "GNU Social Import/Export/Mirror" +msgstr "GNU Social Import/Export/Mirror" + +#: statusnet.php:647 msgid "Site name" msgstr "Nazwa strony" -#: statusnet.php:692 +#: statusnet.php:649 msgid "Consumer Secret" msgstr "Tajny klucz klienta" -#: statusnet.php:693 +#: statusnet.php:650 msgid "Consumer Key" msgstr "Klucz klienta" diff --git a/statusnet/lang/pl/strings.php b/statusnet/lang/pl/strings.php index aca5e5ff..701f130c 100644 --- a/statusnet/lang/pl/strings.php +++ b/statusnet/lang/pl/strings.php @@ -8,33 +8,27 @@ function string_plural_select_pl($n){ $a->strings['Post to GNU Social'] = 'Opublikuj w GNU Social'; $a->strings['Please contact your site administrator.
The provided API URL is not valid.'] = 'Skontaktuj się z administratorem witryny.
Podany adres URL interfejsu API jest nieprawidłowy.'; $a->strings['We could not contact the GNU Social API with the Path you entered.'] = 'Nie mogliśmy skontaktować się z GNU Social API z wprowadzoną ścieżką.'; -$a->strings['GNU Social settings updated.'] = 'Zaktualizowano ustawienia społeczności GNU.'; -$a->strings['GNU Social Import/Export/Mirror'] = 'GNU Social Import/Export/Mirror'; +$a->strings['Save Settings'] = 'Zapisz ustawienia'; +$a->strings['Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to GNU Social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Uwaga: Ze względu na ustawienia prywatności (Ukryć szczegóły Twojego profilu, przed nieznanymi użytkownikami?) link potencjalnie zawarty w publicznych komentarzach do Twitter doprowadzi użytkownika do pustej strony informowania odwiedzających, że dostęp do Twojego profilu został ograniczony.'; +$a->strings['Clear OAuth configuration'] = 'Wyczyść konfigurację OAuth'; +$a->strings['Cancel GNU Social Connection'] = 'Anuluj GNU Social Connection'; $a->strings['Globally Available GNU Social OAuthKeys'] = 'Globalnie dostępne GNU Social OAuthKeys'; $a->strings['There are preconfigured OAuth key pairs for some GNU Social servers available. If you are using one of them, please use these credentials. If not feel free to connect to any other GNU Social instance (see below).'] = 'Istnieją wstępnie skonfigurowane pary kluczy OAuth dla niektórych serwerów społecznościowych GNU. Jeśli używasz jednego z nich, użyj tych poświadczeń. Jeśli nie, możesz połączyć się z dowolną inną instancją społecznościową GNU (patrz poniżej).'; -$a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Provide your own OAuth Credentials'] = 'Podaj własne dane uwierzytelniające OAuth'; -$a->strings['No consumer key pair for GNU Social found. Register your Friendica Account as an desktop client on your GNU Social account, copy the consumer key pair here and enter the API base root.
Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendica installation at your favorited GNU Social installation.'] = 'Nie znaleziono pary kluczy konsumenta dla GNU Social. Zarejestruj swoje konto Friendica jako klienta komputerowego na koncie GNU Social, skopiuj tutaj parę kluczy konsumenta i wprowadź podstawową bazę interfejsu API.
Zanim zarejestrujesz swoją własną parę kluczy OAuth, zapytaj administratora, czy istnieje już para kluczy do instalacji tej aplikacji na stronie Twoja ulubiona instalacja społecznościowa GNU.'; +$a->strings['To connect to your GNU Social account click the button below to get a security code from GNU Social which you have to copy into the input box below and submit the form. Only your public posts will be posted to GNU Social.'] = 'Aby połączyć się z kontem społecznościowym GNU, kliknij przycisk poniżej, aby uzyskać kod bezpieczeństwa z GNU Social, który musisz skopiować do poniższego pola wprowadzania i przesłać formularz. Tylko twoje publiczne posty będą publikowane w GNU Social.'; +$a->strings['Log in with GNU Social'] = 'Zaloguj się za pomocą GNU Social'; +$a->strings['Cancel Connection Process'] = 'Anuluj proces połączenia'; $a->strings['OAuth Consumer Key'] = 'Klucz klienta OAuth'; $a->strings['OAuth Consumer Secret'] = 'Tajny klucz klienta OAuth'; $a->strings['Base API Path (remember the trailing /)'] = 'Podstawowa ścieżka interfejsu API (pamiętaj na końcu /)'; -$a->strings['To connect to your GNU Social account click the button below to get a security code from GNU Social which you have to copy into the input box below and submit the form. Only your public posts will be posted to GNU Social.'] = 'Aby połączyć się z kontem społecznościowym GNU, kliknij przycisk poniżej, aby uzyskać kod bezpieczeństwa z GNU Social, który musisz skopiować do poniższego pola wprowadzania i przesłać formularz. Tylko twoje publiczne posty będą publikowane w GNU Social.'; -$a->strings['Log in with GNU Social'] = 'Zaloguj się za pomocą GNU Social'; $a->strings['Copy the security code from GNU Social here'] = 'Skopiuj tutaj kod bezpieczeństwa z GNU Social'; -$a->strings['Cancel Connection Process'] = 'Anuluj proces połączenia'; -$a->strings['Current GNU Social API is'] = 'Obecne API GNU Social to'; -$a->strings['Cancel GNU Social Connection'] = 'Anuluj GNU Social Connection'; -$a->strings['Currently connected to: '] = 'Obecnie podłączony do:'; -$a->strings['If enabled all your public postings can be posted to the associated GNU Social account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Jeśli ta opcja jest włączona, wszystkie twoje publiczne ogłoszenia mogą zostać wysłane na powiązane konto społecznościowe GNU. Możesz to zrobić domyślnie (tutaj) lub dla każdego komentarza osobno w opcjach komentarza podczas pisania wpisu.'; -$a->strings['Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to GNU Social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Uwaga: Ze względu na ustawienia prywatności (Ukryć szczegóły Twojego profilu, przed nieznanymi użytkownikami?) link potencjalnie zawarty w publicznych komentarzach do Twitter doprowadzi użytkownika do pustej strony informowania odwiedzających, że dostęp do Twojego profilu został ograniczony.'; $a->strings['Allow posting to GNU Social'] = 'Zezwalaj na publikowanie w GNU Social'; -$a->strings['Send public postings to GNU Social by default'] = 'Domyślnie wysyłaj publiczne ogłoszenia do GNU Social'; -$a->strings['Mirror all posts from GNU Social that are no replies or repeated messages'] = 'Odblokuj wszystkie posty z GNU Social, które nie są odpowiedziami lub powtarzającymi się wiadomościami'; +$a->strings['If enabled all your public postings can be posted to the associated GNU Social account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Jeśli ta opcja jest włączona, wszystkie twoje publiczne ogłoszenia mogą zostać wysłane na powiązane konto społecznościowe GNU. Możesz to zrobić domyślnie (tutaj) lub dla każdego komentarza osobno w opcjach komentarza podczas pisania wpisu.'; $a->strings['Import the remote timeline'] = 'Zaimportuj na zdalnej oś czasu'; $a->strings['Disabled'] = 'Wyłącz'; $a->strings['Full Timeline'] = 'Pełna oś czasu'; $a->strings['Only Mentions'] = 'Tylko wzmianki'; -$a->strings['Clear OAuth configuration'] = 'Wyczyść konfigurację OAuth'; +$a->strings['GNU Social Import/Export/Mirror'] = 'GNU Social Import/Export/Mirror'; $a->strings['Site name'] = 'Nazwa strony'; $a->strings['Consumer Secret'] = 'Tajny klucz klienta'; $a->strings['Consumer Key'] = 'Klucz klienta'; diff --git a/superblock/lang/pl/messages.po b/superblock/lang/pl/messages.po index b6a9e17e..5c405334 100644 --- a/superblock/lang/pl/messages.po +++ b/superblock/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-08-17 10:25+0200\n" -"PO-Revision-Date: 2018-08-20 13:45+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2021-12-22 16:24+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,26 +19,14 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: superblock.php:47 superblock.php:51 +#: superblock.php:35 +msgid "Comma separated profile URLs to block" +msgstr "" + +#: superblock.php:40 msgid "Superblock" msgstr "Superblock" -#: superblock.php:54 -msgid "Comma separated profile URLS to block" -msgstr "Oddzielone przecinkami adresy URL profilu do zablokowania" - -#: superblock.php:58 -msgid "Save Settings" -msgstr "Zapisz ustawienia" - -#: superblock.php:71 -msgid "SUPERBLOCK Settings saved." -msgstr "SUPERBLOCK Zapisano ustawienia." - -#: superblock.php:144 +#: superblock.php:129 msgid "Block Completely" msgstr "Całkowicie zablokuj" - -#: superblock.php:165 -msgid "superblock settings updated" -msgstr "zaktualizowano ustawienia superblock" diff --git a/superblock/lang/pl/strings.php b/superblock/lang/pl/strings.php index 1ad7843b..dbe8a72d 100644 --- a/superblock/lang/pl/strings.php +++ b/superblock/lang/pl/strings.php @@ -6,8 +6,4 @@ function string_plural_select_pl($n){ if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} $a->strings['Superblock'] = 'Superblock'; -$a->strings['Comma separated profile URLS to block'] = 'Oddzielone przecinkami adresy URL profilu do zablokowania'; -$a->strings['Save Settings'] = 'Zapisz ustawienia'; -$a->strings['SUPERBLOCK Settings saved.'] = 'SUPERBLOCK Zapisano ustawienia.'; $a->strings['Block Completely'] = 'Całkowicie zablokuj'; -$a->strings['superblock settings updated'] = 'zaktualizowano ustawienia superblock'; diff --git a/testdrive/lang/pl/messages.po b/testdrive/lang/pl/messages.po index a89fd792..1d948200 100644 --- a/testdrive/lang/pl/messages.po +++ b/testdrive/lang/pl/messages.po @@ -5,14 +5,14 @@ # # Translators: # TORminator , 2014 -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-08-23 17:30+0200\n" -"PO-Revision-Date: 2018-03-30 19:49+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2021-02-01 18:21+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,23 +20,23 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: testdrive.php:67 +#: testdrive.php:64 msgid "Administrator" msgstr "Administrator" -#: testdrive.php:94 +#: testdrive.php:89 #, php-format msgid "Your account on %s will expire in a few days." msgstr "Twoje konto w %s wygaśnie w ciągu kilku dni." -#: testdrive.php:95 +#: testdrive.php:90 msgid "Your Friendica test account is about to expire." msgstr "Twoje testowe konto Friendica za chwilę wygaśnie." -#: testdrive.php:96 +#: testdrive.php:91 #, php-format msgid "" "Hi %1$s,\n" "\n" -"Your test account on %2$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at http://friendica.com." -msgstr " Cześć %1$s,\n \n Twoje konto testowe wygaśnie %2$s za mniej niż pięć dni. Mamy nadzieję, że podoba Ci się ta jazda testowa i wykorzystaj tę okazję, by znaleźć stałą stronę Friendica do zintegrowanej komunikacji społecznej. Lista serwisów publicznych jest dostępna na stronie %s/siteinfo. Aby uzyskać więcej informacji na temat konfigurowania własnego serwera Friendica, odwiedź stronę projektu Friendica pod adresem http://friendica.com." +"Your test account on %2$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at https://friendi.ca." +msgstr "" diff --git a/testdrive/lang/pl/strings.php b/testdrive/lang/pl/strings.php index 98c4bca5..10a10028 100644 --- a/testdrive/lang/pl/strings.php +++ b/testdrive/lang/pl/strings.php @@ -8,8 +8,3 @@ function string_plural_select_pl($n){ $a->strings['Administrator'] = 'Administrator'; $a->strings['Your account on %s will expire in a few days.'] = 'Twoje konto w %s wygaśnie w ciągu kilku dni.'; $a->strings['Your Friendica test account is about to expire.'] = 'Twoje testowe konto Friendica za chwilę wygaśnie.'; -$a->strings['Hi %1$s, - -Your test account on %2$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at http://friendica.com.'] = ' Cześć %1$s, - - Twoje konto testowe wygaśnie %2$s za mniej niż pięć dni. Mamy nadzieję, że podoba Ci się ta jazda testowa i wykorzystaj tę okazję, by znaleźć stałą stronę Friendica do zintegrowanej komunikacji społecznej. Lista serwisów publicznych jest dostępna na stronie %s/siteinfo. Aby uzyskać więcej informacji na temat konfigurowania własnego serwera Friendica, odwiedź stronę projektu Friendica pod adresem http://friendica.com.'; diff --git a/tictac/lang/pl/messages.po b/tictac/lang/pl/messages.po index 8646aca0..6c777469 100644 --- a/tictac/lang/pl/messages.po +++ b/tictac/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" "PO-Revision-Date: 2018-08-05 15:52+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"Last-Translator: Waldemar Stoczkowski\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,56 +19,56 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: tictac.php:20 +#: tictac.php:16 msgid "Three Dimensional Tic-Tac-Toe" msgstr "Trójwymiarowe Kółko i Krzyżyk" -#: tictac.php:53 +#: tictac.php:49 msgid "3D Tic-Tac-Toe" msgstr "3D Kółko i Krzyżyk" -#: tictac.php:58 +#: tictac.php:54 msgid "New game" msgstr "Nowa gra" -#: tictac.php:59 +#: tictac.php:55 msgid "New game with handicap" msgstr "Nowa gra z handicapem" -#: tictac.php:60 +#: tictac.php:56 msgid "" "Three dimensional tic-tac-toe is just like the traditional game except that " "it is played on multiple levels simultaneously. " msgstr "Zasady gry w Trójwymiarowe Kółko i Krzyżyk są takie same jak w tradycyjnej grze, z tym wyjątkiem, że gra się na wielu poziomach jednocześnie." -#: tictac.php:61 +#: tictac.php:57 msgid "" "In this case there are three levels. You win by getting three in a row on " "any level, as well as up, down, and diagonally across the different levels." msgstr "W tym przypadku istnieją trzy poziomy. Wygrywasz, jeśli ustawisz trzy znaki w rzędzie na dowolnym poziomie, a także w górę, w dół i po przekątnej na różnych poziomach." -#: tictac.php:63 +#: tictac.php:59 msgid "" "The handicap game disables the center position on the middle level because " "the player claiming this square often has an unfair advantage." msgstr "Gra z handicapem wyłącza środkową pozycję na środkowym poziomie, ponieważ gracz zdobywający ten kwadrat często ma nieuczciwą przewagę." -#: tictac.php:182 +#: tictac.php:178 msgid "You go first..." msgstr "Rozpocznij pierwszy..." -#: tictac.php:187 +#: tictac.php:183 msgid "I'm going first this time..." msgstr "Tym razem rozpoczynam pierwszy..." -#: tictac.php:193 +#: tictac.php:189 msgid "You won!" msgstr "Wygrałeś!" -#: tictac.php:199 tictac.php:224 +#: tictac.php:195 tictac.php:220 msgid "\"Cat\" game!" msgstr "Gra \"Kot\"!" -#: tictac.php:222 +#: tictac.php:218 msgid "I won!" msgstr "Wygrałem!" diff --git a/tumblr/lang/pl/messages.po b/tumblr/lang/pl/messages.po index 962fce46..5bdf233d 100644 --- a/tumblr/lang/pl/messages.po +++ b/tumblr/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Piotr Strębski , 2022 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2018-03-31 20:13+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2022-03-08 14:31+0000\n" +"Last-Translator: Piotr Strębski \n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,46 +20,54 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: tumblr.php:34 +#: tumblr.php:39 msgid "Permission denied." msgstr "Odmowa dostępu." -#: tumblr.php:144 +#: tumblr.php:69 +msgid "Save Settings" +msgstr "Zapisz ustawienia" + +#: tumblr.php:71 +msgid "Consumer Key" +msgstr "" + +#: tumblr.php:72 +msgid "Consumer Secret" +msgstr "" + +#: tumblr.php:177 msgid "You are now authenticated to tumblr." msgstr "Jesteś teraz uwierzytelniony na tumblr." -#: tumblr.php:145 +#: tumblr.php:178 msgid "return to the connector page" msgstr "powrót do strony łącza" -#: tumblr.php:158 +#: tumblr.php:194 msgid "Post to Tumblr" msgstr "Opublikuj w Tumblr" -#: tumblr.php:185 -msgid "Tumblr Post Settings" -msgstr "Ustawienia Postów Tumblr" - -#: tumblr.php:188 -msgid "(Re-)Authenticate your tumblr page" -msgstr "(Re-) Uwierzytelnij swoją stronę tumblr" - -#: tumblr.php:192 -msgid "Enable Tumblr Post Addon" -msgstr "Włącz dodatek Tumblr" - -#: tumblr.php:197 -msgid "Post to Tumblr by default" -msgstr "Wyślij domyślnie do Tumblr" - -#: tumblr.php:217 +#: tumblr.php:225 msgid "Post to page:" msgstr "Opublikuj na stronie:" -#: tumblr.php:228 +#: tumblr.php:231 +msgid "(Re-)Authenticate your tumblr page" +msgstr "(Re-) Uwierzytelnij swoją stronę tumblr" + +#: tumblr.php:232 msgid "You are not authenticated to tumblr" msgstr "Nie jesteś uwierzytelniony w tumblr" -#: tumblr.php:233 -msgid "Submit" -msgstr "Wyślij" +#: tumblr.php:237 +msgid "Enable Tumblr Post Addon" +msgstr "Włącz dodatek Tumblr" + +#: tumblr.php:238 +msgid "Post to Tumblr by default" +msgstr "Wyślij domyślnie do Tumblr" + +#: tumblr.php:244 +msgid "Tumblr Export" +msgstr "" diff --git a/tumblr/lang/pl/strings.php b/tumblr/lang/pl/strings.php index 3201ae05..4bc81af2 100644 --- a/tumblr/lang/pl/strings.php +++ b/tumblr/lang/pl/strings.php @@ -6,13 +6,12 @@ function string_plural_select_pl($n){ if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} $a->strings['Permission denied.'] = 'Odmowa dostępu.'; +$a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['You are now authenticated to tumblr.'] = 'Jesteś teraz uwierzytelniony na tumblr.'; $a->strings['return to the connector page'] = 'powrót do strony łącza'; $a->strings['Post to Tumblr'] = 'Opublikuj w Tumblr'; -$a->strings['Tumblr Post Settings'] = 'Ustawienia Postów Tumblr'; +$a->strings['Post to page:'] = 'Opublikuj na stronie:'; $a->strings['(Re-)Authenticate your tumblr page'] = '(Re-) Uwierzytelnij swoją stronę tumblr'; +$a->strings['You are not authenticated to tumblr'] = 'Nie jesteś uwierzytelniony w tumblr'; $a->strings['Enable Tumblr Post Addon'] = 'Włącz dodatek Tumblr'; $a->strings['Post to Tumblr by default'] = 'Wyślij domyślnie do Tumblr'; -$a->strings['Post to page:'] = 'Opublikuj na stronie:'; -$a->strings['You are not authenticated to tumblr'] = 'Nie jesteś uwierzytelniony w tumblr'; -$a->strings['Submit'] = 'Wyślij'; diff --git a/twitter/lang/pl/messages.po b/twitter/lang/pl/messages.po index 5da1b6bd..aa11402f 100644 --- a/twitter/lang/pl/messages.po +++ b/twitter/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Piotr Strębski , 2022 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-02 10:25+0700\n" -"PO-Revision-Date: 2018-08-04 11:52+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-27 10:25-0500\n" +"PO-Revision-Date: 2022-03-08 14:26+0000\n" +"Last-Translator: Piotr Strębski \n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,31 +20,23 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: twitter.php:195 +#: twitter.php:213 msgid "Post to Twitter" msgstr "Opublikuj na Twitterze" -#: twitter.php:236 +#: twitter.php:258 msgid "" "You submitted an empty PIN, please Sign In with Twitter again to get a new " "one." msgstr "Przesłałeś pusty kod PIN, zaloguj się ponownie na Twitterze, aby otrzymać nowy." -#: twitter.php:263 -msgid "Twitter settings updated." -msgstr "Zaktualizowano ustawienia Twitter." - -#: twitter.php:293 twitter.php:297 -msgid "Twitter Import/Export/Mirror" -msgstr "Twitter Import/Export/Mirror" - -#: twitter.php:304 +#: twitter.php:321 msgid "" "No consumer key pair for Twitter found. Please contact your site " "administrator." msgstr "Nie znaleziono pary kluczy konsumpcyjnych dla Twittera. Skontaktuj się z administratorem witryny." -#: twitter.php:316 +#: twitter.php:334 msgid "" "At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " @@ -52,38 +45,26 @@ msgid "" " be posted to Twitter." msgstr "W tej instancji Friendica dodatek do Twittera został włączony, ale jeszcze nie podłączyłeś swojego konta do konta na Twitterze. Aby to zrobić, kliknij przycisk poniżej, aby uzyskać numer PIN z Twittera, który musisz skopiować do poniższego pola wprowadzania i przesłać formularz. Tylko Twoje publiczne posty będą publikowane na Twitterze." -#: twitter.php:317 +#: twitter.php:335 msgid "Log in with Twitter" msgstr "Zaloguj się przez Twitter" -#: twitter.php:319 +#: twitter.php:337 msgid "Copy the PIN from Twitter here" msgstr "Skopiuj tutaj kod PIN z Twittera" -#: twitter.php:324 twitter.php:366 twitter.php:636 -msgid "Save Settings" -msgstr "Zapisz ustawienia" +#: twitter.php:345 twitter.php:388 +msgid "An error occured: " +msgstr "Wystąpił błąd:" -#: twitter.php:336 -msgid "Currently connected to: " -msgstr "Obecnie podłączony do:" - -#: twitter.php:337 -msgid "Disconnect" -msgstr "Rozłączony" - -#: twitter.php:347 -msgid "Allow posting to Twitter" -msgstr "Zezwalaj na publikowanie na Twitterze" - -#: twitter.php:347 +#: twitter.php:359 +#, php-format msgid "" -"If enabled all your public postings can be posted to the " -"associated Twitter account. You can choose to do so by default (here) or for" -" every posting separately in the posting options when writing the entry." -msgstr "Jeśli ta opcja jest włączona, wszystkie twoje publiczne ogłoszenia mogą być wysyłane na powiązane konto Twitter. Możesz to zrobić domyślnie (tutaj) lub dla każdego komentarza osobno w opcjach komentarza podczas pisania wpisu." +"Currently connected to: %1$s" +msgstr "" -#: twitter.php:350 +#: twitter.php:365 msgid "" "Note: Due to your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " @@ -91,44 +72,76 @@ msgid "" "the visitor that the access to your profile has been restricted." msgstr "Uwaga: Ze względu na ustawienia prywatności (Ukryć szczegóły Twojego profilu, przed nieznanymi użytkownikami?) link potencjalnie zawarty w publicznych komentarzach do Twitter doprowadzi użytkownika do pustej strony informowania odwiedzających, że dostęp do Twojego profilu został ograniczony." -#: twitter.php:353 +#: twitter.php:372 +msgid "Invalid Twitter info" +msgstr "" + +#: twitter.php:373 +msgid "Disconnect" +msgstr "Rozłączony" + +#: twitter.php:378 +msgid "Allow posting to Twitter" +msgstr "Zezwalaj na publikowanie na Twitterze" + +#: twitter.php:378 +msgid "" +"If enabled all your public postings can be posted to the " +"associated Twitter account. You can choose to do so by default (here) or for" +" every posting separately in the posting options when writing the entry." +msgstr "Jeśli ta opcja jest włączona, wszystkie twoje publiczne ogłoszenia mogą być wysyłane na powiązane konto Twitter. Możesz to zrobić domyślnie (tutaj) lub dla każdego komentarza osobno w opcjach komentarza podczas pisania wpisu." + +#: twitter.php:379 msgid "Send public postings to Twitter by default" msgstr "Wyślij domyślnie komentarze publiczne do Twitter" -#: twitter.php:356 +#: twitter.php:380 msgid "Mirror all posts from twitter that are no replies" msgstr "Lustro wszystkich postów Twitter, które są bez odpowiedzi" -#: twitter.php:359 +#: twitter.php:381 msgid "Import the remote timeline" msgstr "Zaimportuj zdalną oś czasu" -#: twitter.php:362 +#: twitter.php:382 msgid "Automatically create contacts" msgstr "Automatycznie twórz kontakty" -#: twitter.php:362 +#: twitter.php:382 msgid "" "This will automatically create a contact in Friendica as soon as you receive" " a message from an existing contact via the Twitter network. If you do not " "enable this, you need to manually add those Twitter contacts in Friendica " -"from whom you would like to see posts here. However if enabled, you cannot " -"merely remove a twitter contact from the Friendica contact list, as it will " -"recreate this contact when they post again." -msgstr "Spowoduje to automatyczne utworzenie kontaktu w witrynie Friendica, gdy tylko otrzymasz wiadomość od istniejącego kontaktu za pośrednictwem sieci Twitter. Jeśli nie włączysz tego, musisz ręcznie dodać te kontakty z serwisu Twitter w serwisie Friendica, od których chcesz widzieć posty. Jeśli jednak jest włączona, nie można po prostu usunąć kontaktu z Twittera z listy kontaktów Friendica, ponieważ odtworzony zostanie ten kontakt po ponownym wysłaniu." +"from whom you would like to see posts here." +msgstr "" -#: twitter.php:614 -msgid "Twitter post failed. Queued for retry." -msgstr "Nieudany wpis na Twitterze. W kolejce do ponowienia." +#: twitter.php:395 +msgid "Twitter Import/Export/Mirror" +msgstr "Twitter Import/Export/Mirror" -#: twitter.php:628 -msgid "Settings updated." -msgstr "Ustawienia zaktualizowane." +#: twitter.php:547 +msgid "" +"Please connect a Twitter account in your Social Network settings to import " +"Twitter posts." +msgstr "" -#: twitter.php:638 +#: twitter.php:554 +msgid "Twitter post not found." +msgstr "" + +#: twitter.php:914 +msgid "Save Settings" +msgstr "Zapisz ustawienia" + +#: twitter.php:916 msgid "Consumer key" msgstr "Klucz klienta" -#: twitter.php:639 +#: twitter.php:917 msgid "Consumer secret" msgstr "Tajny klucz klienta" + +#: twitter.php:1113 +#, php-format +msgid "%s on Twitter" +msgstr "" diff --git a/twitter/lang/pl/strings.php b/twitter/lang/pl/strings.php index b1f76417..3eb5a26a 100644 --- a/twitter/lang/pl/strings.php +++ b/twitter/lang/pl/strings.php @@ -7,24 +7,20 @@ function string_plural_select_pl($n){ }} $a->strings['Post to Twitter'] = 'Opublikuj na Twitterze'; $a->strings['You submitted an empty PIN, please Sign In with Twitter again to get a new one.'] = 'Przesłałeś pusty kod PIN, zaloguj się ponownie na Twitterze, aby otrzymać nowy.'; -$a->strings['Twitter settings updated.'] = 'Zaktualizowano ustawienia Twitter.'; -$a->strings['Twitter Import/Export/Mirror'] = 'Twitter Import/Export/Mirror'; $a->strings['No consumer key pair for Twitter found. Please contact your site administrator.'] = 'Nie znaleziono pary kluczy konsumpcyjnych dla Twittera. Skontaktuj się z administratorem witryny.'; $a->strings['At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.'] = 'W tej instancji Friendica dodatek do Twittera został włączony, ale jeszcze nie podłączyłeś swojego konta do konta na Twitterze. Aby to zrobić, kliknij przycisk poniżej, aby uzyskać numer PIN z Twittera, który musisz skopiować do poniższego pola wprowadzania i przesłać formularz. Tylko Twoje publiczne posty będą publikowane na Twitterze.'; $a->strings['Log in with Twitter'] = 'Zaloguj się przez Twitter'; $a->strings['Copy the PIN from Twitter here'] = 'Skopiuj tutaj kod PIN z Twittera'; -$a->strings['Save Settings'] = 'Zapisz ustawienia'; -$a->strings['Currently connected to: '] = 'Obecnie podłączony do:'; +$a->strings['An error occured: '] = 'Wystąpił błąd:'; +$a->strings['Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Uwaga: Ze względu na ustawienia prywatności (Ukryć szczegóły Twojego profilu, przed nieznanymi użytkownikami?) link potencjalnie zawarty w publicznych komentarzach do Twitter doprowadzi użytkownika do pustej strony informowania odwiedzających, że dostęp do Twojego profilu został ograniczony.'; $a->strings['Disconnect'] = 'Rozłączony'; $a->strings['Allow posting to Twitter'] = 'Zezwalaj na publikowanie na Twitterze'; $a->strings['If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Jeśli ta opcja jest włączona, wszystkie twoje publiczne ogłoszenia mogą być wysyłane na powiązane konto Twitter. Możesz to zrobić domyślnie (tutaj) lub dla każdego komentarza osobno w opcjach komentarza podczas pisania wpisu.'; -$a->strings['Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Uwaga: Ze względu na ustawienia prywatności (Ukryć szczegóły Twojego profilu, przed nieznanymi użytkownikami?) link potencjalnie zawarty w publicznych komentarzach do Twitter doprowadzi użytkownika do pustej strony informowania odwiedzających, że dostęp do Twojego profilu został ograniczony.'; $a->strings['Send public postings to Twitter by default'] = 'Wyślij domyślnie komentarze publiczne do Twitter'; $a->strings['Mirror all posts from twitter that are no replies'] = 'Lustro wszystkich postów Twitter, które są bez odpowiedzi'; $a->strings['Import the remote timeline'] = 'Zaimportuj zdalną oś czasu'; $a->strings['Automatically create contacts'] = 'Automatycznie twórz kontakty'; -$a->strings['This will automatically create a contact in Friendica as soon as you receive a message from an existing contact via the Twitter network. If you do not enable this, you need to manually add those Twitter contacts in Friendica from whom you would like to see posts here. However if enabled, you cannot merely remove a twitter contact from the Friendica contact list, as it will recreate this contact when they post again.'] = 'Spowoduje to automatyczne utworzenie kontaktu w witrynie Friendica, gdy tylko otrzymasz wiadomość od istniejącego kontaktu za pośrednictwem sieci Twitter. Jeśli nie włączysz tego, musisz ręcznie dodać te kontakty z serwisu Twitter w serwisie Friendica, od których chcesz widzieć posty. Jeśli jednak jest włączona, nie można po prostu usunąć kontaktu z Twittera z listy kontaktów Friendica, ponieważ odtworzony zostanie ten kontakt po ponownym wysłaniu.'; -$a->strings['Twitter post failed. Queued for retry.'] = 'Nieudany wpis na Twitterze. W kolejce do ponowienia.'; -$a->strings['Settings updated.'] = 'Ustawienia zaktualizowane.'; +$a->strings['Twitter Import/Export/Mirror'] = 'Twitter Import/Export/Mirror'; +$a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Consumer key'] = 'Klucz klienta'; $a->strings['Consumer secret'] = 'Tajny klucz klienta'; diff --git a/viewsrc/lang/pl/messages.po b/viewsrc/lang/pl/messages.po index 27829b1b..9640d869 100644 --- a/viewsrc/lang/pl/messages.po +++ b/viewsrc/lang/pl/messages.po @@ -3,14 +3,17 @@ # This file is distributed under the same license as the Friendica viewsrc addon package. # # +# Translators: +# Waldemar Stoczkowski, 2018 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Waldemar Stoczkowski , 2018\n" +"POT-Creation-Date: 2021-02-01 18:16+0100\n" +"PO-Revision-Date: 2018-03-20 07:26+0000\n" +"Last-Translator: Waldemar Stoczkowski, 2018\n" "Language-Team: Polish (https://www.transifex.com/Friendica/teams/12172/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,6 +21,6 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: viewsrc.php:39 +#: viewsrc.php:49 msgid "View Source" msgstr "Pokaż źródło" diff --git a/webrtc/lang/pl/messages.po b/webrtc/lang/pl/messages.po index b32a43ce..766d2b3c 100644 --- a/webrtc/lang/pl/messages.po +++ b/webrtc/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-23 14:45+0200\n" -"PO-Revision-Date: 2018-08-05 15:55+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-02-01 18:16+0100\n" +"PO-Revision-Date: 2021-02-01 20:17+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,40 +19,36 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: webrtc.php:20 +#: webrtc.php:19 msgid "WebRTC Videochat" msgstr "Videochat WebRTC" -#: webrtc.php:26 +#: webrtc.php:25 msgid "Save Settings" msgstr "Zapisz ustawienia" -#: webrtc.php:27 +#: webrtc.php:26 msgid "WebRTC Base URL" msgstr "Podstawowy adres URL WebRTC" -#: webrtc.php:27 +#: webrtc.php:26 msgid "" "Page your users will create a WebRTC chat room on. For example you could use" " https://live.mayfirst.org ." msgstr "Strona Twoich użytkowników utworzą pokój czatu WebRTC. Na przykład możesz użyć https://live.mayfirst.org." -#: webrtc.php:33 -msgid "Settings updated." -msgstr "Zaktualizowano ustawienia." - -#: webrtc.php:47 +#: webrtc.php:45 msgid "Video Chat" msgstr "Czat wideo" -#: webrtc.php:48 +#: webrtc.php:46 msgid "" "WebRTC is a video and audio conferencing tool that works with Firefox " "(version 21 and above) and Chrome/Chromium (version 25 and above). Just " "create a new chat room and send the link to someone you want to chat with." msgstr "WebRTC to narzędzie do wideokonferencji, które działa z przeglądarką Firefox (wersja 21 i nowsze) oraz Chrome/Chromium (wersja 25 i nowsze). Utwórz nowy pokój czatu i wyślij link do kogoś, z kim chcesz porozmawiać." -#: webrtc.php:50 +#: webrtc.php:48 msgid "" "Please contact your friendica admin and send a reminder to configure the " "WebRTC addon." diff --git a/webrtc/lang/pl/strings.php b/webrtc/lang/pl/strings.php index a1410a71..f77fb873 100644 --- a/webrtc/lang/pl/strings.php +++ b/webrtc/lang/pl/strings.php @@ -9,7 +9,6 @@ $a->strings['WebRTC Videochat'] = 'Videochat WebRTC'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['WebRTC Base URL'] = 'Podstawowy adres URL WebRTC'; $a->strings['Page your users will create a WebRTC chat room on. For example you could use https://live.mayfirst.org .'] = 'Strona Twoich użytkowników utworzą pokój czatu WebRTC. Na przykład możesz użyć https://live.mayfirst.org.'; -$a->strings['Settings updated.'] = 'Zaktualizowano ustawienia.'; $a->strings['Video Chat'] = 'Czat wideo'; $a->strings['WebRTC is a video and audio conferencing tool that works with Firefox (version 21 and above) and Chrome/Chromium (version 25 and above). Just create a new chat room and send the link to someone you want to chat with.'] = 'WebRTC to narzędzie do wideokonferencji, które działa z przeglądarką Firefox (wersja 21 i nowsze) oraz Chrome/Chromium (wersja 25 i nowsze). Utwórz nowy pokój czatu i wyślij link do kogoś, z kim chcesz porozmawiać.'; $a->strings['Please contact your friendica admin and send a reminder to configure the WebRTC addon.'] = 'Skontaktuj się z administratorem friendica i wyślij przypomnienie, aby skonfigurować dodatek WebRTC.'; diff --git a/windowsphonepush/lang/pl/messages.po b/windowsphonepush/lang/pl/messages.po new file mode 100644 index 00000000..44418a06 --- /dev/null +++ b/windowsphonepush/lang/pl/messages.po @@ -0,0 +1,36 @@ +# ADDON windowsphonepush +# Copyright (C) +# This file is distributed under the same license as the Friendica windowsphonepush addon package. +# +# +# Translators: +# Waldemar Stoczkowski, 2018 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2021-12-22 16:18+0000\n" +"Last-Translator: Transifex Bot <>\n" +"Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +#: windowsphonepush.php:102 +msgid "Enable WindowsPhonePush Addon" +msgstr "Włącz dodatek WindowsPhonePush" + +#: windowsphonepush.php:103 +msgid "Push text of new item" +msgstr "Naciśnij tekst nowego elementu" + +#: windowsphonepush.php:104 +msgid "Device URL" +msgstr "" + +#: windowsphonepush.php:109 +msgid "WindowsPhonePush Settings" +msgstr "Ustawienia WindowsPhonePush" diff --git a/windowsphonepush/lang/pl/strings.php b/windowsphonepush/lang/pl/strings.php new file mode 100644 index 00000000..4e1afa10 --- /dev/null +++ b/windowsphonepush/lang/pl/strings.php @@ -0,0 +1,10 @@ +=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } +}} +$a->strings['Enable WindowsPhonePush Addon'] = 'Włącz dodatek WindowsPhonePush'; +$a->strings['Push text of new item'] = 'Naciśnij tekst nowego elementu'; +$a->strings['WindowsPhonePush Settings'] = 'Ustawienia WindowsPhonePush'; diff --git a/wppost/lang/pl/messages.po b/wppost/lang/pl/messages.po index 7bc14923..a3b050c9 100644 --- a/wppost/lang/pl/messages.po +++ b/wppost/lang/pl/messages.po @@ -4,14 +4,14 @@ # # # Translators: -# Waldemar Stoczkowski , 2018 +# Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-01-24 21:06+0100\n" -"PO-Revision-Date: 2018-08-04 11:18+0000\n" -"Last-Translator: Waldemar Stoczkowski \n" +"POT-Creation-Date: 2021-11-21 19:18-0500\n" +"PO-Revision-Date: 2021-12-22 16:15+0000\n" +"Last-Translator: Transifex Bot <>\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,56 +19,52 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: wppost.php:42 +#: wppost.php:41 msgid "Post to Wordpress" msgstr "Opublikuj w Wordpress" -#: wppost.php:80 wppost.php:84 -msgid "Wordpress Export" -msgstr "Eksport do Wordpress" +#: wppost.php:65 +msgid "Enable Wordpress Post Addon" +msgstr "" -#: wppost.php:87 -msgid "Enable WordPress Post Addon" -msgstr "Włącz dodatek Dodaj post do WordPress" +#: wppost.php:66 +msgid "Wordpress username" +msgstr "" -#: wppost.php:92 -msgid "WordPress username" -msgstr "Nazwa użytkownika WordPress" +#: wppost.php:67 +msgid "Wordpress password" +msgstr "" -#: wppost.php:97 -msgid "WordPress password" -msgstr "Hasło WordPress" - -#: wppost.php:102 +#: wppost.php:68 msgid "WordPress API URL" msgstr "WordPress API URL" -#: wppost.php:107 -msgid "Post to WordPress by default" -msgstr "Wyślij domyślnie do WordPress" +#: wppost.php:69 +msgid "Post to Wordpress by default" +msgstr "" -#: wppost.php:112 +#: wppost.php:70 msgid "Provide a backlink to the Friendica post" msgstr "Podaj zwrotny link do posta Friendica" -#: wppost.php:116 +#: wppost.php:71 msgid "" "Text for the backlink, e.g. Read the original post and comment stream on " "Friendica." msgstr "Tekst linku zwrotnego, np. Przeczytaj oryginalny post i strumień komentarzy na stronie Friendica." -#: wppost.php:121 +#: wppost.php:72 msgid "Don't post messages that are too short" msgstr "Nie publikuj zbyt krótkich wiadomości" -#: wppost.php:127 -msgid "Save Settings" -msgstr "Zapisz ustawienia" +#: wppost.php:77 +msgid "Wordpress Export" +msgstr "Eksport do Wordpress" -#: wppost.php:206 +#: wppost.php:182 msgid "Read the orig­i­nal post and com­ment stream on Friendica" msgstr "Przeczytaj oryginalny post i strumień komentarzy na stronie Friendica" -#: wppost.php:269 +#: wppost.php:240 msgid "Post from Friendica" msgstr "Post z Friendica" diff --git a/wppost/lang/pl/strings.php b/wppost/lang/pl/strings.php index d83a9650..bc5b3083 100644 --- a/wppost/lang/pl/strings.php +++ b/wppost/lang/pl/strings.php @@ -6,15 +6,10 @@ function string_plural_select_pl($n){ if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} $a->strings['Post to Wordpress'] = 'Opublikuj w Wordpress'; -$a->strings['Wordpress Export'] = 'Eksport do Wordpress'; -$a->strings['Enable WordPress Post Addon'] = 'Włącz dodatek Dodaj post do WordPress'; -$a->strings['WordPress username'] = 'Nazwa użytkownika WordPress'; -$a->strings['WordPress password'] = 'Hasło WordPress'; $a->strings['WordPress API URL'] = 'WordPress API URL'; -$a->strings['Post to WordPress by default'] = 'Wyślij domyślnie do WordPress'; $a->strings['Provide a backlink to the Friendica post'] = 'Podaj zwrotny link do posta Friendica'; $a->strings['Text for the backlink, e.g. Read the original post and comment stream on Friendica.'] = 'Tekst linku zwrotnego, np. Przeczytaj oryginalny post i strumień komentarzy na stronie Friendica.'; $a->strings['Don\'t post messages that are too short'] = 'Nie publikuj zbyt krótkich wiadomości'; -$a->strings['Save Settings'] = 'Zapisz ustawienia'; +$a->strings['Wordpress Export'] = 'Eksport do Wordpress'; $a->strings['Read the orig­i­nal post and com­ment stream on Friendica'] = 'Przeczytaj oryginalny post i strumień komentarzy na stronie Friendica'; $a->strings['Post from Friendica'] = 'Post z Friendica'; From 4778cc4be7fa7d6bb84c2cd38fb82eea3c26e6cc Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Thu, 17 Mar 2022 19:09:32 +0100 Subject: [PATCH 002/677] PL translation updates THX strebski --- catavatar/lang/pl/messages.po | 7 ++++--- catavatar/lang/pl/strings.php | 2 ++ diaspora/lang/pl/messages.po | 15 ++++++++------- diaspora/lang/pl/strings.php | 5 +++++ forumdirectory/lang/pl/messages.po | 7 ++++--- forumdirectory/lang/pl/strings.php | 1 + geonames/lang/pl/messages.po | 7 ++++--- geonames/lang/pl/strings.php | 1 + ifttt/lang/pl/messages.po | 9 +++++---- ifttt/lang/pl/strings.php | 3 +++ ijpost/lang/pl/messages.po | 11 ++++++----- ijpost/lang/pl/strings.php | 5 +++-- js_upload/lang/pl/messages.po | 13 +++++++------ js_upload/lang/pl/strings.php | 5 ++++- libravatar/lang/pl/messages.po | 8 ++++---- libravatar/lang/pl/strings.php | 2 ++ newmemberwidget/lang/pl/messages.po | 17 +++++++++-------- newmemberwidget/lang/pl/strings.php | 11 ++++++----- openstreetmap/lang/pl/messages.po | 21 +++++++++++---------- openstreetmap/lang/pl/strings.php | 9 ++++++++- public_server/lang/pl/messages.po | 8 ++++---- public_server/lang/pl/strings.php | 5 +++-- testdrive/lang/pl/messages.po | 7 ++++--- testdrive/lang/pl/strings.php | 5 +++++ tumblr/lang/pl/messages.po | 10 +++++----- tumblr/lang/pl/strings.php | 3 +++ 26 files changed, 121 insertions(+), 76 deletions(-) diff --git a/catavatar/lang/pl/messages.po b/catavatar/lang/pl/messages.po index b5642a47..5bcf50b3 100644 --- a/catavatar/lang/pl/messages.po +++ b/catavatar/lang/pl/messages.po @@ -5,6 +5,7 @@ # # Translators: # Waldemar Stoczkowski, 2018 +# Piotr Strębski , 2022 # #, fuzzy msgid "" @@ -13,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:14-0500\n" "PO-Revision-Date: 2018-04-07 05:23+0000\n" -"Last-Translator: Waldemar Stoczkowski, 2018\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (https://www.transifex.com/Friendica/teams/12172/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,7 +24,7 @@ msgstr "" #: catavatar.php:48 msgid "Set default profile avatar or randomize the cat." -msgstr "" +msgstr "Ustaw domyślny awatar profilu lub użyj losowego kota." #: catavatar.php:53 msgid "Cat Avatar Settings" @@ -35,7 +36,7 @@ msgstr "Użyj kota jako awatara" #: catavatar.php:57 msgid "Another random Cat!" -msgstr "" +msgstr "Inny losowy kot!" #: catavatar.php:58 msgid "Reset to email Cat" diff --git a/catavatar/lang/pl/strings.php b/catavatar/lang/pl/strings.php index 531ffe14..cb15c046 100644 --- a/catavatar/lang/pl/strings.php +++ b/catavatar/lang/pl/strings.php @@ -5,8 +5,10 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} +$a->strings['Set default profile avatar or randomize the cat.'] = 'Ustaw domyślny awatar profilu lub użyj losowego kota.'; $a->strings['Cat Avatar Settings'] = 'Ustawienia Kot Avatar'; $a->strings['Use Cat as Avatar'] = 'Użyj kota jako awatara'; +$a->strings['Another random Cat!'] = 'Inny losowy kot!'; $a->strings['Reset to email Cat'] = 'Resetuj Kota na e-mail'; $a->strings['The cat hadn\'t found itself.'] = 'Kot się nie znalazł.'; $a->strings['There was an error, the cat ran away.'] = 'Wystąpił błąd, kot uciekł.'; diff --git a/diaspora/lang/pl/messages.po b/diaspora/lang/pl/messages.po index 1f0b0786..943a0422 100644 --- a/diaspora/lang/pl/messages.po +++ b/diaspora/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018,2020 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:17-0500\n" -"PO-Revision-Date: 2021-12-22 15:27+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-22 11:39+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -28,7 +29,7 @@ msgstr "Napisz do Diaspory" msgid "" "Please remember: You can always be reached from Diaspora with your Friendica" " handle %s. " -msgstr "" +msgstr "Pamiętaj: Zawsze można do Ciebie dotrzeć z Diaspory za pomocą uchwytu Friendica %s. " #: diaspora.php:68 msgid "" @@ -41,7 +42,7 @@ msgstr "Ten łącznik jest przeznaczony do tego, gdy nadal chcesz korzystać ze msgid "" "However, it is preferred that you tell your Diaspora contacts the new handle" " %s instead." -msgstr "" +msgstr "Jednak zaleca się, aby zamiast tego poinformować swoją Diasporę o kontakt z nowym uchwytem %s." #: diaspora.php:79 msgid "All aspects" @@ -53,7 +54,7 @@ msgstr "Publiczny" #: diaspora.php:86 msgid "Post to aspect:" -msgstr "" +msgstr "Napisz do aspektu:" #: diaspora.php:87 #, php-format @@ -64,7 +65,7 @@ msgstr "Połączony ze swoim kontem Diaspora %s" msgid "" "Can't login to your Diaspora account. Please check handle (in the format " "user@domain.tld) and password." -msgstr "" +msgstr "Nie można zalogować się na Twoje konto w Diasporze. Sprawdź uchwyt (w formacie użytkownik@domena.tld) i hasło." #: diaspora.php:97 msgid "Information" @@ -80,7 +81,7 @@ msgstr "Włącz dodatek Diaspora" #: diaspora.php:105 msgid "Diaspora handle" -msgstr "" +msgstr "Uchwyt Diaspory" #: diaspora.php:106 msgid "Diaspora password" diff --git a/diaspora/lang/pl/strings.php b/diaspora/lang/pl/strings.php index 54b1f519..7e15915b 100644 --- a/diaspora/lang/pl/strings.php +++ b/diaspora/lang/pl/strings.php @@ -6,13 +6,18 @@ function string_plural_select_pl($n){ if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} $a->strings['Post to Diaspora'] = 'Napisz do Diaspory'; +$a->strings['Please remember: You can always be reached from Diaspora with your Friendica handle %s. '] = 'Pamiętaj: Zawsze można do Ciebie dotrzeć z Diaspory za pomocą uchwytu Friendica %s. '; $a->strings['This connector is only meant if you still want to use your old Diaspora account for some time. '] = 'Ten łącznik jest przeznaczony do tego, gdy nadal chcesz korzystać ze starego konta Diaspora przez jakiś czas.'; +$a->strings['However, it is preferred that you tell your Diaspora contacts the new handle %s instead.'] = 'Jednak zaleca się, aby zamiast tego poinformować swoją Diasporę o kontakt z nowym uchwytem %s.'; $a->strings['All aspects'] = 'Wszystkie aspekty'; $a->strings['Public'] = 'Publiczny'; +$a->strings['Post to aspect:'] = 'Napisz do aspektu:'; $a->strings['Connected with your Diaspora account %s'] = 'Połączony ze swoim kontem Diaspora %s'; +$a->strings['Can\'t login to your Diaspora account. Please check handle (in the format user@domain.tld) and password.'] = 'Nie można zalogować się na Twoje konto w Diasporze. Sprawdź uchwyt (w formacie użytkownik@domena.tld) i hasło.'; $a->strings['Information'] = 'Informacja'; $a->strings['Error'] = 'Błąd'; $a->strings['Enable Diaspora Post Addon'] = 'Włącz dodatek Diaspora'; +$a->strings['Diaspora handle'] = 'Uchwyt Diaspory'; $a->strings['Diaspora password'] = 'Hasło Diaspora'; $a->strings['Privacy notice: Your Diaspora password will be stored unencrypted to authenticate you with your Diaspora pod. This means your Friendica node administrator can have access to it.'] = 'Informacja o ochronie prywatności: Twoje hasło Diaspora będzie przechowywane w postaci niezaszyfrowanej w celu uwierzytelnienia użytkownika za pomocą Diaspora. Oznacza to, że administrator węzła Friendica może mieć do niego dostęp.'; $a->strings['Post to Diaspora by default'] = 'Wyślij domyślnie do Diaspory'; diff --git a/forumdirectory/lang/pl/messages.po b/forumdirectory/lang/pl/messages.po index 892432a2..49226ac0 100644 --- a/forumdirectory/lang/pl/messages.po +++ b/forumdirectory/lang/pl/messages.po @@ -5,14 +5,15 @@ # # Translators: # TORminator , 2015 +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-01 19:21+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-22 12:31+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -42,7 +43,7 @@ msgstr "Znajdź na tej stronie" #: forumdirectory.php:135 msgid "Results for:" -msgstr "" +msgstr "Wyniki dla:" #: forumdirectory.php:139 msgid "Find" diff --git a/forumdirectory/lang/pl/strings.php b/forumdirectory/lang/pl/strings.php index b353550c..9bf60bd7 100644 --- a/forumdirectory/lang/pl/strings.php +++ b/forumdirectory/lang/pl/strings.php @@ -10,4 +10,5 @@ $a->strings['Public access denied.'] = 'Odmowa dostępu publicznego.'; $a->strings['No entries (some entries may be hidden).'] = 'Brak wpisów (niektóre wpisy mogą być ukryte).'; $a->strings['Global Directory'] = 'Globalny katalog'; $a->strings['Find on this site'] = 'Znajdź na tej stronie'; +$a->strings['Results for:'] = 'Wyniki dla:'; $a->strings['Find'] = 'Szukaj'; diff --git a/geonames/lang/pl/messages.po b/geonames/lang/pl/messages.po index 8e54e60b..b0f9f4f6 100644 --- a/geonames/lang/pl/messages.po +++ b/geonames/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:14-0500\n" -"PO-Revision-Date: 2021-12-22 17:23+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-23 08:27+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,7 +24,7 @@ msgstr "" msgid "" "Replace numerical coordinates by the nearest populated location name in your" " posts." -msgstr "" +msgstr "Zastąp w swoich wpisach współrzędne numeryczne nazwą najbliższej zaludnionej lokalizacji." #: geonames.php:136 msgid "Enable Geonames Addon" diff --git a/geonames/lang/pl/strings.php b/geonames/lang/pl/strings.php index 3ad19016..2690516f 100644 --- a/geonames/lang/pl/strings.php +++ b/geonames/lang/pl/strings.php @@ -5,5 +5,6 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} +$a->strings['Replace numerical coordinates by the nearest populated location name in your posts.'] = 'Zastąp w swoich wpisach współrzędne numeryczne nazwą najbliższej zaludnionej lokalizacji.'; $a->strings['Enable Geonames Addon'] = 'Włącz dodatek Geonames'; $a->strings['Geonames Settings'] = 'Ustawienia Geonames'; diff --git a/ifttt/lang/pl/messages.po b/ifttt/lang/pl/messages.po index b1cb5307..08ddf24b 100644 --- a/ifttt/lang/pl/messages.po +++ b/ifttt/lang/pl/messages.po @@ -5,6 +5,7 @@ # # Translators: # Waldemar Stoczkowski, 2018 +# Piotr Strębski , 2022 # #, fuzzy msgid "" @@ -13,7 +14,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:17-0500\n" "PO-Revision-Date: 2017-11-27 10:37+0000\n" -"Last-Translator: Waldemar Stoczkowski, 2018\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (https://www.transifex.com/Friendica/teams/12172/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -35,15 +36,15 @@ msgstr "" #: ifttt.php:53 msgid "URL" -msgstr "" +msgstr "URL" #: ifttt.php:54 msgid "Method" -msgstr "" +msgstr "Metoda" #: ifttt.php:55 msgid "Content Type" -msgstr "" +msgstr "Rodzaj treści" #: ifttt.php:56 msgid "Body for \"new status message\"" diff --git a/ifttt/lang/pl/strings.php b/ifttt/lang/pl/strings.php index a1b2ef03..1ef99909 100644 --- a/ifttt/lang/pl/strings.php +++ b/ifttt/lang/pl/strings.php @@ -6,6 +6,9 @@ function string_plural_select_pl($n){ if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} $a->strings['Create an account at IFTTT. Create three Facebook recipes that are connected with Maker (In the form "if Facebook then Maker") with the following parameters:'] = 'Utwórz konto na IFTTT. Utwórz trzy przepisy na Facebooku, które są powiązane z Maker (W formie "jeśli Facebook następnie Maker") z następujących parametrów:'; +$a->strings['URL'] = 'URL'; +$a->strings['Method'] = 'Metoda'; +$a->strings['Content Type'] = 'Rodzaj treści'; $a->strings['Body for "new status message"'] = 'Treść dla "nowy status wiadomości"'; $a->strings['Body for "new photo upload"'] = 'Treść dla "nowe przesyłanie zdjęć"'; $a->strings['Body for "new link post"'] = 'Treść dla "nowe łącza postu"'; diff --git a/ijpost/lang/pl/messages.po b/ijpost/lang/pl/messages.po index f2c1160b..e7b08fcc 100644 --- a/ijpost/lang/pl/messages.po +++ b/ijpost/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:17-0500\n" -"PO-Revision-Date: 2021-12-22 16:19+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-23 08:37+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,7 +22,7 @@ msgstr "" #: ijpost.php:42 msgid "Post to Insanejournal" -msgstr "Opublikuj w Insanejournal" +msgstr "Opublikuj w InsaneJournal" #: ijpost.php:61 msgid "Enable InsaneJournal Post Addon" @@ -29,7 +30,7 @@ msgstr "Włącz dodatek InsaneJournal" #: ijpost.php:62 msgid "InsaneJournal username" -msgstr "nazwa użytkownika InsaneJournal" +msgstr "Nazwa użytkownika InsaneJournal" #: ijpost.php:63 msgid "InsaneJournal password" @@ -41,4 +42,4 @@ msgstr "Wyślij domyślnie do InsaneJournal" #: ijpost.php:69 msgid "InsaneJournal Export" -msgstr "" +msgstr "Eksportuj InsaneJournal" diff --git a/ijpost/lang/pl/strings.php b/ijpost/lang/pl/strings.php index c6d61235..56cfb7da 100644 --- a/ijpost/lang/pl/strings.php +++ b/ijpost/lang/pl/strings.php @@ -5,8 +5,9 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Post to Insanejournal'] = 'Opublikuj w Insanejournal'; +$a->strings['Post to Insanejournal'] = 'Opublikuj w InsaneJournal'; $a->strings['Enable InsaneJournal Post Addon'] = 'Włącz dodatek InsaneJournal'; -$a->strings['InsaneJournal username'] = 'nazwa użytkownika InsaneJournal'; +$a->strings['InsaneJournal username'] = 'Nazwa użytkownika InsaneJournal'; $a->strings['InsaneJournal password'] = 'Hasło InsaneJournal'; $a->strings['Post to InsaneJournal by default'] = 'Wyślij domyślnie do InsaneJournal'; +$a->strings['InsaneJournal Export'] = 'Eksportuj InsaneJournal'; diff --git a/js_upload/lang/pl/messages.po b/js_upload/lang/pl/messages.po index 81f33176..534b43c2 100644 --- a/js_upload/lang/pl/messages.po +++ b/js_upload/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-23 23:53-0400\n" -"PO-Revision-Date: 2021-04-26 08:29+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-23 08:46+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,11 +22,11 @@ msgstr "" #: js_upload.php:34 msgid "Select files for upload" -msgstr "" +msgstr "Wybierz pliki do przesłania" #: js_upload.php:35 msgid "Drop files here to upload" -msgstr "Aby przesłać pliki upuść tutaj" +msgstr "Upuść tutaj pliki do przesłania" #: js_upload.php:36 msgid "Cancel" @@ -46,12 +47,12 @@ msgstr "Przesłany plik jest pusty" #: js_upload.php:233 #, php-format msgid "Image exceeds size limit of %s" -msgstr "" +msgstr "Obraz przekracza limit rozmiaru wynoszący %s" #: js_upload.php:245 #, php-format msgid "File has an invalid extension, it should be one of %s." -msgstr "" +msgstr "Plik ma nieprawidłowe rozszerzenie, powinno być jednym z: %s." #: js_upload.php:256 msgid "Upload was cancelled, or server error encountered" diff --git a/js_upload/lang/pl/strings.php b/js_upload/lang/pl/strings.php index 198dd605..367b4b6b 100644 --- a/js_upload/lang/pl/strings.php +++ b/js_upload/lang/pl/strings.php @@ -5,9 +5,12 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Drop files here to upload'] = 'Aby przesłać pliki upuść tutaj'; +$a->strings['Select files for upload'] = 'Wybierz pliki do przesłania'; +$a->strings['Drop files here to upload'] = 'Upuść tutaj pliki do przesłania'; $a->strings['Cancel'] = 'Anuluj'; $a->strings['Failed'] = 'Nie powiodło się'; $a->strings['No files were uploaded.'] = 'Żadne pliki nie zostały przesłane.'; $a->strings['Uploaded file is empty'] = 'Przesłany plik jest pusty'; +$a->strings['Image exceeds size limit of %s'] = 'Obraz przekracza limit rozmiaru wynoszący %s'; +$a->strings['File has an invalid extension, it should be one of %s.'] = 'Plik ma nieprawidłowe rozszerzenie, powinno być jednym z: %s.'; $a->strings['Upload was cancelled, or server error encountered'] = 'Przesyłanie zostało anulowane lub wystąpił błąd serwera'; diff --git a/libravatar/lang/pl/messages.po b/libravatar/lang/pl/messages.po index 014636fa..1dd94030 100644 --- a/libravatar/lang/pl/messages.po +++ b/libravatar/lang/pl/messages.po @@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2022-03-08 14:31+0000\n" -"Last-Translator: Piotr Strębski \n" +"PO-Revision-Date: 2014-06-23 09:49+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -42,11 +42,11 @@ msgstr "twarz w stylu retro arcade" #: libravatar.php:73 msgid "roboter face" -msgstr "" +msgstr "twarz robota" #: libravatar.php:74 msgid "retro adventure game character" -msgstr "" +msgstr "postać z gry przygodowej w stylu retro" #: libravatar.php:78 msgid "Information" diff --git a/libravatar/lang/pl/strings.php b/libravatar/lang/pl/strings.php index 6e4e2efa..0bb16982 100644 --- a/libravatar/lang/pl/strings.php +++ b/libravatar/lang/pl/strings.php @@ -10,6 +10,8 @@ $a->strings['random geometric pattern'] = 'losowy wzór geometryczny'; $a->strings['monster face'] = 'twarz potwora'; $a->strings['computer generated face'] = 'twarz wygenerowana komputerowo'; $a->strings['retro arcade style face'] = 'twarz w stylu retro arcade'; +$a->strings['roboter face'] = 'twarz robota'; +$a->strings['retro adventure game character'] = 'postać z gry przygodowej w stylu retro'; $a->strings['Information'] = 'Informacja'; $a->strings['Gravatar addon is installed. Please disable the Gravatar addon.
The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar.'] = 'Dodatek Gravatar jest zainstalowany. Wyłącz dodatek Gravatar. Dodatek Libravatar powróci do Gravatar, jeśli w Libravatar nie zostanie znaleziony żaden przedmiot.'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; diff --git a/newmemberwidget/lang/pl/messages.po b/newmemberwidget/lang/pl/messages.po index 62c7ca27..3f1838b5 100644 --- a/newmemberwidget/lang/pl/messages.po +++ b/newmemberwidget/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-01 18:24+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-23 10:26+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,11 +22,11 @@ msgstr "" #: newmemberwidget.php:29 msgid "New Member" -msgstr "Nowy Użytkownik" +msgstr "Nowy użytkownik" #: newmemberwidget.php:30 msgid "Tips for New Members" -msgstr "Wskazówki dla nowych członków" +msgstr "Wskazówki dla nowych użytkowników" #: newmemberwidget.php:33 msgid "Global Support Forum" @@ -49,21 +50,21 @@ msgstr "Twoja wiadomość dla nowych członków. Możesz tutaj użyć bbcode." #: newmemberwidget.php:67 msgid "Add a link to global support forum" -msgstr "Dodaj link do globalnego forum pomocy technicznej" +msgstr "Dodaj odnośnik do globalnego forum pomocy technicznej" #: newmemberwidget.php:67 msgid "Should a link to the global support forum be displayed?" -msgstr "Czy powinien być wyświetlany link do globalnego forum pomocy technicznej?" +msgstr "Czy powinien być wyświetlany odnośnik do globalnego forum pomocy technicznej?" #: newmemberwidget.php:68 msgid "Add a link to the local support forum" -msgstr "Dodaj link do lokalnego forum pomocy technicznej" +msgstr "Dodaj odnośnik do lokalnego forum pomocy technicznej" #: newmemberwidget.php:68 msgid "" "If you have a local support forum and want to have a link displayed in the " "widget, check this box." -msgstr "" +msgstr "Jeżeli masz lokalne wsparcie forum i chcesz mieć łącze wyświetlane w widżecie, zaznacz to pole wyboru." #: newmemberwidget.php:69 msgid "Name of the local support group" diff --git a/newmemberwidget/lang/pl/strings.php b/newmemberwidget/lang/pl/strings.php index da134495..97103add 100644 --- a/newmemberwidget/lang/pl/strings.php +++ b/newmemberwidget/lang/pl/strings.php @@ -5,15 +5,16 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['New Member'] = 'Nowy Użytkownik'; -$a->strings['Tips for New Members'] = 'Wskazówki dla nowych członków'; +$a->strings['New Member'] = 'Nowy użytkownik'; +$a->strings['Tips for New Members'] = 'Wskazówki dla nowych użytkowników'; $a->strings['Global Support Forum'] = 'Globalne forum pomocy technicznej'; $a->strings['Local Support Forum'] = 'Lokalne Forum Wsparcia'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Message'] = 'Wiadomość'; $a->strings['Your message for new members. You can use bbcode here.'] = 'Twoja wiadomość dla nowych członków. Możesz tutaj użyć bbcode.'; -$a->strings['Add a link to global support forum'] = 'Dodaj link do globalnego forum pomocy technicznej'; -$a->strings['Should a link to the global support forum be displayed?'] = 'Czy powinien być wyświetlany link do globalnego forum pomocy technicznej?'; -$a->strings['Add a link to the local support forum'] = 'Dodaj link do lokalnego forum pomocy technicznej'; +$a->strings['Add a link to global support forum'] = 'Dodaj odnośnik do globalnego forum pomocy technicznej'; +$a->strings['Should a link to the global support forum be displayed?'] = 'Czy powinien być wyświetlany odnośnik do globalnego forum pomocy technicznej?'; +$a->strings['Add a link to the local support forum'] = 'Dodaj odnośnik do lokalnego forum pomocy technicznej'; +$a->strings['If you have a local support forum and want to have a link displayed in the widget, check this box.'] = 'Jeżeli masz lokalne wsparcie forum i chcesz mieć łącze wyświetlane w widżecie, zaznacz to pole wyboru.'; $a->strings['Name of the local support group'] = 'Nazwa grupy lokalnej pomocy technicznej'; $a->strings['If you checked the above, specify the nickname of the local support group here (i.e. helpers)'] = 'Jeśli zaznaczyłeś powyższe, określ tutaj pseudonim lokalnej grupy wsparcia (np. Pomocnicy)'; diff --git a/openstreetmap/lang/pl/messages.po b/openstreetmap/lang/pl/messages.po index a31d668b..36863a31 100644 --- a/openstreetmap/lang/pl/messages.po +++ b/openstreetmap/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-01 19:14+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-23 11:01+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,7 +22,7 @@ msgstr "" #: openstreetmap.php:167 msgid "View Larger" -msgstr "" +msgstr "Zobacz większą" #: openstreetmap.php:194 msgid "Submit" @@ -29,23 +30,23 @@ msgstr "Zatwierdź" #: openstreetmap.php:195 msgid "Tile Server URL" -msgstr "Adres URL serwera sąsiadująco" +msgstr "Adres URL serwera kafelków" #: openstreetmap.php:195 msgid "" "A list of public tile servers" -msgstr "" +msgstr "Lista publicznych serwerów z kafelkami" #: openstreetmap.php:196 msgid "Nominatim (reverse geocoding) Server URL" -msgstr "" +msgstr "Adres URL serwera Nominatim (geokodowanie odwrotne)" #: openstreetmap.php:196 msgid "" "A list of Nominatim servers" -msgstr "" +msgstr "Lista serwerów Nominatim" #: openstreetmap.php:197 msgid "Default zoom" @@ -54,12 +55,12 @@ msgstr "Domyślne powiększenie" #: openstreetmap.php:197 msgid "" "The default zoom level. (1:world, 18:highest, also depends on tile server)" -msgstr "" +msgstr "Domyślny poziom powiększenia. (1:świat, 18:największy; zależy to także od serwera kafelków)" #: openstreetmap.php:198 msgid "Include marker on map" -msgstr "" +msgstr "Uwzględnij znacznik na mapie" #: openstreetmap.php:198 msgid "Include a marker on the map." -msgstr "" +msgstr "Uwzględnij znacznik na mapie." diff --git a/openstreetmap/lang/pl/strings.php b/openstreetmap/lang/pl/strings.php index b02b17d9..c442cff4 100644 --- a/openstreetmap/lang/pl/strings.php +++ b/openstreetmap/lang/pl/strings.php @@ -5,6 +5,13 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} +$a->strings['View Larger'] = 'Zobacz większą'; $a->strings['Submit'] = 'Zatwierdź'; -$a->strings['Tile Server URL'] = 'Adres URL serwera sąsiadująco'; +$a->strings['Tile Server URL'] = 'Adres URL serwera kafelków'; +$a->strings['A list of public tile servers'] = 'Lista publicznych serwerów z kafelkami'; +$a->strings['Nominatim (reverse geocoding) Server URL'] = 'Adres URL serwera Nominatim (geokodowanie odwrotne)'; +$a->strings['A list of Nominatim servers'] = 'Lista serwerów Nominatim'; $a->strings['Default zoom'] = 'Domyślne powiększenie'; +$a->strings['The default zoom level. (1:world, 18:highest, also depends on tile server)'] = 'Domyślny poziom powiększenia. (1:świat, 18:największy; zależy to także od serwera kafelków)'; +$a->strings['Include marker on map'] = 'Uwzględnij znacznik na mapie'; +$a->strings['Include a marker on the map.'] = 'Uwzględnij znacznik na mapie.'; diff --git a/public_server/lang/pl/messages.po b/public_server/lang/pl/messages.po index 7777bec6..03470df7 100644 --- a/public_server/lang/pl/messages.po +++ b/public_server/lang/pl/messages.po @@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2022-03-08 14:32+0000\n" -"Last-Translator: Piotr Strębski \n" +"PO-Revision-Date: 2014-06-23 11:24+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -39,7 +39,7 @@ msgid "" "Hi %1$s,\n" "\n" "Your account on %2$s will expire in less than five days. You may keep your account by logging in at least once every 30 days" -msgstr "Cześć ,%1$s\n\nTwoje konto wygaśnie za %2$s mniej niż pięć dni. Możesz zachować swoje konto logując się przynajmniej raz na 30 dni" +msgstr "Cześć%1$s,\n\nTwoje konto na %2$s wygaśnie za mniej niż pięć dni. Możesz zachować swoje konto logując się przynajmniej raz na 30 dni." #: public_server.php:158 msgid "Save Settings" @@ -47,4 +47,4 @@ msgstr "Zapisz ustawienia" #: public_server.php:160 msgid "Set any of these options to 0 to deactivate it." -msgstr "" +msgstr "Ustaw dowolną z tych opcji na 0, aby ją wyłączyć." diff --git a/public_server/lang/pl/strings.php b/public_server/lang/pl/strings.php index 228d5219..aa266077 100644 --- a/public_server/lang/pl/strings.php +++ b/public_server/lang/pl/strings.php @@ -10,7 +10,8 @@ $a->strings['Your account on %s will expire in a few days.'] = 'Twoje konto na % $a->strings['Your Friendica account is about to expire.'] = 'Twoje konto Friendica jest w trakcie wygaszania'; $a->strings['Hi %1$s, -Your account on %2$s will expire in less than five days. You may keep your account by logging in at least once every 30 days'] = 'Cześć ,%1$s +Your account on %2$s will expire in less than five days. You may keep your account by logging in at least once every 30 days'] = 'Cześć%1$s, -Twoje konto wygaśnie za %2$s mniej niż pięć dni. Możesz zachować swoje konto logując się przynajmniej raz na 30 dni'; +Twoje konto na %2$s wygaśnie za mniej niż pięć dni. Możesz zachować swoje konto logując się przynajmniej raz na 30 dni.'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; +$a->strings['Set any of these options to 0 to deactivate it.'] = 'Ustaw dowolną z tych opcji na 0, aby ją wyłączyć.'; diff --git a/testdrive/lang/pl/messages.po b/testdrive/lang/pl/messages.po index 1d948200..55ee5809 100644 --- a/testdrive/lang/pl/messages.po +++ b/testdrive/lang/pl/messages.po @@ -5,14 +5,15 @@ # # Translators: # TORminator , 2014 +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-01 18:21+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-23 12:56+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -39,4 +40,4 @@ msgid "" "Hi %1$s,\n" "\n" "Your test account on %2$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at https://friendi.ca." -msgstr "" +msgstr " Cześć %1$s,\n \n Twoje konto testowe %2$s wygaśnie za mniej niż pięć dni. Mamy nadzieję, że podoba Ci się ta jazda testowa i wykorzystasz tę okazję, aby znaleźć stałą stronę Friendica do zintegrowanej komunikacji społecznej. Lista serwisów publicznych jest dostępna na stronie %s/siteinfo. Aby uzyskać więcej informacji na temat konfigurowania własnego serwera Friendica, odwiedź stronę projektu Friendica pod adresem https://friendi.ca." diff --git a/testdrive/lang/pl/strings.php b/testdrive/lang/pl/strings.php index 10a10028..9051b6ee 100644 --- a/testdrive/lang/pl/strings.php +++ b/testdrive/lang/pl/strings.php @@ -8,3 +8,8 @@ function string_plural_select_pl($n){ $a->strings['Administrator'] = 'Administrator'; $a->strings['Your account on %s will expire in a few days.'] = 'Twoje konto w %s wygaśnie w ciągu kilku dni.'; $a->strings['Your Friendica test account is about to expire.'] = 'Twoje testowe konto Friendica za chwilę wygaśnie.'; +$a->strings['Hi %1$s, + +Your test account on %2$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at https://friendi.ca.'] = ' Cześć %1$s, + + Twoje konto testowe %2$s wygaśnie za mniej niż pięć dni. Mamy nadzieję, że podoba Ci się ta jazda testowa i wykorzystasz tę okazję, aby znaleźć stałą stronę Friendica do zintegrowanej komunikacji społecznej. Lista serwisów publicznych jest dostępna na stronie %s/siteinfo. Aby uzyskać więcej informacji na temat konfigurowania własnego serwera Friendica, odwiedź stronę projektu Friendica pod adresem https://friendi.ca.'; diff --git a/tumblr/lang/pl/messages.po b/tumblr/lang/pl/messages.po index 5bdf233d..27a44e15 100644 --- a/tumblr/lang/pl/messages.po +++ b/tumblr/lang/pl/messages.po @@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:17-0500\n" -"PO-Revision-Date: 2022-03-08 14:31+0000\n" -"Last-Translator: Piotr Strębski \n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -30,11 +30,11 @@ msgstr "Zapisz ustawienia" #: tumblr.php:71 msgid "Consumer Key" -msgstr "" +msgstr "Klucz klienta" #: tumblr.php:72 msgid "Consumer Secret" -msgstr "" +msgstr "Tajny klucz klienta" #: tumblr.php:177 msgid "You are now authenticated to tumblr." @@ -70,4 +70,4 @@ msgstr "Wyślij domyślnie do Tumblr" #: tumblr.php:244 msgid "Tumblr Export" -msgstr "" +msgstr "Eksportuj do Tumblr" diff --git a/tumblr/lang/pl/strings.php b/tumblr/lang/pl/strings.php index 4bc81af2..a9f3bfb5 100644 --- a/tumblr/lang/pl/strings.php +++ b/tumblr/lang/pl/strings.php @@ -7,6 +7,8 @@ function string_plural_select_pl($n){ }} $a->strings['Permission denied.'] = 'Odmowa dostępu.'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; +$a->strings['Consumer Key'] = 'Klucz klienta'; +$a->strings['Consumer Secret'] = 'Tajny klucz klienta'; $a->strings['You are now authenticated to tumblr.'] = 'Jesteś teraz uwierzytelniony na tumblr.'; $a->strings['return to the connector page'] = 'powrót do strony łącza'; $a->strings['Post to Tumblr'] = 'Opublikuj w Tumblr'; @@ -15,3 +17,4 @@ $a->strings['(Re-)Authenticate your tumblr page'] = '(Re-) Uwierzytelnij swoją $a->strings['You are not authenticated to tumblr'] = 'Nie jesteś uwierzytelniony w tumblr'; $a->strings['Enable Tumblr Post Addon'] = 'Włącz dodatek Tumblr'; $a->strings['Post to Tumblr by default'] = 'Wyślij domyślnie do Tumblr'; +$a->strings['Tumblr Export'] = 'Eksportuj do Tumblr'; From 34c709479089e976e95ebf691863f8cbfa6f91f7 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 18 Mar 2022 17:10:36 +0100 Subject: [PATCH 003/677] PL translation updates THX strebski --- blockem/lang/pl/messages.po | 4 ++-- libertree/lang/pl/messages.po | 7 ++++--- libertree/lang/pl/strings.php | 1 + ljpost/lang/pl/messages.po | 7 ++++--- ljpost/lang/pl/strings.php | 1 + pumpio/lang/pl/messages.po | 15 ++++++++------- pumpio/lang/pl/strings.php | 5 +++++ showmore/lang/pl/messages.po | 7 ++++--- showmore/lang/pl/strings.php | 1 + startpage/lang/pl/messages.po | 11 ++++++----- startpage/lang/pl/strings.php | 4 +++- statusnet/lang/pl/messages.po | 19 ++++++++++--------- statusnet/lang/pl/strings.php | 8 +++++++- superblock/lang/pl/messages.po | 7 ++++--- superblock/lang/pl/strings.php | 1 + twitter/lang/pl/messages.po | 16 ++++++++-------- twitter/lang/pl/strings.php | 6 ++++++ windowsphonepush/lang/pl/messages.po | 7 ++++--- windowsphonepush/lang/pl/strings.php | 1 + wppost/lang/pl/messages.po | 13 +++++++------ wppost/lang/pl/strings.php | 4 ++++ 21 files changed, 91 insertions(+), 54 deletions(-) diff --git a/blockem/lang/pl/messages.po b/blockem/lang/pl/messages.po index e27c0d9d..8e70e0b5 100644 --- a/blockem/lang/pl/messages.po +++ b/blockem/lang/pl/messages.po @@ -10,8 +10,8 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:13-0500\n" -"PO-Revision-Date: 2021-12-22 15:27+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-22 11:20+0000\n" +"Last-Translator: Waldemar Stoczkowski, 2018\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/libertree/lang/pl/messages.po b/libertree/lang/pl/messages.po index 37ffea0c..1a217c35 100644 --- a/libertree/lang/pl/messages.po +++ b/libertree/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:17-0500\n" -"PO-Revision-Date: 2021-12-22 15:27+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-23 09:44+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -41,4 +42,4 @@ msgstr "Wyślij domyślnie do Libertree" #: libertree.php:68 msgid "Libertree Export" -msgstr "" +msgstr "Eksport do Libertree" diff --git a/libertree/lang/pl/strings.php b/libertree/lang/pl/strings.php index 0ed774d4..5c7d076f 100644 --- a/libertree/lang/pl/strings.php +++ b/libertree/lang/pl/strings.php @@ -10,3 +10,4 @@ $a->strings['Enable Libertree Post Addon'] = 'Włącz dodatek Libertree Post'; $a->strings['Libertree site URL'] = 'Adres URL witryny Libertree'; $a->strings['Libertree API token'] = 'Token API Libertree'; $a->strings['Post to Libertree by default'] = 'Wyślij domyślnie do Libertree'; +$a->strings['Libertree Export'] = 'Eksport do Libertree'; diff --git a/ljpost/lang/pl/messages.po b/ljpost/lang/pl/messages.po index 50d4c5fe..addd3fc3 100644 --- a/ljpost/lang/pl/messages.po +++ b/ljpost/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:17-0500\n" -"PO-Revision-Date: 2021-12-22 17:23+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-23 09:51+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -41,4 +42,4 @@ msgstr "Opublikuj domyślnie w LiveJournal" #: ljpost.php:71 msgid "LiveJournal Export" -msgstr "" +msgstr "Eksport do LiveJournal" diff --git a/ljpost/lang/pl/strings.php b/ljpost/lang/pl/strings.php index 666fee01..9540c2c2 100644 --- a/ljpost/lang/pl/strings.php +++ b/ljpost/lang/pl/strings.php @@ -10,3 +10,4 @@ $a->strings['Enable LiveJournal Post Addon'] = 'Włącz dodatek LiveJournal'; $a->strings['LiveJournal username'] = 'Nazwa użytkownika LiveJournal'; $a->strings['LiveJournal password'] = 'Hasło LiveJournal'; $a->strings['Post to LiveJournal by default'] = 'Opublikuj domyślnie w LiveJournal'; +$a->strings['LiveJournal Export'] = 'Eksport do LiveJournal'; diff --git a/pumpio/lang/pl/messages.po b/pumpio/lang/pl/messages.po index 2af16167..a5ab3ea2 100644 --- a/pumpio/lang/pl/messages.po +++ b/pumpio/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:17-0500\n" -"PO-Revision-Date: 2021-12-22 17:23+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-23 11:30+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -46,7 +47,7 @@ msgstr "Zapisz ustawienia" #: pumpio.php:239 msgid "Delete this preset" -msgstr "" +msgstr "Usuń to ustawienie wstępne" #: pumpio.php:245 msgid "Authenticate your pump.io connection" @@ -54,11 +55,11 @@ msgstr "Uwierzytelnij swoje połączenie pump.io" #: pumpio.php:252 msgid "Pump.io servername (without \"http://\" or \"https://\" )" -msgstr "" +msgstr "Nazwa serwera Pump.io (bez \"http://\" lub \"https://\")" #: pumpio.php:253 msgid "Pump.io username (without the servername)" -msgstr "" +msgstr "Nazwa użytkownika Pump.io (bez nazwy serwera)" #: pumpio.php:254 msgid "Import the remote timeline" @@ -66,11 +67,11 @@ msgstr "Zaimportuj zdalną oś czasu" #: pumpio.php:255 msgid "Enable Pump.io Post Addon" -msgstr "" +msgstr "Włącz dodatek Pump.io" #: pumpio.php:256 msgid "Post to Pump.io by default" -msgstr "" +msgstr "Publikuj domyślnie w Pump.io" #: pumpio.php:257 msgid "Should posts be public?" diff --git a/pumpio/lang/pl/strings.php b/pumpio/lang/pl/strings.php index 17f3aa82..b3d3925c 100644 --- a/pumpio/lang/pl/strings.php +++ b/pumpio/lang/pl/strings.php @@ -11,8 +11,13 @@ $a->strings['You are now authenticated to pumpio.'] = 'Jesteś teraz uwierzyteln $a->strings['return to the connector page'] = 'powrót do strony łączenia'; $a->strings['Post to pumpio'] = 'Prześlij do pumpio'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; +$a->strings['Delete this preset'] = 'Usuń to ustawienie wstępne'; $a->strings['Authenticate your pump.io connection'] = 'Uwierzytelnij swoje połączenie pump.io'; +$a->strings['Pump.io servername (without "http://" or "https://" )'] = 'Nazwa serwera Pump.io (bez "http://" lub "https://")'; +$a->strings['Pump.io username (without the servername)'] = 'Nazwa użytkownika Pump.io (bez nazwy serwera)'; $a->strings['Import the remote timeline'] = 'Zaimportuj zdalną oś czasu'; +$a->strings['Enable Pump.io Post Addon'] = 'Włącz dodatek Pump.io'; +$a->strings['Post to Pump.io by default'] = 'Publikuj domyślnie w Pump.io'; $a->strings['Should posts be public?'] = 'Czy posty powinny być publiczne?'; $a->strings['Mirror all public posts'] = 'Odbij wszystkie publiczne posty'; $a->strings['Pump.io Import/Export/Mirror'] = 'Pump.io Import/Export/Mirror'; diff --git a/showmore/lang/pl/messages.po b/showmore/lang/pl/messages.po index 4ce198f3..80313357 100644 --- a/showmore/lang/pl/messages.po +++ b/showmore/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:16-0500\n" -"PO-Revision-Date: 2021-12-22 15:27+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-23 12:37+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,7 +26,7 @@ msgstr "Włącz Pokaż więcej" #: showmore.php:38 msgid "Cutting posts after how many characters" -msgstr "" +msgstr "Cięcie wpisów po określonej ilości znaków" #: showmore.php:43 msgid "\"Show more\" Settings" diff --git a/showmore/lang/pl/strings.php b/showmore/lang/pl/strings.php index d464809d..18c990ef 100644 --- a/showmore/lang/pl/strings.php +++ b/showmore/lang/pl/strings.php @@ -6,5 +6,6 @@ function string_plural_select_pl($n){ if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} $a->strings['Enable Show More'] = 'Włącz Pokaż więcej'; +$a->strings['Cutting posts after how many characters'] = 'Cięcie wpisów po określonej ilości znaków'; $a->strings['"Show more" Settings'] = 'Ustawienia "Pokaż więcej"'; $a->strings['show more'] = 'pokaż więcej'; diff --git a/startpage/lang/pl/messages.po b/startpage/lang/pl/messages.po index 3b57c265..e3fac55d 100644 --- a/startpage/lang/pl/messages.po +++ b/startpage/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:16-0500\n" -"PO-Revision-Date: 2021-12-22 15:27+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-23 12:51+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,12 +22,12 @@ msgstr "" #: startpage.php:70 msgid "Home page to load after login - leave blank for profile wall" -msgstr "Strona główna do załadowania po zalogowaniu - pozostaw puste pole dla strony profilowej" +msgstr "Strona główna do wczytania po zalogowaniu - pozostaw puste pole dla strony profilowej" #: startpage.php:70 msgid "Examples: \"network\" or \"notifications/system\"" -msgstr "" +msgstr "Przykłady: \"network\" lub \"notifications/system\"" #: startpage.php:75 msgid "Startpage" -msgstr "" +msgstr "Strona startowa" diff --git a/startpage/lang/pl/strings.php b/startpage/lang/pl/strings.php index 9486d3c8..9f89c067 100644 --- a/startpage/lang/pl/strings.php +++ b/startpage/lang/pl/strings.php @@ -5,4 +5,6 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} -$a->strings['Home page to load after login - leave blank for profile wall'] = 'Strona główna do załadowania po zalogowaniu - pozostaw puste pole dla strony profilowej'; +$a->strings['Home page to load after login - leave blank for profile wall'] = 'Strona główna do wczytania po zalogowaniu - pozostaw puste pole dla strony profilowej'; +$a->strings['Examples: "network" or "notifications/system"'] = 'Przykłady: "network" lub "notifications/system"'; +$a->strings['Startpage'] = 'Strona startowa'; diff --git a/statusnet/lang/pl/messages.po b/statusnet/lang/pl/messages.po index dabd54d4..cfde6e2e 100644 --- a/statusnet/lang/pl/messages.po +++ b/statusnet/lang/pl/messages.po @@ -5,14 +5,15 @@ # # Translators: # TORminator , 2014 +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:17-0500\n" -"PO-Revision-Date: 2021-12-22 17:23+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-23 12:54+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -41,7 +42,7 @@ msgstr "Zapisz ustawienia" #: statusnet.php:255 #, php-format msgid "Currently connected to: %s" -msgstr "" +msgstr "Obecnie połączony z: %s" #: statusnet.php:260 msgid "" @@ -57,7 +58,7 @@ msgstr "Wyczyść konfigurację OAuth" #: statusnet.php:275 msgid "Cancel GNU Social Connection" -msgstr "Anuluj GNU Social Connection" +msgstr "Anuluj połaczenie z GNU Social" #: statusnet.php:283 msgid "Globally Available GNU Social OAuthKeys" @@ -81,7 +82,7 @@ msgid "" "pair here and enter the API base root.
Before you register your own " "OAuth key pair ask the administrator if there is already a key pair for this" " Friendica installation at your favorite GNU Social installation." -msgstr "" +msgstr "Nie znaleziono pary kluczy konsumenckich dla GNU Social. Zarejestruj swoje konto Friendica jako aplikację komputerową na swoim koncie GNU Social, skopiuj tutaj parę kluczy klienta i wprowadź podstawowy root API.
Przed zarejestrowaniem własnej pary kluczy OAuth zapytaj administratora, czy istnieje już para kluczy dla tej instalacji Friendica pod adresem Twojej ulubionej instalacji GNU Social." #: statusnet.php:287 msgid "" @@ -102,7 +103,7 @@ msgstr "Anuluj proces połączenia" #: statusnet.php:290 #, php-format msgid "Current GNU Social API is: %s" -msgstr "" +msgstr "Obecne API GNU Social to: %s" #: statusnet.php:307 msgid "OAuth Consumer Key" @@ -133,15 +134,15 @@ msgstr "Jeśli ta opcja jest włączona, wszystkie twoje publicznestrings['Post to GNU Social'] = 'Opublikuj w GNU Social'; $a->strings['Please contact your site administrator.
The provided API URL is not valid.'] = 'Skontaktuj się z administratorem witryny.
Podany adres URL interfejsu API jest nieprawidłowy.'; $a->strings['We could not contact the GNU Social API with the Path you entered.'] = 'Nie mogliśmy skontaktować się z GNU Social API z wprowadzoną ścieżką.'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; +$a->strings['Currently connected to: %s'] = 'Obecnie połączony z: %s'; $a->strings['Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to GNU Social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Uwaga: Ze względu na ustawienia prywatności (Ukryć szczegóły Twojego profilu, przed nieznanymi użytkownikami?) link potencjalnie zawarty w publicznych komentarzach do Twitter doprowadzi użytkownika do pustej strony informowania odwiedzających, że dostęp do Twojego profilu został ograniczony.'; $a->strings['Clear OAuth configuration'] = 'Wyczyść konfigurację OAuth'; -$a->strings['Cancel GNU Social Connection'] = 'Anuluj GNU Social Connection'; +$a->strings['Cancel GNU Social Connection'] = 'Anuluj połaczenie z GNU Social'; $a->strings['Globally Available GNU Social OAuthKeys'] = 'Globalnie dostępne GNU Social OAuthKeys'; $a->strings['There are preconfigured OAuth key pairs for some GNU Social servers available. If you are using one of them, please use these credentials. If not feel free to connect to any other GNU Social instance (see below).'] = 'Istnieją wstępnie skonfigurowane pary kluczy OAuth dla niektórych serwerów społecznościowych GNU. Jeśli używasz jednego z nich, użyj tych poświadczeń. Jeśli nie, możesz połączyć się z dowolną inną instancją społecznościową GNU (patrz poniżej).'; $a->strings['Provide your own OAuth Credentials'] = 'Podaj własne dane uwierzytelniające OAuth'; +$a->strings['No consumer key pair for GNU Social found. Register your Friendica Account as a desktop application on your GNU Social account, copy the consumer key pair here and enter the API base root.
Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Friendica installation at your favorite GNU Social installation.'] = 'Nie znaleziono pary kluczy konsumenckich dla GNU Social. Zarejestruj swoje konto Friendica jako aplikację komputerową na swoim koncie GNU Social, skopiuj tutaj parę kluczy klienta i wprowadź podstawowy root API.
Przed zarejestrowaniem własnej pary kluczy OAuth zapytaj administratora, czy istnieje już para kluczy dla tej instalacji Friendica pod adresem Twojej ulubionej instalacji GNU Social.'; $a->strings['To connect to your GNU Social account click the button below to get a security code from GNU Social which you have to copy into the input box below and submit the form. Only your public posts will be posted to GNU Social.'] = 'Aby połączyć się z kontem społecznościowym GNU, kliknij przycisk poniżej, aby uzyskać kod bezpieczeństwa z GNU Social, który musisz skopiować do poniższego pola wprowadzania i przesłać formularz. Tylko twoje publiczne posty będą publikowane w GNU Social.'; $a->strings['Log in with GNU Social'] = 'Zaloguj się za pomocą GNU Social'; $a->strings['Cancel Connection Process'] = 'Anuluj proces połączenia'; +$a->strings['Current GNU Social API is: %s'] = 'Obecne API GNU Social to: %s'; $a->strings['OAuth Consumer Key'] = 'Klucz klienta OAuth'; $a->strings['OAuth Consumer Secret'] = 'Tajny klucz klienta OAuth'; $a->strings['Base API Path (remember the trailing /)'] = 'Podstawowa ścieżka interfejsu API (pamiętaj na końcu /)'; $a->strings['Copy the security code from GNU Social here'] = 'Skopiuj tutaj kod bezpieczeństwa z GNU Social'; $a->strings['Allow posting to GNU Social'] = 'Zezwalaj na publikowanie w GNU Social'; $a->strings['If enabled all your public postings can be posted to the associated GNU Social account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Jeśli ta opcja jest włączona, wszystkie twoje publiczne ogłoszenia mogą zostać wysłane na powiązane konto społecznościowe GNU. Możesz to zrobić domyślnie (tutaj) lub dla każdego komentarza osobno w opcjach komentarza podczas pisania wpisu.'; +$a->strings['Post to GNU Social by default'] = 'Publikuj domyślnie w GNU Social'; +$a->strings['Mirror all public posts'] = 'Odbij wszystkie publiczne wpisy'; +$a->strings['Automatically create contacts'] = 'Automatycznie twórz kontakty'; $a->strings['Import the remote timeline'] = 'Zaimportuj na zdalnej oś czasu'; $a->strings['Disabled'] = 'Wyłącz'; $a->strings['Full Timeline'] = 'Pełna oś czasu'; diff --git a/superblock/lang/pl/messages.po b/superblock/lang/pl/messages.po index 5c405334..5c85c986 100644 --- a/superblock/lang/pl/messages.po +++ b/superblock/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:16-0500\n" -"PO-Revision-Date: 2021-12-22 16:24+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-23 12:55+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,7 +22,7 @@ msgstr "" #: superblock.php:35 msgid "Comma separated profile URLs to block" -msgstr "" +msgstr "Oddzielone przecinkami adresy URL profilów do zablokowania" #: superblock.php:40 msgid "Superblock" diff --git a/superblock/lang/pl/strings.php b/superblock/lang/pl/strings.php index dbe8a72d..2a463bd8 100644 --- a/superblock/lang/pl/strings.php +++ b/superblock/lang/pl/strings.php @@ -5,5 +5,6 @@ function string_plural_select_pl($n){ $n = intval($n); if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} +$a->strings['Comma separated profile URLs to block'] = 'Oddzielone przecinkami adresy URL profilów do zablokowania'; $a->strings['Superblock'] = 'Superblock'; $a->strings['Block Completely'] = 'Całkowicie zablokuj'; diff --git a/twitter/lang/pl/messages.po b/twitter/lang/pl/messages.po index aa11402f..5044e80b 100644 --- a/twitter/lang/pl/messages.po +++ b/twitter/lang/pl/messages.po @@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-27 10:25-0500\n" -"PO-Revision-Date: 2022-03-08 14:26+0000\n" -"Last-Translator: Piotr Strębski \n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -62,7 +62,7 @@ msgstr "Wystąpił błąd:" msgid "" "Currently connected to: %1$s" -msgstr "" +msgstr "Obecnie połączony z: %1$s" #: twitter.php:365 msgid "" @@ -74,7 +74,7 @@ msgstr "Uwaga: Ze względu na ustawienia prywatności (Ukry #: twitter.php:372 msgid "Invalid Twitter info" -msgstr "" +msgstr "Nieprawidłowe informacje Twittera" #: twitter.php:373 msgid "Disconnect" @@ -113,7 +113,7 @@ msgid "" " a message from an existing contact via the Twitter network. If you do not " "enable this, you need to manually add those Twitter contacts in Friendica " "from whom you would like to see posts here." -msgstr "" +msgstr "Spowoduje to automatyczne utworzenie kontaktu w Friendica, gdy tylko otrzymasz wiadomość od istniejącego kontaktu za pośrednictwem sieci Twitter. Jeśli nie włączysz tej opcji, musisz ręcznie dodać te kontakty z Twittera w Friendica, od których chciałbyś widzieć tutaj wpisy." #: twitter.php:395 msgid "Twitter Import/Export/Mirror" @@ -123,11 +123,11 @@ msgstr "Twitter Import/Export/Mirror" msgid "" "Please connect a Twitter account in your Social Network settings to import " "Twitter posts." -msgstr "" +msgstr "Aby zaimportować wpisy z Twittera, połącz konto Twitter w ustawieniach sieci społecznościowej." #: twitter.php:554 msgid "Twitter post not found." -msgstr "" +msgstr "Nie odnaleziono wpisu Twittera." #: twitter.php:914 msgid "Save Settings" @@ -144,4 +144,4 @@ msgstr "Tajny klucz klienta" #: twitter.php:1113 #, php-format msgid "%s on Twitter" -msgstr "" +msgstr "%s na Twitterze" diff --git a/twitter/lang/pl/strings.php b/twitter/lang/pl/strings.php index 3eb5a26a..dcea7563 100644 --- a/twitter/lang/pl/strings.php +++ b/twitter/lang/pl/strings.php @@ -12,7 +12,9 @@ $a->strings['At this Friendica instance the Twitter addon was enabled but you ha $a->strings['Log in with Twitter'] = 'Zaloguj się przez Twitter'; $a->strings['Copy the PIN from Twitter here'] = 'Skopiuj tutaj kod PIN z Twittera'; $a->strings['An error occured: '] = 'Wystąpił błąd:'; +$a->strings['Currently connected to: %1$s'] = 'Obecnie połączony z: %1$s'; $a->strings['Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Uwaga: Ze względu na ustawienia prywatności (Ukryć szczegóły Twojego profilu, przed nieznanymi użytkownikami?) link potencjalnie zawarty w publicznych komentarzach do Twitter doprowadzi użytkownika do pustej strony informowania odwiedzających, że dostęp do Twojego profilu został ograniczony.'; +$a->strings['Invalid Twitter info'] = 'Nieprawidłowe informacje Twittera'; $a->strings['Disconnect'] = 'Rozłączony'; $a->strings['Allow posting to Twitter'] = 'Zezwalaj na publikowanie na Twitterze'; $a->strings['If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Jeśli ta opcja jest włączona, wszystkie twoje publiczne ogłoszenia mogą być wysyłane na powiązane konto Twitter. Możesz to zrobić domyślnie (tutaj) lub dla każdego komentarza osobno w opcjach komentarza podczas pisania wpisu.'; @@ -20,7 +22,11 @@ $a->strings['Send public postings to Twitter by default'] = 'Wyślij domyślnie $a->strings['Mirror all posts from twitter that are no replies'] = 'Lustro wszystkich postów Twitter, które są bez odpowiedzi'; $a->strings['Import the remote timeline'] = 'Zaimportuj zdalną oś czasu'; $a->strings['Automatically create contacts'] = 'Automatycznie twórz kontakty'; +$a->strings['This will automatically create a contact in Friendica as soon as you receive a message from an existing contact via the Twitter network. If you do not enable this, you need to manually add those Twitter contacts in Friendica from whom you would like to see posts here.'] = 'Spowoduje to automatyczne utworzenie kontaktu w Friendica, gdy tylko otrzymasz wiadomość od istniejącego kontaktu za pośrednictwem sieci Twitter. Jeśli nie włączysz tej opcji, musisz ręcznie dodać te kontakty z Twittera w Friendica, od których chciałbyś widzieć tutaj wpisy.'; $a->strings['Twitter Import/Export/Mirror'] = 'Twitter Import/Export/Mirror'; +$a->strings['Please connect a Twitter account in your Social Network settings to import Twitter posts.'] = 'Aby zaimportować wpisy z Twittera, połącz konto Twitter w ustawieniach sieci społecznościowej.'; +$a->strings['Twitter post not found.'] = 'Nie odnaleziono wpisu Twittera.'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Consumer key'] = 'Klucz klienta'; $a->strings['Consumer secret'] = 'Tajny klucz klienta'; +$a->strings['%s on Twitter'] = '%s na Twitterze'; diff --git a/windowsphonepush/lang/pl/messages.po b/windowsphonepush/lang/pl/messages.po index 44418a06..207d80e9 100644 --- a/windowsphonepush/lang/pl/messages.po +++ b/windowsphonepush/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:16-0500\n" -"PO-Revision-Date: 2021-12-22 16:18+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-10-31 13:43+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -29,7 +30,7 @@ msgstr "Naciśnij tekst nowego elementu" #: windowsphonepush.php:104 msgid "Device URL" -msgstr "" +msgstr "URL urządzenia" #: windowsphonepush.php:109 msgid "WindowsPhonePush Settings" diff --git a/windowsphonepush/lang/pl/strings.php b/windowsphonepush/lang/pl/strings.php index 4e1afa10..e504e6d2 100644 --- a/windowsphonepush/lang/pl/strings.php +++ b/windowsphonepush/lang/pl/strings.php @@ -7,4 +7,5 @@ function string_plural_select_pl($n){ }} $a->strings['Enable WindowsPhonePush Addon'] = 'Włącz dodatek WindowsPhonePush'; $a->strings['Push text of new item'] = 'Naciśnij tekst nowego elementu'; +$a->strings['Device URL'] = 'URL urządzenia'; $a->strings['WindowsPhonePush Settings'] = 'Ustawienia WindowsPhonePush'; diff --git a/wppost/lang/pl/messages.po b/wppost/lang/pl/messages.po index a3b050c9..e98b092a 100644 --- a/wppost/lang/pl/messages.po +++ b/wppost/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-11-21 19:18-0500\n" -"PO-Revision-Date: 2021-12-22 16:15+0000\n" -"Last-Translator: Transifex Bot <>\n" +"PO-Revision-Date: 2014-06-23 13:07+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,15 +26,15 @@ msgstr "Opublikuj w Wordpress" #: wppost.php:65 msgid "Enable Wordpress Post Addon" -msgstr "" +msgstr "Włącz dodatek Dodaj wpis do WordPress" #: wppost.php:66 msgid "Wordpress username" -msgstr "" +msgstr "Nazwa użytkownika Wordpress" #: wppost.php:67 msgid "Wordpress password" -msgstr "" +msgstr "Hasło Wordpress" #: wppost.php:68 msgid "WordPress API URL" @@ -41,7 +42,7 @@ msgstr "WordPress API URL" #: wppost.php:69 msgid "Post to Wordpress by default" -msgstr "" +msgstr "Publikuj domyślnie w Wordpress" #: wppost.php:70 msgid "Provide a backlink to the Friendica post" diff --git a/wppost/lang/pl/strings.php b/wppost/lang/pl/strings.php index bc5b3083..6e1b4543 100644 --- a/wppost/lang/pl/strings.php +++ b/wppost/lang/pl/strings.php @@ -6,7 +6,11 @@ function string_plural_select_pl($n){ if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} $a->strings['Post to Wordpress'] = 'Opublikuj w Wordpress'; +$a->strings['Enable Wordpress Post Addon'] = 'Włącz dodatek Dodaj wpis do WordPress'; +$a->strings['Wordpress username'] = 'Nazwa użytkownika Wordpress'; +$a->strings['Wordpress password'] = 'Hasło Wordpress'; $a->strings['WordPress API URL'] = 'WordPress API URL'; +$a->strings['Post to Wordpress by default'] = 'Publikuj domyślnie w Wordpress'; $a->strings['Provide a backlink to the Friendica post'] = 'Podaj zwrotny link do posta Friendica'; $a->strings['Text for the backlink, e.g. Read the original post and comment stream on Friendica.'] = 'Tekst linku zwrotnego, np. Przeczytaj oryginalny post i strumień komentarzy na stronie Friendica.'; $a->strings['Don\'t post messages that are too short'] = 'Nie publikuj zbyt krótkich wiadomości'; From 13298d507d5c8152340a3588b7c544c6af64dbff Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 23 Mar 2022 20:16:42 +0100 Subject: [PATCH 004/677] PL translation rendertime THX strebski --- rendertime/lang/pl/messages.po | 16 ++++++++-------- rendertime/lang/pl/strings.php | 7 ++++++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/rendertime/lang/pl/messages.po b/rendertime/lang/pl/messages.po index 0af16640..97ba0d9e 100644 --- a/rendertime/lang/pl/messages.po +++ b/rendertime/lang/pl/messages.po @@ -12,8 +12,8 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-12-12 22:09+0000\n" -"PO-Revision-Date: 2022-03-08 14:32+0000\n" -"Last-Translator: Piotr Strębski \n" +"PO-Revision-Date: 2014-06-23 12:36+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -27,30 +27,30 @@ msgstr "Zapisz ustawienia" #: rendertime.php:31 msgid "Show callstack" -msgstr "" +msgstr "Pokaż stos wywołań" #: rendertime.php:31 msgid "" "Show detailed performance measures in the callstack. When deactivated, only " "the summary will be displayed." -msgstr "" +msgstr "Pokaż szczegółowe miary wydajności w stosie wywołań. Po dezaktywacji wyświetlane będzie tylko podsumowanie." #: rendertime.php:32 msgid "Minimal time" -msgstr "" +msgstr "Czas minimalny" #: rendertime.php:32 msgid "Minimal time that an activity needs to be listed in the callstack." -msgstr "" +msgstr "Minimalny czas, przez który czynność musi być wymieniona w stosie wywołań." #: rendertime.php:57 #, php-format msgid "" "Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: " "%s, Total: %s" -msgstr "Baza danych: %s/%s, Sieć: %s, Rendering: %s, Sesja: %s, I/O: %s, Inne: %s, Łacznie: %s" +msgstr "Baza danych: %s/%s, Sieć: %s, Rendering: %s, Sesja: %s, Wej/Wyj: %s, Inne: %s, Łącznie: %s" #: rendertime.php:74 #, php-format msgid "Class-Init: %s, Boot: %s, Init: %s, Content: %s, Other: %s, Total: %s" -msgstr "" +msgstr "Rozpoczęcie klasy: %s, Rozruch: %s, Rozpoczęcie: %s, Zawartość: %s, Inne: %s, Łącznie: %s" diff --git a/rendertime/lang/pl/strings.php b/rendertime/lang/pl/strings.php index 668123fb..566394df 100644 --- a/rendertime/lang/pl/strings.php +++ b/rendertime/lang/pl/strings.php @@ -6,4 +6,9 @@ function string_plural_select_pl($n){ if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} $a->strings['Save Settings'] = 'Zapisz ustawienia'; -$a->strings['Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: %s, Total: %s'] = 'Baza danych: %s/%s, Sieć: %s, Rendering: %s, Sesja: %s, I/O: %s, Inne: %s, Łacznie: %s'; +$a->strings['Show callstack'] = 'Pokaż stos wywołań'; +$a->strings['Show detailed performance measures in the callstack. When deactivated, only the summary will be displayed.'] = 'Pokaż szczegółowe miary wydajności w stosie wywołań. Po dezaktywacji wyświetlane będzie tylko podsumowanie.'; +$a->strings['Minimal time'] = 'Czas minimalny'; +$a->strings['Minimal time that an activity needs to be listed in the callstack.'] = 'Minimalny czas, przez który czynność musi być wymieniona w stosie wywołań.'; +$a->strings['Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: %s, Total: %s'] = 'Baza danych: %s/%s, Sieć: %s, Rendering: %s, Sesja: %s, Wej/Wyj: %s, Inne: %s, Łącznie: %s'; +$a->strings['Class-Init: %s, Boot: %s, Init: %s, Content: %s, Other: %s, Total: %s'] = 'Rozpoczęcie klasy: %s, Rozruch: %s, Rozpoczęcie: %s, Zawartość: %s, Inne: %s, Łącznie: %s'; From e3932e4575f55abe9de4e26cc990a37c3ea754ba Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 23 Mar 2022 20:16:55 +0100 Subject: [PATCH 005/677] PL translation update blackout addon THX strebski --- blackout/lang/pl/messages.po | 12 ++++++------ blackout/lang/pl/strings.php | 6 ++++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/blackout/lang/pl/messages.po b/blackout/lang/pl/messages.po index 07424121..b8f088ce 100644 --- a/blackout/lang/pl/messages.po +++ b/blackout/lang/pl/messages.po @@ -12,8 +12,8 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2022-03-08 14:09+0000\n" -"Last-Translator: Piotr Strębski \n" +"PO-Revision-Date: 2014-06-22 11:19+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -32,7 +32,7 @@ msgstr "Data końcowa jest wcześniejsza niż data rozpoczęcia blackoutu, powin msgid "" "Please double check the current settings for the blackout. It will begin on " "%s and end on %s." -msgstr "" +msgstr "Proszę dokładnie sprawdzić aktualne ustawienia blackoutu. Zacznie się o %s i zakończy o %s." #: blackout.php:102 msgid "Save Settings" @@ -48,7 +48,7 @@ msgstr "Wszyscy Twoi goście z Internetu zostaną przekierowani na ten adres URL #: blackout.php:104 msgid "Begin of the Blackout" -msgstr "Rozpocznij Blackout" +msgstr "Rozpocznij blackout" #: blackout.php:104 msgid "" @@ -58,7 +58,7 @@ msgstr "Format to RRRR-MM-DD gg:mm; RRRR rok, MM mies #: blackout.php:105 msgid "End of the Blackout" -msgstr "Koniec Blackout" +msgstr "Koniec blackoutu" #: blackout.php:107 msgid "" @@ -66,4 +66,4 @@ msgid "" " the submit button. Users currently logged in will not be " "thrown out but can't login again after logging out while the blackout is " "still in place." -msgstr "" +msgstr "Uwaga: Przekierowanie będzie aktywne od momentu naciśnięcia przycisku przesyłania. Użytkownicy aktualnie zalogowani nie zostaną wyrzuceni, ale nie będą mogli zalogować się ponownie po wylogowaniu, jeśli blackout będzie nadal obowiązywać." diff --git a/blackout/lang/pl/strings.php b/blackout/lang/pl/strings.php index 132c19d8..b80e36da 100644 --- a/blackout/lang/pl/strings.php +++ b/blackout/lang/pl/strings.php @@ -6,9 +6,11 @@ function string_plural_select_pl($n){ if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } }} $a->strings['The end-date is prior to the start-date of the blackout, you should fix this.'] = 'Data końcowa jest wcześniejsza niż data rozpoczęcia blackoutu, powinieneś to naprawić.'; +$a->strings['Please double check the current settings for the blackout. It will begin on %s and end on %s.'] = 'Proszę dokładnie sprawdzić aktualne ustawienia blackoutu. Zacznie się o %s i zakończy o %s.'; $a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['Redirect URL'] = 'Przekierowanie URL'; $a->strings['All your visitors from the web will be redirected to this URL.'] = 'Wszyscy Twoi goście z Internetu zostaną przekierowani na ten adres URL.'; -$a->strings['Begin of the Blackout'] = 'Rozpocznij Blackout'; +$a->strings['Begin of the Blackout'] = 'Rozpocznij blackout'; $a->strings['Format is YYYY-MM-DD hh:mm; YYYY year, MM month, DD day, hh hour and mm minute.'] = 'Format to RRRR-MM-DD gg:mm; RRRR rok, MM miesiąc, DD dzień, gg godzina i mm minuta.'; -$a->strings['End of the Blackout'] = 'Koniec Blackout'; +$a->strings['End of the Blackout'] = 'Koniec blackoutu'; +$a->strings['Note: The redirect will be active from the moment you press the submit button. Users currently logged in will not be thrown out but can\'t login again after logging out while the blackout is still in place.'] = 'Uwaga: Przekierowanie będzie aktywne od momentu naciśnięcia przycisku przesyłania. Użytkownicy aktualnie zalogowani nie zostaną wyrzuceni, ale nie będą mogli zalogować się ponownie po wylogowaniu, jeśli blackout będzie nadal obowiązywać.'; From 08b984029a65779a4493b4a513eca2ef8859fe93 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 25 Mar 2022 07:06:35 +0100 Subject: [PATCH 006/677] added PL translation for SAML addon THX strebski --- saml/lang/pl/messages.po | 108 +++++++++++++++++++++++++++++++++++++++ saml/lang/pl/strings.php | 26 ++++++++++ 2 files changed, 134 insertions(+) create mode 100644 saml/lang/pl/messages.po create mode 100644 saml/lang/pl/strings.php diff --git a/saml/lang/pl/messages.po b/saml/lang/pl/messages.po new file mode 100644 index 00000000..21a978ae --- /dev/null +++ b/saml/lang/pl/messages.po @@ -0,0 +1,108 @@ +# ADDON saml +# Copyright (C) +# This file is distributed under the same license as the Friendica saml addon package. +# +# +# Translators: +# Piotr Strębski , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-18 07:23+0200\n" +"PO-Revision-Date: 2021-05-18 11:39+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" +"Language-Team: Polish (https://www.transifex.com/Friendica/teams/12172/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +#: saml.php:231 +msgid "Settings statement" +msgstr "Oświadczenie o ustawieniach" + +#: saml.php:232 +msgid "" +"A statement on the settings page explaining where the user should go to " +"change their e-mail and password. BBCode allowed." +msgstr "" +"Oświadczenie na stronie ustawień wyjaśniające, gdzie użytkownik powinien się" +" udać, aby zmienić swój adres e-mail i hasło. Dozwolony kod BBCode." + +#: saml.php:237 +msgid "IdP ID" +msgstr "ID IdP" + +#: saml.php:238 +msgid "" +"Identity provider (IdP) entity URI (e.g., " +"https://example.com/auth/realms/user)." +msgstr "" +"Identyfikator URI jednostki dostawcy tożsamości (IdP) (np. " +"https://example.com/auth/realms/user)." + +#: saml.php:242 +msgid "Client ID" +msgstr "ID klienta" + +#: saml.php:243 +msgid "Identifier assigned to client by the identity provider (IdP)." +msgstr "Identyfikator przypisywany klientowi przez dostawcę tożsamości (IdP)." + +#: saml.php:247 +msgid "IdP SSO URL" +msgstr "Adres URL logowania jednokrotnego dostawcy tożsamości" + +#: saml.php:248 +msgid "The URL for your identity provider's SSO endpoint." +msgstr "" +"Adres URL punktu końcowego logowania jednokrotnego dostawcy tożsamości." + +#: saml.php:252 +msgid "IdP SLO request URL" +msgstr "Adres URL żądania SLO dostawcy tożsamości" + +#: saml.php:253 +msgid "The URL for your identity provider's SLO request endpoint." +msgstr "Adres URL punktu końcowego żądania SLO dostawcy tożsamości." + +#: saml.php:257 +msgid "IdP SLO response URL" +msgstr "Adres URL odpowiedzi dostawcy usług SLO" + +#: saml.php:258 +msgid "The URL for your identity provider's SLO response endpoint." +msgstr "" +"Adres URL punktu końcowego odpowiedzi SLO Twojego dostawcy tożsamości." + +#: saml.php:262 +msgid "SP private key" +msgstr "Klucz prywatny SP" + +#: saml.php:263 +msgid "The private key the addon should use to authenticate." +msgstr "Klucz prywatny, którego dodatek powinien używać do uwierzytelniania." + +#: saml.php:267 +msgid "SP certificate" +msgstr "Certyfikat SP" + +#: saml.php:268 +msgid "The certficate for the addon's private key." +msgstr "Certyfikat klucza prywatnego dodatku." + +#: saml.php:272 +msgid "IdP certificate" +msgstr "Certyfikat IdP" + +#: saml.php:273 +msgid "The x509 certficate for your identity provider." +msgstr "Certyfikat x509 dla dostawcy tożsamości." + +#: saml.php:276 +msgid "Save Settings" +msgstr "Zapisz ustawienia" diff --git a/saml/lang/pl/strings.php b/saml/lang/pl/strings.php new file mode 100644 index 00000000..961bb610 --- /dev/null +++ b/saml/lang/pl/strings.php @@ -0,0 +1,26 @@ +=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; } +}} +$a->strings['Settings statement'] = 'Oświadczenie o ustawieniach'; +$a->strings['A statement on the settings page explaining where the user should go to change their e-mail and password. BBCode allowed.'] = 'Oświadczenie na stronie ustawień wyjaśniające, gdzie użytkownik powinien się udać, aby zmienić swój adres e-mail i hasło. Dozwolony kod BBCode.'; +$a->strings['IdP ID'] = 'ID IdP'; +$a->strings['Identity provider (IdP) entity URI (e.g., https://example.com/auth/realms/user).'] = 'Identyfikator URI jednostki dostawcy tożsamości (IdP) (np. https://example.com/auth/realms/user).'; +$a->strings['Client ID'] = 'ID klienta'; +$a->strings['Identifier assigned to client by the identity provider (IdP).'] = 'Identyfikator przypisywany klientowi przez dostawcę tożsamości (IdP).'; +$a->strings['IdP SSO URL'] = 'Adres URL logowania jednokrotnego dostawcy tożsamości'; +$a->strings['The URL for your identity provider\'s SSO endpoint.'] = 'Adres URL punktu końcowego logowania jednokrotnego dostawcy tożsamości.'; +$a->strings['IdP SLO request URL'] = 'Adres URL żądania SLO dostawcy tożsamości'; +$a->strings['The URL for your identity provider\'s SLO request endpoint.'] = 'Adres URL punktu końcowego żądania SLO dostawcy tożsamości.'; +$a->strings['IdP SLO response URL'] = 'Adres URL odpowiedzi dostawcy usług SLO'; +$a->strings['The URL for your identity provider\'s SLO response endpoint.'] = 'Adres URL punktu końcowego odpowiedzi SLO Twojego dostawcy tożsamości.'; +$a->strings['SP private key'] = 'Klucz prywatny SP'; +$a->strings['The private key the addon should use to authenticate.'] = 'Klucz prywatny, którego dodatek powinien używać do uwierzytelniania.'; +$a->strings['SP certificate'] = 'Certyfikat SP'; +$a->strings['The certficate for the addon\'s private key.'] = 'Certyfikat klucza prywatnego dodatku.'; +$a->strings['IdP certificate'] = 'Certyfikat IdP'; +$a->strings['The x509 certficate for your identity provider.'] = 'Certyfikat x509 dla dostawcy tożsamości.'; +$a->strings['Save Settings'] = 'Zapisz ustawienia'; From 82f8c14633719117b1be9c54c98f0df30595ba27 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 2 Apr 2022 21:16:21 +0200 Subject: [PATCH 007/677] Move ACCEPT constants to own "enum" class --- dwpost/dwpost.php | 3 ++- ijpost/ijpost.php | 3 ++- ljpost/ljpost.php | 3 ++- mailstream/mailstream.php | 3 ++- pumpio/pumpio.php | 3 ++- statusnet/statusnet.php | 3 ++- webdav_storage/src/WebDav.php | 15 ++++++++------- webdav_storage/src/WebDavConfig.php | 3 ++- 8 files changed, 22 insertions(+), 14 deletions(-) diff --git a/dwpost/dwpost.php b/dwpost/dwpost.php index 286d8012..bab93dff 100644 --- a/dwpost/dwpost.php +++ b/dwpost/dwpost.php @@ -17,6 +17,7 @@ use Friendica\DI; use Friendica\Model\Post; use Friendica\Model\Tag; use Friendica\Model\User; +use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Util\DateTimeFormat; use Friendica\Util\XML; @@ -192,7 +193,7 @@ EOT; Logger::debug('dwpost: data: ' . $xml); if ($dw_blog !== 'test') { - $x = DI::httpClient()->post($dw_blog, $xml, ['Content-Type' => 'text/xml'])->getBody(); + $x = DI::httpClient()->post($dw_blog, $xml, HttpClientAccept::DEFAULT, ['Content-Type' => 'text/xml'])->getBody(); } Logger::info('posted to dreamwidth: ' . ($x) ? $x : ''); diff --git a/ijpost/ijpost.php b/ijpost/ijpost.php index 79cd75c8..832dff2c 100644 --- a/ijpost/ijpost.php +++ b/ijpost/ijpost.php @@ -16,6 +16,7 @@ use Friendica\Core\Renderer; use Friendica\DI; use Friendica\Model\Tag; use Friendica\Model\User; +use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Util\DateTimeFormat; use Friendica\Util\XML; @@ -186,7 +187,7 @@ EOT; Logger::debug('ijpost: data: ' . $xml); if ($ij_blog !== 'test') { - $x = DI::httpClient()->post($ij_blog, $xml, ['Content-Type' => 'text/xml'])->getBody(); + $x = DI::httpClient()->post($ij_blog, $xml, HttpClientAccept::DEFAULT, ['Content-Type' => 'text/xml'])->getBody(); } Logger::info('posted to insanejournal: ' . $x ? $x : ''); } diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index 073a977e..2fa5e782 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -17,6 +17,7 @@ use Friendica\DI; use Friendica\Model\Post; use Friendica\Model\Tag; use Friendica\Model\User; +use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Util\DateTimeFormat; use Friendica\Util\XML; @@ -206,7 +207,7 @@ EOT; Logger::debug('ljpost: data: ' . $xml); if ($lj_blog !== 'test') { - $x = DI::httpClient()->post($lj_blog, $xml, ['Content-Type' => 'text/xml'])->getBody(); + $x = DI::httpClient()->post($lj_blog, $xml, HttpClientAccept::DEFAULT, ['Content-Type' => 'text/xml'])->getBody(); } Logger::info('posted to livejournal: ' . ($x) ? $x : ''); } diff --git a/mailstream/mailstream.php b/mailstream/mailstream.php index 33959e1e..60d6412b 100644 --- a/mailstream/mailstream.php +++ b/mailstream/mailstream.php @@ -19,6 +19,7 @@ use Friendica\Model\Contact; use Friendica\Model\Item; use Friendica\Model\Post; use Friendica\Model\User; +use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Protocol\Activity; use Friendica\Util\DateTimeFormat; @@ -207,7 +208,7 @@ function mailstream_do_images(&$item, &$attachments) continue; } $cookiejar = tempnam(System::getTempPath(), 'cookiejar-mailstream-'); - $curlResult = DI::httpClient()->fetchFull($url, 0, '', $cookiejar); + $curlResult = DI::httpClient()->fetchFull($url, HttpClientAccept::DEFAULT, 0, $cookiejar); $attachments[$url] = [ 'data' => $curlResult->getBody(), 'guid' => hash("crc32", $url), diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 62ad7712..1253d376 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -22,6 +22,7 @@ use Friendica\Model\Group; use Friendica\Model\Item; use Friendica\Model\Post; use Friendica\Model\User; +use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Protocol\Activity; use Friendica\Protocol\ActivityNamespace; @@ -1487,7 +1488,7 @@ function pumpio_fetchallcomments(App $a, $uid, $id) function pumpio_reachable($url) { - return DI::httpClient()->get($url, [HttpClientOptions::TIMEOUT => 10])->isSuccess(); + return DI::httpClient()->get($url, HttpClientAccept::DEFAULT, [HttpClientOptions::TIMEOUT => 10])->isSuccess(); } /* diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index b2582b86..6fc1469c 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -56,6 +56,7 @@ use Friendica\Model\Item; use Friendica\Model\Photo; use Friendica\Model\Post; use Friendica\Model\User; +use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Protocol\Activity; use Friendica\Util\DateTimeFormat; use Friendica\Util\Strings; @@ -1367,7 +1368,7 @@ function statusnet_convertmsg(App $a, $body) } elseif ($oembed_data->type != "link") { $body = str_replace($search, "[url=" . $expanded_url . "]" . $expanded_url . "[/url]", $body); } else { - $img_str = DI::httpClient()->fetch($expanded_url, 4); + $img_str = DI::httpClient()->fetch($expanded_url, HttpClientAccept::DEFAULT, 4); $tempfile = tempnam(System::getTempPath(), "cache"); file_put_contents($tempfile, $img_str); diff --git a/webdav_storage/src/WebDav.php b/webdav_storage/src/WebDav.php index de9fc476..2e6b5b4e 100644 --- a/webdav_storage/src/WebDav.php +++ b/webdav_storage/src/WebDav.php @@ -6,6 +6,7 @@ use Exception; use Friendica\Core\Storage\Capability\ICanWriteToStorage; use Friendica\Core\Storage\Exception\ReferenceStorageException; use Friendica\Core\Storage\Exception\StorageException; +use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Network\HTTPClient\Capability\ICanSendHttpRequests; use Friendica\Util\Strings; @@ -85,7 +86,7 @@ class WebDav implements ICanWriteToStorage */ protected function exists(string $uri): bool { - return $this->client->head($uri, [HttpClientOptions::AUTH => $this->authOptions])->getReturnCode() == 200; + return $this->client->head($uri, HttpClientAccept::DEFAULT, [HttpClientOptions::AUTH => $this->authOptions])->getReturnCode() == 200; } /** @@ -110,7 +111,7 @@ class WebDav implements ICanWriteToStorage HttpClientOptions::BODY => $dom->saveXML(), ]; - $response = $this->client->request('propfind', $uri, $opts); + $response = $this->client->request('propfind', $uri, HttpClientAccept::DEFAULT, $opts); $responseDoc = new \DOMDocument(); $responseDoc->loadXML($response->getBody()); @@ -133,7 +134,7 @@ class WebDav implements ICanWriteToStorage */ protected function mkcol(string $uri): bool { - return $this->client->request('mkcol', $uri, [HttpClientOptions::AUTH => $this->authOptions]) + return $this->client->request('mkcol', $uri, HttpClientAccept::DEFAULT, [HttpClientOptions::AUTH => $this->authOptions]) ->getReturnCode() == 200; } @@ -177,7 +178,7 @@ class WebDav implements ICanWriteToStorage foreach ($pathParts as $pathPart) { $checkUrl = $this->url . $partURL; if (!empty($partURL) && !$this->hasItems($checkUrl)) { - $response = $this->client->request('delete', $checkUrl, [HttpClientOptions::AUTH => $this->authOptions]); + $response = $this->client->request('delete', $checkUrl, HttpClientAccept::DEFAULT, [HttpClientOptions::AUTH => $this->authOptions]); if (!$response->isSuccess()) { if ($response->getReturnCode() == "404") { @@ -199,7 +200,7 @@ class WebDav implements ICanWriteToStorage { $file = $this->pathForRef($reference); - $response = $this->client->request('get', $this->url . '/' . $file[0], [HttpClientOptions::AUTH => $this->authOptions]); + $response = $this->client->request('get', $this->url . '/' . $file[0], HttpClientAccept::DEFAULT, [HttpClientOptions::AUTH => $this->authOptions]); if (!$response->isSuccess()) { throw new ReferenceStorageException(sprintf('Invalid reference %s', $reference)); @@ -229,7 +230,7 @@ class WebDav implements ICanWriteToStorage HttpClientOptions::AUTH => $this->authOptions, ]; - $this->client->request('put', $this->url . '/' . $file[0], $opts); + $this->client->request('put', $this->url . '/' . $file[0], HttpClientAccept::DEFAULT, $opts); return $reference; } @@ -241,7 +242,7 @@ class WebDav implements ICanWriteToStorage { $file = $this->pathForRef($reference); - $response = $this->client->request('delete', $this->url . '/' . $file[0], [HttpClientOptions::AUTH => $this->authOptions]); + $response = $this->client->request('delete', $this->url . '/' . $file[0], HttpClientAccept::DEFAULT, [HttpClientOptions::AUTH => $this->authOptions]); if (!$response->isSuccess()) { throw new ReferenceStorageException(sprintf('Invalid reference %s', $reference)); diff --git a/webdav_storage/src/WebDavConfig.php b/webdav_storage/src/WebDavConfig.php index 2236e97a..4a0c3c67 100644 --- a/webdav_storage/src/WebDavConfig.php +++ b/webdav_storage/src/WebDavConfig.php @@ -5,6 +5,7 @@ namespace Friendica\Addon\webdav_storage\src; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; use Friendica\Core\Storage\Capability\ICanConfigureStorage; +use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Network\HTTPClient\Capability\ICanSendHttpRequests; @@ -138,7 +139,7 @@ class WebDavConfig implements ICanConfigureStorage ]; } - if (!$this->client->head($url, [HttpClientOptions::AUTH => $options])->isSuccess()) { + if (!$this->client->head($url, HttpClientAccept::DEFAULT, [HttpClientOptions::AUTH => $options])->isSuccess()) { return [ 'url' => $this->l10n->t('url is either invalid or not reachable'), ]; From 707e03635b6e1e3a32510758707dfd7ccd750d74 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 3 Apr 2022 19:33:08 +0200 Subject: [PATCH 008/677] Remove accept parameter for head/post again --- dwpost/dwpost.php | 3 +-- ijpost/ijpost.php | 3 +-- ljpost/ljpost.php | 3 +-- webdav_storage/src/WebDav.php | 4 ++-- webdav_storage/src/WebDavConfig.php | 3 +-- 5 files changed, 6 insertions(+), 10 deletions(-) diff --git a/dwpost/dwpost.php b/dwpost/dwpost.php index bab93dff..286d8012 100644 --- a/dwpost/dwpost.php +++ b/dwpost/dwpost.php @@ -17,7 +17,6 @@ use Friendica\DI; use Friendica\Model\Post; use Friendica\Model\Tag; use Friendica\Model\User; -use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Util\DateTimeFormat; use Friendica\Util\XML; @@ -193,7 +192,7 @@ EOT; Logger::debug('dwpost: data: ' . $xml); if ($dw_blog !== 'test') { - $x = DI::httpClient()->post($dw_blog, $xml, HttpClientAccept::DEFAULT, ['Content-Type' => 'text/xml'])->getBody(); + $x = DI::httpClient()->post($dw_blog, $xml, ['Content-Type' => 'text/xml'])->getBody(); } Logger::info('posted to dreamwidth: ' . ($x) ? $x : ''); diff --git a/ijpost/ijpost.php b/ijpost/ijpost.php index 832dff2c..79cd75c8 100644 --- a/ijpost/ijpost.php +++ b/ijpost/ijpost.php @@ -16,7 +16,6 @@ use Friendica\Core\Renderer; use Friendica\DI; use Friendica\Model\Tag; use Friendica\Model\User; -use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Util\DateTimeFormat; use Friendica\Util\XML; @@ -187,7 +186,7 @@ EOT; Logger::debug('ijpost: data: ' . $xml); if ($ij_blog !== 'test') { - $x = DI::httpClient()->post($ij_blog, $xml, HttpClientAccept::DEFAULT, ['Content-Type' => 'text/xml'])->getBody(); + $x = DI::httpClient()->post($ij_blog, $xml, ['Content-Type' => 'text/xml'])->getBody(); } Logger::info('posted to insanejournal: ' . $x ? $x : ''); } diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index 2fa5e782..073a977e 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -17,7 +17,6 @@ use Friendica\DI; use Friendica\Model\Post; use Friendica\Model\Tag; use Friendica\Model\User; -use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Util\DateTimeFormat; use Friendica\Util\XML; @@ -207,7 +206,7 @@ EOT; Logger::debug('ljpost: data: ' . $xml); if ($lj_blog !== 'test') { - $x = DI::httpClient()->post($lj_blog, $xml, HttpClientAccept::DEFAULT, ['Content-Type' => 'text/xml'])->getBody(); + $x = DI::httpClient()->post($lj_blog, $xml, ['Content-Type' => 'text/xml'])->getBody(); } Logger::info('posted to livejournal: ' . ($x) ? $x : ''); } diff --git a/webdav_storage/src/WebDav.php b/webdav_storage/src/WebDav.php index 2e6b5b4e..1a31a4c2 100644 --- a/webdav_storage/src/WebDav.php +++ b/webdav_storage/src/WebDav.php @@ -86,7 +86,7 @@ class WebDav implements ICanWriteToStorage */ protected function exists(string $uri): bool { - return $this->client->head($uri, HttpClientAccept::DEFAULT, [HttpClientOptions::AUTH => $this->authOptions])->getReturnCode() == 200; + return $this->client->head($uri, [HttpClientOptions::AUTH => $this->authOptions])->getReturnCode() == 200; } /** @@ -178,7 +178,7 @@ class WebDav implements ICanWriteToStorage foreach ($pathParts as $pathPart) { $checkUrl = $this->url . $partURL; if (!empty($partURL) && !$this->hasItems($checkUrl)) { - $response = $this->client->request('delete', $checkUrl, HttpClientAccept::DEFAULT, [HttpClientOptions::AUTH => $this->authOptions]); + $response = $this->client->request('delete', $checkUrl, [HttpClientOptions::AUTH => $this->authOptions]); if (!$response->isSuccess()) { if ($response->getReturnCode() == "404") { diff --git a/webdav_storage/src/WebDavConfig.php b/webdav_storage/src/WebDavConfig.php index 4a0c3c67..2236e97a 100644 --- a/webdav_storage/src/WebDavConfig.php +++ b/webdav_storage/src/WebDavConfig.php @@ -5,7 +5,6 @@ namespace Friendica\Addon\webdav_storage\src; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; use Friendica\Core\Storage\Capability\ICanConfigureStorage; -use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Network\HTTPClient\Capability\ICanSendHttpRequests; @@ -139,7 +138,7 @@ class WebDavConfig implements ICanConfigureStorage ]; } - if (!$this->client->head($url, HttpClientAccept::DEFAULT, [HttpClientOptions::AUTH => $options])->isSuccess()) { + if (!$this->client->head($url, [HttpClientOptions::AUTH => $options])->isSuccess()) { return [ 'url' => $this->l10n->t('url is either invalid or not reachable'), ]; From 46221882c373dc9c8efb610102f4b825c1067ef8 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 3 Apr 2022 19:35:39 +0200 Subject: [PATCH 009/677] Remove accept parameter for request again --- webdav_storage/src/WebDav.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/webdav_storage/src/WebDav.php b/webdav_storage/src/WebDav.php index 1a31a4c2..a5ee5161 100644 --- a/webdav_storage/src/WebDav.php +++ b/webdav_storage/src/WebDav.php @@ -111,7 +111,7 @@ class WebDav implements ICanWriteToStorage HttpClientOptions::BODY => $dom->saveXML(), ]; - $response = $this->client->request('propfind', $uri, HttpClientAccept::DEFAULT, $opts); + $response = $this->client->request('propfind', $uri, $opts); $responseDoc = new \DOMDocument(); $responseDoc->loadXML($response->getBody()); @@ -134,7 +134,7 @@ class WebDav implements ICanWriteToStorage */ protected function mkcol(string $uri): bool { - return $this->client->request('mkcol', $uri, HttpClientAccept::DEFAULT, [HttpClientOptions::AUTH => $this->authOptions]) + return $this->client->request('mkcol', $uri, [HttpClientOptions::AUTH => $this->authOptions]) ->getReturnCode() == 200; } @@ -200,7 +200,7 @@ class WebDav implements ICanWriteToStorage { $file = $this->pathForRef($reference); - $response = $this->client->request('get', $this->url . '/' . $file[0], HttpClientAccept::DEFAULT, [HttpClientOptions::AUTH => $this->authOptions]); + $response = $this->client->request('get', $this->url . '/' . $file[0], [HttpClientOptions::AUTH => $this->authOptions]); if (!$response->isSuccess()) { throw new ReferenceStorageException(sprintf('Invalid reference %s', $reference)); @@ -230,7 +230,7 @@ class WebDav implements ICanWriteToStorage HttpClientOptions::AUTH => $this->authOptions, ]; - $this->client->request('put', $this->url . '/' . $file[0], HttpClientAccept::DEFAULT, $opts); + $this->client->request('put', $this->url . '/' . $file[0], $opts); return $reference; } @@ -242,7 +242,7 @@ class WebDav implements ICanWriteToStorage { $file = $this->pathForRef($reference); - $response = $this->client->request('delete', $this->url . '/' . $file[0], HttpClientAccept::DEFAULT, [HttpClientOptions::AUTH => $this->authOptions]); + $response = $this->client->request('delete', $this->url . '/' . $file[0], [HttpClientOptions::AUTH => $this->authOptions]); if (!$response->isSuccess()) { throw new ReferenceStorageException(sprintf('Invalid reference %s', $reference)); From bfc45428817b3b6f9a4d2f023b780ce89c270b90 Mon Sep 17 00:00:00 2001 From: Philipp Date: Fri, 8 Apr 2022 20:06:45 +0200 Subject: [PATCH 010/677] Remove redundant header --- webdav_storage/src/WebDav.php | 1 - 1 file changed, 1 deletion(-) diff --git a/webdav_storage/src/WebDav.php b/webdav_storage/src/WebDav.php index a5ee5161..de9fc476 100644 --- a/webdav_storage/src/WebDav.php +++ b/webdav_storage/src/WebDav.php @@ -6,7 +6,6 @@ use Exception; use Friendica\Core\Storage\Capability\ICanWriteToStorage; use Friendica\Core\Storage\Exception\ReferenceStorageException; use Friendica\Core\Storage\Exception\StorageException; -use Friendica\Network\HTTPClient\Client\HttpClientAccept; use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Network\HTTPClient\Capability\ICanSendHttpRequests; use Friendica\Util\Strings; From f1933d2f89947e40abe86252cb66a60953301d84 Mon Sep 17 00:00:00 2001 From: atjn Date: Thu, 28 Apr 2022 21:12:20 +0200 Subject: [PATCH 011/677] Update browser support notes --- webrtc/README.md | 10 ++++------ webrtc/webrtc.php | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/webrtc/README.md b/webrtc/README.md index 2b5c9ed0..673eaeb2 100644 --- a/webrtc/README.md +++ b/webrtc/README.md @@ -10,12 +10,10 @@ really a person 2 person communication, using the server to only signal who wants to talk to who, the actual transfer of the audio and video is directly between the participants. -If you would like to try this addon please download one of the following -either Chrome/Chromium 25 or higher or Firefox 21 or higher. Then test it by -visiting a known webrtc instance (i.e. [live.mayfirst.org](https://live.mayfirst.org)) create a -room, you should be asked to share your camera and microphone (firefox will let -you choose one or the other, whereas chrome/chromium asks for both in one -question). +You can test it by visiting a known webrtc instance (i.e. [live.mayfirst.org](https://live.mayfirst.org)) +create a room, you should be asked to share your camera and microphone (firefox +will let you choose one or the other, whereas chrome/chromium asks for both in +one question). If the test is successful then proceed with copying the webrtc instance you would like to use and place it in the config window and save. Now when you diff --git a/webrtc/webrtc.php b/webrtc/webrtc.php index 29c7fc8f..194425d5 100644 --- a/webrtc/webrtc.php +++ b/webrtc/webrtc.php @@ -42,7 +42,7 @@ function webrtc_content(&$a) { /* embedd the landing page in an iframe */ $o .= '

'.DI::l10n()->t('Video Chat').'

'; - $o .= '

'.DI::l10n()->t('WebRTC is a video and audio conferencing tool that works with Firefox (version 21 and above) and Chrome/Chromium (version 25 and above). Just create a new chat room and send the link to someone you want to chat with.').'

'; + $o .= '

'.DI::l10n()->t('WebRTC is a video and audio conferencing tool that works in all modern browsers. Just create a new chat room and send the link to someone you want to chat with.').'

'; if ($webrtcurl == '') { $o .= '

'.DI::l10n()->t('Please contact your friendica admin and send a reminder to configure the WebRTC addon.').'

'; } else { From d584f0e729093351f6b6ad6960d466cb45488175 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 29 Apr 2022 15:57:44 +0200 Subject: [PATCH 012/677] regen webrtc messeages.po file --- webrtc/lang/C/messages.po | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/webrtc/lang/C/messages.po b/webrtc/lang/C/messages.po index 11171c84..ad233014 100644 --- a/webrtc/lang/C/messages.po +++ b/webrtc/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:16+0100\n" +"POT-Creation-Date: 2022-04-29 15:56+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,36 +17,36 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: webrtc.php:19 +#: webrtc.php:18 msgid "WebRTC Videochat" msgstr "" -#: webrtc.php:25 +#: webrtc.php:24 msgid "Save Settings" msgstr "" -#: webrtc.php:26 +#: webrtc.php:25 msgid "WebRTC Base URL" msgstr "" -#: webrtc.php:26 +#: webrtc.php:25 msgid "" "Page your users will create a WebRTC chat room on. For example you could use " "https://live.mayfirst.org ." msgstr "" -#: webrtc.php:45 +#: webrtc.php:44 msgid "Video Chat" msgstr "" -#: webrtc.php:46 +#: webrtc.php:45 msgid "" -"WebRTC is a video and audio conferencing tool that works with Firefox " -"(version 21 and above) and Chrome/Chromium (version 25 and above). Just " -"create a new chat room and send the link to someone you want to chat with." +"WebRTC is a video and audio conferencing tool that works in all modern " +"browsers. Just create a new chat room and send the link to someone you want " +"to chat with." msgstr "" -#: webrtc.php:48 +#: webrtc.php:47 msgid "" "Please contact your friendica admin and send a reminder to configure the " "WebRTC addon." From 931be19eca34117056771db781b48aaacaac1921 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Mon, 2 May 2022 12:26:36 +0200 Subject: [PATCH 013/677] DA DK translation for various addons added THX atjn --- advancedcontentfilter/lang/da-dk/messages.po | 157 ++++++++ advancedcontentfilter/lang/da-dk/strings.php | 7 + blackout/lang/da-dk/messages.po | 66 ++++ blackout/lang/da-dk/strings.php | 7 + blockem/lang/da-dk/messages.po | 47 +++ blockem/lang/da-dk/strings.php | 13 + buglink/lang/da-dk/messages.po | 24 ++ buglink/lang/da-dk/strings.php | 8 + catavatar/lang/da-dk/messages.po | 58 +++ catavatar/lang/da-dk/strings.php | 8 + cookienotice/lang/da-dk/messages.po | 53 +++ cookienotice/lang/da-dk/strings.php | 7 + curweather/lang/da-dk/messages.po | 123 +++++++ curweather/lang/da-dk/strings.php | 7 + diaspora/lang/da-dk/messages.po | 102 ++++++ diaspora/lang/da-dk/strings.php | 18 + dwpost/lang/da-dk/messages.po | 43 +++ dwpost/lang/da-dk/strings.php | 7 + forumdirectory/lang/da-dk/messages.po | 48 +++ forumdirectory/lang/da-dk/strings.php | 14 + fromapp/lang/da-dk/messages.po | 35 ++ fromapp/lang/da-dk/strings.php | 10 + geonames/lang/da-dk/messages.po | 34 ++ geonames/lang/da-dk/strings.php | 10 + gnot/lang/da-dk/messages.po | 38 ++ gnot/lang/da-dk/strings.php | 7 + gravatar/lang/da-dk/messages.po | 70 ++++ gravatar/lang/da-dk/strings.php | 7 + group_text/lang/da-dk/messages.po | 28 ++ group_text/lang/da-dk/strings.php | 9 + ifttt/lang/da-dk/messages.po | 58 +++ ifttt/lang/da-dk/strings.php | 7 + ijpost/lang/da-dk/messages.po | 43 +++ ijpost/lang/da-dk/strings.php | 7 + impressum/lang/da-dk/messages.po | 85 +++++ impressum/lang/da-dk/strings.php | 22 ++ .../lang/da-dk/messages.po | 24 ++ .../lang/da-dk/strings.php | 8 + irc/lang/da-dk/messages.po | 62 ++++ irc/lang/da-dk/strings.php | 7 + js_upload/lang/da-dk/messages.po | 58 +++ js_upload/lang/da-dk/strings.php | 16 + krynn/lang/da-dk/messages.po | 27 ++ krynn/lang/da-dk/strings.php | 7 + langfilter/lang/da-dk/messages.po | 76 ++++ langfilter/lang/da-dk/strings.php | 18 + libertree/lang/da-dk/messages.po | 43 +++ libertree/lang/da-dk/strings.php | 7 + libravatar/lang/da-dk/messages.po | 71 ++++ libravatar/lang/da-dk/strings.php | 15 + ljpost/lang/da-dk/messages.po | 43 +++ ljpost/lang/da-dk/strings.php | 7 + mailstream/lang/da-dk/messages.po | 97 +++++ mailstream/lang/da-dk/strings.php | 7 + mathjax/lang/da-dk/messages.po | 31 ++ mathjax/lang/da-dk/strings.php | 9 + morechoice/lang/da-dk/messages.po | 342 ++++++++++++++++++ morechoice/lang/da-dk/strings.php | 66 ++++ morepokes/lang/da-dk/messages.po | 167 +++++++++ morepokes/lang/da-dk/strings.php | 43 +++ newmemberwidget/lang/da-dk/messages.po | 76 ++++ newmemberwidget/lang/da-dk/strings.php | 20 + notifyall/lang/da-dk/messages.po | 60 +++ notifyall/lang/da-dk/strings.php | 16 + nsfw/lang/da-dk/messages.po | 54 +++ nsfw/lang/da-dk/strings.php | 14 + numfriends/lang/da-dk/messages.po | 28 ++ numfriends/lang/da-dk/strings.php | 9 + openstreetmap/lang/da-dk/messages.po | 65 ++++ openstreetmap/lang/da-dk/strings.php | 17 + pageheader/lang/da-dk/messages.po | 38 ++ pageheader/lang/da-dk/strings.php | 11 + piwik/lang/da-dk/messages.po | 60 +++ piwik/lang/da-dk/strings.php | 15 + planets/lang/da-dk/messages.po | 28 ++ planets/lang/da-dk/strings.php | 9 + public_server/lang/da-dk/messages.po | 49 +++ public_server/lang/da-dk/strings.php | 17 + pumpio/lang/da-dk/messages.po | 93 +++++ pumpio/lang/da-dk/strings.php | 7 + qcomment/lang/da-dk/messages.po | 46 +++ qcomment/lang/da-dk/strings.php | 13 + randplace/lang/da-dk/messages.po | 27 ++ randplace/lang/da-dk/strings.php | 7 + rendertime/lang/da-dk/messages.po | 53 +++ rendertime/lang/da-dk/strings.php | 7 + securemail/lang/da-dk/messages.po | 54 +++ securemail/lang/da-dk/strings.php | 15 + showmore/lang/da-dk/messages.po | 36 ++ showmore/lang/da-dk/strings.php | 11 + smileybutton/lang/da-dk/messages.po | 36 ++ smileybutton/lang/da-dk/strings.php | 11 + startpage/lang/da-dk/messages.po | 32 ++ startpage/lang/da-dk/strings.php | 10 + statusnet/lang/da-dk/messages.po | 174 +++++++++ statusnet/lang/da-dk/strings.php | 8 + superblock/lang/da-dk/messages.po | 32 ++ superblock/lang/da-dk/strings.php | 10 + testdrive/lang/da-dk/messages.po | 41 +++ testdrive/lang/da-dk/strings.php | 15 + tictac/lang/da-dk/messages.po | 74 ++++ tictac/lang/da-dk/strings.php | 19 + tumblr/lang/da-dk/messages.po | 72 ++++ tumblr/lang/da-dk/strings.php | 15 + twitter/lang/da-dk/messages.po | 146 ++++++++ twitter/lang/da-dk/strings.php | 32 ++ viewsrc/lang/da-dk/messages.po | 26 ++ viewsrc/lang/da-dk/strings.php | 8 + webrtc/lang/da-dk/messages.po | 55 +++ webrtc/lang/da-dk/strings.php | 14 + windowsphonepush/lang/da-dk/messages.po | 36 ++ windowsphonepush/lang/da-dk/strings.php | 11 + wppost/lang/da-dk/messages.po | 69 ++++ wppost/lang/da-dk/strings.php | 7 + 114 files changed, 4446 insertions(+) create mode 100644 advancedcontentfilter/lang/da-dk/messages.po create mode 100644 advancedcontentfilter/lang/da-dk/strings.php create mode 100644 blackout/lang/da-dk/messages.po create mode 100644 blackout/lang/da-dk/strings.php create mode 100644 blockem/lang/da-dk/messages.po create mode 100644 blockem/lang/da-dk/strings.php create mode 100644 buglink/lang/da-dk/messages.po create mode 100644 buglink/lang/da-dk/strings.php create mode 100644 catavatar/lang/da-dk/messages.po create mode 100644 catavatar/lang/da-dk/strings.php create mode 100644 cookienotice/lang/da-dk/messages.po create mode 100644 cookienotice/lang/da-dk/strings.php create mode 100644 curweather/lang/da-dk/messages.po create mode 100644 curweather/lang/da-dk/strings.php create mode 100644 diaspora/lang/da-dk/messages.po create mode 100644 diaspora/lang/da-dk/strings.php create mode 100644 dwpost/lang/da-dk/messages.po create mode 100644 dwpost/lang/da-dk/strings.php create mode 100644 forumdirectory/lang/da-dk/messages.po create mode 100644 forumdirectory/lang/da-dk/strings.php create mode 100644 fromapp/lang/da-dk/messages.po create mode 100644 fromapp/lang/da-dk/strings.php create mode 100644 geonames/lang/da-dk/messages.po create mode 100644 geonames/lang/da-dk/strings.php create mode 100644 gnot/lang/da-dk/messages.po create mode 100644 gnot/lang/da-dk/strings.php create mode 100644 gravatar/lang/da-dk/messages.po create mode 100644 gravatar/lang/da-dk/strings.php create mode 100644 group_text/lang/da-dk/messages.po create mode 100644 group_text/lang/da-dk/strings.php create mode 100644 ifttt/lang/da-dk/messages.po create mode 100644 ifttt/lang/da-dk/strings.php create mode 100644 ijpost/lang/da-dk/messages.po create mode 100644 ijpost/lang/da-dk/strings.php create mode 100644 impressum/lang/da-dk/messages.po create mode 100644 impressum/lang/da-dk/strings.php create mode 100644 infiniteimprobabilitydrive/lang/da-dk/messages.po create mode 100644 infiniteimprobabilitydrive/lang/da-dk/strings.php create mode 100644 irc/lang/da-dk/messages.po create mode 100644 irc/lang/da-dk/strings.php create mode 100644 js_upload/lang/da-dk/messages.po create mode 100644 js_upload/lang/da-dk/strings.php create mode 100644 krynn/lang/da-dk/messages.po create mode 100644 krynn/lang/da-dk/strings.php create mode 100644 langfilter/lang/da-dk/messages.po create mode 100644 langfilter/lang/da-dk/strings.php create mode 100644 libertree/lang/da-dk/messages.po create mode 100644 libertree/lang/da-dk/strings.php create mode 100644 libravatar/lang/da-dk/messages.po create mode 100644 libravatar/lang/da-dk/strings.php create mode 100644 ljpost/lang/da-dk/messages.po create mode 100644 ljpost/lang/da-dk/strings.php create mode 100644 mailstream/lang/da-dk/messages.po create mode 100644 mailstream/lang/da-dk/strings.php create mode 100644 mathjax/lang/da-dk/messages.po create mode 100644 mathjax/lang/da-dk/strings.php create mode 100644 morechoice/lang/da-dk/messages.po create mode 100644 morechoice/lang/da-dk/strings.php create mode 100644 morepokes/lang/da-dk/messages.po create mode 100644 morepokes/lang/da-dk/strings.php create mode 100644 newmemberwidget/lang/da-dk/messages.po create mode 100644 newmemberwidget/lang/da-dk/strings.php create mode 100644 notifyall/lang/da-dk/messages.po create mode 100644 notifyall/lang/da-dk/strings.php create mode 100644 nsfw/lang/da-dk/messages.po create mode 100644 nsfw/lang/da-dk/strings.php create mode 100644 numfriends/lang/da-dk/messages.po create mode 100644 numfriends/lang/da-dk/strings.php create mode 100644 openstreetmap/lang/da-dk/messages.po create mode 100644 openstreetmap/lang/da-dk/strings.php create mode 100644 pageheader/lang/da-dk/messages.po create mode 100644 pageheader/lang/da-dk/strings.php create mode 100644 piwik/lang/da-dk/messages.po create mode 100644 piwik/lang/da-dk/strings.php create mode 100644 planets/lang/da-dk/messages.po create mode 100644 planets/lang/da-dk/strings.php create mode 100644 public_server/lang/da-dk/messages.po create mode 100644 public_server/lang/da-dk/strings.php create mode 100644 pumpio/lang/da-dk/messages.po create mode 100644 pumpio/lang/da-dk/strings.php create mode 100644 qcomment/lang/da-dk/messages.po create mode 100644 qcomment/lang/da-dk/strings.php create mode 100644 randplace/lang/da-dk/messages.po create mode 100644 randplace/lang/da-dk/strings.php create mode 100644 rendertime/lang/da-dk/messages.po create mode 100644 rendertime/lang/da-dk/strings.php create mode 100644 securemail/lang/da-dk/messages.po create mode 100644 securemail/lang/da-dk/strings.php create mode 100644 showmore/lang/da-dk/messages.po create mode 100644 showmore/lang/da-dk/strings.php create mode 100644 smileybutton/lang/da-dk/messages.po create mode 100644 smileybutton/lang/da-dk/strings.php create mode 100644 startpage/lang/da-dk/messages.po create mode 100644 startpage/lang/da-dk/strings.php create mode 100644 statusnet/lang/da-dk/messages.po create mode 100644 statusnet/lang/da-dk/strings.php create mode 100644 superblock/lang/da-dk/messages.po create mode 100644 superblock/lang/da-dk/strings.php create mode 100644 testdrive/lang/da-dk/messages.po create mode 100644 testdrive/lang/da-dk/strings.php create mode 100644 tictac/lang/da-dk/messages.po create mode 100644 tictac/lang/da-dk/strings.php create mode 100644 tumblr/lang/da-dk/messages.po create mode 100644 tumblr/lang/da-dk/strings.php create mode 100644 twitter/lang/da-dk/messages.po create mode 100644 twitter/lang/da-dk/strings.php create mode 100644 viewsrc/lang/da-dk/messages.po create mode 100644 viewsrc/lang/da-dk/strings.php create mode 100644 webrtc/lang/da-dk/messages.po create mode 100644 webrtc/lang/da-dk/strings.php create mode 100644 windowsphonepush/lang/da-dk/messages.po create mode 100644 windowsphonepush/lang/da-dk/strings.php create mode 100644 wppost/lang/da-dk/messages.po create mode 100644 wppost/lang/da-dk/strings.php diff --git a/advancedcontentfilter/lang/da-dk/messages.po b/advancedcontentfilter/lang/da-dk/messages.po new file mode 100644 index 00000000..70ef462e --- /dev/null +++ b/advancedcontentfilter/lang/da-dk/messages.po @@ -0,0 +1,157 @@ +# ADDON advancedcontentfilter +# Copyright (C) +# This file is distributed under the same license as the Friendica advancedcontentfilter addon package. +# +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:13-0500\n" +"PO-Revision-Date: 2018-05-24 06:41+0000\n" +"Language-Team: Danish (Denmark) (https://www.transifex.com/Friendica/teams/12172/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: advancedcontentfilter.php:154 +#, php-format +msgid "Filtered by rule: %s" +msgstr "" + +#: advancedcontentfilter.php:170 advancedcontentfilter.php:225 +msgid "Advanced Content Filter" +msgstr "" + +#: advancedcontentfilter.php:224 +msgid "Back to Addon Settings" +msgstr "" + +#: advancedcontentfilter.php:226 +msgid "Add a Rule" +msgstr "" + +#: advancedcontentfilter.php:227 +msgid "Help" +msgstr "" + +#: advancedcontentfilter.php:228 +msgid "" +"Add and manage your personal content filter rules in this screen. Rules have" +" a name and an arbitrary expression that will be matched against post data. " +"For a complete reference of the available operations and variables, check " +"the help page." +msgstr "" + +#: advancedcontentfilter.php:229 +msgid "Your rules" +msgstr "" + +#: advancedcontentfilter.php:230 +msgid "" +"You have no rules yet! Start adding one by clicking on the button above next" +" to the title." +msgstr "" + +#: advancedcontentfilter.php:231 +msgid "Disabled" +msgstr "" + +#: advancedcontentfilter.php:232 +msgid "Enabled" +msgstr "" + +#: advancedcontentfilter.php:233 +msgid "Disable this rule" +msgstr "" + +#: advancedcontentfilter.php:234 +msgid "Enable this rule" +msgstr "" + +#: advancedcontentfilter.php:235 +msgid "Edit this rule" +msgstr "" + +#: advancedcontentfilter.php:236 +msgid "Edit the rule" +msgstr "" + +#: advancedcontentfilter.php:237 +msgid "Save this rule" +msgstr "" + +#: advancedcontentfilter.php:238 +msgid "Delete this rule" +msgstr "" + +#: advancedcontentfilter.php:239 +msgid "Rule" +msgstr "" + +#: advancedcontentfilter.php:240 +msgid "Close" +msgstr "" + +#: advancedcontentfilter.php:241 +msgid "Add new rule" +msgstr "" + +#: advancedcontentfilter.php:242 +msgid "Rule Name" +msgstr "" + +#: advancedcontentfilter.php:243 +msgid "Rule Expression" +msgstr "" + +#: advancedcontentfilter.php:244 +msgid "Cancel" +msgstr "" + +#: advancedcontentfilter.php:312 advancedcontentfilter.php:323 +#: advancedcontentfilter.php:334 advancedcontentfilter.php:370 +#: advancedcontentfilter.php:401 advancedcontentfilter.php:424 +msgid "You must be logged in to use this method" +msgstr "" + +#: advancedcontentfilter.php:338 advancedcontentfilter.php:374 +#: advancedcontentfilter.php:405 +msgid "Invalid form security token, please refresh the page." +msgstr "" + +#: advancedcontentfilter.php:350 +msgid "The rule name and expression are required." +msgstr "" + +#: advancedcontentfilter.php:364 +msgid "Rule successfully added" +msgstr "" + +#: advancedcontentfilter.php:378 advancedcontentfilter.php:409 +msgid "Rule doesn't exist or doesn't belong to you." +msgstr "" + +#: advancedcontentfilter.php:395 +msgid "Rule successfully updated" +msgstr "" + +#: advancedcontentfilter.php:418 +msgid "Rule successfully deleted" +msgstr "" + +#: advancedcontentfilter.php:428 +msgid "Missing argument: guid." +msgstr "" + +#: advancedcontentfilter.php:436 +#, php-format +msgid "Unknown post with guid: %s" +msgstr "" + +#: src/middlewares.php:49 +msgid "Method not found" +msgstr "" diff --git a/advancedcontentfilter/lang/da-dk/strings.php b/advancedcontentfilter/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/advancedcontentfilter/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: blackout.php:97 +msgid "" +"The end-date is prior to the start-date of the blackout, you should fix " +"this." +msgstr "" + +#: blackout.php:99 +#, php-format +msgid "" +"Please double check the current settings for the blackout. It will begin on " +"%s and end on %s." +msgstr "" + +#: blackout.php:102 +msgid "Save Settings" +msgstr "" + +#: blackout.php:103 +msgid "Redirect URL" +msgstr "" + +#: blackout.php:103 +msgid "All your visitors from the web will be redirected to this URL." +msgstr "" + +#: blackout.php:104 +msgid "Begin of the Blackout" +msgstr "" + +#: blackout.php:104 +msgid "" +"Format is YYYY-MM-DD hh:mm; YYYY year, MM month, " +"DD day, hh hour and mm minute." +msgstr "" + +#: blackout.php:105 +msgid "End of the Blackout" +msgstr "" + +#: blackout.php:107 +msgid "" +"Note: The redirect will be active from the moment you press" +" the submit button. Users currently logged in will not be " +"thrown out but can't login again after logging out while the blackout is " +"still in place." +msgstr "" diff --git a/blackout/lang/da-dk/strings.php b/blackout/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/blackout/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +, 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:13-0500\n" +"PO-Revision-Date: 2014-06-22 11:20+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: blockem.php:39 +msgid "" +"Hides user's content by collapsing posts. Also replaces their avatar with " +"generic image." +msgstr "Skjul brugers indhold ved at kollapse deres opslag. Erstatter også deres avatar med et generisk billede." + +#: blockem.php:40 +msgid "Comma separated profile URLS:" +msgstr "Kommasepareret liste over profil-URL's:" + +#: blockem.php:45 +msgid "Blockem" +msgstr "Blokdem" + +#: blockem.php:120 +#, php-format +msgid "Filtered user: %s" +msgstr "Filtreret bruger: %s" + +#: blockem.php:183 +msgid "Unblock Author" +msgstr "Fjern blokering af forfatter" + +#: blockem.php:185 +msgid "Block Author" +msgstr "Blokér forfatter" diff --git a/blockem/lang/da-dk/strings.php b/blockem/lang/da-dk/strings.php new file mode 100644 index 00000000..e99144ec --- /dev/null +++ b/blockem/lang/da-dk/strings.php @@ -0,0 +1,13 @@ +strings['Hides user\'s content by collapsing posts. Also replaces their avatar with generic image.'] = 'Skjul brugers indhold ved at kollapse deres opslag. Erstatter også deres avatar med et generisk billede.'; +$a->strings['Comma separated profile URLS:'] = 'Kommasepareret liste over profil-URL\'s:'; +$a->strings['Blockem'] = 'Blokdem'; +$a->strings['Filtered user: %s'] = 'Filtreret bruger: %s'; +$a->strings['Unblock Author'] = 'Fjern blokering af forfatter'; +$a->strings['Block Author'] = 'Blokér forfatter'; diff --git a/buglink/lang/da-dk/messages.po b/buglink/lang/da-dk/messages.po new file mode 100644 index 00000000..74aeb2b6 --- /dev/null +++ b/buglink/lang/da-dk/messages.po @@ -0,0 +1,24 @@ +# ADDON buglink +# Copyright (C) +# This file is distributed under the same license as the Friendica buglink addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-22 11:27+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: buglink.php:20 +msgid "Report Bug" +msgstr "Rapportér fejl" diff --git a/buglink/lang/da-dk/strings.php b/buglink/lang/da-dk/strings.php new file mode 100644 index 00000000..e43c5aa8 --- /dev/null +++ b/buglink/lang/da-dk/strings.php @@ -0,0 +1,8 @@ +strings['Report Bug'] = 'Rapportér fejl'; diff --git a/catavatar/lang/da-dk/messages.po b/catavatar/lang/da-dk/messages.po new file mode 100644 index 00000000..c492097c --- /dev/null +++ b/catavatar/lang/da-dk/messages.po @@ -0,0 +1,58 @@ +# ADDON catavatar +# Copyright (C) +# This file is distributed under the same license as the Friendica catavatar addon package. +# +# +# Translators: +# Anton , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2018-04-07 05:23+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (https://www.transifex.com/Friendica/teams/12172/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: catavatar.php:48 +msgid "Set default profile avatar or randomize the cat." +msgstr "" + +#: catavatar.php:53 +msgid "Cat Avatar Settings" +msgstr "" + +#: catavatar.php:56 +msgid "Use Cat as Avatar" +msgstr "" + +#: catavatar.php:57 +msgid "Another random Cat!" +msgstr "" + +#: catavatar.php:58 +msgid "Reset to email Cat" +msgstr "" + +#: catavatar.php:77 +msgid "The cat hadn't found itself." +msgstr "Katten havde ikke fundet sig selv." + +#: catavatar.php:86 +msgid "There was an error, the cat ran away." +msgstr "" + +#: catavatar.php:92 +msgid "Profile Photos" +msgstr "" + +#: catavatar.php:102 +msgid "Meow!" +msgstr "" diff --git a/catavatar/lang/da-dk/strings.php b/catavatar/lang/da-dk/strings.php new file mode 100644 index 00000000..677f4b54 --- /dev/null +++ b/catavatar/lang/da-dk/strings.php @@ -0,0 +1,8 @@ +strings['The cat hadn\'t found itself.'] = 'Katten havde ikke fundet sig selv.'; diff --git a/cookienotice/lang/da-dk/messages.po b/cookienotice/lang/da-dk/messages.po new file mode 100644 index 00000000..538e8397 --- /dev/null +++ b/cookienotice/lang/da-dk/messages.po @@ -0,0 +1,53 @@ +# ADDON cookienotice +# Copyright (C) +# This file is distributed under the same license as the Friendica cookienotice addon package. +# +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2019-01-23 16:01+0000\n" +"Language-Team: Danish (Denmark) (https://www.transifex.com/Friendica/teams/12172/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: cookienotice.php:42 +msgid "" +"This website uses cookies. If you continue browsing this website, you agree " +"to the usage of cookies." +msgstr "" + +#: cookienotice.php:43 cookienotice.php:108 +msgid "OK" +msgstr "" + +#: cookienotice.php:47 +msgid "" +"Configure your cookie usage notice. It should just be a notice, " +"saying that the website uses cookies. It is shown as long as a user didnt " +"confirm clicking the OK button." +msgstr "" + +#: cookienotice.php:48 +msgid "Cookie Usage Notice" +msgstr "" + +#: cookienotice.php:49 +msgid "OK Button Text" +msgstr "" + +#: cookienotice.php:50 +msgid "Save Settings" +msgstr "" + +#: cookienotice.php:107 +msgid "" +"This website uses cookies to recognize revisiting and logged in users. You " +"accept the usage of these cookies by continue browsing this website." +msgstr "" diff --git a/cookienotice/lang/da-dk/strings.php b/cookienotice/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/cookienotice/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: curweather.php:47 +msgid "Error fetching weather data. Error was: " +msgstr "" + +#: curweather.php:130 +msgid "Current Weather" +msgstr "" + +#: curweather.php:137 +msgid "Relative Humidity" +msgstr "" + +#: curweather.php:138 +msgid "Pressure" +msgstr "" + +#: curweather.php:139 +msgid "Wind" +msgstr "" + +#: curweather.php:140 +msgid "Last Updated" +msgstr "" + +#: curweather.php:141 +msgid "Data by" +msgstr "" + +#: curweather.php:142 +msgid "Show on map" +msgstr "" + +#: curweather.php:147 +msgid "There was a problem accessing the weather data. But have a look" +msgstr "" + +#: curweather.php:149 +msgid "at OpenWeatherMap" +msgstr "" + +#: curweather.php:178 +msgid "No APPID found, please contact your admin to obtain one." +msgstr "" + +#: curweather.php:188 +msgid "Enter either the name of your location or the zip code." +msgstr "" + +#: curweather.php:189 +msgid "Your Location" +msgstr "" + +#: curweather.php:189 +msgid "" +"Identifier of your location (name or zip code), e.g. Berlin,DE or " +"14476,DE." +msgstr "" + +#: curweather.php:190 +msgid "Units" +msgstr "" + +#: curweather.php:190 +msgid "select if the temperature should be displayed in °C or °F" +msgstr "" + +#: curweather.php:191 +msgid "Show weather data" +msgstr "" + +#: curweather.php:196 +msgid "Current Weather Settings" +msgstr "" + +#: curweather.php:227 +msgid "Save Settings" +msgstr "" + +#: curweather.php:230 +msgid "Caching Interval" +msgstr "" + +#: curweather.php:232 +msgid "" +"For how long should the weather data be cached? Choose according your " +"OpenWeatherMap account type." +msgstr "" + +#: curweather.php:233 +msgid "no cache" +msgstr "" + +#: curweather.php:234 curweather.php:235 curweather.php:236 curweather.php:237 +msgid "minutes" +msgstr "" + +#: curweather.php:240 +msgid "Your APPID" +msgstr "" + +#: curweather.php:240 +msgid "Your API key provided by OpenWeatherMap" +msgstr "" diff --git a/curweather/lang/da-dk/strings.php b/curweather/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/curweather/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +, 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2014-06-22 11:39+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: diaspora.php:44 +msgid "Post to Diaspora" +msgstr "Læg op på Diaspora" + +#: diaspora.php:67 +#, php-format +msgid "" +"Please remember: You can always be reached from Diaspora with your Friendica" +" handle %s. " +msgstr "Husk på: Du kan altid kontaktes fra Diaspora med dit Friendica handle %s. " + +#: diaspora.php:68 +msgid "" +"This connector is only meant if you still want to use your old Diaspora " +"account for some time. " +msgstr "" + +#: diaspora.php:69 +#, php-format +msgid "" +"However, it is preferred that you tell your Diaspora contacts the new handle" +" %s instead." +msgstr "" + +#: diaspora.php:79 +msgid "All aspects" +msgstr "Alle aspekter" + +#: diaspora.php:80 +msgid "Public" +msgstr "Offentlig" + +#: diaspora.php:86 +msgid "Post to aspect:" +msgstr "" + +#: diaspora.php:87 +#, php-format +msgid "Connected with your Diaspora account %s" +msgstr "Forbundet til din Diaspora-konto %s" + +#: diaspora.php:90 +msgid "" +"Can't login to your Diaspora account. Please check handle (in the format " +"user@domain.tld) and password." +msgstr "" + +#: diaspora.php:97 +msgid "Information" +msgstr "Information" + +#: diaspora.php:98 +msgid "Error" +msgstr "Fejl" + +#: diaspora.php:104 +msgid "Enable Diaspora Post Addon" +msgstr "Aktiver Diaspora-tilføjelsen" + +#: diaspora.php:105 +msgid "Diaspora handle" +msgstr "Diaspora handle" + +#: diaspora.php:106 +msgid "Diaspora password" +msgstr "Diaspora adgangskode" + +#: diaspora.php:106 +msgid "" +"Privacy notice: Your Diaspora password will be stored unencrypted to " +"authenticate you with your Diaspora pod. This means your Friendica node " +"administrator can have access to it." +msgstr "" + +#: diaspora.php:108 +msgid "Post to Diaspora by default" +msgstr "Læg op på Diaspora som standard" + +#: diaspora.php:113 +msgid "Diaspora Export" +msgstr "" diff --git a/diaspora/lang/da-dk/strings.php b/diaspora/lang/da-dk/strings.php new file mode 100644 index 00000000..73b1eedc --- /dev/null +++ b/diaspora/lang/da-dk/strings.php @@ -0,0 +1,18 @@ +strings['Post to Diaspora'] = 'Læg op på Diaspora'; +$a->strings['Please remember: You can always be reached from Diaspora with your Friendica handle %s. '] = 'Husk på: Du kan altid kontaktes fra Diaspora med dit Friendica handle %s. '; +$a->strings['All aspects'] = 'Alle aspekter'; +$a->strings['Public'] = 'Offentlig'; +$a->strings['Connected with your Diaspora account %s'] = 'Forbundet til din Diaspora-konto %s'; +$a->strings['Information'] = 'Information'; +$a->strings['Error'] = 'Fejl'; +$a->strings['Enable Diaspora Post Addon'] = 'Aktiver Diaspora-tilføjelsen'; +$a->strings['Diaspora handle'] = 'Diaspora handle'; +$a->strings['Diaspora password'] = 'Diaspora adgangskode'; +$a->strings['Post to Diaspora by default'] = 'Læg op på Diaspora som standard'; diff --git a/dwpost/lang/da-dk/messages.po b/dwpost/lang/da-dk/messages.po new file mode 100644 index 00000000..e220f28f --- /dev/null +++ b/dwpost/lang/da-dk/messages.po @@ -0,0 +1,43 @@ +# ADDON dwpost +# Copyright (C) +# This file is distributed under the same license as the Friendica dwpost addon package. +# +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2014-06-22 11:41+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: dwpost.php:43 +msgid "Post to Dreamwidth" +msgstr "" + +#: dwpost.php:63 +msgid "Enable Dreamwidth Post Addon" +msgstr "" + +#: dwpost.php:64 +msgid "Dreamwidth username" +msgstr "" + +#: dwpost.php:65 +msgid "Dreamwidth password" +msgstr "" + +#: dwpost.php:66 +msgid "Post to Dreamwidth by default" +msgstr "" + +#: dwpost.php:71 +msgid "Dreamwidth Export" +msgstr "" diff --git a/dwpost/lang/da-dk/strings.php b/dwpost/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/dwpost/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +, 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-22 12:31+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: forumdirectory.php:33 forumdirectory.php:137 +msgid "Forum Directory" +msgstr "Forum adressebog" + +#: forumdirectory.php:53 +msgid "Public access denied." +msgstr "Offentlig adgang nægtet." + +#: forumdirectory.php:125 +msgid "No entries (some entries may be hidden)." +msgstr "Ingen poster (nogle poster er måske skjulte)." + +#: forumdirectory.php:131 +msgid "Global Directory" +msgstr "Global adressebog" + +#: forumdirectory.php:133 +msgid "Find on this site" +msgstr "Find på denne side" + +#: forumdirectory.php:135 +msgid "Results for:" +msgstr "Resultater for:" + +#: forumdirectory.php:139 +msgid "Find" +msgstr "Find" diff --git a/forumdirectory/lang/da-dk/strings.php b/forumdirectory/lang/da-dk/strings.php new file mode 100644 index 00000000..fecaed71 --- /dev/null +++ b/forumdirectory/lang/da-dk/strings.php @@ -0,0 +1,14 @@ +strings['Forum Directory'] = 'Forum adressebog'; +$a->strings['Public access denied.'] = 'Offentlig adgang nægtet.'; +$a->strings['No entries (some entries may be hidden).'] = 'Ingen poster (nogle poster er måske skjulte).'; +$a->strings['Global Directory'] = 'Global adressebog'; +$a->strings['Find on this site'] = 'Find på denne side'; +$a->strings['Results for:'] = 'Resultater for:'; +$a->strings['Find'] = 'Find'; diff --git a/fromapp/lang/da-dk/messages.po b/fromapp/lang/da-dk/messages.po new file mode 100644 index 00000000..8a7aaf02 --- /dev/null +++ b/fromapp/lang/da-dk/messages.po @@ -0,0 +1,35 @@ +# ADDON fromapp +# Copyright (C) +# This file is distributed under the same license as the Friendica fromapp addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2014-06-22 12:33+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: fromapp.php:45 +msgid "" +"The application name you would like to show your posts originating from. " +"Separate different app names with a comma. A random one will then be " +"selected for every posting." +msgstr "Det app navn du vil vise at dine opslag kommer fra. Separér forskellige app navne med et komma. Et tilfældigt navn vil så blive valgt til hvert opslag." + +#: fromapp.php:46 +msgid "Use this application name even if another application was used." +msgstr "Brug dette app-navn, også selvom en anden app faktisk blev brugt." + +#: fromapp.php:51 +msgid "FromApp Settings" +msgstr "FraApp Indstillinger" diff --git a/fromapp/lang/da-dk/strings.php b/fromapp/lang/da-dk/strings.php new file mode 100644 index 00000000..4e2bb036 --- /dev/null +++ b/fromapp/lang/da-dk/strings.php @@ -0,0 +1,10 @@ +strings['The application name you would like to show your posts originating from. Separate different app names with a comma. A random one will then be selected for every posting.'] = 'Det app navn du vil vise at dine opslag kommer fra. Separér forskellige app navne med et komma. Et tilfældigt navn vil så blive valgt til hvert opslag.'; +$a->strings['Use this application name even if another application was used.'] = 'Brug dette app-navn, også selvom en anden app faktisk blev brugt.'; +$a->strings['FromApp Settings'] = 'FraApp Indstillinger'; diff --git a/geonames/lang/da-dk/messages.po b/geonames/lang/da-dk/messages.po new file mode 100644 index 00000000..fda74982 --- /dev/null +++ b/geonames/lang/da-dk/messages.po @@ -0,0 +1,34 @@ +# ADDON geonames +# Copyright (C) +# This file is distributed under the same license as the Friendica geonames addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2014-06-23 08:27+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: geonames.php:135 +msgid "" +"Replace numerical coordinates by the nearest populated location name in your" +" posts." +msgstr "Erstat numeriske koordinater med den nærmeste beboede lokation i dine opslag." + +#: geonames.php:136 +msgid "Enable Geonames Addon" +msgstr "Aktivér geonavne tilføjelse" + +#: geonames.php:141 +msgid "Geonames Settings" +msgstr "Geonavne Indstillinger" diff --git a/geonames/lang/da-dk/strings.php b/geonames/lang/da-dk/strings.php new file mode 100644 index 00000000..2b27fd28 --- /dev/null +++ b/geonames/lang/da-dk/strings.php @@ -0,0 +1,10 @@ +strings['Replace numerical coordinates by the nearest populated location name in your posts.'] = 'Erstat numeriske koordinater med den nærmeste beboede lokation i dine opslag.'; +$a->strings['Enable Geonames Addon'] = 'Aktivér geonavne tilføjelse'; +$a->strings['Geonames Settings'] = 'Geonavne Indstillinger'; diff --git a/gnot/lang/da-dk/messages.po b/gnot/lang/da-dk/messages.po new file mode 100644 index 00000000..f9705fcf --- /dev/null +++ b/gnot/lang/da-dk/messages.po @@ -0,0 +1,38 @@ +# ADDON gnot +# Copyright (C) +# This file is distributed under the same license as the Friendica gnot addon package. +# +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2014-06-23 08:30+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gnot.php:63 +msgid "" +"Allows threading of email comment notifications on Gmail and anonymising the" +" subject line." +msgstr "" + +#: gnot.php:64 +msgid "Enable this addon?" +msgstr "" + +#: gnot.php:69 +msgid "Gnot Settings" +msgstr "" + +#: gnot.php:79 +#, php-format +msgid "[Friendica:Notify] Comment to conversation #%d" +msgstr "" diff --git a/gnot/lang/da-dk/strings.php b/gnot/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/gnot/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gravatar.php:78 +msgid "generic profile image" +msgstr "" + +#: gravatar.php:79 +msgid "random geometric pattern" +msgstr "" + +#: gravatar.php:80 +msgid "monster face" +msgstr "" + +#: gravatar.php:81 +msgid "computer generated face" +msgstr "" + +#: gravatar.php:82 +msgid "retro arcade style face" +msgstr "" + +#: gravatar.php:96 +msgid "Information" +msgstr "" + +#: gravatar.php:96 +msgid "" +"Libravatar addon is installed, too. Please disable Libravatar addon or this " +"Gravatar addon.
The Libravatar addon will fall back to Gravatar if " +"nothing was found at Libravatar." +msgstr "" + +#: gravatar.php:102 +msgid "Save Settings" +msgstr "" + +#: gravatar.php:103 +msgid "Default avatar image" +msgstr "" + +#: gravatar.php:103 +msgid "Select default avatar image if none was found at Gravatar. See README" +msgstr "" + +#: gravatar.php:104 +msgid "Rating of images" +msgstr "" + +#: gravatar.php:104 +msgid "Select the appropriate avatar rating for your site. See README" +msgstr "" diff --git a/gravatar/lang/da-dk/strings.php b/gravatar/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/gravatar/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +, 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2014-06-23 08:35+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: group_text.php:58 +msgid "Use a text only (non-image) group selector in the \"group edit\" menu" +msgstr "Brug en kun-tekst (intet billede) gruppevælger i grupperedigeringsmenuen" + +#: group_text.php:63 +msgid "Group Text" +msgstr "Gruppebesked" diff --git a/group_text/lang/da-dk/strings.php b/group_text/lang/da-dk/strings.php new file mode 100644 index 00000000..4306b769 --- /dev/null +++ b/group_text/lang/da-dk/strings.php @@ -0,0 +1,9 @@ +strings['Use a text only (non-image) group selector in the "group edit" menu'] = 'Brug en kun-tekst (intet billede) gruppevælger i grupperedigeringsmenuen'; +$a->strings['Group Text'] = 'Gruppebesked'; diff --git a/ifttt/lang/da-dk/messages.po b/ifttt/lang/da-dk/messages.po new file mode 100644 index 00000000..dc501115 --- /dev/null +++ b/ifttt/lang/da-dk/messages.po @@ -0,0 +1,58 @@ +# ADDON ifttt +# Copyright (C) +# This file is distributed under the same license as the Friendica ifttt addon package. +# +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2017-11-27 10:37+0000\n" +"Language-Team: Danish (Denmark) (https://www.transifex.com/Friendica/teams/12172/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ifttt.php:52 +msgid "" +"Create an account at IFTTT. Create " +"three Facebook recipes that are connected with Maker (In the form \"if Facebook then " +"Maker\") with the following parameters:" +msgstr "" + +#: ifttt.php:53 +msgid "URL" +msgstr "" + +#: ifttt.php:54 +msgid "Method" +msgstr "" + +#: ifttt.php:55 +msgid "Content Type" +msgstr "" + +#: ifttt.php:56 +msgid "Body for \"new status message\"" +msgstr "" + +#: ifttt.php:57 +msgid "Body for \"new photo upload\"" +msgstr "" + +#: ifttt.php:58 +msgid "Body for \"new link post\"" +msgstr "" + +#: ifttt.php:68 +msgid "IFTTT Mirror" +msgstr "" + +#: ifttt.php:71 +msgid "Generate new key" +msgstr "" diff --git a/ifttt/lang/da-dk/strings.php b/ifttt/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/ifttt/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ijpost.php:42 +msgid "Post to Insanejournal" +msgstr "" + +#: ijpost.php:61 +msgid "Enable InsaneJournal Post Addon" +msgstr "" + +#: ijpost.php:62 +msgid "InsaneJournal username" +msgstr "" + +#: ijpost.php:63 +msgid "InsaneJournal password" +msgstr "" + +#: ijpost.php:64 +msgid "Post to InsaneJournal by default" +msgstr "" + +#: ijpost.php:69 +msgid "InsaneJournal Export" +msgstr "" diff --git a/ijpost/lang/da-dk/strings.php b/ijpost/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/ijpost/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +, 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 08:39+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: impressum.php:53 +msgid "Impressum" +msgstr "Indtryk" + +#: impressum.php:66 impressum.php:68 impressum.php:99 +msgid "Site Owner" +msgstr "Sideejer" + +#: impressum.php:66 impressum.php:103 +msgid "Email Address" +msgstr "Email-adresse" + +#: impressum.php:71 impressum.php:101 +msgid "Postal Address" +msgstr "Postadresse" + +#: impressum.php:77 +msgid "" +"The impressum addon needs to be configured!
Please add at least the " +"owner variable to your config file. For other variables please " +"refer to the README file of the addon." +msgstr "Indtryk-tilføjelsen skal konfigureres!
Tilføj venligst som det allermindste owner (sideejer) variablen til din konfigurationsfil. For andre variabler, referer venligst til tilføjelsens README fil." + +#: impressum.php:98 +msgid "Save Settings" +msgstr "Gem indstillinger" + +#: impressum.php:99 +msgid "The page operators name." +msgstr "Sideoperatorens navn." + +#: impressum.php:100 +msgid "Site Owners Profile" +msgstr "Sideejerens profil" + +#: impressum.php:100 +msgid "Profile address of the operator." +msgstr "Operatorens profiladresse." + +#: impressum.php:101 +msgid "How to contact the operator via snail mail. You can use BBCode here." +msgstr "Hvordan man kan kontakte operatoren via sneglepost. Du kan bruge BBCode her." + +#: impressum.php:102 +msgid "Notes" +msgstr "Noter" + +#: impressum.php:102 +msgid "" +"Additional notes that are displayed beneath the contact information. You can" +" use BBCode here." +msgstr "Ekstra noter som er vist under kontaktinformationen. Du kan bruge BBCode her." + +#: impressum.php:103 +msgid "How to contact the operator via email. (will be displayed obfuscated)" +msgstr "Hvordan man kan kontakte operatoren via email. (vil blive vist obfuskeret)" + +#: impressum.php:104 +msgid "Footer note" +msgstr "Sidefodsnote" + +#: impressum.php:104 +msgid "Text for the footer. You can use BBCode here." +msgstr "Tekst til sidefoden. Du kan bruge BBCode her." diff --git a/impressum/lang/da-dk/strings.php b/impressum/lang/da-dk/strings.php new file mode 100644 index 00000000..0e422524 --- /dev/null +++ b/impressum/lang/da-dk/strings.php @@ -0,0 +1,22 @@ +strings['Impressum'] = 'Indtryk'; +$a->strings['Site Owner'] = 'Sideejer'; +$a->strings['Email Address'] = 'Email-adresse'; +$a->strings['Postal Address'] = 'Postadresse'; +$a->strings['The impressum addon needs to be configured!
Please add at least the owner variable to your config file. For other variables please refer to the README file of the addon.'] = 'Indtryk-tilføjelsen skal konfigureres!
Tilføj venligst som det allermindste owner (sideejer) variablen til din konfigurationsfil. For andre variabler, referer venligst til tilføjelsens README fil.'; +$a->strings['Save Settings'] = 'Gem indstillinger'; +$a->strings['The page operators name.'] = 'Sideoperatorens navn.'; +$a->strings['Site Owners Profile'] = 'Sideejerens profil'; +$a->strings['Profile address of the operator.'] = 'Operatorens profiladresse.'; +$a->strings['How to contact the operator via snail mail. You can use BBCode here.'] = 'Hvordan man kan kontakte operatoren via sneglepost. Du kan bruge BBCode her.'; +$a->strings['Notes'] = 'Noter'; +$a->strings['Additional notes that are displayed beneath the contact information. You can use BBCode here.'] = 'Ekstra noter som er vist under kontaktinformationen. Du kan bruge BBCode her.'; +$a->strings['How to contact the operator via email. (will be displayed obfuscated)'] = 'Hvordan man kan kontakte operatoren via email. (vil blive vist obfuskeret)'; +$a->strings['Footer note'] = 'Sidefodsnote'; +$a->strings['Text for the footer. You can use BBCode here.'] = 'Tekst til sidefoden. Du kan bruge BBCode her.'; diff --git a/infiniteimprobabilitydrive/lang/da-dk/messages.po b/infiniteimprobabilitydrive/lang/da-dk/messages.po new file mode 100644 index 00000000..3f2fbac5 --- /dev/null +++ b/infiniteimprobabilitydrive/lang/da-dk/messages.po @@ -0,0 +1,24 @@ +# ADDON infiniteimprobabilitydrive +# Copyright (C) +# This file is distributed under the same license as the Friendica infiniteimprobabilitydrive addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 08:41+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: infiniteimprobabilitydrive.php:18 +msgid "Infinite Improbability Drive" +msgstr "Uendelig usandsynlighedsmotor" diff --git a/infiniteimprobabilitydrive/lang/da-dk/strings.php b/infiniteimprobabilitydrive/lang/da-dk/strings.php new file mode 100644 index 00000000..caf39fe9 --- /dev/null +++ b/infiniteimprobabilitydrive/lang/da-dk/strings.php @@ -0,0 +1,8 @@ +strings['Infinite Improbability Drive'] = 'Uendelig usandsynlighedsmotor'; diff --git a/irc/lang/da-dk/messages.po b/irc/lang/da-dk/messages.po new file mode 100644 index 00000000..0b429bcb --- /dev/null +++ b/irc/lang/da-dk/messages.po @@ -0,0 +1,62 @@ +# ADDON irc +# Copyright (C) +# This file is distributed under the same license as the Friendica irc addon package. +# +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2014-06-23 08:41+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: irc.php:32 +msgid "" +"Here you can change the system wide settings for the channels to " +"automatically join and access via the side bar. Note the changes you do " +"here, only effect the channel selection if you are logged in." +msgstr "" + +#: irc.php:33 irc.php:133 +msgid "Channel(s) to auto connect (comma separated)" +msgstr "" + +#: irc.php:33 irc.php:133 +msgid "" +"List of channels that shall automatically connected to when the app is " +"launched." +msgstr "" + +#: irc.php:34 irc.php:134 +msgid "Popular Channels (comma separated)" +msgstr "" + +#: irc.php:34 irc.php:134 +msgid "" +"List of popular channels, will be displayed at the side and hotlinked for " +"easy joining." +msgstr "" + +#: irc.php:39 +msgid "IRC Settings" +msgstr "" + +#: irc.php:60 +msgid "IRC Chatroom" +msgstr "" + +#: irc.php:88 +msgid "Popular Channels" +msgstr "" + +#: irc.php:132 +msgid "Save Settings" +msgstr "" diff --git a/irc/lang/da-dk/strings.php b/irc/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/irc/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +, 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-03-23 23:53-0400\n" +"PO-Revision-Date: 2014-06-23 08:46+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: js_upload.php:34 +msgid "Select files for upload" +msgstr "Vælg filer til upload" + +#: js_upload.php:35 +msgid "Drop files here to upload" +msgstr "Drop filer her til upload" + +#: js_upload.php:36 +msgid "Cancel" +msgstr "Annullér" + +#: js_upload.php:37 +msgid "Failed" +msgstr "Fejlede" + +#: js_upload.php:215 +msgid "No files were uploaded." +msgstr "Ingen filer blev uploadet." + +#: js_upload.php:221 +msgid "Uploaded file is empty" +msgstr "Uploadede fil er tom" + +#: js_upload.php:233 +#, php-format +msgid "Image exceeds size limit of %s" +msgstr "Billede overskrider størrelsesbegrænsning på %s" + +#: js_upload.php:245 +#, php-format +msgid "File has an invalid extension, it should be one of %s." +msgstr "Fil har en ugyldig udvidelse, det skal være en af %s." + +#: js_upload.php:256 +msgid "Upload was cancelled, or server error encountered" +msgstr "Upload blev annulleret, eller der skete en fejl på serveren" diff --git a/js_upload/lang/da-dk/strings.php b/js_upload/lang/da-dk/strings.php new file mode 100644 index 00000000..c76d4841 --- /dev/null +++ b/js_upload/lang/da-dk/strings.php @@ -0,0 +1,16 @@ +strings['Select files for upload'] = 'Vælg filer til upload'; +$a->strings['Drop files here to upload'] = 'Drop filer her til upload'; +$a->strings['Cancel'] = 'Annullér'; +$a->strings['Failed'] = 'Fejlede'; +$a->strings['No files were uploaded.'] = 'Ingen filer blev uploadet.'; +$a->strings['Uploaded file is empty'] = 'Uploadede fil er tom'; +$a->strings['Image exceeds size limit of %s'] = 'Billede overskrider størrelsesbegrænsning på %s'; +$a->strings['File has an invalid extension, it should be one of %s.'] = 'Fil har en ugyldig udvidelse, det skal være en af %s.'; +$a->strings['Upload was cancelled, or server error encountered'] = 'Upload blev annulleret, eller der skete en fejl på serveren'; diff --git a/krynn/lang/da-dk/messages.po b/krynn/lang/da-dk/messages.po new file mode 100644 index 00000000..c5a34f09 --- /dev/null +++ b/krynn/lang/da-dk/messages.po @@ -0,0 +1,27 @@ +# ADDON krynn +# Copyright (C) +# This file is distributed under the same license as the Friendica krynn addon package. +# +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2015-07-07 15:14+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: krynn.php:127 +msgid "Enable Krynn Addon" +msgstr "" + +#: krynn.php:132 +msgid "Krynn Settings" +msgstr "" diff --git a/krynn/lang/da-dk/strings.php b/krynn/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/krynn/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +, 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2015-07-25 08:05+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: langfilter.php:49 +msgid "" +"This addon tries to identify the language posts are written in. If it does " +"not match any language specified below, posts will be hidden by collapsing " +"them." +msgstr "Denne tilføjelse forsøger at identificere det sprog som opslag er skrevet i. Hvis opslaget ikke matcher en af sprogene specificeret herunder, bliver opslaget kollapset." + +#: langfilter.php:50 +msgid "Use the language filter" +msgstr "Brug sprogfilteret" + +#: langfilter.php:51 +msgid "Able to read" +msgstr "Kan læse" + +#: langfilter.php:51 +msgid "" +"List of abbreviations (ISO 639-1 codes) for languages you speak, comma " +"separated. For example \"de,it\"." +msgstr "Liste af forkortelser (ISO 639-1 koder) for sprog som du taler, kommasepareret. For eksempel \"da,en\" for dansk og engelsk." + +#: langfilter.php:52 +msgid "Minimum confidence in language detection" +msgstr "Minimum konfidens i sprogregistreringen" + +#: langfilter.php:52 +msgid "" +"Minimum confidence in language detection being correct, from 0 to 100. Posts" +" will not be filtered when the confidence of language detection is below " +"this percent value." +msgstr "Minimum konfidens i at det registrerede sprog er korrekt, fra 0 til 100. Opslag bliver ikke filtreret når konfidensen af det registrerede sprog er under denne procentværdi." + +#: langfilter.php:53 +msgid "Minimum length of message body" +msgstr "Minimum længde af beskeden" + +#: langfilter.php:53 +msgid "" +"Minimum number of characters in message body for filter to be used. Posts " +"shorter than this will not be filtered. Note: Language detection is " +"unreliable for short content (<200 characters)." +msgstr "Minimum nummer af tegn i beskeden før filteret bruges. Opslag som er kortere end dette tal vil ikke blive filtreret. Note: Sprogregistreringen er upålidelig for kort indhold (<200 tegn)." + +#: langfilter.php:58 +msgid "Language Filter" +msgstr "Sprogfilter" + +#: langfilter.php:60 +msgid "Save Settings" +msgstr "Gem indstillinger" + +#: langfilter.php:193 +#, php-format +msgid "Filtered language: %s" +msgstr "Filtreret sprog: %s" diff --git a/langfilter/lang/da-dk/strings.php b/langfilter/lang/da-dk/strings.php new file mode 100644 index 00000000..a20b41e3 --- /dev/null +++ b/langfilter/lang/da-dk/strings.php @@ -0,0 +1,18 @@ +strings['This addon tries to identify the language posts are written in. If it does not match any language specified below, posts will be hidden by collapsing them.'] = 'Denne tilføjelse forsøger at identificere det sprog som opslag er skrevet i. Hvis opslaget ikke matcher en af sprogene specificeret herunder, bliver opslaget kollapset.'; +$a->strings['Use the language filter'] = 'Brug sprogfilteret'; +$a->strings['Able to read'] = 'Kan læse'; +$a->strings['List of abbreviations (ISO 639-1 codes) for languages you speak, comma separated. For example "de,it".'] = 'Liste af forkortelser (ISO 639-1 koder) for sprog som du taler, kommasepareret. For eksempel "da,en" for dansk og engelsk.'; +$a->strings['Minimum confidence in language detection'] = 'Minimum konfidens i sprogregistreringen'; +$a->strings['Minimum confidence in language detection being correct, from 0 to 100. Posts will not be filtered when the confidence of language detection is below this percent value.'] = 'Minimum konfidens i at det registrerede sprog er korrekt, fra 0 til 100. Opslag bliver ikke filtreret når konfidensen af det registrerede sprog er under denne procentværdi.'; +$a->strings['Minimum length of message body'] = 'Minimum længde af beskeden'; +$a->strings['Minimum number of characters in message body for filter to be used. Posts shorter than this will not be filtered. Note: Language detection is unreliable for short content (<200 characters).'] = 'Minimum nummer af tegn i beskeden før filteret bruges. Opslag som er kortere end dette tal vil ikke blive filtreret. Note: Sprogregistreringen er upålidelig for kort indhold (<200 tegn).'; +$a->strings['Language Filter'] = 'Sprogfilter'; +$a->strings['Save Settings'] = 'Gem indstillinger'; +$a->strings['Filtered language: %s'] = 'Filtreret sprog: %s'; diff --git a/libertree/lang/da-dk/messages.po b/libertree/lang/da-dk/messages.po new file mode 100644 index 00000000..a1d415c6 --- /dev/null +++ b/libertree/lang/da-dk/messages.po @@ -0,0 +1,43 @@ +# ADDON libertree +# Copyright (C) +# This file is distributed under the same license as the Friendica libertree addon package. +# +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2014-06-23 09:44+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: libertree.php:39 +msgid "Post to libertree" +msgstr "" + +#: libertree.php:60 +msgid "Enable Libertree Post Addon" +msgstr "" + +#: libertree.php:61 +msgid "Libertree site URL" +msgstr "" + +#: libertree.php:62 +msgid "Libertree API token" +msgstr "" + +#: libertree.php:63 +msgid "Post to Libertree by default" +msgstr "" + +#: libertree.php:68 +msgid "Libertree Export" +msgstr "" diff --git a/libertree/lang/da-dk/strings.php b/libertree/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/libertree/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +, 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 09:49+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: libravatar.php:68 +msgid "generic profile image" +msgstr "generisk profilbillede" + +#: libravatar.php:69 +msgid "random geometric pattern" +msgstr "tilfældigt geometrisk mønster" + +#: libravatar.php:70 +msgid "monster face" +msgstr "monsteransigt" + +#: libravatar.php:71 +msgid "computer generated face" +msgstr "computergenereret ansigt" + +#: libravatar.php:72 +msgid "retro arcade style face" +msgstr "retro-arkade stilet ansigt" + +#: libravatar.php:73 +msgid "roboter face" +msgstr "" + +#: libravatar.php:74 +msgid "retro adventure game character" +msgstr "" + +#: libravatar.php:78 +msgid "Information" +msgstr "Information" + +#: libravatar.php:78 +msgid "" +"Gravatar addon is installed. Please disable the Gravatar addon.
The " +"Libravatar addon will fall back to Gravatar if nothing was found at " +"Libravatar." +msgstr "" + +#: libravatar.php:83 +msgid "Save Settings" +msgstr "Gem indstillinger" + +#: libravatar.php:84 +msgid "Default avatar image" +msgstr "Standard avatar-billede" + +#: libravatar.php:84 +msgid "Select default avatar image if none was found. See README" +msgstr "" diff --git a/libravatar/lang/da-dk/strings.php b/libravatar/lang/da-dk/strings.php new file mode 100644 index 00000000..27d2df9f --- /dev/null +++ b/libravatar/lang/da-dk/strings.php @@ -0,0 +1,15 @@ +strings['generic profile image'] = 'generisk profilbillede'; +$a->strings['random geometric pattern'] = 'tilfældigt geometrisk mønster'; +$a->strings['monster face'] = 'monsteransigt'; +$a->strings['computer generated face'] = 'computergenereret ansigt'; +$a->strings['retro arcade style face'] = 'retro-arkade stilet ansigt'; +$a->strings['Information'] = 'Information'; +$a->strings['Save Settings'] = 'Gem indstillinger'; +$a->strings['Default avatar image'] = 'Standard avatar-billede'; diff --git a/ljpost/lang/da-dk/messages.po b/ljpost/lang/da-dk/messages.po new file mode 100644 index 00000000..a42b5d31 --- /dev/null +++ b/ljpost/lang/da-dk/messages.po @@ -0,0 +1,43 @@ +# ADDON ljpost +# Copyright (C) +# This file is distributed under the same license as the Friendica ljpost addon package. +# +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2014-06-23 09:51+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: ljpost.php:43 +msgid "Post to LiveJournal" +msgstr "" + +#: ljpost.php:63 +msgid "Enable LiveJournal Post Addon" +msgstr "" + +#: ljpost.php:64 +msgid "LiveJournal username" +msgstr "" + +#: ljpost.php:65 +msgid "LiveJournal password" +msgstr "" + +#: ljpost.php:66 +msgid "Post to LiveJournal by default" +msgstr "" + +#: ljpost.php:71 +msgid "LiveJournal Export" +msgstr "" diff --git a/ljpost/lang/da-dk/strings.php b/ljpost/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/ljpost/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: mailstream.php:77 +msgid "From Address" +msgstr "" + +#: mailstream.php:79 +msgid "Email address that stream items will appear to be from." +msgstr "" + +#: mailstream.php:82 +msgid "Save Settings" +msgstr "" + +#: mailstream.php:301 +msgid "Re:" +msgstr "" + +#: mailstream.php:314 mailstream.php:317 +msgid "Friendica post" +msgstr "" + +#: mailstream.php:320 +msgid "Diaspora post" +msgstr "" + +#: mailstream.php:330 +msgid "Feed item" +msgstr "" + +#: mailstream.php:333 +msgid "Email" +msgstr "" + +#: mailstream.php:335 +msgid "Friendica Item" +msgstr "" + +#: mailstream.php:404 +msgid "Upstream" +msgstr "" + +#: mailstream.php:405 +msgid "Local" +msgstr "" + +#: mailstream.php:481 +msgid "Enabled" +msgstr "" + +#: mailstream.php:486 +msgid "Email Address" +msgstr "" + +#: mailstream.php:488 +msgid "Leave blank to use your account email address" +msgstr "" + +#: mailstream.php:492 +msgid "Exclude Likes" +msgstr "" + +#: mailstream.php:494 +msgid "Check this to omit mailing \"Like\" notifications" +msgstr "" + +#: mailstream.php:498 +msgid "Attach Images" +msgstr "" + +#: mailstream.php:500 +msgid "" +"Download images in posts and attach them to the email. Useful for reading " +"email while offline." +msgstr "" + +#: mailstream.php:507 +msgid "Mail Stream Settings" +msgstr "" diff --git a/mailstream/lang/da-dk/strings.php b/mailstream/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/mailstream/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +, 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2014-06-23 09:55+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: mathjax.php:42 +msgid "" +"The MathJax addon renders mathematical formulae written using the LaTeX " +"syntax surrounded by the usual $$ or an eqnarray block in the postings of " +"your wall,network tab and private mail." +msgstr "MathJax tilføjelsen kan vise matematiske formler som er skrevet i LaTeX syntaksen, omringet af det sædvanlige $$ eller en eqnarray blok i opslagene på din væg, netværksfane eller private mail." + +#: mathjax.php:43 +msgid "Use the MathJax renderer" +msgstr "Brug MathJax renderen" diff --git a/mathjax/lang/da-dk/strings.php b/mathjax/lang/da-dk/strings.php new file mode 100644 index 00000000..5c37ee14 --- /dev/null +++ b/mathjax/lang/da-dk/strings.php @@ -0,0 +1,9 @@ +strings['The MathJax addon renders mathematical formulae written using the LaTeX syntax surrounded by the usual $$ or an eqnarray block in the postings of your wall,network tab and private mail.'] = 'MathJax tilføjelsen kan vise matematiske formler som er skrevet i LaTeX syntaksen, omringet af det sædvanlige $$ eller en eqnarray blok i opslagene på din væg, netværksfane eller private mail.'; +$a->strings['Use the MathJax renderer'] = 'Brug MathJax renderen'; diff --git a/morechoice/lang/da-dk/messages.po b/morechoice/lang/da-dk/messages.po new file mode 100644 index 00000000..b57643da --- /dev/null +++ b/morechoice/lang/da-dk/messages.po @@ -0,0 +1,342 @@ +# ADDON morechoice +# Copyright (C) +# This file is distributed under the same license as the Friendica morechoice addon package. +# +# +# Translators: +# Anton , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2018-08-07 18:18+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (https://www.transifex.com/Friendica/teams/12172/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: morechoice.php:22 +msgid "Androgyne" +msgstr "Andrygon" + +#: morechoice.php:23 +msgid "Bear" +msgstr "Bjørn" + +#: morechoice.php:24 +msgid "Bigender" +msgstr "Bi-kønnet" + +#: morechoice.php:25 +msgid "Cross dresser" +msgstr "" + +#: morechoice.php:26 +msgid "Drag queen" +msgstr "Drag queen" + +#: morechoice.php:27 +msgid "Eunuch" +msgstr "Eunuk" + +#: morechoice.php:28 +msgid "Faux queen" +msgstr "" + +#: morechoice.php:29 +msgid "Gender fluid" +msgstr "" + +#: morechoice.php:30 +msgid "Kathoey" +msgstr "" + +#: morechoice.php:31 +msgid "Lady" +msgstr "Dame" + +#: morechoice.php:32 +msgid "Lipstick lesbian" +msgstr "" + +#: morechoice.php:33 +msgid "Metrosexual" +msgstr "Metrosexuel" + +#: morechoice.php:34 +msgid "Monk" +msgstr "Munk" + +#: morechoice.php:35 +msgid "Nun" +msgstr "Nonne" + +#: morechoice.php:36 +msgid "Soft butch" +msgstr "" + +#: morechoice.php:37 +msgid "Stone femme" +msgstr "" + +#: morechoice.php:38 +msgid "Tomboy" +msgstr "Tomboy" + +#: morechoice.php:39 +msgid "Transman" +msgstr "Trans mand" + +#: morechoice.php:40 +msgid "Transwoman" +msgstr "Trans kvinde" + +#: morechoice.php:41 +msgid "Transvesti" +msgstr "" + +#: morechoice.php:42 +msgid "Trigender" +msgstr "" + +#: morechoice.php:43 +msgid "Can't remember" +msgstr "Kan ikke huske" + +#: morechoice.php:44 +msgid "Hard to tell these days" +msgstr "Det er svært at sige efterhånden" + +#: morechoice.php:48 +msgid "Girls with big tits" +msgstr "Piger med store patter" + +#: morechoice.php:49 +msgid "Millionaires" +msgstr "Millionærer" + +#: morechoice.php:50 +msgid "Guys with big schlongs" +msgstr "Fyre med store lemmer" + +#: morechoice.php:51 +msgid "Easy women" +msgstr "" + +#: morechoice.php:52 +msgid "People with impaired mobility" +msgstr "Folk med svækket mobilitet" + +#: morechoice.php:53 +msgid "Amputees" +msgstr "Amputerede" + +#: morechoice.php:54 +msgid "Statues, mannequins and immobility" +msgstr "Statuer, mannequins og immobilitet" + +#: morechoice.php:55 +msgid "Pain" +msgstr "Smerte" + +#: morechoice.php:56 +msgid "Trans men" +msgstr "Trans mænd" + +#: morechoice.php:57 +msgid "Older women" +msgstr "Ældre kvinder" + +#: morechoice.php:58 +msgid "Asphyxiation" +msgstr "Kvælning" + +#: morechoice.php:59 +msgid "In public" +msgstr "Offentligt" + +#: morechoice.php:60 +msgid "In danger" +msgstr "I fare" + +#: morechoice.php:61 +msgid "Pretending to be male" +msgstr "Foregiver at være mand" + +#: morechoice.php:62 +msgid "Pretending to be female" +msgstr "Foregiver at være kvinde" + +#: morechoice.php:63 +msgid "Breats" +msgstr "" + +#: morechoice.php:64 +msgid "Scat" +msgstr "" + +#: morechoice.php:65 +msgid "Crying" +msgstr "Græder" + +#: morechoice.php:66 +msgid "Nappies/Diapers" +msgstr "" + +#: morechoice.php:67 +msgid "Trees" +msgstr "" + +#: morechoice.php:68 +msgid "Vomit" +msgstr "Bræk" + +#: morechoice.php:69 +msgid "Murder" +msgstr "Mord" + +#: morechoice.php:70 +msgid "Fat people" +msgstr "Tykke mennesker" + +#: morechoice.php:71 +msgid "Feet" +msgstr "Fødder" + +#: morechoice.php:72 +msgid "Covered in insects" +msgstr "Dækket af insekter" + +#: morechoice.php:73 +msgid "Turning a human being into furniture" +msgstr "Lave et menneske om til et møbel" + +#: morechoice.php:74 +msgid "Elderly people" +msgstr "Ældre mennesker" + +#: morechoice.php:75 +msgid "Transgender people" +msgstr "Transkønnede mennesker" + +#: morechoice.php:76 +msgid "Criminals" +msgstr "Kriminelle" + +#: morechoice.php:77 +msgid "Stealing" +msgstr "Stjæle" + +#: morechoice.php:78 +msgid "Breast milk" +msgstr "Brystmælk" + +#: morechoice.php:79 +msgid "Immersing genitals in liquids" +msgstr "" + +#: morechoice.php:80 +msgid "Giants" +msgstr "Kæmper" + +#: morechoice.php:81 +msgid "Masochism" +msgstr "Masochisme" + +#: morechoice.php:82 +msgid "Cars" +msgstr "Biler" + +#: morechoice.php:83 +msgid "Menstruation" +msgstr "Menstruation" + +#: morechoice.php:84 +msgid "Mucus" +msgstr "" + +#: morechoice.php:85 +msgid "Obscene language" +msgstr "" + +#: morechoice.php:86 +msgid "Noses" +msgstr "Næser" + +#: morechoice.php:87 +msgid "Navels" +msgstr "" + +#: morechoice.php:88 +msgid "Corpses" +msgstr "Lig" + +#: morechoice.php:89 +msgid "Smells" +msgstr "Lugte" + +#: morechoice.php:90 +msgid "Buttocks" +msgstr "Balder" + +#: morechoice.php:91 +msgid "Nonliving objects" +msgstr "Ikke-levende objekter" + +#: morechoice.php:92 +msgid "Sleeping people" +msgstr "Sovende mennesker" + +#: morechoice.php:93 +msgid "Urination" +msgstr "Urinering" + +#: morechoice.php:94 +msgid "Eating people" +msgstr "Spise mennesker" + +#: morechoice.php:95 +msgid "Being eaten" +msgstr "Blive spist" + +#: morechoice.php:96 +msgid "Animals" +msgstr "Dyr" + +#: morechoice.php:97 +msgid "I'd rather just have some chocolate" +msgstr "Jeg vil hellere bare have noget chokolade" + +#: morechoice.php:101 +msgid "Married to my job" +msgstr "Gift til mit job" + +#: morechoice.php:102 +msgid "Polygamist" +msgstr "" + +#: morechoice.php:103 +msgid "Half married" +msgstr "Halvt gift" + +#: morechoice.php:104 +msgid "Living in the past" +msgstr "Lever i fortiden" + +#: morechoice.php:105 +msgid "Pretending to be over my ex" +msgstr "" + +#: morechoice.php:106 +msgid "Hurt in the past" +msgstr "Såret i fortiden" + +#: morechoice.php:107 +msgid "Wallowing in self-pity" +msgstr "" diff --git a/morechoice/lang/da-dk/strings.php b/morechoice/lang/da-dk/strings.php new file mode 100644 index 00000000..0d32da07 --- /dev/null +++ b/morechoice/lang/da-dk/strings.php @@ -0,0 +1,66 @@ +strings['Androgyne'] = 'Andrygon'; +$a->strings['Bear'] = 'Bjørn'; +$a->strings['Bigender'] = 'Bi-kønnet'; +$a->strings['Drag queen'] = 'Drag queen'; +$a->strings['Eunuch'] = 'Eunuk'; +$a->strings['Lady'] = 'Dame'; +$a->strings['Metrosexual'] = 'Metrosexuel'; +$a->strings['Monk'] = 'Munk'; +$a->strings['Nun'] = 'Nonne'; +$a->strings['Tomboy'] = 'Tomboy'; +$a->strings['Transman'] = 'Trans mand'; +$a->strings['Transwoman'] = 'Trans kvinde'; +$a->strings['Can\'t remember'] = 'Kan ikke huske'; +$a->strings['Hard to tell these days'] = 'Det er svært at sige efterhånden'; +$a->strings['Girls with big tits'] = 'Piger med store patter'; +$a->strings['Millionaires'] = 'Millionærer'; +$a->strings['Guys with big schlongs'] = 'Fyre med store lemmer'; +$a->strings['People with impaired mobility'] = 'Folk med svækket mobilitet'; +$a->strings['Amputees'] = 'Amputerede'; +$a->strings['Statues, mannequins and immobility'] = 'Statuer, mannequins og immobilitet'; +$a->strings['Pain'] = 'Smerte'; +$a->strings['Trans men'] = 'Trans mænd'; +$a->strings['Older women'] = 'Ældre kvinder'; +$a->strings['Asphyxiation'] = 'Kvælning'; +$a->strings['In public'] = 'Offentligt'; +$a->strings['In danger'] = 'I fare'; +$a->strings['Pretending to be male'] = 'Foregiver at være mand'; +$a->strings['Pretending to be female'] = 'Foregiver at være kvinde'; +$a->strings['Crying'] = 'Græder'; +$a->strings['Vomit'] = 'Bræk'; +$a->strings['Murder'] = 'Mord'; +$a->strings['Fat people'] = 'Tykke mennesker'; +$a->strings['Feet'] = 'Fødder'; +$a->strings['Covered in insects'] = 'Dækket af insekter'; +$a->strings['Turning a human being into furniture'] = 'Lave et menneske om til et møbel'; +$a->strings['Elderly people'] = 'Ældre mennesker'; +$a->strings['Transgender people'] = 'Transkønnede mennesker'; +$a->strings['Criminals'] = 'Kriminelle'; +$a->strings['Stealing'] = 'Stjæle'; +$a->strings['Breast milk'] = 'Brystmælk'; +$a->strings['Giants'] = 'Kæmper'; +$a->strings['Masochism'] = 'Masochisme'; +$a->strings['Cars'] = 'Biler'; +$a->strings['Menstruation'] = 'Menstruation'; +$a->strings['Noses'] = 'Næser'; +$a->strings['Corpses'] = 'Lig'; +$a->strings['Smells'] = 'Lugte'; +$a->strings['Buttocks'] = 'Balder'; +$a->strings['Nonliving objects'] = 'Ikke-levende objekter'; +$a->strings['Sleeping people'] = 'Sovende mennesker'; +$a->strings['Urination'] = 'Urinering'; +$a->strings['Eating people'] = 'Spise mennesker'; +$a->strings['Being eaten'] = 'Blive spist'; +$a->strings['Animals'] = 'Dyr'; +$a->strings['I\'d rather just have some chocolate'] = 'Jeg vil hellere bare have noget chokolade'; +$a->strings['Married to my job'] = 'Gift til mit job'; +$a->strings['Half married'] = 'Halvt gift'; +$a->strings['Living in the past'] = 'Lever i fortiden'; +$a->strings['Hurt in the past'] = 'Såret i fortiden'; diff --git a/morepokes/lang/da-dk/messages.po b/morepokes/lang/da-dk/messages.po new file mode 100644 index 00000000..6e2e5682 --- /dev/null +++ b/morepokes/lang/da-dk/messages.po @@ -0,0 +1,167 @@ +# ADDON morepokes +# Copyright (C) +# This file is distributed under the same license as the Friendica morepokes addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 10:18+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: morepokes.php:19 +msgid "bitchslap" +msgstr "bitchslap" + +#: morepokes.php:19 +msgid "bitchslapped" +msgstr "bitchslapped" + +#: morepokes.php:20 +msgid "shag" +msgstr "bold" + +#: morepokes.php:20 +msgid "shagged" +msgstr "boldet" + +#: morepokes.php:21 +msgid "do something obscenely biological to" +msgstr "gør noget uanstændigt til" + +#: morepokes.php:21 +msgid "did something obscenely biological to" +msgstr "gjorde noget uanstændigt til" + +#: morepokes.php:22 +msgid "point out the poke feature to" +msgstr "påpeg prik-funktionen for" + +#: morepokes.php:22 +msgid "pointed out the poke feature to" +msgstr "påpege prik-funktionen for" + +#: morepokes.php:23 +msgid "declare undying love for" +msgstr "erklær udøende kærlighed for" + +#: morepokes.php:23 +msgid "declared undying love for" +msgstr "erklærede udøende kærlighed for" + +#: morepokes.php:24 +msgid "patent" +msgstr "patentér" + +#: morepokes.php:24 +msgid "patented" +msgstr "patenterede" + +#: morepokes.php:25 +msgid "stroke beard" +msgstr "stryg skæg" + +#: morepokes.php:25 +msgid "stroked their beard at" +msgstr "strøg deres skæg ad" + +#: morepokes.php:26 +msgid "" +"bemoan the declining standards of modern secondary and tertiary education to" +msgstr "beklag de faldende standarder for moderne sekundær- og tertiær uddannelse til" + +#: morepokes.php:26 +msgid "" +"bemoans the declining standards of modern secondary and tertiary education " +"to" +msgstr "beklagede de faldende standarder for moderne sekundær og tertiær uddannelse til" + +#: morepokes.php:27 +msgid "hug" +msgstr "kram" + +#: morepokes.php:27 +msgid "hugged" +msgstr "krammede" + +#: morepokes.php:28 +msgid "kiss" +msgstr "kys" + +#: morepokes.php:28 +msgid "kissed" +msgstr "kyssede" + +#: morepokes.php:29 +msgid "raise eyebrows at" +msgstr "hæv øjenbryn" + +#: morepokes.php:29 +msgid "raised their eyebrows at" +msgstr "hævede sine øjenbryn ad" + +#: morepokes.php:30 +msgid "insult" +msgstr "fornærm" + +#: morepokes.php:30 +msgid "insulted" +msgstr "fornærmede" + +#: morepokes.php:31 +msgid "praise" +msgstr "ros" + +#: morepokes.php:31 +msgid "praised" +msgstr "roste" + +#: morepokes.php:32 +msgid "be dubious of" +msgstr "vær tvivlsom over" + +#: morepokes.php:32 +msgid "was dubious of" +msgstr "var tvivlsom over" + +#: morepokes.php:33 +msgid "eat" +msgstr "spis" + +#: morepokes.php:33 +msgid "ate" +msgstr "spiste" + +#: morepokes.php:34 +msgid "giggle and fawn at" +msgstr "fnis og smil" + +#: morepokes.php:34 +msgid "giggled and fawned at" +msgstr "fniste og smilede ad" + +#: morepokes.php:35 +msgid "doubt" +msgstr "tvivl" + +#: morepokes.php:35 +msgid "doubted" +msgstr "tvivlede" + +#: morepokes.php:36 +msgid "glare" +msgstr "glo" + +#: morepokes.php:36 +msgid "glared at" +msgstr "gloede ad" diff --git a/morepokes/lang/da-dk/strings.php b/morepokes/lang/da-dk/strings.php new file mode 100644 index 00000000..3403e4a5 --- /dev/null +++ b/morepokes/lang/da-dk/strings.php @@ -0,0 +1,43 @@ +strings['bitchslap'] = 'bitchslap'; +$a->strings['bitchslapped'] = 'bitchslapped'; +$a->strings['shag'] = 'bold'; +$a->strings['shagged'] = 'boldet'; +$a->strings['do something obscenely biological to'] = 'gør noget uanstændigt til'; +$a->strings['did something obscenely biological to'] = 'gjorde noget uanstændigt til'; +$a->strings['point out the poke feature to'] = 'påpeg prik-funktionen for'; +$a->strings['pointed out the poke feature to'] = 'påpege prik-funktionen for'; +$a->strings['declare undying love for'] = 'erklær udøende kærlighed for'; +$a->strings['declared undying love for'] = 'erklærede udøende kærlighed for'; +$a->strings['patent'] = 'patentér'; +$a->strings['patented'] = 'patenterede'; +$a->strings['stroke beard'] = 'stryg skæg'; +$a->strings['stroked their beard at'] = 'strøg deres skæg ad'; +$a->strings['bemoan the declining standards of modern secondary and tertiary education to'] = 'beklag de faldende standarder for moderne sekundær- og tertiær uddannelse til'; +$a->strings['bemoans the declining standards of modern secondary and tertiary education to'] = 'beklagede de faldende standarder for moderne sekundær og tertiær uddannelse til'; +$a->strings['hug'] = 'kram'; +$a->strings['hugged'] = 'krammede'; +$a->strings['kiss'] = 'kys'; +$a->strings['kissed'] = 'kyssede'; +$a->strings['raise eyebrows at'] = 'hæv øjenbryn'; +$a->strings['raised their eyebrows at'] = 'hævede sine øjenbryn ad'; +$a->strings['insult'] = 'fornærm'; +$a->strings['insulted'] = 'fornærmede'; +$a->strings['praise'] = 'ros'; +$a->strings['praised'] = 'roste'; +$a->strings['be dubious of'] = 'vær tvivlsom over'; +$a->strings['was dubious of'] = 'var tvivlsom over'; +$a->strings['eat'] = 'spis'; +$a->strings['ate'] = 'spiste'; +$a->strings['giggle and fawn at'] = 'fnis og smil'; +$a->strings['giggled and fawned at'] = 'fniste og smilede ad'; +$a->strings['doubt'] = 'tvivl'; +$a->strings['doubted'] = 'tvivlede'; +$a->strings['glare'] = 'glo'; +$a->strings['glared at'] = 'gloede ad'; diff --git a/newmemberwidget/lang/da-dk/messages.po b/newmemberwidget/lang/da-dk/messages.po new file mode 100644 index 00000000..24aaade9 --- /dev/null +++ b/newmemberwidget/lang/da-dk/messages.po @@ -0,0 +1,76 @@ +# ADDON newmemberwidget +# Copyright (C) +# This file is distributed under the same license as the Friendica newmemberwidget addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 10:26+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: newmemberwidget.php:29 +msgid "New Member" +msgstr "Nyt medlem" + +#: newmemberwidget.php:30 +msgid "Tips for New Members" +msgstr "Tips til nye medlemmer" + +#: newmemberwidget.php:33 +msgid "Global Support Forum" +msgstr "Globalt supportforum" + +#: newmemberwidget.php:37 +msgid "Local Support Forum" +msgstr "Lokalt supportforum" + +#: newmemberwidget.php:65 +msgid "Save Settings" +msgstr "Gem indstillinger" + +#: newmemberwidget.php:66 +msgid "Message" +msgstr "Besked" + +#: newmemberwidget.php:66 +msgid "Your message for new members. You can use bbcode here." +msgstr "Din besked til nye medlemmer. Du kan bruge BBCode her." + +#: newmemberwidget.php:67 +msgid "Add a link to global support forum" +msgstr "Tilføj et link til det globale supportforum" + +#: newmemberwidget.php:67 +msgid "Should a link to the global support forum be displayed?" +msgstr "Skal et link til det globale supportforum vises?" + +#: newmemberwidget.php:68 +msgid "Add a link to the local support forum" +msgstr "Tilføj et link til det lokale supportforum" + +#: newmemberwidget.php:68 +msgid "" +"If you have a local support forum and want to have a link displayed in the " +"widget, check this box." +msgstr "Hvis du har et lokalt supportforum og gerne vil have et link vist i widgeten, så afkryds denne boks." + +#: newmemberwidget.php:69 +msgid "Name of the local support group" +msgstr "Navn på det lokale supportforum" + +#: newmemberwidget.php:69 +msgid "" +"If you checked the above, specify the nickname of the local support" +" group here (i.e. helpers)" +msgstr "Hvis du afkrydsede det ovenover, så definer et kaldenavn for den lokale supportgruppe her (fx hjælpere)" diff --git a/newmemberwidget/lang/da-dk/strings.php b/newmemberwidget/lang/da-dk/strings.php new file mode 100644 index 00000000..667b7f70 --- /dev/null +++ b/newmemberwidget/lang/da-dk/strings.php @@ -0,0 +1,20 @@ +strings['New Member'] = 'Nyt medlem'; +$a->strings['Tips for New Members'] = 'Tips til nye medlemmer'; +$a->strings['Global Support Forum'] = 'Globalt supportforum'; +$a->strings['Local Support Forum'] = 'Lokalt supportforum'; +$a->strings['Save Settings'] = 'Gem indstillinger'; +$a->strings['Message'] = 'Besked'; +$a->strings['Your message for new members. You can use bbcode here.'] = 'Din besked til nye medlemmer. Du kan bruge BBCode her.'; +$a->strings['Add a link to global support forum'] = 'Tilføj et link til det globale supportforum'; +$a->strings['Should a link to the global support forum be displayed?'] = 'Skal et link til det globale supportforum vises?'; +$a->strings['Add a link to the local support forum'] = 'Tilføj et link til det lokale supportforum'; +$a->strings['If you have a local support forum and want to have a link displayed in the widget, check this box.'] = 'Hvis du har et lokalt supportforum og gerne vil have et link vist i widgeten, så afkryds denne boks.'; +$a->strings['Name of the local support group'] = 'Navn på det lokale supportforum'; +$a->strings['If you checked the above, specify the nickname of the local support group here (i.e. helpers)'] = 'Hvis du afkrydsede det ovenover, så definer et kaldenavn for den lokale supportgruppe her (fx hjælpere)'; diff --git a/notifyall/lang/da-dk/messages.po b/notifyall/lang/da-dk/messages.po new file mode 100644 index 00000000..5fb47263 --- /dev/null +++ b/notifyall/lang/da-dk/messages.po @@ -0,0 +1,60 @@ +# ADDON notifyall +# Copyright (C) +# This file is distributed under the same license as the Friendica notifyall addon package. +# +# +# Translators: +# Anton , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2016-08-14 19:29+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (https://www.transifex.com/Friendica/teams/12172/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: NotifyAllEmail.php:40 +#, php-format +msgid "%s Administrator" +msgstr "%s Administrator" + +#: NotifyAllEmail.php:42 +#, php-format +msgid "%1$s, %2$s Administrator" +msgstr "%1$s, %2$s Administrator" + +#: notifyall.php:22 +msgid "Send email to all members" +msgstr "Send email til alle medlemmer" + +#: notifyall.php:49 +msgid "No recipients found." +msgstr "Ingen modtagere fundet." + +#: notifyall.php:59 +msgid "Emails sent" +msgstr "Emails sendt" + +#: notifyall.php:69 +msgid "Send email to all members of this Friendica instance." +msgstr "Send emails til alle medlemmer af denne Friendica instans" + +#: notifyall.php:74 +msgid "Message subject" +msgstr "Beskedemne" + +#: notifyall.php:75 +msgid "Test mode (only send to administrator)" +msgstr "Testtilstand (send kun til administrator)" + +#: notifyall.php:76 +msgid "Submit" +msgstr "Indsend" diff --git a/notifyall/lang/da-dk/strings.php b/notifyall/lang/da-dk/strings.php new file mode 100644 index 00000000..4cafcae1 --- /dev/null +++ b/notifyall/lang/da-dk/strings.php @@ -0,0 +1,16 @@ +strings['%s Administrator'] = '%s Administrator'; +$a->strings['%1$s, %2$s Administrator'] = '%1$s, %2$s Administrator'; +$a->strings['Send email to all members'] = 'Send email til alle medlemmer'; +$a->strings['No recipients found.'] = 'Ingen modtagere fundet.'; +$a->strings['Emails sent'] = 'Emails sendt'; +$a->strings['Send email to all members of this Friendica instance.'] = 'Send emails til alle medlemmer af denne Friendica instans'; +$a->strings['Message subject'] = 'Beskedemne'; +$a->strings['Test mode (only send to administrator)'] = 'Testtilstand (send kun til administrator)'; +$a->strings['Submit'] = 'Indsend'; diff --git a/nsfw/lang/da-dk/messages.po b/nsfw/lang/da-dk/messages.po new file mode 100644 index 00000000..1b7dc383 --- /dev/null +++ b/nsfw/lang/da-dk/messages.po @@ -0,0 +1,54 @@ +# ADDON nsfw +# Copyright (C) +# This file is distributed under the same license as the Friendica nsfw addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2014-06-23 10:34+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: nsfw.php:65 +msgid "" +"This addon searches for specified words/text in posts and collapses them. It" +" can be used to filter content tagged with for instance #NSFW that may be " +"deemed inappropriate at certain times or places, such as being at work. It " +"is also useful for hiding irrelevant or annoying content from direct view." +msgstr "Denne tilføjelse søger efter specificerede ord/tekst i opslag og kollapser dem. Den kan bruges til at filtrere indhold tagget med for eksempel #NSFW, som kan være betragtet som uanstændigt på bestemte tidspunkter eller bestemte steder, som eksempelvis på arbejde. Den er også brugbar til at skjule irrelevant eller irriterende indhold fra at blive vist direkte." + +#: nsfw.php:66 +msgid "Enable Content filter" +msgstr "Aktivér indholdsfilter" + +#: nsfw.php:67 +msgid "Comma separated list of keywords to hide" +msgstr "Kommasepareret liste af nøgleord som skal skjules" + +#: nsfw.php:67 +msgid "Use /expression/ to provide regular expressions" +msgstr "Brug /expression/ for at lave regular expressions" + +#: nsfw.php:72 +msgid "Content Filter (NSFW and more)" +msgstr "Indholdsfilter (NSFW og mere)" + +#: nsfw.php:140 +#, php-format +msgid "Filtered tag: %s" +msgstr "Filtreret tag: %s" + +#: nsfw.php:142 +#, php-format +msgid "Filtered word: %s" +msgstr "Filtreret ord: %s" diff --git a/nsfw/lang/da-dk/strings.php b/nsfw/lang/da-dk/strings.php new file mode 100644 index 00000000..9df7cc0a --- /dev/null +++ b/nsfw/lang/da-dk/strings.php @@ -0,0 +1,14 @@ +strings['This addon searches for specified words/text in posts and collapses them. It can be used to filter content tagged with for instance #NSFW that may be deemed inappropriate at certain times or places, such as being at work. It is also useful for hiding irrelevant or annoying content from direct view.'] = 'Denne tilføjelse søger efter specificerede ord/tekst i opslag og kollapser dem. Den kan bruges til at filtrere indhold tagget med for eksempel #NSFW, som kan være betragtet som uanstændigt på bestemte tidspunkter eller bestemte steder, som eksempelvis på arbejde. Den er også brugbar til at skjule irrelevant eller irriterende indhold fra at blive vist direkte.'; +$a->strings['Enable Content filter'] = 'Aktivér indholdsfilter'; +$a->strings['Comma separated list of keywords to hide'] = 'Kommasepareret liste af nøgleord som skal skjules'; +$a->strings['Use /expression/ to provide regular expressions'] = 'Brug /expression/ for at lave regular expressions'; +$a->strings['Content Filter (NSFW and more)'] = 'Indholdsfilter (NSFW og mere)'; +$a->strings['Filtered tag: %s'] = 'Filtreret tag: %s'; +$a->strings['Filtered word: %s'] = 'Filtreret ord: %s'; diff --git a/numfriends/lang/da-dk/messages.po b/numfriends/lang/da-dk/messages.po new file mode 100644 index 00000000..6a1cd9ce --- /dev/null +++ b/numfriends/lang/da-dk/messages.po @@ -0,0 +1,28 @@ +# ADDON numfriends +# Copyright (C) +# This file is distributed under the same license as the Friendica numfriends addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2014-06-23 10:58+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: numfriends.php:55 +msgid "How many contacts to display on profile sidebar" +msgstr "Hvor mange kontakter der vises på profilsidebjælken" + +#: numfriends.php:60 +msgid "Numfriends Settings" +msgstr "Numvenner Indstillinger" diff --git a/numfriends/lang/da-dk/strings.php b/numfriends/lang/da-dk/strings.php new file mode 100644 index 00000000..bcd0f7af --- /dev/null +++ b/numfriends/lang/da-dk/strings.php @@ -0,0 +1,9 @@ +strings['How many contacts to display on profile sidebar'] = 'Hvor mange kontakter der vises på profilsidebjælken'; +$a->strings['Numfriends Settings'] = 'Numvenner Indstillinger'; diff --git a/openstreetmap/lang/da-dk/messages.po b/openstreetmap/lang/da-dk/messages.po new file mode 100644 index 00000000..47dd9818 --- /dev/null +++ b/openstreetmap/lang/da-dk/messages.po @@ -0,0 +1,65 @@ +# ADDON openstreetmap +# Copyright (C) +# This file is distributed under the same license as the Friendica openstreetmap addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 11:01+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: openstreetmap.php:167 +msgid "View Larger" +msgstr "Vis større" + +#: openstreetmap.php:194 +msgid "Submit" +msgstr "Indsend" + +#: openstreetmap.php:195 +msgid "Tile Server URL" +msgstr "Fliseserver URL" + +#: openstreetmap.php:195 +msgid "" +"A list of public tile servers" +msgstr "En liste af offentlige fliseservere" + +#: openstreetmap.php:196 +msgid "Nominatim (reverse geocoding) Server URL" +msgstr "Nominatim (omvendt geokodning) Server URL" + +#: openstreetmap.php:196 +msgid "" +"A list of Nominatim servers" +msgstr "En liste af Nominatim servere" + +#: openstreetmap.php:197 +msgid "Default zoom" +msgstr "Standard zoom" + +#: openstreetmap.php:197 +msgid "" +"The default zoom level. (1:world, 18:highest, also depends on tile server)" +msgstr "Det normale zoom niveau. (1:verden, 18:højest, afhænger også af fliseserveren)" + +#: openstreetmap.php:198 +msgid "Include marker on map" +msgstr "Inkluder markør på kort" + +#: openstreetmap.php:198 +msgid "Include a marker on the map." +msgstr "Inkluder en markør på kortet." diff --git a/openstreetmap/lang/da-dk/strings.php b/openstreetmap/lang/da-dk/strings.php new file mode 100644 index 00000000..a8a4e1f5 --- /dev/null +++ b/openstreetmap/lang/da-dk/strings.php @@ -0,0 +1,17 @@ +strings['View Larger'] = 'Vis større'; +$a->strings['Submit'] = 'Indsend'; +$a->strings['Tile Server URL'] = 'Fliseserver URL'; +$a->strings['A list of public tile servers'] = 'En liste af offentlige fliseservere'; +$a->strings['Nominatim (reverse geocoding) Server URL'] = 'Nominatim (omvendt geokodning) Server URL'; +$a->strings['A list of Nominatim servers'] = 'En liste af Nominatim servere'; +$a->strings['Default zoom'] = 'Standard zoom'; +$a->strings['The default zoom level. (1:world, 18:highest, also depends on tile server)'] = 'Det normale zoom niveau. (1:verden, 18:højest, afhænger også af fliseserveren)'; +$a->strings['Include marker on map'] = 'Inkluder markør på kort'; +$a->strings['Include a marker on the map.'] = 'Inkluder en markør på kortet.'; diff --git a/pageheader/lang/da-dk/messages.po b/pageheader/lang/da-dk/messages.po new file mode 100644 index 00000000..738ec669 --- /dev/null +++ b/pageheader/lang/da-dk/messages.po @@ -0,0 +1,38 @@ +# ADDON pageheader +# Copyright (C) +# This file is distributed under the same license as the Friendica pageheader addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 11:17+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: pageheader.php:36 +msgid "\"pageheader\" Settings" +msgstr "\"sidehoved\" Indstillinger" + +#: pageheader.php:37 +msgid "Message" +msgstr "Besked" + +#: pageheader.php:37 +msgid "" +"Message to display on every page on this server (or put a pageheader.html " +"file in your docroot)" +msgstr "Besked at vise på hver side på denne server (eller put en pageheader.html fil i din docroot)" + +#: pageheader.php:38 +msgid "Save Settings" +msgstr "Gem indstillinger" diff --git a/pageheader/lang/da-dk/strings.php b/pageheader/lang/da-dk/strings.php new file mode 100644 index 00000000..6f736758 --- /dev/null +++ b/pageheader/lang/da-dk/strings.php @@ -0,0 +1,11 @@ +strings['"pageheader" Settings'] = '"sidehoved" Indstillinger'; +$a->strings['Message'] = 'Besked'; +$a->strings['Message to display on every page on this server (or put a pageheader.html file in your docroot)'] = 'Besked at vise på hver side på denne server (eller put en pageheader.html fil i din docroot)'; +$a->strings['Save Settings'] = 'Gem indstillinger'; diff --git a/piwik/lang/da-dk/messages.po b/piwik/lang/da-dk/messages.po new file mode 100644 index 00000000..2241aee9 --- /dev/null +++ b/piwik/lang/da-dk/messages.po @@ -0,0 +1,60 @@ +# ADDON piwik +# Copyright (C) +# This file is distributed under the same license as the Friendica piwik addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 11:18+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: piwik.php:87 +msgid "" +"This website is tracked using the Matomo" +" analytics tool." +msgstr "Denne hjemmeside er sporet med analyticsværktøjet Matomo." + +#: piwik.php:90 +#, php-format +msgid "" +"If you do not want that your visits are logged in this way you can set a cookie to prevent Matomo / Piwik from tracking further " +"visits of the site (opt-out)." +msgstr "Hvis du ikke vil have at dine besøg bliver logget på denne måde, kan du sætte en cookie for at forhindre Matomo / Piwik i at spore yderligere besøg på siden (opt-out)." + +#: piwik.php:97 +msgid "Save Settings" +msgstr "Gem indstillinger" + +#: piwik.php:98 +msgid "Matomo (Piwik) Base URL" +msgstr "Matomo (Piwik) Base URL" + +#: piwik.php:98 +msgid "" +"Absolute path to your Matomo (Piwik) installation. (without protocol " +"(http/s), with trailing slash)" +msgstr "Absolut sti til din Matomo (Piwik) installation. (uden protokol (http/s), med efterfølgende skråstreg)" + +#: piwik.php:99 +msgid "Site ID" +msgstr "Side ID" + +#: piwik.php:100 +msgid "Show opt-out cookie link?" +msgstr "Vis opt-out cookie link?" + +#: piwik.php:101 +msgid "Asynchronous tracking" +msgstr "Asynkron sporing" diff --git a/piwik/lang/da-dk/strings.php b/piwik/lang/da-dk/strings.php new file mode 100644 index 00000000..4e5c7ede --- /dev/null +++ b/piwik/lang/da-dk/strings.php @@ -0,0 +1,15 @@ +strings['This website is tracked using the Matomo analytics tool.'] = 'Denne hjemmeside er sporet med analyticsværktøjet Matomo.'; +$a->strings['If you do not want that your visits are logged in this way you can set a cookie to prevent Matomo / Piwik from tracking further visits of the site (opt-out).'] = 'Hvis du ikke vil have at dine besøg bliver logget på denne måde, kan du sætte en cookie for at forhindre Matomo / Piwik i at spore yderligere besøg på siden (opt-out).'; +$a->strings['Save Settings'] = 'Gem indstillinger'; +$a->strings['Matomo (Piwik) Base URL'] = 'Matomo (Piwik) Base URL'; +$a->strings['Absolute path to your Matomo (Piwik) installation. (without protocol (http/s), with trailing slash)'] = 'Absolut sti til din Matomo (Piwik) installation. (uden protokol (http/s), med efterfølgende skråstreg)'; +$a->strings['Site ID'] = 'Side ID'; +$a->strings['Show opt-out cookie link?'] = 'Vis opt-out cookie link?'; +$a->strings['Asynchronous tracking'] = 'Asynkron sporing'; diff --git a/planets/lang/da-dk/messages.po b/planets/lang/da-dk/messages.po new file mode 100644 index 00000000..b84fd40d --- /dev/null +++ b/planets/lang/da-dk/messages.po @@ -0,0 +1,28 @@ +# ADDON planets +# Copyright (C) +# This file is distributed under the same license as the Friendica planets addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2014-06-23 11:19+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: planets.php:126 +msgid "Enable Planets Addon" +msgstr "Aktivér Planets tilføjelsen" + +#: planets.php:131 +msgid "Planets Settings" +msgstr "Planets Indstillinger" diff --git a/planets/lang/da-dk/strings.php b/planets/lang/da-dk/strings.php new file mode 100644 index 00000000..a1d9b1a8 --- /dev/null +++ b/planets/lang/da-dk/strings.php @@ -0,0 +1,9 @@ +strings['Enable Planets Addon'] = 'Aktivér Planets tilføjelsen'; +$a->strings['Planets Settings'] = 'Planets Indstillinger'; diff --git a/public_server/lang/da-dk/messages.po b/public_server/lang/da-dk/messages.po new file mode 100644 index 00000000..480eb851 --- /dev/null +++ b/public_server/lang/da-dk/messages.po @@ -0,0 +1,49 @@ +# ADDON public_server +# Copyright (C) +# This file is distributed under the same license as the Friendica public_server addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 11:24+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: public_server.php:64 +msgid "Administrator" +msgstr "Administrator" + +#: public_server.php:118 +#, php-format +msgid "Your account on %s will expire in a few days." +msgstr "Din konto på %s udløber om nogle få dage." + +#: public_server.php:119 +msgid "Your Friendica account is about to expire." +msgstr "Din Friendica konto er ved at udløbe." + +#: public_server.php:120 +#, php-format +msgid "" +"Hi %1$s,\n" +"\n" +"Your account on %2$s will expire in less than five days. You may keep your account by logging in at least once every 30 days" +msgstr "Hej %1$s,\n\nDin konto på %2$s udløber om mindre end fem dage. Du kan beholde din konto ved at logge ind mindst én gang hver 30 dage" + +#: public_server.php:158 +msgid "Save Settings" +msgstr "Gem indstillinger" + +#: public_server.php:160 +msgid "Set any of these options to 0 to deactivate it." +msgstr "Sæt enhver af disse indstillinger til 0 for at deaktivere den." diff --git a/public_server/lang/da-dk/strings.php b/public_server/lang/da-dk/strings.php new file mode 100644 index 00000000..0989a18a --- /dev/null +++ b/public_server/lang/da-dk/strings.php @@ -0,0 +1,17 @@ +strings['Administrator'] = 'Administrator'; +$a->strings['Your account on %s will expire in a few days.'] = 'Din konto på %s udløber om nogle få dage.'; +$a->strings['Your Friendica account is about to expire.'] = 'Din Friendica konto er ved at udløbe.'; +$a->strings['Hi %1$s, + +Your account on %2$s will expire in less than five days. You may keep your account by logging in at least once every 30 days'] = 'Hej %1$s, + +Din konto på %2$s udløber om mindre end fem dage. Du kan beholde din konto ved at logge ind mindst én gang hver 30 dage'; +$a->strings['Save Settings'] = 'Gem indstillinger'; +$a->strings['Set any of these options to 0 to deactivate it.'] = 'Sæt enhver af disse indstillinger til 0 for at deaktivere den.'; diff --git a/pumpio/lang/da-dk/messages.po b/pumpio/lang/da-dk/messages.po new file mode 100644 index 00000000..22b2073c --- /dev/null +++ b/pumpio/lang/da-dk/messages.po @@ -0,0 +1,93 @@ +# ADDON pumpio +# Copyright (C) +# This file is distributed under the same license as the Friendica pumpio addon package. +# +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2014-06-23 11:30+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: pumpio.php:57 +msgid "Permission denied." +msgstr "" + +#: pumpio.php:152 +#, php-format +msgid "Unable to register the client at the pump.io server '%s'." +msgstr "" + +#: pumpio.php:192 +msgid "You are now authenticated to pumpio." +msgstr "" + +#: pumpio.php:193 +msgid "return to the connector page" +msgstr "" + +#: pumpio.php:213 +msgid "Post to pumpio" +msgstr "" + +#: pumpio.php:237 +msgid "Save Settings" +msgstr "" + +#: pumpio.php:239 +msgid "Delete this preset" +msgstr "" + +#: pumpio.php:245 +msgid "Authenticate your pump.io connection" +msgstr "" + +#: pumpio.php:252 +msgid "Pump.io servername (without \"http://\" or \"https://\" )" +msgstr "" + +#: pumpio.php:253 +msgid "Pump.io username (without the servername)" +msgstr "" + +#: pumpio.php:254 +msgid "Import the remote timeline" +msgstr "" + +#: pumpio.php:255 +msgid "Enable Pump.io Post Addon" +msgstr "" + +#: pumpio.php:256 +msgid "Post to Pump.io by default" +msgstr "" + +#: pumpio.php:257 +msgid "Should posts be public?" +msgstr "" + +#: pumpio.php:258 +msgid "Mirror all public posts" +msgstr "" + +#: pumpio.php:263 +msgid "Pump.io Import/Export/Mirror" +msgstr "" + +#: pumpio.php:920 +msgid "status" +msgstr "" + +#: pumpio.php:924 +#, php-format +msgid "%1$s likes %2$s's %3$s" +msgstr "" diff --git a/pumpio/lang/da-dk/strings.php b/pumpio/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/pumpio/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +, 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2014-06-23 12:30+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: qcomment.php:45 +msgid ":-)" +msgstr ":-)" + +#: qcomment.php:45 +msgid ":-(" +msgstr ":-(" + +#: qcomment.php:45 +msgid "lol" +msgstr "lol" + +#: qcomment.php:49 +msgid "" +"Quick comments are found near comment boxes, sometimes hidden. Click them to" +" provide simple replies." +msgstr "Hurtige kommentarer kan findes ved kommentarboksene, nogle gange skjult. Klik på dem for at give simple svar." + +#: qcomment.php:50 +msgid "Enter quick comments, one per line" +msgstr "Skriv hurtige kommentarer, én per linje" + +#: qcomment.php:55 +msgid "Quick Comment Settings" +msgstr "Hurtige kommentarer Indstillinger" diff --git a/qcomment/lang/da-dk/strings.php b/qcomment/lang/da-dk/strings.php new file mode 100644 index 00000000..abc07f2f --- /dev/null +++ b/qcomment/lang/da-dk/strings.php @@ -0,0 +1,13 @@ +strings[':-)'] = ':-)'; +$a->strings[':-('] = ':-('; +$a->strings['lol'] = 'lol'; +$a->strings['Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies.'] = 'Hurtige kommentarer kan findes ved kommentarboksene, nogle gange skjult. Klik på dem for at give simple svar.'; +$a->strings['Enter quick comments, one per line'] = 'Skriv hurtige kommentarer, én per linje'; +$a->strings['Quick Comment Settings'] = 'Hurtige kommentarer Indstillinger'; diff --git a/randplace/lang/da-dk/messages.po b/randplace/lang/da-dk/messages.po new file mode 100644 index 00000000..7f265087 --- /dev/null +++ b/randplace/lang/da-dk/messages.po @@ -0,0 +1,27 @@ +# ADDON randplace +# Copyright (C) +# This file is distributed under the same license as the Friendica randplace addon package. +# +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2014-06-23 12:34+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: randplace.php:161 +msgid "Enable Randplace Addon" +msgstr "" + +#: randplace.php:166 +msgid "Randplace Settings" +msgstr "" diff --git a/randplace/lang/da-dk/strings.php b/randplace/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/randplace/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: rendertime.php:30 +msgid "Save Settings" +msgstr "" + +#: rendertime.php:31 +msgid "Show callstack" +msgstr "" + +#: rendertime.php:31 +msgid "" +"Show detailed performance measures in the callstack. When deactivated, only " +"the summary will be displayed." +msgstr "" + +#: rendertime.php:32 +msgid "Minimal time" +msgstr "" + +#: rendertime.php:32 +msgid "Minimal time that an activity needs to be listed in the callstack." +msgstr "" + +#: rendertime.php:57 +#, php-format +msgid "" +"Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: " +"%s, Total: %s" +msgstr "" + +#: rendertime.php:74 +#, php-format +msgid "Class-Init: %s, Boot: %s, Init: %s, Content: %s, Other: %s, Total: %s" +msgstr "" diff --git a/rendertime/lang/da-dk/strings.php b/rendertime/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/rendertime/lang/da-dk/strings.php @@ -0,0 +1,7 @@ +, 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2018-03-20 07:26+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (https://www.transifex.com/Friendica/teams/12172/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: securemail.php:50 +msgid "Enable Secure Mail" +msgstr "Slå sikker mail til" + +#: securemail.php:51 +msgid "Public key" +msgstr "Offentlig nøgle" + +#: securemail.php:51 +msgid "Your public PGP key, ascii armored format" +msgstr "Din offentlige PGP nøgle i \"ascii armored\" format" + +#: securemail.php:56 +msgid "\"Secure Mail\" Settings" +msgstr "\"Sikker mail\" Indstillinger" + +#: securemail.php:59 +msgid "Save Settings" +msgstr "Gem indstillinger" + +#: securemail.php:60 +msgid "Save and send test" +msgstr "Gem og send test" + +#: securemail.php:93 +msgid "Test email sent" +msgstr "Testmail sendt" + +#: securemail.php:95 +msgid "There was an error sending the test email" +msgstr "Der skete en fejl da testmailen skulle sendes" diff --git a/securemail/lang/da-dk/strings.php b/securemail/lang/da-dk/strings.php new file mode 100644 index 00000000..83b70c40 --- /dev/null +++ b/securemail/lang/da-dk/strings.php @@ -0,0 +1,15 @@ +strings['Enable Secure Mail'] = 'Slå sikker mail til'; +$a->strings['Public key'] = 'Offentlig nøgle'; +$a->strings['Your public PGP key, ascii armored format'] = 'Din offentlige PGP nøgle i "ascii armored" format'; +$a->strings['"Secure Mail" Settings'] = '"Sikker mail" Indstillinger'; +$a->strings['Save Settings'] = 'Gem indstillinger'; +$a->strings['Save and send test'] = 'Gem og send test'; +$a->strings['Test email sent'] = 'Testmail sendt'; +$a->strings['There was an error sending the test email'] = 'Der skete en fejl da testmailen skulle sendes'; diff --git a/showmore/lang/da-dk/messages.po b/showmore/lang/da-dk/messages.po new file mode 100644 index 00000000..0c9cb46c --- /dev/null +++ b/showmore/lang/da-dk/messages.po @@ -0,0 +1,36 @@ +# ADDON showmore +# Copyright (C) +# This file is distributed under the same license as the Friendica showmore addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2014-06-23 12:37+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: showmore.php:37 +msgid "Enable Show More" +msgstr "Aktivér Vis mere" + +#: showmore.php:38 +msgid "Cutting posts after how many characters" +msgstr "Afskærer opslag efter hvor mange tegn" + +#: showmore.php:43 +msgid "\"Show more\" Settings" +msgstr "\"Vis mere\" Indstillinger" + +#: showmore.php:119 +msgid "show more" +msgstr "vis mere" diff --git a/showmore/lang/da-dk/strings.php b/showmore/lang/da-dk/strings.php new file mode 100644 index 00000000..2c3bb054 --- /dev/null +++ b/showmore/lang/da-dk/strings.php @@ -0,0 +1,11 @@ +strings['Enable Show More'] = 'Aktivér Vis mere'; +$a->strings['Cutting posts after how many characters'] = 'Afskærer opslag efter hvor mange tegn'; +$a->strings['"Show more" Settings'] = '"Vis mere" Indstillinger'; +$a->strings['show more'] = 'vis mere'; diff --git a/smileybutton/lang/da-dk/messages.po b/smileybutton/lang/da-dk/messages.po new file mode 100644 index 00000000..4d2caafe --- /dev/null +++ b/smileybutton/lang/da-dk/messages.po @@ -0,0 +1,36 @@ +# ADDON smileybutton +# Copyright (C) +# This file is distributed under the same license as the Friendica smileybutton addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-06-23 14:45+0200\n" +"PO-Revision-Date: 2014-06-23 12:45+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: smileybutton.php:269 +msgid "Smileybutton settings" +msgstr "Smileyknap Indstillinger" + +#: smileybutton.php:272 +msgid "You can hide the button and show the smilies directly." +msgstr "Du kan skjule knappen og vise smileyerne direkte." + +#: smileybutton.php:274 +msgid "Hide the button" +msgstr "Skjul knappen" + +#: smileybutton.php:281 +msgid "Save Settings" +msgstr "Gem indstillinger" diff --git a/smileybutton/lang/da-dk/strings.php b/smileybutton/lang/da-dk/strings.php new file mode 100644 index 00000000..2e53e67a --- /dev/null +++ b/smileybutton/lang/da-dk/strings.php @@ -0,0 +1,11 @@ +strings['Smileybutton settings'] = 'Smileyknap Indstillinger'; +$a->strings['You can hide the button and show the smilies directly.'] = 'Du kan skjule knappen og vise smileyerne direkte.'; +$a->strings['Hide the button'] = 'Skjul knappen'; +$a->strings['Save Settings'] = 'Gem indstillinger'; diff --git a/startpage/lang/da-dk/messages.po b/startpage/lang/da-dk/messages.po new file mode 100644 index 00000000..2d7419e0 --- /dev/null +++ b/startpage/lang/da-dk/messages.po @@ -0,0 +1,32 @@ +# ADDON startpage +# Copyright (C) +# This file is distributed under the same license as the Friendica startpage addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2014-06-23 12:51+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: startpage.php:70 +msgid "Home page to load after login - leave blank for profile wall" +msgstr "Den side som skal vises efter login - efterlad blank for profilvæggen" + +#: startpage.php:70 +msgid "Examples: \"network\" or \"notifications/system\"" +msgstr "Eksempler: \"network\" eller \"notifications/system\"" + +#: startpage.php:75 +msgid "Startpage" +msgstr "Startside" diff --git a/startpage/lang/da-dk/strings.php b/startpage/lang/da-dk/strings.php new file mode 100644 index 00000000..916c21c3 --- /dev/null +++ b/startpage/lang/da-dk/strings.php @@ -0,0 +1,10 @@ +strings['Home page to load after login - leave blank for profile wall'] = 'Den side som skal vises efter login - efterlad blank for profilvæggen'; +$a->strings['Examples: "network" or "notifications/system"'] = 'Eksempler: "network" eller "notifications/system"'; +$a->strings['Startpage'] = 'Startside'; diff --git a/statusnet/lang/da-dk/messages.po b/statusnet/lang/da-dk/messages.po new file mode 100644 index 00000000..f088f811 --- /dev/null +++ b/statusnet/lang/da-dk/messages.po @@ -0,0 +1,174 @@ +# ADDON statusnet +# Copyright (C) +# This file is distributed under the same license as the Friendica statusnet addon package. +# +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2014-06-23 12:54+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: statusnet.php:97 +msgid "Post to GNU Social" +msgstr "" + +#: statusnet.php:148 +msgid "" +"Please contact your site administrator.
The provided API URL is not " +"valid." +msgstr "" + +#: statusnet.php:176 +msgid "We could not contact the GNU Social API with the Path you entered." +msgstr "" + +#: statusnet.php:243 statusnet.php:656 +msgid "Save Settings" +msgstr "" + +#: statusnet.php:255 +#, php-format +msgid "Currently connected to: %s" +msgstr "" + +#: statusnet.php:260 +msgid "" +"Note: Due your privacy settings (Hide your profile " +"details from unknown viewers?) the link potentially included in public " +"postings relayed to GNU Social will lead the visitor to a blank page " +"informing the visitor that the access to your profile has been restricted." +msgstr "" + +#: statusnet.php:263 +msgid "Clear OAuth configuration" +msgstr "" + +#: statusnet.php:275 +msgid "Cancel GNU Social Connection" +msgstr "" + +#: statusnet.php:283 +msgid "Globally Available GNU Social OAuthKeys" +msgstr "" + +#: statusnet.php:284 +msgid "" +"There are preconfigured OAuth key pairs for some GNU Social servers " +"available. If you are using one of them, please use these credentials. If " +"not feel free to connect to any other GNU Social instance (see below)." +msgstr "" + +#: statusnet.php:285 +msgid "Provide your own OAuth Credentials" +msgstr "" + +#: statusnet.php:286 +msgid "" +"No consumer key pair for GNU Social found. Register your Friendica Account " +"as a desktop application on your GNU Social account, copy the consumer key " +"pair here and enter the API base root.
Before you register your own " +"OAuth key pair ask the administrator if there is already a key pair for this" +" Friendica installation at your favorite GNU Social installation." +msgstr "" + +#: statusnet.php:287 +msgid "" +"To connect to your GNU Social account click the button below to get a " +"security code from GNU Social which you have to copy into the input box " +"below and submit the form. Only your public posts will be " +"posted to GNU Social." +msgstr "" + +#: statusnet.php:288 +msgid "Log in with GNU Social" +msgstr "" + +#: statusnet.php:289 +msgid "Cancel Connection Process" +msgstr "" + +#: statusnet.php:290 +#, php-format +msgid "Current GNU Social API is: %s" +msgstr "" + +#: statusnet.php:307 +msgid "OAuth Consumer Key" +msgstr "" + +#: statusnet.php:308 +msgid "OAuth Consumer Secret" +msgstr "" + +#: statusnet.php:310 statusnet.php:636 statusnet.php:648 +msgid "Base API Path (remember the trailing /)" +msgstr "" + +#: statusnet.php:311 +msgid "Copy the security code from GNU Social here" +msgstr "" + +#: statusnet.php:313 +msgid "Allow posting to GNU Social" +msgstr "" + +#: statusnet.php:313 +msgid "" +"If enabled all your public postings can be posted to the " +"associated GNU Social account. You can choose to do so by default (here) or " +"for every posting separately in the posting options when writing the entry." +msgstr "" + +#: statusnet.php:314 +msgid "Post to GNU Social by default" +msgstr "" + +#: statusnet.php:315 +msgid "Mirror all public posts" +msgstr "" + +#: statusnet.php:316 +msgid "Automatically create contacts" +msgstr "" + +#: statusnet.php:317 +msgid "Import the remote timeline" +msgstr "" + +#: statusnet.php:318 +msgid "Disabled" +msgstr "Slået fra" + +#: statusnet.php:319 +msgid "Full Timeline" +msgstr "" + +#: statusnet.php:320 +msgid "Only Mentions" +msgstr "" + +#: statusnet.php:326 +msgid "GNU Social Import/Export/Mirror" +msgstr "" + +#: statusnet.php:647 +msgid "Site name" +msgstr "" + +#: statusnet.php:649 +msgid "Consumer Secret" +msgstr "" + +#: statusnet.php:650 +msgid "Consumer Key" +msgstr "" diff --git a/statusnet/lang/da-dk/strings.php b/statusnet/lang/da-dk/strings.php new file mode 100644 index 00000000..a728ce79 --- /dev/null +++ b/statusnet/lang/da-dk/strings.php @@ -0,0 +1,8 @@ +strings['Disabled'] = 'Slået fra'; diff --git a/superblock/lang/da-dk/messages.po b/superblock/lang/da-dk/messages.po new file mode 100644 index 00000000..ecfa5b6c --- /dev/null +++ b/superblock/lang/da-dk/messages.po @@ -0,0 +1,32 @@ +# ADDON superblock +# Copyright (C) +# This file is distributed under the same license as the Friendica superblock addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2014-06-23 12:55+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: superblock.php:35 +msgid "Comma separated profile URLs to block" +msgstr "Kommasepareret liste over profil-URL'er som skal blokeres" + +#: superblock.php:40 +msgid "Superblock" +msgstr "Superblokér" + +#: superblock.php:129 +msgid "Block Completely" +msgstr "Blokér fuldstændigt" diff --git a/superblock/lang/da-dk/strings.php b/superblock/lang/da-dk/strings.php new file mode 100644 index 00000000..6db2e7c4 --- /dev/null +++ b/superblock/lang/da-dk/strings.php @@ -0,0 +1,10 @@ +strings['Comma separated profile URLs to block'] = 'Kommasepareret liste over profil-URL\'er som skal blokeres'; +$a->strings['Superblock'] = 'Superblokér'; +$a->strings['Block Completely'] = 'Blokér fuldstændigt'; diff --git a/testdrive/lang/da-dk/messages.po b/testdrive/lang/da-dk/messages.po new file mode 100644 index 00000000..a95f3c8b --- /dev/null +++ b/testdrive/lang/da-dk/messages.po @@ -0,0 +1,41 @@ +# ADDON testdrive +# Copyright (C) +# This file is distributed under the same license as the Friendica testdrive addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 12:56+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: testdrive.php:64 +msgid "Administrator" +msgstr "Administrator" + +#: testdrive.php:89 +#, php-format +msgid "Your account on %s will expire in a few days." +msgstr "Din konto på %s udløber om nogle få dage." + +#: testdrive.php:90 +msgid "Your Friendica test account is about to expire." +msgstr "Din Friendica konto er tæt på at udløbe." + +#: testdrive.php:91 +#, php-format +msgid "" +"Hi %1$s,\n" +"\n" +"Your test account on %2$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at https://friendi.ca." +msgstr "Hej %1$s,\n\nDin testkonto på %2$s udløber om mindre end fem dage. Vi håber at du nød denne testkørsel og bruger denne lejlighed til at finde en permanent Friendica hjemmeside til dit online sociale liv. En liste af offentlige sider er tilgængelig på %s/siteinfo - og for mere information om at opsætte din egen Friendica server, se venligst Friendica-projektets hjemmeside: https://friendi.ca." diff --git a/testdrive/lang/da-dk/strings.php b/testdrive/lang/da-dk/strings.php new file mode 100644 index 00000000..259f405d --- /dev/null +++ b/testdrive/lang/da-dk/strings.php @@ -0,0 +1,15 @@ +strings['Administrator'] = 'Administrator'; +$a->strings['Your account on %s will expire in a few days.'] = 'Din konto på %s udløber om nogle få dage.'; +$a->strings['Your Friendica test account is about to expire.'] = 'Din Friendica konto er tæt på at udløbe.'; +$a->strings['Hi %1$s, + +Your test account on %2$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at https://friendi.ca.'] = 'Hej %1$s, + +Din testkonto på %2$s udløber om mindre end fem dage. Vi håber at du nød denne testkørsel og bruger denne lejlighed til at finde en permanent Friendica hjemmeside til dit online sociale liv. En liste af offentlige sider er tilgængelig på %s/siteinfo - og for mere information om at opsætte din egen Friendica server, se venligst Friendica-projektets hjemmeside: https://friendi.ca.'; diff --git a/tictac/lang/da-dk/messages.po b/tictac/lang/da-dk/messages.po new file mode 100644 index 00000000..3ab88e1d --- /dev/null +++ b/tictac/lang/da-dk/messages.po @@ -0,0 +1,74 @@ +# ADDON tictac +# Copyright (C) +# This file is distributed under the same license as the Friendica tictac addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 12:57+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: tictac.php:16 +msgid "Three Dimensional Tic-Tac-Toe" +msgstr "Tredimensionelt Tic-Tac-Toe" + +#: tictac.php:49 +msgid "3D Tic-Tac-Toe" +msgstr "3D Tic-Tac-Toe" + +#: tictac.php:54 +msgid "New game" +msgstr "Nyt spil" + +#: tictac.php:55 +msgid "New game with handicap" +msgstr "Nyt spil med handicap" + +#: tictac.php:56 +msgid "" +"Three dimensional tic-tac-toe is just like the traditional game except that " +"it is played on multiple levels simultaneously. " +msgstr "Tredimensionelt Tic-Tac-Toe er præcis ligesom det traditionelle spil, bortset fra at det spilles på flere niveauer samtidigt." + +#: tictac.php:57 +msgid "" +"In this case there are three levels. You win by getting three in a row on " +"any level, as well as up, down, and diagonally across the different levels." +msgstr "I dette tilfælde er der tre niveauer. Du vinder ved at få tre på en række på et af niveauerne, eller op, ned, eller diagonalt på tværs af de tre forskellige niveauer." + +#: tictac.php:59 +msgid "" +"The handicap game disables the center position on the middle level because " +"the player claiming this square often has an unfair advantage." +msgstr "Spillet med handicap slår centerpositionen på det midterse niveau fra, fordi spilleren der får den position ofte har en unfair fordel." + +#: tictac.php:178 +msgid "You go first..." +msgstr "Du starter..." + +#: tictac.php:183 +msgid "I'm going first this time..." +msgstr "Jeg starter denne gang..." + +#: tictac.php:189 +msgid "You won!" +msgstr "Du vandt!" + +#: tictac.php:195 tictac.php:220 +msgid "\"Cat\" game!" +msgstr "\"Kat\" spil!" + +#: tictac.php:218 +msgid "I won!" +msgstr "Jeg vandt!" diff --git a/tictac/lang/da-dk/strings.php b/tictac/lang/da-dk/strings.php new file mode 100644 index 00000000..394ec755 --- /dev/null +++ b/tictac/lang/da-dk/strings.php @@ -0,0 +1,19 @@ +strings['Three Dimensional Tic-Tac-Toe'] = 'Tredimensionelt Tic-Tac-Toe'; +$a->strings['3D Tic-Tac-Toe'] = '3D Tic-Tac-Toe'; +$a->strings['New game'] = 'Nyt spil'; +$a->strings['New game with handicap'] = 'Nyt spil med handicap'; +$a->strings['Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. '] = 'Tredimensionelt Tic-Tac-Toe er præcis ligesom det traditionelle spil, bortset fra at det spilles på flere niveauer samtidigt.'; +$a->strings['In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels.'] = 'I dette tilfælde er der tre niveauer. Du vinder ved at få tre på en række på et af niveauerne, eller op, ned, eller diagonalt på tværs af de tre forskellige niveauer.'; +$a->strings['The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage.'] = 'Spillet med handicap slår centerpositionen på det midterse niveau fra, fordi spilleren der får den position ofte har en unfair fordel.'; +$a->strings['You go first...'] = 'Du starter...'; +$a->strings['I\'m going first this time...'] = 'Jeg starter denne gang...'; +$a->strings['You won!'] = 'Du vandt!'; +$a->strings['"Cat" game!'] = '"Kat" spil!'; +$a->strings['I won!'] = 'Jeg vandt!'; diff --git a/tumblr/lang/da-dk/messages.po b/tumblr/lang/da-dk/messages.po new file mode 100644 index 00000000..f1b5fb40 --- /dev/null +++ b/tumblr/lang/da-dk/messages.po @@ -0,0 +1,72 @@ +# ADDON tumblr +# Copyright (C) +# This file is distributed under the same license as the Friendica tumblr addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: tumblr.php:39 +msgid "Permission denied." +msgstr "Ikke tilladt." + +#: tumblr.php:69 +msgid "Save Settings" +msgstr "Gem indstillinger" + +#: tumblr.php:71 +msgid "Consumer Key" +msgstr "\"Consumer\" nøgle" + +#: tumblr.php:72 +msgid "Consumer Secret" +msgstr "\"Consumer\" hemmelighed" + +#: tumblr.php:177 +msgid "You are now authenticated to tumblr." +msgstr "" + +#: tumblr.php:178 +msgid "return to the connector page" +msgstr "" + +#: tumblr.php:194 +msgid "Post to Tumblr" +msgstr "Læg op på Tumblr" + +#: tumblr.php:225 +msgid "Post to page:" +msgstr "Læg op på side:" + +#: tumblr.php:231 +msgid "(Re-)Authenticate your tumblr page" +msgstr "" + +#: tumblr.php:232 +msgid "You are not authenticated to tumblr" +msgstr "" + +#: tumblr.php:237 +msgid "Enable Tumblr Post Addon" +msgstr "Aktiver Tumblr-tilføjelse" + +#: tumblr.php:238 +msgid "Post to Tumblr by default" +msgstr "Læg op på Tumblr som standard" + +#: tumblr.php:244 +msgid "Tumblr Export" +msgstr "" diff --git a/tumblr/lang/da-dk/strings.php b/tumblr/lang/da-dk/strings.php new file mode 100644 index 00000000..655ce8b3 --- /dev/null +++ b/tumblr/lang/da-dk/strings.php @@ -0,0 +1,15 @@ +strings['Permission denied.'] = 'Ikke tilladt.'; +$a->strings['Save Settings'] = 'Gem indstillinger'; +$a->strings['Consumer Key'] = '"Consumer" nøgle'; +$a->strings['Consumer Secret'] = '"Consumer" hemmelighed'; +$a->strings['Post to Tumblr'] = 'Læg op på Tumblr'; +$a->strings['Post to page:'] = 'Læg op på side:'; +$a->strings['Enable Tumblr Post Addon'] = 'Aktiver Tumblr-tilføjelse'; +$a->strings['Post to Tumblr by default'] = 'Læg op på Tumblr som standard'; diff --git a/twitter/lang/da-dk/messages.po b/twitter/lang/da-dk/messages.po new file mode 100644 index 00000000..047242d6 --- /dev/null +++ b/twitter/lang/da-dk/messages.po @@ -0,0 +1,146 @@ +# ADDON twitter +# Copyright (C) +# This file is distributed under the same license as the Friendica twitter addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-27 10:25-0500\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: twitter.php:213 +msgid "Post to Twitter" +msgstr "Læg op på Twitter" + +#: twitter.php:258 +msgid "" +"You submitted an empty PIN, please Sign In with Twitter again to get a new " +"one." +msgstr "Du indsendte en tom PIN, log venligst ind med Twitter igen og få en ny en." + +#: twitter.php:321 +msgid "" +"No consumer key pair for Twitter found. Please contact your site " +"administrator." +msgstr "Intet \"consumer key pair\" fundet for Twitter. Kontakt venligst din sides administrator." + +#: twitter.php:334 +msgid "" +"At this Friendica instance the Twitter addon was enabled but you have not " +"yet connected your account to your Twitter account. To do so click the " +"button below to get a PIN from Twitter which you have to copy into the input" +" box below and submit the form. Only your public posts will" +" be posted to Twitter." +msgstr "På denne Friendica instans er Twitter-tilføjelsen slået til, men du har ikke forbundet din konto til din Twitter-konto endnu. For at gøre det, skal du klikke på knappen herunder for at få en PIN fra Twitter, som du så skal kopiere ind i input-boksen og indsende . Det er kun dine offentlige opslag som vil blive lagt op på Twitter." + +#: twitter.php:335 +msgid "Log in with Twitter" +msgstr "Log ind med Twitter" + +#: twitter.php:337 +msgid "Copy the PIN from Twitter here" +msgstr "Kopier din PIN fra Twitter ind her" + +#: twitter.php:345 twitter.php:388 +msgid "An error occured: " +msgstr "Der opstod en fejl:" + +#: twitter.php:359 +#, php-format +msgid "" +"Currently connected to: %1$s" +msgstr "I øjeblikket forbundet til: %1$s" + +#: twitter.php:365 +msgid "" +"Note: Due to your privacy settings (Hide your profile " +"details from unknown viewers?) the link potentially included in public " +"postings relayed to Twitter will lead the visitor to a blank page informing " +"the visitor that the access to your profile has been restricted." +msgstr "Note: Grundet dine privatlivsindstillinger (Skjul dine profildetaljer fra ukendte besøgende?), vil linket, som potentielt kan være inkluderet i offentlige opslag på Twitter, lede tilbage til en blank side som informerer den besøgende om at adgang til din profil er begrænset." + +#: twitter.php:372 +msgid "Invalid Twitter info" +msgstr "Ugyldig Twitter information" + +#: twitter.php:373 +msgid "Disconnect" +msgstr "Afbryd forbindelsen" + +#: twitter.php:378 +msgid "Allow posting to Twitter" +msgstr "Tillad at lave opslag på Twitter" + +#: twitter.php:378 +msgid "" +"If enabled all your public postings can be posted to the " +"associated Twitter account. You can choose to do so by default (here) or for" +" every posting separately in the posting options when writing the entry." +msgstr "Hvis aktiveret, kan alle dine offentlige opslag blive lagt op på den associerede Twitter konto. Du kan vælge at gøre dette automatisk (her), eller separat for hvert opslag in valgmulighederne når du skriver opslaget." + +#: twitter.php:379 +msgid "Send public postings to Twitter by default" +msgstr "Send som standard offentlige opslag til Twitter" + +#: twitter.php:380 +msgid "Mirror all posts from twitter that are no replies" +msgstr "Spejl alle opslag fra Twitter som ikke er svar" + +#: twitter.php:381 +msgid "Import the remote timeline" +msgstr "Importér den eksterne tidslinje" + +#: twitter.php:382 +msgid "Automatically create contacts" +msgstr "Opret automatisk kontakter" + +#: twitter.php:382 +msgid "" +"This will automatically create a contact in Friendica as soon as you receive" +" a message from an existing contact via the Twitter network. If you do not " +"enable this, you need to manually add those Twitter contacts in Friendica " +"from whom you would like to see posts here." +msgstr "Dette vil automatisk skabe en kontakt i Friendica, så snart du modtager en besked fra en eksisterende kontakt via Twitter-netværket. Hvis du ikke slår dette til, skal du manuelt tilføje de Twitter kontakter i Friendica, som du gerne vil se opslag fra her." + +#: twitter.php:395 +msgid "Twitter Import/Export/Mirror" +msgstr "Twitter Import/Eksport/Spejl" + +#: twitter.php:547 +msgid "" +"Please connect a Twitter account in your Social Network settings to import " +"Twitter posts." +msgstr "Forbind venligst en Twitter konto i dine Sociale Netværk indstiliinger for at importere Twitter opslag." + +#: twitter.php:554 +msgid "Twitter post not found." +msgstr "Twitter opslag kunne ikke opstøves." + +#: twitter.php:914 +msgid "Save Settings" +msgstr "Gem indstillinger" + +#: twitter.php:916 +msgid "Consumer key" +msgstr "\"Consumer\" nøgle" + +#: twitter.php:917 +msgid "Consumer secret" +msgstr "\"Consumer\" hemmelighed" + +#: twitter.php:1113 +#, php-format +msgid "%s on Twitter" +msgstr "%s på Twitter" diff --git a/twitter/lang/da-dk/strings.php b/twitter/lang/da-dk/strings.php new file mode 100644 index 00000000..e0004911 --- /dev/null +++ b/twitter/lang/da-dk/strings.php @@ -0,0 +1,32 @@ +strings['Post to Twitter'] = 'Læg op på Twitter'; +$a->strings['You submitted an empty PIN, please Sign In with Twitter again to get a new one.'] = 'Du indsendte en tom PIN, log venligst ind med Twitter igen og få en ny en.'; +$a->strings['No consumer key pair for Twitter found. Please contact your site administrator.'] = 'Intet "consumer key pair" fundet for Twitter. Kontakt venligst din sides administrator.'; +$a->strings['At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.'] = 'På denne Friendica instans er Twitter-tilføjelsen slået til, men du har ikke forbundet din konto til din Twitter-konto endnu. For at gøre det, skal du klikke på knappen herunder for at få en PIN fra Twitter, som du så skal kopiere ind i input-boksen og indsende . Det er kun dine offentlige opslag som vil blive lagt op på Twitter.'; +$a->strings['Log in with Twitter'] = 'Log ind med Twitter'; +$a->strings['Copy the PIN from Twitter here'] = 'Kopier din PIN fra Twitter ind her'; +$a->strings['An error occured: '] = 'Der opstod en fejl:'; +$a->strings['Currently connected to: %1$s'] = 'I øjeblikket forbundet til: %1$s'; +$a->strings['Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Note: Grundet dine privatlivsindstillinger (Skjul dine profildetaljer fra ukendte besøgende?), vil linket, som potentielt kan være inkluderet i offentlige opslag på Twitter, lede tilbage til en blank side som informerer den besøgende om at adgang til din profil er begrænset.'; +$a->strings['Invalid Twitter info'] = 'Ugyldig Twitter information'; +$a->strings['Disconnect'] = 'Afbryd forbindelsen'; +$a->strings['Allow posting to Twitter'] = 'Tillad at lave opslag på Twitter'; +$a->strings['If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'Hvis aktiveret, kan alle dine offentlige opslag blive lagt op på den associerede Twitter konto. Du kan vælge at gøre dette automatisk (her), eller separat for hvert opslag in valgmulighederne når du skriver opslaget.'; +$a->strings['Send public postings to Twitter by default'] = 'Send som standard offentlige opslag til Twitter'; +$a->strings['Mirror all posts from twitter that are no replies'] = 'Spejl alle opslag fra Twitter som ikke er svar'; +$a->strings['Import the remote timeline'] = 'Importér den eksterne tidslinje'; +$a->strings['Automatically create contacts'] = 'Opret automatisk kontakter'; +$a->strings['This will automatically create a contact in Friendica as soon as you receive a message from an existing contact via the Twitter network. If you do not enable this, you need to manually add those Twitter contacts in Friendica from whom you would like to see posts here.'] = 'Dette vil automatisk skabe en kontakt i Friendica, så snart du modtager en besked fra en eksisterende kontakt via Twitter-netværket. Hvis du ikke slår dette til, skal du manuelt tilføje de Twitter kontakter i Friendica, som du gerne vil se opslag fra her.'; +$a->strings['Twitter Import/Export/Mirror'] = 'Twitter Import/Eksport/Spejl'; +$a->strings['Please connect a Twitter account in your Social Network settings to import Twitter posts.'] = 'Forbind venligst en Twitter konto i dine Sociale Netværk indstiliinger for at importere Twitter opslag.'; +$a->strings['Twitter post not found.'] = 'Twitter opslag kunne ikke opstøves.'; +$a->strings['Save Settings'] = 'Gem indstillinger'; +$a->strings['Consumer key'] = '"Consumer" nøgle'; +$a->strings['Consumer secret'] = '"Consumer" hemmelighed'; +$a->strings['%s on Twitter'] = '%s på Twitter'; diff --git a/viewsrc/lang/da-dk/messages.po b/viewsrc/lang/da-dk/messages.po new file mode 100644 index 00000000..62f041c4 --- /dev/null +++ b/viewsrc/lang/da-dk/messages.po @@ -0,0 +1,26 @@ +# ADDON viewsrc +# Copyright (C) +# This file is distributed under the same license as the Friendica viewsrc addon package. +# +# +# Translators: +# Anton , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-02-01 18:16+0100\n" +"PO-Revision-Date: 2018-03-20 07:26+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (https://www.transifex.com/Friendica/teams/12172/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: viewsrc.php:49 +msgid "View Source" +msgstr "Vis kilde" diff --git a/viewsrc/lang/da-dk/strings.php b/viewsrc/lang/da-dk/strings.php new file mode 100644 index 00000000..61f8043e --- /dev/null +++ b/viewsrc/lang/da-dk/strings.php @@ -0,0 +1,8 @@ +strings['View Source'] = 'Vis kilde'; diff --git a/webrtc/lang/da-dk/messages.po b/webrtc/lang/da-dk/messages.po new file mode 100644 index 00000000..0194df7f --- /dev/null +++ b/webrtc/lang/da-dk/messages.po @@ -0,0 +1,55 @@ +# ADDON webrtc +# Copyright (C) +# This file is distributed under the same license as the Friendica webrtc addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-29 15:56+0200\n" +"PO-Revision-Date: 2014-06-23 13:05+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: webrtc.php:18 +msgid "WebRTC Videochat" +msgstr "WebRTC videochat" + +#: webrtc.php:24 +msgid "Save Settings" +msgstr "Gem indstillinger" + +#: webrtc.php:25 +msgid "WebRTC Base URL" +msgstr "WebRTC Base URL" + +#: webrtc.php:25 +msgid "" +"Page your users will create a WebRTC chat room on. For example you could use" +" https://live.mayfirst.org ." +msgstr "Side dine brugere vil lave et WebRTC chatrum på. For eksempel kan du bruge https://live.mayfirst.org ." + +#: webrtc.php:44 +msgid "Video Chat" +msgstr "Video chat" + +#: webrtc.php:45 +msgid "" +"WebRTC is a video and audio conferencing tool that works in all modern " +"browsers. Just create a new chat room and send the link to someone you want " +"to chat with." +msgstr "WebRTC er et video- og lydkonferenceværktøj som virker i alle moderne browsere. Bare lav et nyt chatrum og send linket til en du gerne vil chatte med." + +#: webrtc.php:47 +msgid "" +"Please contact your friendica admin and send a reminder to configure the " +"WebRTC addon." +msgstr "Kontakt venligst din friendica administrator og send en påmindelse om at konfigurere WebRTC tilføjelsen." diff --git a/webrtc/lang/da-dk/strings.php b/webrtc/lang/da-dk/strings.php new file mode 100644 index 00000000..c15b4ead --- /dev/null +++ b/webrtc/lang/da-dk/strings.php @@ -0,0 +1,14 @@ +strings['WebRTC Videochat'] = 'WebRTC videochat'; +$a->strings['Save Settings'] = 'Gem indstillinger'; +$a->strings['WebRTC Base URL'] = 'WebRTC Base URL'; +$a->strings['Page your users will create a WebRTC chat room on. For example you could use https://live.mayfirst.org .'] = 'Side dine brugere vil lave et WebRTC chatrum på. For eksempel kan du bruge https://live.mayfirst.org .'; +$a->strings['Video Chat'] = 'Video chat'; +$a->strings['WebRTC is a video and audio conferencing tool that works in all modern browsers. Just create a new chat room and send the link to someone you want to chat with.'] = 'WebRTC er et video- og lydkonferenceværktøj som virker i alle moderne browsere. Bare lav et nyt chatrum og send linket til en du gerne vil chatte med.'; +$a->strings['Please contact your friendica admin and send a reminder to configure the WebRTC addon.'] = 'Kontakt venligst din friendica administrator og send en påmindelse om at konfigurere WebRTC tilføjelsen.'; diff --git a/windowsphonepush/lang/da-dk/messages.po b/windowsphonepush/lang/da-dk/messages.po new file mode 100644 index 00000000..327d198a --- /dev/null +++ b/windowsphonepush/lang/da-dk/messages.po @@ -0,0 +1,36 @@ +# ADDON windowsphonepush +# Copyright (C) +# This file is distributed under the same license as the Friendica windowsphonepush addon package. +# +# +# Translators: +# Anton , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2014-10-31 13:43+0000\n" +"Last-Translator: Anton , 2022\n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: windowsphonepush.php:102 +msgid "Enable WindowsPhonePush Addon" +msgstr "Aktiver WindowsPhonePush-tilføjelsen" + +#: windowsphonepush.php:103 +msgid "Push text of new item" +msgstr "Send tekst fra nyt element" + +#: windowsphonepush.php:104 +msgid "Device URL" +msgstr "Enheds-URL" + +#: windowsphonepush.php:109 +msgid "WindowsPhonePush Settings" +msgstr "WindowsPhonePush Indstillinger" diff --git a/windowsphonepush/lang/da-dk/strings.php b/windowsphonepush/lang/da-dk/strings.php new file mode 100644 index 00000000..d42dbbc2 --- /dev/null +++ b/windowsphonepush/lang/da-dk/strings.php @@ -0,0 +1,11 @@ +strings['Enable WindowsPhonePush Addon'] = 'Aktiver WindowsPhonePush-tilføjelsen'; +$a->strings['Push text of new item'] = 'Send tekst fra nyt element'; +$a->strings['Device URL'] = 'Enheds-URL'; +$a->strings['WindowsPhonePush Settings'] = 'WindowsPhonePush Indstillinger'; diff --git a/wppost/lang/da-dk/messages.po b/wppost/lang/da-dk/messages.po new file mode 100644 index 00000000..5625b422 --- /dev/null +++ b/wppost/lang/da-dk/messages.po @@ -0,0 +1,69 @@ +# ADDON wppost +# Copyright (C) +# This file is distributed under the same license as the Friendica wppost addon package. +# +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:18-0500\n" +"PO-Revision-Date: 2014-06-23 13:07+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Danish (Denmark) (http://www.transifex.com/Friendica/friendica/language/da_DK/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da_DK\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: wppost.php:41 +msgid "Post to Wordpress" +msgstr "" + +#: wppost.php:65 +msgid "Enable Wordpress Post Addon" +msgstr "" + +#: wppost.php:66 +msgid "Wordpress username" +msgstr "" + +#: wppost.php:67 +msgid "Wordpress password" +msgstr "" + +#: wppost.php:68 +msgid "WordPress API URL" +msgstr "" + +#: wppost.php:69 +msgid "Post to Wordpress by default" +msgstr "" + +#: wppost.php:70 +msgid "Provide a backlink to the Friendica post" +msgstr "" + +#: wppost.php:71 +msgid "" +"Text for the backlink, e.g. Read the original post and comment stream on " +"Friendica." +msgstr "" + +#: wppost.php:72 +msgid "Don't post messages that are too short" +msgstr "" + +#: wppost.php:77 +msgid "Wordpress Export" +msgstr "" + +#: wppost.php:182 +msgid "Read the orig­i­nal post and com­ment stream on Friendica" +msgstr "" + +#: wppost.php:240 +msgid "Post from Friendica" +msgstr "" diff --git a/wppost/lang/da-dk/strings.php b/wppost/lang/da-dk/strings.php new file mode 100644 index 00000000..09554750 --- /dev/null +++ b/wppost/lang/da-dk/strings.php @@ -0,0 +1,7 @@ + Date: Tue, 3 May 2022 09:15:05 +0200 Subject: [PATCH 014/677] PL translation webrtc THX strebski --- webrtc/lang/pl/messages.po | 29 +++++++++++++++-------------- webrtc/lang/pl/strings.php | 2 +- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/webrtc/lang/pl/messages.po b/webrtc/lang/pl/messages.po index 766d2b3c..6e7fa248 100644 --- a/webrtc/lang/pl/messages.po +++ b/webrtc/lang/pl/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# Piotr Strębski , 2022 # Waldemar Stoczkowski, 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:16+0100\n" -"PO-Revision-Date: 2021-02-01 20:17+0000\n" -"Last-Translator: Transifex Bot <>\n" +"POT-Creation-Date: 2022-04-29 15:56+0200\n" +"PO-Revision-Date: 2014-06-23 13:05+0000\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,36 +20,36 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: webrtc.php:19 +#: webrtc.php:18 msgid "WebRTC Videochat" msgstr "Videochat WebRTC" -#: webrtc.php:25 +#: webrtc.php:24 msgid "Save Settings" msgstr "Zapisz ustawienia" -#: webrtc.php:26 +#: webrtc.php:25 msgid "WebRTC Base URL" msgstr "Podstawowy adres URL WebRTC" -#: webrtc.php:26 +#: webrtc.php:25 msgid "" "Page your users will create a WebRTC chat room on. For example you could use" " https://live.mayfirst.org ." msgstr "Strona Twoich użytkowników utworzą pokój czatu WebRTC. Na przykład możesz użyć https://live.mayfirst.org." -#: webrtc.php:45 +#: webrtc.php:44 msgid "Video Chat" msgstr "Czat wideo" -#: webrtc.php:46 +#: webrtc.php:45 msgid "" -"WebRTC is a video and audio conferencing tool that works with Firefox " -"(version 21 and above) and Chrome/Chromium (version 25 and above). Just " -"create a new chat room and send the link to someone you want to chat with." -msgstr "WebRTC to narzędzie do wideokonferencji, które działa z przeglądarką Firefox (wersja 21 i nowsze) oraz Chrome/Chromium (wersja 25 i nowsze). Utwórz nowy pokój czatu i wyślij link do kogoś, z kim chcesz porozmawiać." +"WebRTC is a video and audio conferencing tool that works in all modern " +"browsers. Just create a new chat room and send the link to someone you want " +"to chat with." +msgstr "WebRTC to narzędzie do obsługi konferencji wideo i dźwiękowych, które działa we wszystkich nowoczesnych przeglądarkach. Po prostu utwórz nowy pokój rozmów i wyślij odnośnik do osoby, z którą chcesz porozmawiać." -#: webrtc.php:48 +#: webrtc.php:47 msgid "" "Please contact your friendica admin and send a reminder to configure the " "WebRTC addon." diff --git a/webrtc/lang/pl/strings.php b/webrtc/lang/pl/strings.php index f77fb873..10af69a8 100644 --- a/webrtc/lang/pl/strings.php +++ b/webrtc/lang/pl/strings.php @@ -10,5 +10,5 @@ $a->strings['Save Settings'] = 'Zapisz ustawienia'; $a->strings['WebRTC Base URL'] = 'Podstawowy adres URL WebRTC'; $a->strings['Page your users will create a WebRTC chat room on. For example you could use https://live.mayfirst.org .'] = 'Strona Twoich użytkowników utworzą pokój czatu WebRTC. Na przykład możesz użyć https://live.mayfirst.org.'; $a->strings['Video Chat'] = 'Czat wideo'; -$a->strings['WebRTC is a video and audio conferencing tool that works with Firefox (version 21 and above) and Chrome/Chromium (version 25 and above). Just create a new chat room and send the link to someone you want to chat with.'] = 'WebRTC to narzędzie do wideokonferencji, które działa z przeglądarką Firefox (wersja 21 i nowsze) oraz Chrome/Chromium (wersja 25 i nowsze). Utwórz nowy pokój czatu i wyślij link do kogoś, z kim chcesz porozmawiać.'; +$a->strings['WebRTC is a video and audio conferencing tool that works in all modern browsers. Just create a new chat room and send the link to someone you want to chat with.'] = 'WebRTC to narzędzie do obsługi konferencji wideo i dźwiękowych, które działa we wszystkich nowoczesnych przeglądarkach. Po prostu utwórz nowy pokój rozmów i wyślij odnośnik do osoby, z którą chcesz porozmawiać.'; $a->strings['Please contact your friendica admin and send a reminder to configure the WebRTC addon.'] = 'Skontaktuj się z administratorem friendica i wyślij przypomnienie, aby skonfigurować dodatek WebRTC.'; From 3455871f40c36818bc6ea5192cc7021b4e363e4d Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 11 May 2022 09:00:19 -0400 Subject: [PATCH 015/677] [advancedcontentfilter] Use a random item to validate fields on rule save - Remove hard-coded list of allowed fields --- .../advancedcontentfilter.php | 77 ++++++++++--------- 1 file changed, 42 insertions(+), 35 deletions(-) diff --git a/advancedcontentfilter/advancedcontentfilter.php b/advancedcontentfilter/advancedcontentfilter.php index 3fe6884e..fecf9563 100644 --- a/advancedcontentfilter/advancedcontentfilter.php +++ b/advancedcontentfilter/advancedcontentfilter.php @@ -91,6 +91,10 @@ function advancedcontentfilter_dbstructure_definition(App $a, &$database) ]; } +/** + * @param array $item Prepared by either Model\Item::prepareBody or advancedcontentfilter_prepare_item_row + * @return array + */ function advancedcontentfilter_get_filter_fields(array $item) { $vars = []; @@ -262,30 +266,20 @@ function advancedcontentfilter_build_fields($data) } if (!empty($data['expression'])) { - $allowed_keys = [ - 'author_id', 'author_link', 'author_name', 'author_avatar', - 'owner_id', 'owner_link', 'owner_name', 'owner_avatar', - 'contact_id', 'uid', 'id', 'parent', 'uri', - 'thr_parent', 'parent_uri', - 'content_warning', - 'commented', 'created', 'edited', 'received', - 'verb', 'object_type', 'postopts', 'plink', 'guid', 'wall', 'private', 'starred', - 'title', 'body', - 'file', 'event_id', 'location', 'coord', 'app', 'attach', - 'rendered_hash', 'rendered_html', 'object', - 'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid', - 'item_id', 'item_network', 'author_thumb', 'owner_thumb', - 'network', 'url', 'name', 'writable', 'self', - 'cid', 'alias', - 'event_created', 'event_edited', 'event_start', 'event_finish', 'event_summary', - 'event_desc', 'event_location', 'event_type', 'event_nofinish', 'event_ignore', - 'children', 'pagedrop', 'tags', 'hashtags', 'mentions', - 'attachments', - ]; + // Using a dummy item to validate the field existence + $condition = ["(`uid` = ? OR `uid` = 0)", local_user()]; + $params = ['order' => ['uid' => true]]; + $item_row = Post::selectFirstForUser(local_user(), [], $condition, $params); + + if (!DBA::isResult($item_row)) { + throw new HTTPException\NotFoundException(DI::l10n()->t('This addon requires this node having at least one post')); + } $expressionLanguage = new ExpressionLanguage\ExpressionLanguage(); - - $parsedExpression = $expressionLanguage->parse($data['expression'], $allowed_keys); + $parsedExpression = $expressionLanguage->parse( + $data['expression'], + array_keys(advancedcontentfilter_get_filter_fields(advancedcontentfilter_prepare_item_row($item_row))) + ); $serialized = serialize($parsedExpression->getNodes()); @@ -430,23 +424,36 @@ function advancedcontentfilter_get_variables_guid(ServerRequestInterface $reques $condition = ["`guid` = ? AND (`uid` = ? OR `uid` = 0)", $args['guid'], local_user()]; $params = ['order' => ['uid' => true]]; - $item = Post::selectFirstForUser(local_user(), [], $condition, $params); + $item_row = Post::selectFirstForUser(local_user(), [], $condition, $params); - if (!DBA::isResult($item)) { + if (!DBA::isResult($item_row)) { throw new HTTPException\NotFoundException(DI::l10n()->t('Unknown post with guid: %s', $args['guid'])); } - $tags = Tag::populateFromItem($item); - - $item['tags'] = $tags['tags']; - $item['hashtags'] = $tags['hashtags']; - $item['mentions'] = $tags['mentions']; - - $attachments = Post\Media::splitAttachments($item['uri-id'], $item['guid'] ?? ''); - - $item['attachments'] = $attachments; - - $return = advancedcontentfilter_get_filter_fields($item); + $return = advancedcontentfilter_get_filter_fields(advancedcontentfilter_prepare_item_row($item_row)); return json_encode(['variables' => str_replace('\\\'', '\'', var_export($return, true))]); } + +/** + * This mimimcs the processing performed in Model\Item::prepareBody + * + * @param array $item_row + * @return array + * @throws HTTPException\InternalServerErrorException + * @throws ImagickException + */ +function advancedcontentfilter_prepare_item_row(array $item_row): array +{ + $tags = Tag::populateFromItem($item_row); + + $item_row['tags'] = $tags['tags']; + $item_row['hashtags'] = $tags['hashtags']; + $item_row['mentions'] = $tags['mentions']; + + $attachments = Post\Media::splitAttachments($item_row['uri-id'], $item_row['guid'] ?? ''); + + $item_row['attachments'] = $attachments; + + return $item_row; +} From 444330d91f530a3d5635496ac73e8c327e1137cd Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 11 May 2022 09:00:41 -0400 Subject: [PATCH 016/677] [advancedcontentfilter] Update main translation file after string was added --- advancedcontentfilter/lang/C/messages.po | 30 ++++++++++++++---------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/advancedcontentfilter/lang/C/messages.po b/advancedcontentfilter/lang/C/messages.po index 742647b9..68b42ed3 100644 --- a/advancedcontentfilter/lang/C/messages.po +++ b/advancedcontentfilter/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:13-0500\n" +"POT-Creation-Date: 2022-05-11 08:54-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -112,42 +112,46 @@ msgstr "" msgid "Cancel" msgstr "" -#: advancedcontentfilter.php:312 advancedcontentfilter.php:323 -#: advancedcontentfilter.php:334 advancedcontentfilter.php:370 -#: advancedcontentfilter.php:401 advancedcontentfilter.php:424 +#: advancedcontentfilter.php:295 +msgid "This addon requires this node having at least one post" +msgstr "" + +#: advancedcontentfilter.php:325 advancedcontentfilter.php:336 +#: advancedcontentfilter.php:347 advancedcontentfilter.php:383 +#: advancedcontentfilter.php:414 advancedcontentfilter.php:437 msgid "You must be logged in to use this method" msgstr "" -#: advancedcontentfilter.php:338 advancedcontentfilter.php:374 -#: advancedcontentfilter.php:405 +#: advancedcontentfilter.php:351 advancedcontentfilter.php:387 +#: advancedcontentfilter.php:418 msgid "Invalid form security token, please refresh the page." msgstr "" -#: advancedcontentfilter.php:350 +#: advancedcontentfilter.php:363 msgid "The rule name and expression are required." msgstr "" -#: advancedcontentfilter.php:364 +#: advancedcontentfilter.php:377 msgid "Rule successfully added" msgstr "" -#: advancedcontentfilter.php:378 advancedcontentfilter.php:409 +#: advancedcontentfilter.php:391 advancedcontentfilter.php:422 msgid "Rule doesn't exist or doesn't belong to you." msgstr "" -#: advancedcontentfilter.php:395 +#: advancedcontentfilter.php:408 msgid "Rule successfully updated" msgstr "" -#: advancedcontentfilter.php:418 +#: advancedcontentfilter.php:431 msgid "Rule successfully deleted" msgstr "" -#: advancedcontentfilter.php:428 +#: advancedcontentfilter.php:441 msgid "Missing argument: guid." msgstr "" -#: advancedcontentfilter.php:436 +#: advancedcontentfilter.php:449 #, php-format msgid "Unknown post with guid: %s" msgstr "" From 4eec2841f4abc258ea11d3a13d5541879cb126ba Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 13 May 2022 16:31:57 +0200 Subject: [PATCH 017/677] DE translation advancedcontentfilter updated --- advancedcontentfilter/lang/de/messages.po | 88 ++++++++++++----------- advancedcontentfilter/lang/de/strings.php | 3 +- 2 files changed, 49 insertions(+), 42 deletions(-) diff --git a/advancedcontentfilter/lang/de/messages.po b/advancedcontentfilter/lang/de/messages.po index 4c233a15..cbd8b37a 100644 --- a/advancedcontentfilter/lang/de/messages.po +++ b/advancedcontentfilter/lang/de/messages.po @@ -5,16 +5,16 @@ # # Translators: # Ulf Rompe , 2019 -# Tobias Diekershoff , 2021 +# Tobias Diekershoff , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"POT-Creation-Date: 2022-05-11 08:54-0400\n" "PO-Revision-Date: 2018-05-24 06:41+0000\n" -"Last-Translator: Tobias Diekershoff , 2021\n" +"Last-Translator: Tobias Diekershoff , 2022\n" "Language-Team: German (https://www.transifex.com/Friendica/teams/12172/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,32 +22,28 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/middlewares.php:49 -msgid "Method not found" -msgstr "Methode nicht gefunden" - -#: advancedcontentfilter.php:136 +#: advancedcontentfilter.php:154 #, php-format msgid "Filtered by rule: %s" msgstr "Nach dieser Regel gefiltert: %s" -#: advancedcontentfilter.php:150 advancedcontentfilter.php:207 +#: advancedcontentfilter.php:170 advancedcontentfilter.php:225 msgid "Advanced Content Filter" msgstr "Erweiterter Inhaltsfilter" -#: advancedcontentfilter.php:206 +#: advancedcontentfilter.php:224 msgid "Back to Addon Settings" msgstr "Zurück zu den Addon Einstellungen" -#: advancedcontentfilter.php:208 +#: advancedcontentfilter.php:226 msgid "Add a Rule" msgstr "Eine Regel hinzufügen" -#: advancedcontentfilter.php:209 +#: advancedcontentfilter.php:227 msgid "Help" msgstr "Hilfe" -#: advancedcontentfilter.php:210 +#: advancedcontentfilter.php:228 msgid "" "Add and manage your personal content filter rules in this screen. Rules have" " a name and an arbitrary expression that will be matched against post data. " @@ -60,11 +56,11 @@ msgstr "" "gegebenenfalls gefiltert. Für eine Übersicht der verfügbaren Operatoren für " "die Filter, wirf bitte einen Blick auf die Hilfsseite des Addons." -#: advancedcontentfilter.php:211 +#: advancedcontentfilter.php:229 msgid "Your rules" msgstr "Deine Regeln" -#: advancedcontentfilter.php:212 +#: advancedcontentfilter.php:230 msgid "" "You have no rules yet! Start adding one by clicking on the button above next" " to the title." @@ -72,98 +68,108 @@ msgstr "" "Du hast bisher noch keine Regeln definiert. Um eine neue Regel zu erstellen," " verwende bitte den Button neben dem Titel." -#: advancedcontentfilter.php:213 +#: advancedcontentfilter.php:231 msgid "Disabled" msgstr "Deaktiviert" -#: advancedcontentfilter.php:214 +#: advancedcontentfilter.php:232 msgid "Enabled" msgstr "Aktiv" -#: advancedcontentfilter.php:215 +#: advancedcontentfilter.php:233 msgid "Disable this rule" msgstr "Diese Regel deaktivieren" -#: advancedcontentfilter.php:216 +#: advancedcontentfilter.php:234 msgid "Enable this rule" msgstr "Diese Regel aktivieren" -#: advancedcontentfilter.php:217 +#: advancedcontentfilter.php:235 msgid "Edit this rule" msgstr "Diese Regel bearbeiten" -#: advancedcontentfilter.php:218 +#: advancedcontentfilter.php:236 msgid "Edit the rule" msgstr "Die Regel bearbeiten" -#: advancedcontentfilter.php:219 +#: advancedcontentfilter.php:237 msgid "Save this rule" msgstr "Regel speichern" -#: advancedcontentfilter.php:220 +#: advancedcontentfilter.php:238 msgid "Delete this rule" msgstr "Diese Regel löschen" -#: advancedcontentfilter.php:221 +#: advancedcontentfilter.php:239 msgid "Rule" msgstr "Regel" -#: advancedcontentfilter.php:222 +#: advancedcontentfilter.php:240 msgid "Close" msgstr "Schließen" -#: advancedcontentfilter.php:223 +#: advancedcontentfilter.php:241 msgid "Add new rule" msgstr "Neue Regel hinzufügen" -#: advancedcontentfilter.php:224 +#: advancedcontentfilter.php:242 msgid "Rule Name" msgstr "Name der Regel" -#: advancedcontentfilter.php:225 +#: advancedcontentfilter.php:243 msgid "Rule Expression" msgstr "Ausdruck der Regel" -#: advancedcontentfilter.php:226 +#: advancedcontentfilter.php:244 msgid "Cancel" msgstr "Abbrechen" -#: advancedcontentfilter.php:293 advancedcontentfilter.php:304 -#: advancedcontentfilter.php:315 advancedcontentfilter.php:349 -#: advancedcontentfilter.php:378 advancedcontentfilter.php:399 +#: advancedcontentfilter.php:295 +msgid "This addon requires this node having at least one post" +msgstr "" +"Dieses Addon funktioniert nur, wenn auf diesem Knoten mindestens ein Beitrag" +" existiert." + +#: advancedcontentfilter.php:325 advancedcontentfilter.php:336 +#: advancedcontentfilter.php:347 advancedcontentfilter.php:383 +#: advancedcontentfilter.php:414 advancedcontentfilter.php:437 msgid "You must be logged in to use this method" msgstr "Du musst angemeldet sein, um diese Methode verwenden zu können " -#: advancedcontentfilter.php:319 advancedcontentfilter.php:353 -#: advancedcontentfilter.php:382 +#: advancedcontentfilter.php:351 advancedcontentfilter.php:387 +#: advancedcontentfilter.php:418 msgid "Invalid form security token, please refresh the page." msgstr "Ungültiges Sciherheitstoken, bitte die Seite neu laden." -#: advancedcontentfilter.php:331 +#: advancedcontentfilter.php:363 msgid "The rule name and expression are required." msgstr "Der Name der Regel und der Ausdruck sind erforderlich." -#: advancedcontentfilter.php:343 +#: advancedcontentfilter.php:377 msgid "Rule successfully added" msgstr "Regel erfolgreich hinzugefügt." -#: advancedcontentfilter.php:357 advancedcontentfilter.php:386 +#: advancedcontentfilter.php:391 advancedcontentfilter.php:422 msgid "Rule doesn't exist or doesn't belong to you." msgstr "Entweder existiert die Regel nicht, oder sie gehört dir nicht." -#: advancedcontentfilter.php:372 +#: advancedcontentfilter.php:408 msgid "Rule successfully updated" msgstr "Regel wurde erfolgreich aktualisiert." -#: advancedcontentfilter.php:393 +#: advancedcontentfilter.php:431 msgid "Rule successfully deleted" msgstr "Regel erfolgreich gelöscht." -#: advancedcontentfilter.php:403 +#: advancedcontentfilter.php:441 msgid "Missing argument: guid." msgstr "Fehlendes Argument: guid." -#: advancedcontentfilter.php:411 +#: advancedcontentfilter.php:449 #, php-format msgid "Unknown post with guid: %s" msgstr "Unbekannter Beitrag mit der guid: %s" + +#: src/middlewares.php:49 +msgid "Method not found" +msgstr "Methode nicht gefunden" diff --git a/advancedcontentfilter/lang/de/strings.php b/advancedcontentfilter/lang/de/strings.php index b3fd142e..c50ecf33 100644 --- a/advancedcontentfilter/lang/de/strings.php +++ b/advancedcontentfilter/lang/de/strings.php @@ -5,7 +5,6 @@ function string_plural_select_de($n){ $n = intval($n); return intval($n != 1); }} -$a->strings['Method not found'] = 'Methode nicht gefunden'; $a->strings['Filtered by rule: %s'] = 'Nach dieser Regel gefiltert: %s'; $a->strings['Advanced Content Filter'] = 'Erweiterter Inhaltsfilter'; $a->strings['Back to Addon Settings'] = 'Zurück zu den Addon Einstellungen'; @@ -28,6 +27,7 @@ $a->strings['Add new rule'] = 'Neue Regel hinzufügen'; $a->strings['Rule Name'] = 'Name der Regel'; $a->strings['Rule Expression'] = 'Ausdruck der Regel'; $a->strings['Cancel'] = 'Abbrechen'; +$a->strings['This addon requires this node having at least one post'] = 'Dieses Addon funktioniert nur, wenn auf diesem Knoten mindestens ein Beitrag existiert.'; $a->strings['You must be logged in to use this method'] = 'Du musst angemeldet sein, um diese Methode verwenden zu können '; $a->strings['Invalid form security token, please refresh the page.'] = 'Ungültiges Sciherheitstoken, bitte die Seite neu laden.'; $a->strings['The rule name and expression are required.'] = 'Der Name der Regel und der Ausdruck sind erforderlich.'; @@ -37,3 +37,4 @@ $a->strings['Rule successfully updated'] = 'Regel wurde erfolgreich aktualisiert $a->strings['Rule successfully deleted'] = 'Regel erfolgreich gelöscht.'; $a->strings['Missing argument: guid.'] = 'Fehlendes Argument: guid.'; $a->strings['Unknown post with guid: %s'] = 'Unbekannter Beitrag mit der guid: %s'; +$a->strings['Method not found'] = 'Methode nicht gefunden'; From bb1ca9ee92d0ace395182ed3686d65597c95820d Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 13 May 2022 16:32:32 +0200 Subject: [PATCH 018/677] PL translation advancedcontentfilter THX strebski --- advancedcontentfilter/lang/pl/messages.po | 33 +++++++++++++---------- advancedcontentfilter/lang/pl/strings.php | 1 + 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/advancedcontentfilter/lang/pl/messages.po b/advancedcontentfilter/lang/pl/messages.po index 0e87acb6..5fc9ca65 100644 --- a/advancedcontentfilter/lang/pl/messages.po +++ b/advancedcontentfilter/lang/pl/messages.po @@ -6,15 +6,16 @@ # Translators: # Waldemar Stoczkowski, 2018 # Joe Doe, 2021 +# Piotr Strębski , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:13-0500\n" +"POT-Creation-Date: 2022-05-11 08:54-0400\n" "PO-Revision-Date: 2018-05-24 06:41+0000\n" -"Last-Translator: Joe Doe, 2021\n" +"Last-Translator: Piotr Strębski , 2022\n" "Language-Team: Polish (https://www.transifex.com/Friendica/teams/12172/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -123,42 +124,46 @@ msgstr "Wyrażanie reguły" msgid "Cancel" msgstr "Anuluj" -#: advancedcontentfilter.php:312 advancedcontentfilter.php:323 -#: advancedcontentfilter.php:334 advancedcontentfilter.php:370 -#: advancedcontentfilter.php:401 advancedcontentfilter.php:424 +#: advancedcontentfilter.php:295 +msgid "This addon requires this node having at least one post" +msgstr "Ten dodatek wymaga, aby ten węzeł miał co najmniej jeden wpis" + +#: advancedcontentfilter.php:325 advancedcontentfilter.php:336 +#: advancedcontentfilter.php:347 advancedcontentfilter.php:383 +#: advancedcontentfilter.php:414 advancedcontentfilter.php:437 msgid "You must be logged in to use this method" msgstr "Musisz być zalogowany, aby skorzystać z tej metody" -#: advancedcontentfilter.php:338 advancedcontentfilter.php:374 -#: advancedcontentfilter.php:405 +#: advancedcontentfilter.php:351 advancedcontentfilter.php:387 +#: advancedcontentfilter.php:418 msgid "Invalid form security token, please refresh the page." msgstr "Nieprawidłowy token zabezpieczający formularz, odśwież stronę." -#: advancedcontentfilter.php:350 +#: advancedcontentfilter.php:363 msgid "The rule name and expression are required." msgstr "Nazwa reguły i wyrażenie są wymagane." -#: advancedcontentfilter.php:364 +#: advancedcontentfilter.php:377 msgid "Rule successfully added" msgstr "Reguła została pomyślnie dodana" -#: advancedcontentfilter.php:378 advancedcontentfilter.php:409 +#: advancedcontentfilter.php:391 advancedcontentfilter.php:422 msgid "Rule doesn't exist or doesn't belong to you." msgstr "Reguła nie istnieje lub nie należy do ciebie." -#: advancedcontentfilter.php:395 +#: advancedcontentfilter.php:408 msgid "Rule successfully updated" msgstr "Reguła została pomyślnie zaktualizowana" -#: advancedcontentfilter.php:418 +#: advancedcontentfilter.php:431 msgid "Rule successfully deleted" msgstr "Reguła została pomyślnie usunięta" -#: advancedcontentfilter.php:428 +#: advancedcontentfilter.php:441 msgid "Missing argument: guid." msgstr "Brakujący argument: guid." -#: advancedcontentfilter.php:436 +#: advancedcontentfilter.php:449 #, php-format msgid "Unknown post with guid: %s" msgstr "Nieznany post z guid:%s" diff --git a/advancedcontentfilter/lang/pl/strings.php b/advancedcontentfilter/lang/pl/strings.php index 924d0600..625819c1 100644 --- a/advancedcontentfilter/lang/pl/strings.php +++ b/advancedcontentfilter/lang/pl/strings.php @@ -27,6 +27,7 @@ $a->strings['Add new rule'] = 'Dodaj nową regułę'; $a->strings['Rule Name'] = 'Nazwa reguły'; $a->strings['Rule Expression'] = 'Wyrażanie reguły'; $a->strings['Cancel'] = 'Anuluj'; +$a->strings['This addon requires this node having at least one post'] = 'Ten dodatek wymaga, aby ten węzeł miał co najmniej jeden wpis'; $a->strings['You must be logged in to use this method'] = 'Musisz być zalogowany, aby skorzystać z tej metody'; $a->strings['Invalid form security token, please refresh the page.'] = 'Nieprawidłowy token zabezpieczający formularz, odśwież stronę.'; $a->strings['The rule name and expression are required.'] = 'Nazwa reguły i wyrażenie są wymagane.'; From 1a8925b0aacbcf12ddca9961e844353c80e085ee Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Fri, 13 May 2022 16:38:26 +0200 Subject: [PATCH 019/677] langfilter ZH CN translation update THX shykana --- langfilter/lang/zh-cn/messages.po | 47 +++++++++++++++---------------- langfilter/lang/zh-cn/strings.php | 7 ++--- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/langfilter/lang/zh-cn/messages.po b/langfilter/lang/zh-cn/messages.po index 855c5b35..c55a8edb 100644 --- a/langfilter/lang/zh-cn/messages.po +++ b/langfilter/lang/zh-cn/messages.po @@ -6,14 +6,15 @@ # Translators: # Asher Pen , 2019 # 朱陈锬 , 2018 +# gudzpoz , 2022 # 朱陈锬 , 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-01 11:11-0400\n" -"PO-Revision-Date: 2019-03-25 02:01+0000\n" -"Last-Translator: Asher Pen \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2015-07-25 08:05+0000\n" +"Last-Translator: gudzpoz , 2022\n" "Language-Team: Chinese (China) (http://www.transifex.com/Friendica/friendica/language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,62 +22,58 @@ msgstr "" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: langfilter.php:58 -msgid "Language Filter" -msgstr "语言过滤器" - -#: langfilter.php:59 +#: langfilter.php:49 msgid "" "This addon tries to identify the language posts are written in. If it does " "not match any language specified below, posts will be hidden by collapsing " "them." -msgstr "这个插件将尝试识别帖子所用的语言。如果不符合以下列出的语言,帖子将被折叠以隐藏。" +msgstr "此插件试图辨别文章的写作语言。如果语言与下面给定的均不符合,则文章会被折叠隐藏起来。" -#: langfilter.php:60 +#: langfilter.php:50 msgid "Use the language filter" msgstr "使用语言过滤器" -#: langfilter.php:61 +#: langfilter.php:51 msgid "Able to read" msgstr "想要显示的语言" -#: langfilter.php:61 +#: langfilter.php:51 msgid "" -"List of abbreviations (iso2 codes) for languages you speak, comma separated." -" For example \"de,it\"." -msgstr "您使用的语言缩写 (iso2 codes) 列表,逗号分隔。例如 \"zh,en\"。" +"List of abbreviations (ISO 639-1 codes) for languages you speak, comma " +"separated. For example \"de,it\"." +msgstr "语言列表(ISO 639-1 缩写代码),使用英文逗号分隔。例如:“de,it,zh”" -#: langfilter.php:62 +#: langfilter.php:52 msgid "Minimum confidence in language detection" msgstr "语言识别阈值" -#: langfilter.php:62 +#: langfilter.php:52 msgid "" "Minimum confidence in language detection being correct, from 0 to 100. Posts" " will not be filtered when the confidence of language detection is below " "this percent value." msgstr "语言识别阈值(0-100)。语言识别结果低于该阈值的帖子将不会被折叠。" -#: langfilter.php:63 +#: langfilter.php:53 msgid "Minimum length of message body" msgstr "语言过滤帖子所需最小字符个数" -#: langfilter.php:63 +#: langfilter.php:53 msgid "" "Minimum number of characters in message body for filter to be used. Posts " "shorter than this will not be filtered. Note: Language detection is " "unreliable for short content (<200 characters)." msgstr "语言过滤帖子所需最小字符个数。低于该数字的帖子将不会被过滤。注意:对于字符个数小于200的帖子,语言检测功能将不够稳定。" -#: langfilter.php:64 +#: langfilter.php:58 +msgid "Language Filter" +msgstr "语言过滤器" + +#: langfilter.php:60 msgid "Save Settings" msgstr "保存设置" -#: langfilter.php:105 -msgid "Language Filter Settings saved." -msgstr "语言过滤器设置已保存。" - -#: langfilter.php:182 +#: langfilter.php:193 #, php-format msgid "Filtered language: %s" msgstr "已过滤的语言:%s" diff --git a/langfilter/lang/zh-cn/strings.php b/langfilter/lang/zh-cn/strings.php index 02ca5a24..b66e26b4 100644 --- a/langfilter/lang/zh-cn/strings.php +++ b/langfilter/lang/zh-cn/strings.php @@ -5,15 +5,14 @@ function string_plural_select_zh_cn($n){ $n = intval($n); return intval(0); }} -$a->strings['Language Filter'] = '语言过滤器'; -$a->strings['This addon tries to identify the language posts are written in. If it does not match any language specified below, posts will be hidden by collapsing them.'] = '这个插件将尝试识别帖子所用的语言。如果不符合以下列出的语言,帖子将被折叠以隐藏。'; +$a->strings['This addon tries to identify the language posts are written in. If it does not match any language specified below, posts will be hidden by collapsing them.'] = '此插件试图辨别文章的写作语言。如果语言与下面给定的均不符合,则文章会被折叠隐藏起来。'; $a->strings['Use the language filter'] = '使用语言过滤器'; $a->strings['Able to read'] = '想要显示的语言'; -$a->strings['List of abbreviations (iso2 codes) for languages you speak, comma separated. For example "de,it".'] = '您使用的语言缩写 (iso2 codes) 列表,逗号分隔。例如 "zh,en"。'; +$a->strings['List of abbreviations (ISO 639-1 codes) for languages you speak, comma separated. For example "de,it".'] = '语言列表(ISO 639-1 缩写代码),使用英文逗号分隔。例如:“de,it,zh”'; $a->strings['Minimum confidence in language detection'] = '语言识别阈值'; $a->strings['Minimum confidence in language detection being correct, from 0 to 100. Posts will not be filtered when the confidence of language detection is below this percent value.'] = '语言识别阈值(0-100)。语言识别结果低于该阈值的帖子将不会被折叠。'; $a->strings['Minimum length of message body'] = '语言过滤帖子所需最小字符个数'; $a->strings['Minimum number of characters in message body for filter to be used. Posts shorter than this will not be filtered. Note: Language detection is unreliable for short content (<200 characters).'] = '语言过滤帖子所需最小字符个数。低于该数字的帖子将不会被过滤。注意:对于字符个数小于200的帖子,语言检测功能将不够稳定。'; +$a->strings['Language Filter'] = '语言过滤器'; $a->strings['Save Settings'] = '保存设置'; -$a->strings['Language Filter Settings saved.'] = '语言过滤器设置已保存。'; $a->strings['Filtered language: %s'] = '已过滤的语言:%s'; From 6481b384ee3861e6cc2db4b4bc1d8456205b67f9 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 24 May 2022 07:58:37 +0200 Subject: [PATCH 020/677] langfilter addon FR translation updated THX kalon33 --- langfilter/lang/fr/messages.po | 39 +++++++++++++++++----------------- langfilter/lang/fr/strings.php | 6 +++--- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/langfilter/lang/fr/messages.po b/langfilter/lang/fr/messages.po index 4cddc979..0b4c285a 100644 --- a/langfilter/lang/fr/messages.po +++ b/langfilter/lang/fr/messages.po @@ -4,6 +4,7 @@ # # # Translators: +# Nicolas Derive, 2022 # ea1cd8241cb389ffb6f92bc6891eff5d_dc12308 <70dced5587d47e18d88f9298024d96f8_93383>, 2015 # Vincent Vindarel , 2018 # Wil Tur , 2021 @@ -11,68 +12,68 @@ msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-03-21 17:12+0000\n" -"Last-Translator: Wil Tur \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2015-07-25 08:05+0000\n" +"Last-Translator: Nicolas Derive, 2022\n" "Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: langfilter.php:50 -msgid "Language Filter" -msgstr "Filtre de langues" - -#: langfilter.php:51 +#: langfilter.php:49 msgid "" "This addon tries to identify the language posts are written in. If it does " "not match any language specified below, posts will be hidden by collapsing " "them." -msgstr "Cette extension essaie de reconnaître la langue dans laquelle les publications sont écrites. Si elle ne correspond à aucune de la liste donnée plus bas, les publications seront réduites." +msgstr "Cette extension tente d'identifier la langue dans laquelle les publications sont écrites. Si elle ne correspond à aucune des langues spécifiées ci-dessous, les publications seront repliées afin d'être cachées." -#: langfilter.php:52 +#: langfilter.php:50 msgid "Use the language filter" msgstr "Utiliser le filtre de langues" -#: langfilter.php:53 +#: langfilter.php:51 msgid "Able to read" msgstr "Peut lire" -#: langfilter.php:53 +#: langfilter.php:51 msgid "" "List of abbreviations (ISO 639-1 codes) for languages you speak, comma " "separated. For example \"de,it\"." msgstr "Liste des abréviations (codes ISO 639-1) des langues que vous parlez, séparées par des virgules.\nPar exemple \"de,it\"." -#: langfilter.php:54 +#: langfilter.php:52 msgid "Minimum confidence in language detection" msgstr "Confiance minimale dans la détection de langues" -#: langfilter.php:54 +#: langfilter.php:52 msgid "" "Minimum confidence in language detection being correct, from 0 to 100. Posts" " will not be filtered when the confidence of language detection is below " "this percent value." msgstr "Seuil de confiance minimal pour la détection des langues, de 0 à 100. Une publication ne sera pas filtrée si elle est détectée avec une confiance moindre." -#: langfilter.php:55 +#: langfilter.php:53 msgid "Minimum length of message body" msgstr "Longueur minimale du corps de message." -#: langfilter.php:55 +#: langfilter.php:53 msgid "" "Minimum number of characters in message body for filter to be used. Posts " "shorter than this will not be filtered. Note: Language detection is " "unreliable for short content (<200 characters)." msgstr "Nombre minimal de signes dans le corps de message pour déclencher le filtre. Une publication plus courte ne sera pas filtrée. Remarque: la détection de langue n'est pas fiable pour du contenu court (<200 signes)." -#: langfilter.php:56 +#: langfilter.php:58 +msgid "Language Filter" +msgstr "Filtre de langues" + +#: langfilter.php:60 msgid "Save Settings" msgstr "Sauvegarder les paramètres" -#: langfilter.php:187 +#: langfilter.php:193 #, php-format msgid "Filtered language: %s" msgstr "Langues filtrées: %s" diff --git a/langfilter/lang/fr/strings.php b/langfilter/lang/fr/strings.php index 51f5b2c1..e26a8d44 100644 --- a/langfilter/lang/fr/strings.php +++ b/langfilter/lang/fr/strings.php @@ -3,10 +3,9 @@ if(! function_exists("string_plural_select_fr")) { function string_plural_select_fr($n){ $n = intval($n); - return intval($n > 1); + if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} -$a->strings['Language Filter'] = 'Filtre de langues'; -$a->strings['This addon tries to identify the language posts are written in. If it does not match any language specified below, posts will be hidden by collapsing them.'] = 'Cette extension essaie de reconnaître la langue dans laquelle les publications sont écrites. Si elle ne correspond à aucune de la liste donnée plus bas, les publications seront réduites.'; +$a->strings['This addon tries to identify the language posts are written in. If it does not match any language specified below, posts will be hidden by collapsing them.'] = 'Cette extension tente d\'identifier la langue dans laquelle les publications sont écrites. Si elle ne correspond à aucune des langues spécifiées ci-dessous, les publications seront repliées afin d\'être cachées.'; $a->strings['Use the language filter'] = 'Utiliser le filtre de langues'; $a->strings['Able to read'] = 'Peut lire'; $a->strings['List of abbreviations (ISO 639-1 codes) for languages you speak, comma separated. For example "de,it".'] = 'Liste des abréviations (codes ISO 639-1) des langues que vous parlez, séparées par des virgules. @@ -15,5 +14,6 @@ $a->strings['Minimum confidence in language detection'] = 'Confiance minimale da $a->strings['Minimum confidence in language detection being correct, from 0 to 100. Posts will not be filtered when the confidence of language detection is below this percent value.'] = 'Seuil de confiance minimal pour la détection des langues, de 0 à 100. Une publication ne sera pas filtrée si elle est détectée avec une confiance moindre.'; $a->strings['Minimum length of message body'] = 'Longueur minimale du corps de message.'; $a->strings['Minimum number of characters in message body for filter to be used. Posts shorter than this will not be filtered. Note: Language detection is unreliable for short content (<200 characters).'] = 'Nombre minimal de signes dans le corps de message pour déclencher le filtre. Une publication plus courte ne sera pas filtrée. Remarque: la détection de langue n\'est pas fiable pour du contenu court (<200 signes).'; +$a->strings['Language Filter'] = 'Filtre de langues'; $a->strings['Save Settings'] = 'Sauvegarder les paramètres'; $a->strings['Filtered language: %s'] = 'Langues filtrées: %s'; From ab2eaf136e2c8a66bfc9e3deb38bf379aed40f74 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 24 May 2022 07:59:10 +0200 Subject: [PATCH 021/677] morechoice addon FR translation updated THX kalon33 --- morechoice/lang/fr/messages.po | 335 +++++++++++++++++---------------- morechoice/lang/fr/strings.php | 46 ++++- 2 files changed, 213 insertions(+), 168 deletions(-) diff --git a/morechoice/lang/fr/messages.po b/morechoice/lang/fr/messages.po index 31ee975e..afbdad8a 100644 --- a/morechoice/lang/fr/messages.po +++ b/morechoice/lang/fr/messages.po @@ -5,338 +5,339 @@ # # Translators: # Marie Olive , 2018 +# Nicolas Derive, 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-08-07 15:04+0200\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" "PO-Revision-Date: 2018-08-07 18:18+0000\n" -"Last-Translator: Marie Olive , 2018\n" +"Last-Translator: Nicolas Derive, 2022\n" "Language-Team: French (https://www.transifex.com/Friendica/teams/12172/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: morechoice.php:34 +#: morechoice.php:22 msgid "Androgyne" msgstr "Androgyne" -#: morechoice.php:35 +#: morechoice.php:23 msgid "Bear" msgstr "Ours" -#: morechoice.php:36 +#: morechoice.php:24 msgid "Bigender" msgstr "Bigenre" -#: morechoice.php:37 +#: morechoice.php:25 msgid "Cross dresser" msgstr "" -#: morechoice.php:38 +#: morechoice.php:26 msgid "Drag queen" msgstr "drag queen" -#: morechoice.php:39 +#: morechoice.php:27 msgid "Eunuch" msgstr "eunuque" -#: morechoice.php:40 +#: morechoice.php:28 msgid "Faux queen" msgstr "" -#: morechoice.php:41 +#: morechoice.php:29 msgid "Gender fluid" msgstr "genre fluide" -#: morechoice.php:42 +#: morechoice.php:30 msgid "Kathoey" msgstr "" -#: morechoice.php:43 +#: morechoice.php:31 msgid "Lady" msgstr "" -#: morechoice.php:44 +#: morechoice.php:32 msgid "Lipstick lesbian" msgstr "" -#: morechoice.php:45 +#: morechoice.php:33 msgid "Metrosexual" msgstr "métrosexuel" -#: morechoice.php:46 +#: morechoice.php:34 msgid "Monk" msgstr "moine" -#: morechoice.php:47 +#: morechoice.php:35 msgid "Nun" msgstr "religieuse" -#: morechoice.php:48 +#: morechoice.php:36 msgid "Soft butch" msgstr "" -#: morechoice.php:49 +#: morechoice.php:37 msgid "Stone femme" msgstr "" -#: morechoice.php:50 +#: morechoice.php:38 msgid "Tomboy" msgstr "" -#: morechoice.php:51 +#: morechoice.php:39 msgid "Transman" msgstr "homme trans" -#: morechoice.php:52 +#: morechoice.php:40 msgid "Transwoman" msgstr "femme trans" -#: morechoice.php:53 +#: morechoice.php:41 msgid "Transvesti" msgstr "travesti" -#: morechoice.php:54 +#: morechoice.php:42 msgid "Trigender" msgstr "trigenre" -#: morechoice.php:55 +#: morechoice.php:43 msgid "Can't remember" msgstr "Ne se rappelle pas" -#: morechoice.php:56 +#: morechoice.php:44 msgid "Hard to tell these days" msgstr "Difficile à dire en ce moment" -#: morechoice.php:60 +#: morechoice.php:48 msgid "Girls with big tits" msgstr "Filles à gros seins" -#: morechoice.php:61 +#: morechoice.php:49 msgid "Millionaires" msgstr "Millionnaires" -#: morechoice.php:62 +#: morechoice.php:50 msgid "Guys with big schlongs" msgstr "" -#: morechoice.php:63 +#: morechoice.php:51 msgid "Easy women" msgstr "Femmes faciles" -#: morechoice.php:64 +#: morechoice.php:52 msgid "People with impaired mobility" msgstr "Personnes à mobilité réduite" -#: morechoice.php:65 +#: morechoice.php:53 msgid "Amputees" msgstr "Amputés" -#: morechoice.php:66 +#: morechoice.php:54 msgid "Statues, mannequins and immobility" -msgstr "" +msgstr "Statues, mannequins et immobilité" -#: morechoice.php:67 +#: morechoice.php:55 msgid "Pain" msgstr "Douleur" -#: morechoice.php:68 +#: morechoice.php:56 msgid "Trans men" msgstr "Hommes trans" -#: morechoice.php:69 +#: morechoice.php:57 msgid "Older women" -msgstr "" +msgstr "Femmes plus âgées" -#: morechoice.php:70 +#: morechoice.php:58 msgid "Asphyxiation" -msgstr "" +msgstr "Asphyxie" -#: morechoice.php:71 +#: morechoice.php:59 msgid "In public" -msgstr "" +msgstr "En public" -#: morechoice.php:72 +#: morechoice.php:60 msgid "In danger" -msgstr "" +msgstr "En danger" -#: morechoice.php:73 +#: morechoice.php:61 msgid "Pretending to be male" -msgstr "" +msgstr "Prétendant être homme" -#: morechoice.php:74 +#: morechoice.php:62 msgid "Pretending to be female" -msgstr "" +msgstr "Prétendant être femme" -#: morechoice.php:75 +#: morechoice.php:63 msgid "Breats" msgstr "" -#: morechoice.php:76 +#: morechoice.php:64 msgid "Scat" msgstr "" -#: morechoice.php:77 +#: morechoice.php:65 msgid "Crying" -msgstr "" +msgstr "Pleurant" + +#: morechoice.php:66 +msgid "Nappies/Diapers" +msgstr "Couches/Changes" + +#: morechoice.php:67 +msgid "Trees" +msgstr "Arbres" + +#: morechoice.php:68 +msgid "Vomit" +msgstr "Vomi" + +#: morechoice.php:69 +msgid "Murder" +msgstr "Meurtre" + +#: morechoice.php:70 +msgid "Fat people" +msgstr "Personnes en surpoids" + +#: morechoice.php:71 +msgid "Feet" +msgstr "Pieds" + +#: morechoice.php:72 +msgid "Covered in insects" +msgstr "Couvert d'insectes" + +#: morechoice.php:73 +msgid "Turning a human being into furniture" +msgstr "Transforme un être humain en produit" + +#: morechoice.php:74 +msgid "Elderly people" +msgstr "Personnes âgées" + +#: morechoice.php:75 +msgid "Transgender people" +msgstr "Personnes transgenre" + +#: morechoice.php:76 +msgid "Criminals" +msgstr "Criminels" + +#: morechoice.php:77 +msgid "Stealing" +msgstr "Volant" #: morechoice.php:78 -msgid "Nappies/Diapers" -msgstr "" +msgid "Breast milk" +msgstr "Allaitement" #: morechoice.php:79 -msgid "Trees" -msgstr "" - -#: morechoice.php:80 -msgid "Vomit" -msgstr "" - -#: morechoice.php:81 -msgid "Murder" -msgstr "" - -#: morechoice.php:82 -msgid "Fat people" -msgstr "" - -#: morechoice.php:83 -msgid "Feet" -msgstr "" - -#: morechoice.php:84 -msgid "Covered in insects" -msgstr "" - -#: morechoice.php:85 -msgid "Turning a human being into furniture" -msgstr "" - -#: morechoice.php:86 -msgid "Elderly people" -msgstr "" - -#: morechoice.php:87 -msgid "Transgender people" -msgstr "" - -#: morechoice.php:88 -msgid "Criminals" -msgstr "" - -#: morechoice.php:89 -msgid "Stealing" -msgstr "" - -#: morechoice.php:90 -msgid "Breast milk" -msgstr "" - -#: morechoice.php:91 msgid "Immersing genitals in liquids" msgstr "" -#: morechoice.php:92 +#: morechoice.php:80 msgid "Giants" -msgstr "" +msgstr "Géants" -#: morechoice.php:93 +#: morechoice.php:81 msgid "Masochism" -msgstr "" +msgstr "Masochisme" -#: morechoice.php:94 +#: morechoice.php:82 msgid "Cars" -msgstr "" +msgstr "Voitures" -#: morechoice.php:95 +#: morechoice.php:83 msgid "Menstruation" -msgstr "" +msgstr "Menstruations" -#: morechoice.php:96 +#: morechoice.php:84 msgid "Mucus" -msgstr "" +msgstr "Mucus" -#: morechoice.php:97 +#: morechoice.php:85 msgid "Obscene language" -msgstr "" +msgstr "Langage obscène" -#: morechoice.php:98 +#: morechoice.php:86 msgid "Noses" -msgstr "" +msgstr "Nez" -#: morechoice.php:99 +#: morechoice.php:87 msgid "Navels" msgstr "" -#: morechoice.php:100 +#: morechoice.php:88 msgid "Corpses" -msgstr "" +msgstr "Corps" + +#: morechoice.php:89 +msgid "Smells" +msgstr "Odeurs" + +#: morechoice.php:90 +msgid "Buttocks" +msgstr "Fesses" + +#: morechoice.php:91 +msgid "Nonliving objects" +msgstr "Objets inertes" + +#: morechoice.php:92 +msgid "Sleeping people" +msgstr "Personnes qui dorment" + +#: morechoice.php:93 +msgid "Urination" +msgstr "Urine" + +#: morechoice.php:94 +msgid "Eating people" +msgstr "Mangeant des personnes" + +#: morechoice.php:95 +msgid "Being eaten" +msgstr "Étant mangé" + +#: morechoice.php:96 +msgid "Animals" +msgstr "Animaux" + +#: morechoice.php:97 +msgid "I'd rather just have some chocolate" +msgstr "Je préférerais juste avoir du chocolat" #: morechoice.php:101 -msgid "Smells" -msgstr "" +msgid "Married to my job" +msgstr "Marié à mon travail" #: morechoice.php:102 -msgid "Buttocks" -msgstr "" +msgid "Polygamist" +msgstr "Polygame" #: morechoice.php:103 -msgid "Nonliving objects" -msgstr "" +msgid "Half married" +msgstr "A demi-marié" #: morechoice.php:104 -msgid "Sleeping people" -msgstr "" +msgid "Living in the past" +msgstr "Vivant dans le passé" #: morechoice.php:105 -msgid "Urination" -msgstr "" +msgid "Pretending to be over my ex" +msgstr "Prétendant avoir oublié mon ex" #: morechoice.php:106 -msgid "Eating people" -msgstr "" - -#: morechoice.php:107 -msgid "Being eaten" -msgstr "" - -#: morechoice.php:108 -msgid "Animals" -msgstr "" - -#: morechoice.php:109 -msgid "I'd rather just have some chocolate" -msgstr "" - -#: morechoice.php:113 -msgid "Married to my job" -msgstr "" - -#: morechoice.php:114 -msgid "Polygamist" -msgstr "" - -#: morechoice.php:115 -msgid "Half married" -msgstr "" - -#: morechoice.php:116 -msgid "Living in the past" -msgstr "" - -#: morechoice.php:117 -msgid "Pretending to be over my ex" -msgstr "" - -#: morechoice.php:118 msgid "Hurt in the past" msgstr "" -#: morechoice.php:119 +#: morechoice.php:107 msgid "Wallowing in self-pity" -msgstr "" +msgstr "S'apitoyant sur son sort" diff --git a/morechoice/lang/fr/strings.php b/morechoice/lang/fr/strings.php index 67d49705..5c68bf76 100644 --- a/morechoice/lang/fr/strings.php +++ b/morechoice/lang/fr/strings.php @@ -3,7 +3,7 @@ if(! function_exists("string_plural_select_fr")) { function string_plural_select_fr($n){ $n = intval($n); - return intval($n > 1); + if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Androgyne'] = 'Androgyne'; $a->strings['Bear'] = 'Ours'; @@ -25,5 +25,49 @@ $a->strings['Millionaires'] = 'Millionnaires'; $a->strings['Easy women'] = 'Femmes faciles'; $a->strings['People with impaired mobility'] = 'Personnes à mobilité réduite'; $a->strings['Amputees'] = 'Amputés'; +$a->strings['Statues, mannequins and immobility'] = 'Statues, mannequins et immobilité'; $a->strings['Pain'] = 'Douleur'; $a->strings['Trans men'] = 'Hommes trans'; +$a->strings['Older women'] = 'Femmes plus âgées'; +$a->strings['Asphyxiation'] = 'Asphyxie'; +$a->strings['In public'] = 'En public'; +$a->strings['In danger'] = 'En danger'; +$a->strings['Pretending to be male'] = 'Prétendant être homme'; +$a->strings['Pretending to be female'] = 'Prétendant être femme'; +$a->strings['Crying'] = 'Pleurant'; +$a->strings['Nappies/Diapers'] = 'Couches/Changes'; +$a->strings['Trees'] = 'Arbres'; +$a->strings['Vomit'] = 'Vomi'; +$a->strings['Murder'] = 'Meurtre'; +$a->strings['Fat people'] = 'Personnes en surpoids'; +$a->strings['Feet'] = 'Pieds'; +$a->strings['Covered in insects'] = 'Couvert d\'insectes'; +$a->strings['Turning a human being into furniture'] = 'Transforme un être humain en produit'; +$a->strings['Elderly people'] = 'Personnes âgées'; +$a->strings['Transgender people'] = 'Personnes transgenre'; +$a->strings['Criminals'] = 'Criminels'; +$a->strings['Stealing'] = 'Volant'; +$a->strings['Breast milk'] = 'Allaitement'; +$a->strings['Giants'] = 'Géants'; +$a->strings['Masochism'] = 'Masochisme'; +$a->strings['Cars'] = 'Voitures'; +$a->strings['Menstruation'] = 'Menstruations'; +$a->strings['Mucus'] = 'Mucus'; +$a->strings['Obscene language'] = 'Langage obscène'; +$a->strings['Noses'] = 'Nez'; +$a->strings['Corpses'] = 'Corps'; +$a->strings['Smells'] = 'Odeurs'; +$a->strings['Buttocks'] = 'Fesses'; +$a->strings['Nonliving objects'] = 'Objets inertes'; +$a->strings['Sleeping people'] = 'Personnes qui dorment'; +$a->strings['Urination'] = 'Urine'; +$a->strings['Eating people'] = 'Mangeant des personnes'; +$a->strings['Being eaten'] = 'Étant mangé'; +$a->strings['Animals'] = 'Animaux'; +$a->strings['I\'d rather just have some chocolate'] = 'Je préférerais juste avoir du chocolat'; +$a->strings['Married to my job'] = 'Marié à mon travail'; +$a->strings['Polygamist'] = 'Polygame'; +$a->strings['Half married'] = 'A demi-marié'; +$a->strings['Living in the past'] = 'Vivant dans le passé'; +$a->strings['Pretending to be over my ex'] = 'Prétendant avoir oublié mon ex'; +$a->strings['Wallowing in self-pity'] = 'S\'apitoyant sur son sort'; From 96637b30a414d26a009dae6f5684c6ddd3c35767 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 24 May 2022 07:59:32 +0200 Subject: [PATCH 022/677] tictac addon FR translation updated THX kalon33 --- tictac/lang/fr/messages.po | 53 +++++++++++++++++++------------------- tictac/lang/fr/strings.php | 12 ++++++++- 2 files changed, 38 insertions(+), 27 deletions(-) diff --git a/tictac/lang/fr/messages.po b/tictac/lang/fr/messages.po index 0b29e356..61af781d 100644 --- a/tictac/lang/fr/messages.po +++ b/tictac/lang/fr/messages.po @@ -5,70 +5,71 @@ # # Translators: # ButterflyOfFire, 2020 +# Nicolas Derive, 2022 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2020-02-27 22:16+0000\n" -"Last-Translator: ButterflyOfFire\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2014-06-23 12:57+0000\n" +"Last-Translator: Nicolas Derive, 2022\n" "Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: tictac.php:20 +#: tictac.php:16 msgid "Three Dimensional Tic-Tac-Toe" -msgstr "" +msgstr "Morpion tri-dimensionnel" -#: tictac.php:53 +#: tictac.php:49 msgid "3D Tic-Tac-Toe" -msgstr "" +msgstr "Morpion 3D" -#: tictac.php:58 +#: tictac.php:54 msgid "New game" -msgstr "" +msgstr "Nouvelle partie" -#: tictac.php:59 +#: tictac.php:55 msgid "New game with handicap" -msgstr "" +msgstr "Nouvelle partie avec handicap" -#: tictac.php:60 +#: tictac.php:56 msgid "" "Three dimensional tic-tac-toe is just like the traditional game except that " "it is played on multiple levels simultaneously. " -msgstr "" +msgstr "Le morpion tri-dimensionnel est comme le jeu traditionnel, si ce n'est qu'il se joue sur plusieurs niveaux simultanément." -#: tictac.php:61 +#: tictac.php:57 msgid "" "In this case there are three levels. You win by getting three in a row on " "any level, as well as up, down, and diagonally across the different levels." -msgstr "" +msgstr "Dans ce cas, il y a trois niveaux. Vous pouvez gagner en alignant trois signes à la suite sur n'importe quel niveau, aussi bien vers le haut, vers le bas, qu'en diagonale à travers les différents niveaux." -#: tictac.php:63 +#: tictac.php:59 msgid "" "The handicap game disables the center position on the middle level because " "the player claiming this square often has an unfair advantage." -msgstr "" +msgstr "Le jeu avec handicap désactive la position centrale du niveau du milieu car le joueur occupant cette case a souvent un avantage disproportionné." -#: tictac.php:182 +#: tictac.php:178 msgid "You go first..." -msgstr "" +msgstr "Vous commencez..." -#: tictac.php:187 +#: tictac.php:183 msgid "I'm going first this time..." -msgstr "" +msgstr "Je commence cette fois-ci..." -#: tictac.php:193 +#: tictac.php:189 msgid "You won!" msgstr "Vous avez gagné !" -#: tictac.php:199 tictac.php:224 +#: tictac.php:195 tictac.php:220 msgid "\"Cat\" game!" -msgstr "" +msgstr "Match nul !" -#: tictac.php:222 +#: tictac.php:218 msgid "I won!" msgstr "J’ai gagné !" diff --git a/tictac/lang/fr/strings.php b/tictac/lang/fr/strings.php index e491e30e..3175a245 100644 --- a/tictac/lang/fr/strings.php +++ b/tictac/lang/fr/strings.php @@ -3,7 +3,17 @@ if(! function_exists("string_plural_select_fr")) { function string_plural_select_fr($n){ $n = intval($n); - return intval($n > 1); + if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} +$a->strings['Three Dimensional Tic-Tac-Toe'] = 'Morpion tri-dimensionnel'; +$a->strings['3D Tic-Tac-Toe'] = 'Morpion 3D'; +$a->strings['New game'] = 'Nouvelle partie'; +$a->strings['New game with handicap'] = 'Nouvelle partie avec handicap'; +$a->strings['Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. '] = 'Le morpion tri-dimensionnel est comme le jeu traditionnel, si ce n\'est qu\'il se joue sur plusieurs niveaux simultanément.'; +$a->strings['In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels.'] = 'Dans ce cas, il y a trois niveaux. Vous pouvez gagner en alignant trois signes à la suite sur n\'importe quel niveau, aussi bien vers le haut, vers le bas, qu\'en diagonale à travers les différents niveaux.'; +$a->strings['The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage.'] = 'Le jeu avec handicap désactive la position centrale du niveau du milieu car le joueur occupant cette case a souvent un avantage disproportionné.'; +$a->strings['You go first...'] = 'Vous commencez...'; +$a->strings['I\'m going first this time...'] = 'Je commence cette fois-ci...'; $a->strings['You won!'] = 'Vous avez gagné !'; +$a->strings['"Cat" game!'] = 'Match nul !'; $a->strings['I won!'] = 'J’ai gagné !'; From d0dfb04585c5b9bdfed938181429624169cc9ad5 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 24 May 2022 07:59:53 +0200 Subject: [PATCH 023/677] mailstream addon FR translation updated THX kalon33 --- mailstream/lang/fr/messages.po | 79 +++++++++++++++++++++------------- mailstream/lang/fr/strings.php | 12 +++++- 2 files changed, 59 insertions(+), 32 deletions(-) diff --git a/mailstream/lang/fr/messages.po b/mailstream/lang/fr/messages.po index 4a82f290..488d4c08 100644 --- a/mailstream/lang/fr/messages.po +++ b/mailstream/lang/fr/messages.po @@ -4,78 +4,97 @@ # # # Translators: -# Nicola Spanti , 2015 +# Nicolas Derive, 2022 +# ea1cd8241cb389ffb6f92bc6891eff5d_dc12308 <70dced5587d47e18d88f9298024d96f8_93383>, 2015 # StefOfficiel , 2015 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-23 14:45+0200\n" -"PO-Revision-Date: 2015-07-27 18:23+0000\n" -"Last-Translator: Nicola Spanti \n" -"Language-Team: French (http://www.transifex.com/projects/p/friendica/language/fr/)\n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2014-06-23 09:54+0000\n" +"Last-Translator: Nicolas Derive, 2022\n" +"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: mailstream.php:55 +#: mailstream.php:77 msgid "From Address" msgstr "Depuis l'adresse" -#: mailstream.php:57 +#: mailstream.php:79 msgid "Email address that stream items will appear to be from." -msgstr "" +msgstr "Adresse de courriel de laquelle les éléments du flux sembleront provenir." -#: mailstream.php:60 mailstream.php:282 +#: mailstream.php:82 msgid "Save Settings" msgstr "Sauvegarder les paramètres" -#: mailstream.php:165 +#: mailstream.php:301 msgid "Re:" msgstr "Re :" -#: mailstream.php:173 +#: mailstream.php:314 mailstream.php:317 msgid "Friendica post" msgstr "Message Friendica" -#: mailstream.php:176 +#: mailstream.php:320 msgid "Diaspora post" msgstr "Message Diaspora" -#: mailstream.php:183 +#: mailstream.php:330 msgid "Feed item" -msgstr "" +msgstr "Élément du flux" -#: mailstream.php:186 +#: mailstream.php:333 msgid "Email" msgstr "Courriel" -#: mailstream.php:188 +#: mailstream.php:335 msgid "Friendica Item" msgstr "Élément de Friendica" -#: mailstream.php:229 +#: mailstream.php:404 msgid "Upstream" -msgstr "" +msgstr "En amont" -#: mailstream.php:230 +#: mailstream.php:405 msgid "Local" msgstr "Local" -#: mailstream.php:274 -msgid "Email Address" -msgstr "Adresse de courriel" - -#: mailstream.php:276 -msgid "Leave blank to use your account email address" -msgstr "" - -#: mailstream.php:279 +#: mailstream.php:481 msgid "Enabled" msgstr "Activer" -#: mailstream.php:281 +#: mailstream.php:486 +msgid "Email Address" +msgstr "Adresse de courriel" + +#: mailstream.php:488 +msgid "Leave blank to use your account email address" +msgstr "Laissez vide pour utiliser l'adresse de courriel de votre compte" + +#: mailstream.php:492 +msgid "Exclude Likes" +msgstr "Exclure les \"j'aime\"" + +#: mailstream.php:494 +msgid "Check this to omit mailing \"Like\" notifications" +msgstr "Cochez ceci pour éviter d'envoyer les notifications des \"J'aime\"" + +#: mailstream.php:498 +msgid "Attach Images" +msgstr "Attacher les images" + +#: mailstream.php:500 +msgid "" +"Download images in posts and attach them to the email. Useful for reading " +"email while offline." +msgstr "Télécharger les images des messages et les attacher au courriel. Utile pour les les courriels hors-ligne." + +#: mailstream.php:507 msgid "Mail Stream Settings" msgstr "Paramètres de Mail Stream" diff --git a/mailstream/lang/fr/strings.php b/mailstream/lang/fr/strings.php index da45cc46..bfaf4389 100644 --- a/mailstream/lang/fr/strings.php +++ b/mailstream/lang/fr/strings.php @@ -3,16 +3,24 @@ if(! function_exists("string_plural_select_fr")) { function string_plural_select_fr($n){ $n = intval($n); - return intval($n > 1); + if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['From Address'] = 'Depuis l\'adresse'; +$a->strings['Email address that stream items will appear to be from.'] = 'Adresse de courriel de laquelle les éléments du flux sembleront provenir.'; $a->strings['Save Settings'] = 'Sauvegarder les paramètres'; $a->strings['Re:'] = 'Re :'; $a->strings['Friendica post'] = 'Message Friendica'; $a->strings['Diaspora post'] = 'Message Diaspora'; +$a->strings['Feed item'] = 'Élément du flux'; $a->strings['Email'] = 'Courriel'; $a->strings['Friendica Item'] = 'Élément de Friendica'; +$a->strings['Upstream'] = 'En amont'; $a->strings['Local'] = 'Local'; -$a->strings['Email Address'] = 'Adresse de courriel'; $a->strings['Enabled'] = 'Activer'; +$a->strings['Email Address'] = 'Adresse de courriel'; +$a->strings['Leave blank to use your account email address'] = 'Laissez vide pour utiliser l\'adresse de courriel de votre compte'; +$a->strings['Exclude Likes'] = 'Exclure les "j\'aime"'; +$a->strings['Check this to omit mailing "Like" notifications'] = 'Cochez ceci pour éviter d\'envoyer les notifications des "J\'aime"'; +$a->strings['Attach Images'] = 'Attacher les images'; +$a->strings['Download images in posts and attach them to the email. Useful for reading email while offline.'] = 'Télécharger les images des messages et les attacher au courriel. Utile pour les les courriels hors-ligne.'; $a->strings['Mail Stream Settings'] = 'Paramètres de Mail Stream'; From 53a806af87e24775678295f80f4d6629f6733d3c Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 24 May 2022 08:00:56 +0200 Subject: [PATCH 024/677] notifyall addon FR translation updated THX kalon33 --- notifyall/lang/fr/messages.po | 38 +++++++++++++++++++---------------- notifyall/lang/fr/strings.php | 3 ++- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/notifyall/lang/fr/messages.po b/notifyall/lang/fr/messages.po index dbc88aba..1f007cf6 100644 --- a/notifyall/lang/fr/messages.po +++ b/notifyall/lang/fr/messages.po @@ -3,55 +3,59 @@ # This file is distributed under the same license as the Friendica notifyall addon package. # # +# Translators: +# Thecross, 2017 +# Nicolas Derive, 2022 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-08-14 16:41+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Thecross , 2017\n" +"POT-Creation-Date: 2021-02-01 18:15+0100\n" +"PO-Revision-Date: 2016-08-14 19:29+0000\n" +"Last-Translator: Nicolas Derive, 2022\n" "Language-Team: French (https://www.transifex.com/Friendica/teams/12172/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: notifyall.php:26 -msgid "Send email to all members" -msgstr "Envoyer un courriel à tous les membres" - -#: notifyall.php:42 +#: NotifyAllEmail.php:40 #, php-format msgid "%s Administrator" -msgstr "" +msgstr "L'administrateur de %s" -#: notifyall.php:44 +#: NotifyAllEmail.php:42 #, php-format msgid "%1$s, %2$s Administrator" msgstr "" -#: notifyall.php:60 +#: notifyall.php:22 +msgid "Send email to all members" +msgstr "Envoyer un courriel à tous les membres" + +#: notifyall.php:49 msgid "No recipients found." msgstr "Aucun destinataire trouvé." -#: notifyall.php:78 +#: notifyall.php:59 msgid "Emails sent" msgstr "Courriels envoyés" -#: notifyall.php:86 +#: notifyall.php:69 msgid "Send email to all members of this Friendica instance." msgstr "Envoyer un courriel à tous les membres de cet instance Friendica." -#: notifyall.php:91 +#: notifyall.php:74 msgid "Message subject" msgstr "Objet du message" -#: notifyall.php:92 +#: notifyall.php:75 msgid "Test mode (only send to administrator)" msgstr "Mode test (envoyer uniquement à l'administrateur)" -#: notifyall.php:93 +#: notifyall.php:76 msgid "Submit" msgstr "Envoyer" diff --git a/notifyall/lang/fr/strings.php b/notifyall/lang/fr/strings.php index 5932cb06..273da79c 100644 --- a/notifyall/lang/fr/strings.php +++ b/notifyall/lang/fr/strings.php @@ -3,8 +3,9 @@ if(! function_exists("string_plural_select_fr")) { function string_plural_select_fr($n){ $n = intval($n); - return intval($n > 1); + if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} +$a->strings['%s Administrator'] = 'L\'administrateur de %s'; $a->strings['Send email to all members'] = 'Envoyer un courriel à tous les membres'; $a->strings['No recipients found.'] = 'Aucun destinataire trouvé.'; $a->strings['Emails sent'] = 'Courriels envoyés'; From 886c56e4b7a96c7d88c58d1bec1da36abc987b89 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 24 May 2022 08:01:18 +0200 Subject: [PATCH 025/677] twitter addon FR translation updated THX kalon33 --- twitter/lang/fr/messages.po | 170 ++++++++++++++++++++---------------- twitter/lang/fr/strings.php | 30 +++++-- 2 files changed, 119 insertions(+), 81 deletions(-) diff --git a/twitter/lang/fr/messages.po b/twitter/lang/fr/messages.po index 6b898264..18a4f190 100644 --- a/twitter/lang/fr/messages.po +++ b/twitter/lang/fr/messages.po @@ -4,121 +4,145 @@ # # # Translators: -# Nicola Spanti , 2015 +# Nicolas Derive, 2022 +# ea1cd8241cb389ffb6f92bc6891eff5d_dc12308 <70dced5587d47e18d88f9298024d96f8_93383>, 2015 # StefOfficiel , 2015 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-30 17:24+0000\n" -"Last-Translator: Nicola Spanti \n" +"POT-Creation-Date: 2021-11-27 10:25-0500\n" +"PO-Revision-Date: 2014-06-23 12:58+0000\n" +"Last-Translator: Nicolas Derive, 2022\n" "Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: twitter.php:77 +#: twitter.php:213 msgid "Post to Twitter" msgstr "Publier sur Twitter" -#: twitter.php:129 -msgid "Twitter settings updated." -msgstr "Paramètres Twitter mis à jour." +#: twitter.php:258 +msgid "" +"You submitted an empty PIN, please Sign In with Twitter again to get a new " +"one." +msgstr "Vous avez envoyé un PIN vide, veuillez vous connecter à Twitter à nouveau pour en avoir un autre." -#: twitter.php:157 -msgid "Twitter Posting Settings" -msgstr "Paramètres Twitter de publication" - -#: twitter.php:164 +#: twitter.php:321 msgid "" "No consumer key pair for Twitter found. Please contact your site " "administrator." -msgstr "" +msgstr "Aucune clé d'application pour Twitter n'a été trouvée. Merci de contacter l'administrateur de votre site." -#: twitter.php:183 +#: twitter.php:334 msgid "" "At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" " be posted to Twitter." -msgstr "" +msgstr "Sur cette instance de Friendica, le connecteur Twitter a été activé, mais vous n'avez pas encore connecté votre compte local à votre compte Twitter. Pour ce faire, cliquer sur le bouton ci-dessous. Vous obtiendrez alors un 'PIN' de Twitter, que vous devrez copier dans le champ ci-dessous, puis soumettre le formulaire. Seules vos publications publiques seront transmises à Twitter." -#: twitter.php:184 +#: twitter.php:335 msgid "Log in with Twitter" msgstr "Se connecter avec Twitter" -#: twitter.php:186 +#: twitter.php:337 msgid "Copy the PIN from Twitter here" msgstr "Copier le PIN de Twitter ici" -#: twitter.php:191 twitter.php:229 twitter.php:556 -msgid "Submit" -msgstr "Soumettre" +#: twitter.php:345 twitter.php:388 +msgid "An error occured: " +msgstr "Une erreur est survenue :" -#: twitter.php:200 -msgid "Currently connected to: " -msgstr "Actuellement connecté à :" +#: twitter.php:359 +#, php-format +msgid "" +"Currently connected to: %1$s" +msgstr "Actuellement connecté à : %1$s" -#: twitter.php:201 +#: twitter.php:365 +msgid "" +"Note: Due to your privacy settings (Hide your profile " +"details from unknown viewers?) the link potentially included in public " +"postings relayed to Twitter will lead the visitor to a blank page informing " +"the visitor that the access to your profile has been restricted." +msgstr "Note: Du fait de vos paramètres de vie privée (Cacher les détails de votre profil des visiteurs inconnus?), le lien potentiellement inclus dans les publications publiques relayées vers Twitter conduira les visiteurs vers une page blanche les informant que leur accès à votre profil a été restreint." + +#: twitter.php:372 +msgid "Invalid Twitter info" +msgstr "Informations Twitter invalides" + +#: twitter.php:373 +msgid "Disconnect" +msgstr "Se déconnecter" + +#: twitter.php:378 +msgid "Allow posting to Twitter" +msgstr "Autoriser la publication sur Twitter" + +#: twitter.php:378 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." -msgstr "" +msgstr "En cas d'activation, toutes vos publications publiques seront transmises au compte Twitter associé. Vous pourrez choisir de le faire par défaut (ici), ou bien pour chaque publication séparément lors de sa rédaction." -#: twitter.php:203 -msgid "" -"Note: Due your privacy settings (Hide your profile " -"details from unknown viewers?) the link potentially included in public " -"postings relayed to Twitter will lead the visitor to a blank page informing " -"the visitor that the access to your profile has been restricted." -msgstr "" - -#: twitter.php:206 -msgid "Allow posting to Twitter" -msgstr "Autoriser la publication sur Twitter" - -#: twitter.php:209 +#: twitter.php:379 msgid "Send public postings to Twitter by default" -msgstr "Envoyer par défaut les messages publics sur Twitter" +msgstr "Envoyer par défaut les publications publiques sur Twitter" -#: twitter.php:213 -msgid "Mirror all posts from twitter that are no replies or retweets" -msgstr "" +#: twitter.php:380 +msgid "Mirror all posts from twitter that are no replies" +msgstr "Synchroniser toutes les publications de Twitter qui ne sont pas des réponses" -#: twitter.php:217 -msgid "Shortening method that optimizes the tweet" -msgstr "" +#: twitter.php:381 +msgid "Import the remote timeline" +msgstr "Importer la Timeline distante" -#: twitter.php:221 -msgid "Send linked #-tags and @-names to Twitter" -msgstr "" +#: twitter.php:382 +msgid "Automatically create contacts" +msgstr "Créer automatiquement les contacts" -#: twitter.php:226 -msgid "Clear OAuth configuration" -msgstr "" - -#: twitter.php:550 -msgid "Settings updated." -msgstr "Paramètres mis à jour." - -#: twitter.php:558 -msgid "Consumer key" -msgstr "" - -#: twitter.php:559 -msgid "Consumer secret" -msgstr "" - -#: twitter.php:560 -msgid "Name of the Twitter Application" -msgstr "Nom de l'application Twitter" - -#: twitter.php:560 +#: twitter.php:382 msgid "" -"set this to avoid mirroring postings from ~friendica back to ~friendica" -msgstr "" +"This will automatically create a contact in Friendica as soon as you receive" +" a message from an existing contact via the Twitter network. If you do not " +"enable this, you need to manually add those Twitter contacts in Friendica " +"from whom you would like to see posts here." +msgstr "Cela va automatiquement créer un contact dans Friendica dès qu'une publication d'un contact existant est reçue de Twitter. Si vous n'activez pas ceci, vous devrez ajouter manuellement ces contacts dans Friendica afin d'y voir leurs publications." + +#: twitter.php:395 +msgid "Twitter Import/Export/Mirror" +msgstr "Importation/Exportation/Synchronisation avec Twitter" + +#: twitter.php:547 +msgid "" +"Please connect a Twitter account in your Social Network settings to import " +"Twitter posts." +msgstr "Merci de connecter un compte Twitter depuis vos Paramètres de réseaux sociaux afin d'importer les publications Twitter." + +#: twitter.php:554 +msgid "Twitter post not found." +msgstr "Publication Twitter non trouvée." + +#: twitter.php:914 +msgid "Save Settings" +msgstr "Sauvegarder les paramètres" + +#: twitter.php:916 +msgid "Consumer key" +msgstr "Consumer key" + +#: twitter.php:917 +msgid "Consumer secret" +msgstr "Consumer secret" + +#: twitter.php:1113 +#, php-format +msgid "%s on Twitter" +msgstr "%s sur Twitter" diff --git a/twitter/lang/fr/strings.php b/twitter/lang/fr/strings.php index a271ccbf..9b7363f3 100644 --- a/twitter/lang/fr/strings.php +++ b/twitter/lang/fr/strings.php @@ -3,16 +3,30 @@ if(! function_exists("string_plural_select_fr")) { function string_plural_select_fr($n){ $n = intval($n); - return intval($n > 1); + if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['Post to Twitter'] = 'Publier sur Twitter'; -$a->strings['Twitter settings updated.'] = 'Paramètres Twitter mis à jour.'; -$a->strings['Twitter Posting Settings'] = 'Paramètres Twitter de publication'; +$a->strings['You submitted an empty PIN, please Sign In with Twitter again to get a new one.'] = 'Vous avez envoyé un PIN vide, veuillez vous connecter à Twitter à nouveau pour en avoir un autre.'; +$a->strings['No consumer key pair for Twitter found. Please contact your site administrator.'] = 'Aucune clé d\'application pour Twitter n\'a été trouvée. Merci de contacter l\'administrateur de votre site.'; +$a->strings['At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter.'] = 'Sur cette instance de Friendica, le connecteur Twitter a été activé, mais vous n\'avez pas encore connecté votre compte local à votre compte Twitter. Pour ce faire, cliquer sur le bouton ci-dessous. Vous obtiendrez alors un \'PIN\' de Twitter, que vous devrez copier dans le champ ci-dessous, puis soumettre le formulaire. Seules vos publications publiques seront transmises à Twitter.'; $a->strings['Log in with Twitter'] = 'Se connecter avec Twitter'; $a->strings['Copy the PIN from Twitter here'] = 'Copier le PIN de Twitter ici'; -$a->strings['Submit'] = 'Soumettre'; -$a->strings['Currently connected to: '] = 'Actuellement connecté à :'; +$a->strings['An error occured: '] = 'Une erreur est survenue :'; +$a->strings['Currently connected to: %1$s'] = 'Actuellement connecté à : %1$s'; +$a->strings['Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'] = 'Note: Du fait de vos paramètres de vie privée (Cacher les détails de votre profil des visiteurs inconnus?), le lien potentiellement inclus dans les publications publiques relayées vers Twitter conduira les visiteurs vers une page blanche les informant que leur accès à votre profil a été restreint.'; +$a->strings['Invalid Twitter info'] = 'Informations Twitter invalides'; +$a->strings['Disconnect'] = 'Se déconnecter'; $a->strings['Allow posting to Twitter'] = 'Autoriser la publication sur Twitter'; -$a->strings['Send public postings to Twitter by default'] = 'Envoyer par défaut les messages publics sur Twitter'; -$a->strings['Settings updated.'] = 'Paramètres mis à jour.'; -$a->strings['Name of the Twitter Application'] = 'Nom de l\'application Twitter'; +$a->strings['If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.'] = 'En cas d\'activation, toutes vos publications publiques seront transmises au compte Twitter associé. Vous pourrez choisir de le faire par défaut (ici), ou bien pour chaque publication séparément lors de sa rédaction.'; +$a->strings['Send public postings to Twitter by default'] = 'Envoyer par défaut les publications publiques sur Twitter'; +$a->strings['Mirror all posts from twitter that are no replies'] = 'Synchroniser toutes les publications de Twitter qui ne sont pas des réponses'; +$a->strings['Import the remote timeline'] = 'Importer la Timeline distante'; +$a->strings['Automatically create contacts'] = 'Créer automatiquement les contacts'; +$a->strings['This will automatically create a contact in Friendica as soon as you receive a message from an existing contact via the Twitter network. If you do not enable this, you need to manually add those Twitter contacts in Friendica from whom you would like to see posts here.'] = 'Cela va automatiquement créer un contact dans Friendica dès qu\'une publication d\'un contact existant est reçue de Twitter. Si vous n\'activez pas ceci, vous devrez ajouter manuellement ces contacts dans Friendica afin d\'y voir leurs publications.'; +$a->strings['Twitter Import/Export/Mirror'] = 'Importation/Exportation/Synchronisation avec Twitter'; +$a->strings['Please connect a Twitter account in your Social Network settings to import Twitter posts.'] = 'Merci de connecter un compte Twitter depuis vos Paramètres de réseaux sociaux afin d\'importer les publications Twitter.'; +$a->strings['Twitter post not found.'] = 'Publication Twitter non trouvée.'; +$a->strings['Save Settings'] = 'Sauvegarder les paramètres'; +$a->strings['Consumer key'] = 'Consumer key'; +$a->strings['Consumer secret'] = 'Consumer secret'; +$a->strings['%s on Twitter'] = '%s sur Twitter'; From 91f5ba9eab867cec5cb523db6f487978ed3fb933 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 25 May 2022 08:36:09 +0200 Subject: [PATCH 026/677] notifyall addon FR translation updated THX kalon33 --- notifyall/lang/fr/messages.po | 2 +- notifyall/lang/fr/strings.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/notifyall/lang/fr/messages.po b/notifyall/lang/fr/messages.po index 1f007cf6..c2db9f63 100644 --- a/notifyall/lang/fr/messages.po +++ b/notifyall/lang/fr/messages.po @@ -30,7 +30,7 @@ msgstr "L'administrateur de %s" #: NotifyAllEmail.php:42 #, php-format msgid "%1$s, %2$s Administrator" -msgstr "" +msgstr "L'administrateur de %1$s, %2$s." #: notifyall.php:22 msgid "Send email to all members" diff --git a/notifyall/lang/fr/strings.php b/notifyall/lang/fr/strings.php index 273da79c..487f2083 100644 --- a/notifyall/lang/fr/strings.php +++ b/notifyall/lang/fr/strings.php @@ -6,6 +6,7 @@ function string_plural_select_fr($n){ if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; } }} $a->strings['%s Administrator'] = 'L\'administrateur de %s'; +$a->strings['%1$s, %2$s Administrator'] = 'L\'administrateur de %1$s, %2$s.'; $a->strings['Send email to all members'] = 'Envoyer un courriel à tous les membres'; $a->strings['No recipients found.'] = 'Aucun destinataire trouvé.'; $a->strings['Emails sent'] = 'Courriels envoyés'; From 348ca8029271645db6c7b170e42220b12d412a4d Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 25 May 2022 08:36:54 +0200 Subject: [PATCH 027/677] markdown addon FR translation updated THX kalon33 --- markdown/lang/fr/messages.po | 36 ++++++++++++++++++++++++++++++++++++ markdown/lang/fr/strings.php | 10 ++++++++++ 2 files changed, 46 insertions(+) create mode 100644 markdown/lang/fr/messages.po create mode 100644 markdown/lang/fr/strings.php diff --git a/markdown/lang/fr/messages.po b/markdown/lang/fr/messages.po new file mode 100644 index 00000000..6f42f197 --- /dev/null +++ b/markdown/lang/fr/messages.po @@ -0,0 +1,36 @@ +# ADDON markdown +# Copyright (C) +# This file is distributed under the same license as the Friendica markdown addon package. +# +# +# Translators: +# Nicolas Derive, 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2019-12-27 06:41+0000\n" +"Last-Translator: Nicolas Derive, 2022\n" +"Language-Team: French (https://www.transifex.com/Friendica/teams/12172/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: markdown.php:30 +msgid "Enable Markdown parsing" +msgstr "Activer l'interprétation Markdown" + +#: markdown.php:30 +msgid "If enabled, adds Markdown support to the Compose Post form." +msgstr "" +"Si activé, ajoute le support de Markdown au formulaire de création d'une " +"publication." + +#: markdown.php:35 +msgid "Markdown Settings" +msgstr "Paramètres de Markdown" diff --git a/markdown/lang/fr/strings.php b/markdown/lang/fr/strings.php new file mode 100644 index 00000000..a5d2cdb2 --- /dev/null +++ b/markdown/lang/fr/strings.php @@ -0,0 +1,10 @@ +strings['Enable Markdown parsing'] = 'Activer l\'interprétation Markdown'; +$a->strings['If enabled, adds Markdown support to the Compose Post form.'] = 'Si activé, ajoute le support de Markdown au formulaire de création d\'une publication.'; +$a->strings['Markdown Settings'] = 'Paramètres de Markdown'; From 19ae3851e88a5b0fb1205c05a1a3b51e2f824474 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 25 May 2022 08:37:28 +0200 Subject: [PATCH 028/677] =?UTF-8?q?advancedcontentfilter=20addon=20HU=20tr?= =?UTF-8?q?anslation=20update=20THX=20Bal=C3=A1zs=20=C3=9Ar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- advancedcontentfilter/lang/hu/messages.po | 36 +++++++++++++---------- advancedcontentfilter/lang/hu/strings.php | 1 + 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/advancedcontentfilter/lang/hu/messages.po b/advancedcontentfilter/lang/hu/messages.po index c80fda32..74570518 100644 --- a/advancedcontentfilter/lang/hu/messages.po +++ b/advancedcontentfilter/lang/hu/messages.po @@ -4,16 +4,16 @@ # # # Translators: -# Balázs Úr, 2021 +# Balázs Úr, 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-21 19:13-0500\n" +"POT-Creation-Date: 2022-05-11 08:54-0400\n" "PO-Revision-Date: 2018-05-24 06:41+0000\n" -"Last-Translator: Balázs Úr, 2021\n" +"Last-Translator: Balázs Úr, 2022\n" "Language-Team: Hungarian (https://www.transifex.com/Friendica/teams/12172/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -122,42 +122,48 @@ msgstr "Szabály kifejezése" msgid "Cancel" msgstr "Mégse" -#: advancedcontentfilter.php:312 advancedcontentfilter.php:323 -#: advancedcontentfilter.php:334 advancedcontentfilter.php:370 -#: advancedcontentfilter.php:401 advancedcontentfilter.php:424 +#: advancedcontentfilter.php:295 +msgid "This addon requires this node having at least one post" +msgstr "" +"Ez a bővítmény megköveteli, hogy ennek a csomópontnak legalább egy " +"bejegyzése legyen" + +#: advancedcontentfilter.php:325 advancedcontentfilter.php:336 +#: advancedcontentfilter.php:347 advancedcontentfilter.php:383 +#: advancedcontentfilter.php:414 advancedcontentfilter.php:437 msgid "You must be logged in to use this method" msgstr "Bejelentkezve kell lennie a módszer használatához" -#: advancedcontentfilter.php:338 advancedcontentfilter.php:374 -#: advancedcontentfilter.php:405 +#: advancedcontentfilter.php:351 advancedcontentfilter.php:387 +#: advancedcontentfilter.php:418 msgid "Invalid form security token, please refresh the page." msgstr "Érvénytelen űrlap biztonsági token. Frissítse az oldalt." -#: advancedcontentfilter.php:350 +#: advancedcontentfilter.php:363 msgid "The rule name and expression are required." msgstr "A szabály neve és kifejezése kötelező." -#: advancedcontentfilter.php:364 +#: advancedcontentfilter.php:377 msgid "Rule successfully added" msgstr "A szabály sikeresen hozzáadva" -#: advancedcontentfilter.php:378 advancedcontentfilter.php:409 +#: advancedcontentfilter.php:391 advancedcontentfilter.php:422 msgid "Rule doesn't exist or doesn't belong to you." msgstr "A szabály nem létezik vagy nem Önhöz tatozik." -#: advancedcontentfilter.php:395 +#: advancedcontentfilter.php:408 msgid "Rule successfully updated" msgstr "A szabály sikeresen frissítve" -#: advancedcontentfilter.php:418 +#: advancedcontentfilter.php:431 msgid "Rule successfully deleted" msgstr "A szabály sikeresen törölve" -#: advancedcontentfilter.php:428 +#: advancedcontentfilter.php:441 msgid "Missing argument: guid." msgstr "Hiányzó argumentum: guid." -#: advancedcontentfilter.php:436 +#: advancedcontentfilter.php:449 #, php-format msgid "Unknown post with guid: %s" msgstr "Ismeretlen bejegyzés a következő guid azonosítóval: %s" diff --git a/advancedcontentfilter/lang/hu/strings.php b/advancedcontentfilter/lang/hu/strings.php index 07d7467c..ba50caee 100644 --- a/advancedcontentfilter/lang/hu/strings.php +++ b/advancedcontentfilter/lang/hu/strings.php @@ -27,6 +27,7 @@ $a->strings['Add new rule'] = 'Új szabály hozzáadása'; $a->strings['Rule Name'] = 'Szabály neve'; $a->strings['Rule Expression'] = 'Szabály kifejezése'; $a->strings['Cancel'] = 'Mégse'; +$a->strings['This addon requires this node having at least one post'] = 'Ez a bővítmény megköveteli, hogy ennek a csomópontnak legalább egy bejegyzése legyen'; $a->strings['You must be logged in to use this method'] = 'Bejelentkezve kell lennie a módszer használatához'; $a->strings['Invalid form security token, please refresh the page.'] = 'Érvénytelen űrlap biztonsági token. Frissítse az oldalt.'; $a->strings['The rule name and expression are required.'] = 'A szabály neve és kifejezése kötelező.'; From d30487304973670d5e99e8346eb2ce8dbc6aeb30 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 31 May 2022 07:05:28 +0200 Subject: [PATCH 029/677] advanced content filter added RU translation THX Alexander An --- advancedcontentfilter/lang/ru/messages.po | 91 +++++++++++------------ advancedcontentfilter/lang/ru/strings.php | 4 +- 2 files changed, 46 insertions(+), 49 deletions(-) diff --git a/advancedcontentfilter/lang/ru/messages.po b/advancedcontentfilter/lang/ru/messages.po index d88ef79c..8c7b2a8f 100644 --- a/advancedcontentfilter/lang/ru/messages.po +++ b/advancedcontentfilter/lang/ru/messages.po @@ -6,15 +6,16 @@ # Translators: # Alexey Adamov <2077@tutanota.com>, 2019 # Eugene Veresk , 2020 +# Alexander An , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-17 04:04+0200\n" +"POT-Creation-Date: 2022-05-11 08:54-0400\n" "PO-Revision-Date: 2018-05-24 06:41+0000\n" -"Last-Translator: Eugene Veresk , 2020\n" +"Last-Translator: Alexander An , 2022\n" "Language-Team: Russian (https://www.transifex.com/Friendica/teams/12172/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,44 +23,44 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: advancedcontentfilter.php:134 +#: advancedcontentfilter.php:154 #, php-format msgid "Filtered by rule: %s" msgstr "Отфильтровано по правилу: %s" -#: advancedcontentfilter.php:147 advancedcontentfilter.php:204 +#: advancedcontentfilter.php:170 advancedcontentfilter.php:225 msgid "Advanced Content Filter" msgstr "Расширенный фильтр содержимого" -#: advancedcontentfilter.php:203 +#: advancedcontentfilter.php:224 msgid "Back to Addon Settings" msgstr "Вернуться к настройкам дополнений" -#: advancedcontentfilter.php:205 +#: advancedcontentfilter.php:226 msgid "Add a Rule" msgstr "Добавить правило" -#: advancedcontentfilter.php:206 +#: advancedcontentfilter.php:227 msgid "Help" msgstr "Помощь" -#: advancedcontentfilter.php:207 +#: advancedcontentfilter.php:228 msgid "" "Add and manage your personal content filter rules in this screen. Rules have" " a name and an arbitrary expression that will be matched against post data. " "For a complete reference of the available operations and variables, check " -"the help page." +"the help page." msgstr "" "Добавляйте и управляйте своими собственными фильтрами на этой странице. У " "правил есть имя и произвольное выражение, которое будет сопоставляться с " "данными поста. Для полной ссылки на доступные операции и переменные, " -"посмотрите страницу справки." +"посмотрите страницу справки." -#: advancedcontentfilter.php:208 +#: advancedcontentfilter.php:229 msgid "Your rules" msgstr "Ваши правила" -#: advancedcontentfilter.php:209 +#: advancedcontentfilter.php:230 msgid "" "You have no rules yet! Start adding one by clicking on the button above next" " to the title." @@ -67,110 +68,106 @@ msgstr "" "У Вас нет ни одного правила. Начните добавление первого с нажатия на кнопку " "выше, рядом с названием." -#: advancedcontentfilter.php:210 +#: advancedcontentfilter.php:231 msgid "Disabled" msgstr "Отключено" -#: advancedcontentfilter.php:211 +#: advancedcontentfilter.php:232 msgid "Enabled" msgstr "Включено" -#: advancedcontentfilter.php:212 +#: advancedcontentfilter.php:233 msgid "Disable this rule" msgstr "Отключить это правило" -#: advancedcontentfilter.php:213 +#: advancedcontentfilter.php:234 msgid "Enable this rule" msgstr "Включить это правило" -#: advancedcontentfilter.php:214 +#: advancedcontentfilter.php:235 msgid "Edit this rule" msgstr "Изменить это правило" -#: advancedcontentfilter.php:215 +#: advancedcontentfilter.php:236 msgid "Edit the rule" msgstr "Изменить правило" -#: advancedcontentfilter.php:216 +#: advancedcontentfilter.php:237 msgid "Save this rule" msgstr "Сохранить это правило" -#: advancedcontentfilter.php:217 +#: advancedcontentfilter.php:238 msgid "Delete this rule" msgstr "Удалить это правило" -#: advancedcontentfilter.php:218 +#: advancedcontentfilter.php:239 msgid "Rule" msgstr "Правило" -#: advancedcontentfilter.php:219 +#: advancedcontentfilter.php:240 msgid "Close" msgstr "Закрыть" -#: advancedcontentfilter.php:220 +#: advancedcontentfilter.php:241 msgid "Add new rule" msgstr "Добавить новое правило" -#: advancedcontentfilter.php:221 +#: advancedcontentfilter.php:242 msgid "Rule Name" msgstr "Название правила" -#: advancedcontentfilter.php:222 +#: advancedcontentfilter.php:243 msgid "Rule Expression" msgstr "Содержание правила" -#: advancedcontentfilter.php:223 -msgid "" -"

Examples:

  • author_link == "
    -"'https://friendica.mrpetovan.com/profile/hypolite'
  • tags
" -msgstr "" -"

Примеры:

  • author_link == "
    -"'https://friendica.mrpetovan.com/profile/hypolite'
  • tags
" - -#: advancedcontentfilter.php:224 +#: advancedcontentfilter.php:244 msgid "Cancel" msgstr "Отмена" -#: advancedcontentfilter.php:290 advancedcontentfilter.php:301 -#: advancedcontentfilter.php:312 advancedcontentfilter.php:346 -#: advancedcontentfilter.php:375 advancedcontentfilter.php:396 +#: advancedcontentfilter.php:295 +msgid "This addon requires this node having at least one post" +msgstr "Это дополнение требует наличия хотя бы одной записи на этом узле." + +#: advancedcontentfilter.php:325 advancedcontentfilter.php:336 +#: advancedcontentfilter.php:347 advancedcontentfilter.php:383 +#: advancedcontentfilter.php:414 advancedcontentfilter.php:437 msgid "You must be logged in to use this method" msgstr "Вы должны авторизоваться для использования этого метода" -#: advancedcontentfilter.php:316 advancedcontentfilter.php:350 -#: advancedcontentfilter.php:379 +#: advancedcontentfilter.php:351 advancedcontentfilter.php:387 +#: advancedcontentfilter.php:418 msgid "Invalid form security token, please refresh the page." msgstr "Неверный ключ, пожалуйста, перезагрузите страницу" -#: advancedcontentfilter.php:328 +#: advancedcontentfilter.php:363 msgid "The rule name and expression are required." msgstr "Требуется ввести название и значение правила." -#: advancedcontentfilter.php:340 +#: advancedcontentfilter.php:377 msgid "Rule successfully added" msgstr "Правило успешно добавлено" -#: advancedcontentfilter.php:354 advancedcontentfilter.php:383 +#: advancedcontentfilter.php:391 advancedcontentfilter.php:422 msgid "Rule doesn't exist or doesn't belong to you." msgstr "Правило не найдено или доступ к нему закрыт" -#: advancedcontentfilter.php:369 +#: advancedcontentfilter.php:408 msgid "Rule successfully updated" msgstr "Правило успешно обновлено" -#: advancedcontentfilter.php:390 +#: advancedcontentfilter.php:431 msgid "Rule successfully deleted" msgstr "Правило успешно удалено" -#: advancedcontentfilter.php:400 +#: advancedcontentfilter.php:441 msgid "Missing argument: guid." msgstr "Отсутствующий аргумент: guid." -#: advancedcontentfilter.php:406 +#: advancedcontentfilter.php:449 #, php-format msgid "Unknown post with guid: %s" msgstr "Неизвестный пост в ID: %s" -#: src/middlewares.php:28 +#: src/middlewares.php:49 msgid "Method not found" msgstr "Метод не найден" diff --git a/advancedcontentfilter/lang/ru/strings.php b/advancedcontentfilter/lang/ru/strings.php index 6570c8a8..a2b225a8 100644 --- a/advancedcontentfilter/lang/ru/strings.php +++ b/advancedcontentfilter/lang/ru/strings.php @@ -10,7 +10,7 @@ $a->strings['Advanced Content Filter'] = 'Расширенный фильтр с $a->strings['Back to Addon Settings'] = 'Вернуться к настройкам дополнений'; $a->strings['Add a Rule'] = 'Добавить правило'; $a->strings['Help'] = 'Помощь'; -$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'] = 'Добавляйте и управляйте своими собственными фильтрами на этой странице. У правил есть имя и произвольное выражение, которое будет сопоставляться с данными поста. Для полной ссылки на доступные операции и переменные, посмотрите страницу справки.'; +$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'] = 'Добавляйте и управляйте своими собственными фильтрами на этой странице. У правил есть имя и произвольное выражение, которое будет сопоставляться с данными поста. Для полной ссылки на доступные операции и переменные, посмотрите страницу справки.'; $a->strings['Your rules'] = 'Ваши правила'; $a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'У Вас нет ни одного правила. Начните добавление первого с нажатия на кнопку выше, рядом с названием.'; $a->strings['Disabled'] = 'Отключено'; @@ -26,8 +26,8 @@ $a->strings['Close'] = 'Закрыть'; $a->strings['Add new rule'] = 'Добавить новое правило'; $a->strings['Rule Name'] = 'Название правила'; $a->strings['Rule Expression'] = 'Содержание правила'; -$a->strings['

Examples:

  • author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'
  • tags
'] = '

Примеры:

  • author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'
  • tags
'; $a->strings['Cancel'] = 'Отмена'; +$a->strings['This addon requires this node having at least one post'] = 'Это дополнение требует наличия хотя бы одной записи на этом узле.'; $a->strings['You must be logged in to use this method'] = 'Вы должны авторизоваться для использования этого метода'; $a->strings['Invalid form security token, please refresh the page.'] = 'Неверный ключ, пожалуйста, перезагрузите страницу'; $a->strings['The rule name and expression are required.'] = 'Требуется ввести название и значение правила.'; From c5d19154f2c53af76ae241590c48a95232e69a54 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 31 May 2022 07:06:56 +0200 Subject: [PATCH 030/677] RU translation of webrtc addon updated THX Alexander An --- webrtc/lang/ru/messages.po | 55 ++++++++++++++++++++++++++++++++++++++ webrtc/lang/ru/strings.php | 14 ++++++++++ 2 files changed, 69 insertions(+) create mode 100644 webrtc/lang/ru/messages.po create mode 100644 webrtc/lang/ru/strings.php diff --git a/webrtc/lang/ru/messages.po b/webrtc/lang/ru/messages.po new file mode 100644 index 00000000..84c98c51 --- /dev/null +++ b/webrtc/lang/ru/messages.po @@ -0,0 +1,55 @@ +# ADDON webrtc +# Copyright (C) +# This file is distributed under the same license as the Friendica webrtc addon package. +# +# +# Translators: +# Alexander An , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-29 15:56+0200\n" +"PO-Revision-Date: 2014-06-23 13:05+0000\n" +"Last-Translator: Alexander An , 2022\n" +"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#: webrtc.php:18 +msgid "WebRTC Videochat" +msgstr "Видеочат WebRTC" + +#: webrtc.php:24 +msgid "Save Settings" +msgstr "Сохранить настройки" + +#: webrtc.php:25 +msgid "WebRTC Base URL" +msgstr "Основная URL WebRTC" + +#: webrtc.php:25 +msgid "" +"Page your users will create a WebRTC chat room on. For example you could use" +" https://live.mayfirst.org ." +msgstr "Страница, на которой ваши пользователи будут создавать чат WebRTC. Например, https://live.mayfirst.org ." + +#: webrtc.php:44 +msgid "Video Chat" +msgstr "Видеочат" + +#: webrtc.php:45 +msgid "" +"WebRTC is a video and audio conferencing tool that works in all modern " +"browsers. Just create a new chat room and send the link to someone you want " +"to chat with." +msgstr "WebRTC это средство для видео и аудиоконференций, которое работает во всех современных браузерах. Просто создайте новую комнату и пошлите ссылку тем, с кем хотите пообщаться." + +#: webrtc.php:47 +msgid "" +"Please contact your friendica admin and send a reminder to configure the " +"WebRTC addon." +msgstr "Пожалуйста, свяжитесь со своим администратором Friendica и напомните сконфигурировать дополнение WebRTC." diff --git a/webrtc/lang/ru/strings.php b/webrtc/lang/ru/strings.php new file mode 100644 index 00000000..63ec51af --- /dev/null +++ b/webrtc/lang/ru/strings.php @@ -0,0 +1,14 @@ +=2 && $n%10<=4 && ($n%100<12 || $n%100>14)) { return 1; } else if ($n%10==0 || ($n%10>=5 && $n%10<=9) || ($n%100>=11 && $n%100<=14)) { return 2; } else { return 3; } +}} +$a->strings['WebRTC Videochat'] = 'Видеочат WebRTC'; +$a->strings['Save Settings'] = 'Сохранить настройки'; +$a->strings['WebRTC Base URL'] = 'Основная URL WebRTC'; +$a->strings['Page your users will create a WebRTC chat room on. For example you could use https://live.mayfirst.org .'] = 'Страница, на которой ваши пользователи будут создавать чат WebRTC. Например, https://live.mayfirst.org .'; +$a->strings['Video Chat'] = 'Видеочат'; +$a->strings['WebRTC is a video and audio conferencing tool that works in all modern browsers. Just create a new chat room and send the link to someone you want to chat with.'] = 'WebRTC это средство для видео и аудиоконференций, которое работает во всех современных браузерах. Просто создайте новую комнату и пошлите ссылку тем, с кем хотите пообщаться.'; +$a->strings['Please contact your friendica admin and send a reminder to configure the WebRTC addon.'] = 'Пожалуйста, свяжитесь со своим администратором Friendica и напомните сконфигурировать дополнение WebRTC.'; From 58d40a1d818e917a111a92786d302c214cd9a275 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 31 May 2022 07:07:44 +0200 Subject: [PATCH 031/677] RU translation of curweather addon THX Alexander An --- curweather/lang/ru/messages.po | 124 +++++++++++++++++++++++++++++++++ curweather/lang/ru/strings.php | 35 +++++++++- 2 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 curweather/lang/ru/messages.po diff --git a/curweather/lang/ru/messages.po b/curweather/lang/ru/messages.po new file mode 100644 index 00000000..bb3945de --- /dev/null +++ b/curweather/lang/ru/messages.po @@ -0,0 +1,124 @@ +# ADDON curweather +# Copyright (C) +# This file is distributed under the same license as the Friendica curweather addon package. +# +# +# Translators: +# Alexander An , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:14-0500\n" +"PO-Revision-Date: 2014-06-22 11:34+0000\n" +"Last-Translator: Alexander An , 2022\n" +"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#: curweather.php:47 +msgid "Error fetching weather data. Error was: " +msgstr "Ошибка получения данных о погоде. Ошибка:" + +#: curweather.php:130 +msgid "Current Weather" +msgstr "Погода сейчас" + +#: curweather.php:137 +msgid "Relative Humidity" +msgstr "Относительная влажность" + +#: curweather.php:138 +msgid "Pressure" +msgstr "Давление" + +#: curweather.php:139 +msgid "Wind" +msgstr "Ветер" + +#: curweather.php:140 +msgid "Last Updated" +msgstr "Обновлено" + +#: curweather.php:141 +msgid "Data by" +msgstr "Данные из" + +#: curweather.php:142 +msgid "Show on map" +msgstr "Показать на карте" + +#: curweather.php:147 +msgid "There was a problem accessing the weather data. But have a look" +msgstr "Не получилось получить данные о погоде. Но вы можете посмотреть" + +#: curweather.php:149 +msgid "at OpenWeatherMap" +msgstr "OpenWeatherMap" + +#: curweather.php:178 +msgid "No APPID found, please contact your admin to obtain one." +msgstr "Не найден APPID, свяжитесь с вашим администратором, чтобы получить его." + +#: curweather.php:188 +msgid "Enter either the name of your location or the zip code." +msgstr "Введите ваше местоположение или индекс." + +#: curweather.php:189 +msgid "Your Location" +msgstr "Ваше местонахождение" + +#: curweather.php:189 +msgid "" +"Identifier of your location (name or zip code), e.g. Berlin,DE or " +"14476,DE." +msgstr "Ваше местоположение (имя или индекс), например Berlin,DE или 14476,DE." + +#: curweather.php:190 +msgid "Units" +msgstr "Единицы" + +#: curweather.php:190 +msgid "select if the temperature should be displayed in °C or °F" +msgstr "выберите как должна отображаться температура - в °C или °F" + +#: curweather.php:191 +msgid "Show weather data" +msgstr "Показать данные о погоде" + +#: curweather.php:196 +msgid "Current Weather Settings" +msgstr "Текущие настройки" + +#: curweather.php:227 +msgid "Save Settings" +msgstr "Сохранить настройки" + +#: curweather.php:230 +msgid "Caching Interval" +msgstr "Интервал кэширования" + +#: curweather.php:232 +msgid "" +"For how long should the weather data be cached? Choose according your " +"OpenWeatherMap account type." +msgstr "Как долго кэшировать данные о погоде? Выберите в соответствии с типом вашей учётной записи OpenWeatherMap." + +#: curweather.php:233 +msgid "no cache" +msgstr "не кэшировать" + +#: curweather.php:234 curweather.php:235 curweather.php:236 curweather.php:237 +msgid "minutes" +msgstr "мин." + +#: curweather.php:240 +msgid "Your APPID" +msgstr "Ваш APPID" + +#: curweather.php:240 +msgid "Your API key provided by OpenWeatherMap" +msgstr "Ваш ключ API, полученный у OpenWeatherMap" diff --git a/curweather/lang/ru/strings.php b/curweather/lang/ru/strings.php index ab5e2246..9926cdce 100644 --- a/curweather/lang/ru/strings.php +++ b/curweather/lang/ru/strings.php @@ -1,3 +1,32 @@ -strings["Submit"] = "Подтвердить"; +=2 && $n%10<=4 && ($n%100<12 || $n%100>14)) { return 1; } else if ($n%10==0 || ($n%10>=5 && $n%10<=9) || ($n%100>=11 && $n%100<=14)) { return 2; } else { return 3; } +}} +$a->strings['Error fetching weather data. Error was: '] = 'Ошибка получения данных о погоде. Ошибка:'; +$a->strings['Current Weather'] = 'Погода сейчас'; +$a->strings['Relative Humidity'] = 'Относительная влажность'; +$a->strings['Pressure'] = 'Давление'; +$a->strings['Wind'] = 'Ветер'; +$a->strings['Last Updated'] = 'Обновлено'; +$a->strings['Data by'] = 'Данные из'; +$a->strings['Show on map'] = 'Показать на карте'; +$a->strings['There was a problem accessing the weather data. But have a look'] = 'Не получилось получить данные о погоде. Но вы можете посмотреть'; +$a->strings['at OpenWeatherMap'] = 'OpenWeatherMap'; +$a->strings['No APPID found, please contact your admin to obtain one.'] = 'Не найден APPID, свяжитесь с вашим администратором, чтобы получить его.'; +$a->strings['Enter either the name of your location or the zip code.'] = 'Введите ваше местоположение или индекс.'; +$a->strings['Your Location'] = 'Ваше местонахождение'; +$a->strings['Identifier of your location (name or zip code), e.g. Berlin,DE or 14476,DE.'] = 'Ваше местоположение (имя или индекс), например Berlin,DE или 14476,DE.'; +$a->strings['Units'] = 'Единицы'; +$a->strings['select if the temperature should be displayed in °C or °F'] = 'выберите как должна отображаться температура - в °C или °F'; +$a->strings['Show weather data'] = 'Показать данные о погоде'; +$a->strings['Current Weather Settings'] = 'Текущие настройки'; +$a->strings['Save Settings'] = 'Сохранить настройки'; +$a->strings['Caching Interval'] = 'Интервал кэширования'; +$a->strings['For how long should the weather data be cached? Choose according your OpenWeatherMap account type.'] = 'Как долго кэшировать данные о погоде? Выберите в соответствии с типом вашей учётной записи OpenWeatherMap.'; +$a->strings['no cache'] = 'не кэшировать'; +$a->strings['minutes'] = 'мин.'; +$a->strings['Your APPID'] = 'Ваш APPID'; +$a->strings['Your API key provided by OpenWeatherMap'] = 'Ваш ключ API, полученный у OpenWeatherMap'; From c71e29a772f0eab57029893aed328e40100d1690 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 2 Jun 2022 13:16:45 +0000 Subject: [PATCH 032/677] Twitter: Only search for comments with extid to avoid problems with mirrored posts --- twitter/twitter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/twitter/twitter.php b/twitter/twitter.php index 6c9be34c..3c46ac7e 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -1761,7 +1761,7 @@ function twitter_createpost(App $a, $uid, $post, array $self, $create_user, $onl $item = Post::selectFirst(['uri'], ['uri' => $thr_parent, 'uid' => $uid]); if (!DBA::isResult($item)) { - $item = Post::selectFirst(['uri'], ['extid' => $thr_parent, 'uid' => $uid]); + $item = Post::selectFirst(['uri'], ['extid' => $thr_parent, 'uid' => $uid, 'gravity' => GRAVITY_COMMENT]); } if (DBA::isResult($item)) { From 682ce12ac27692a95833603fb7462bffab2dee52 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 7 Jun 2022 06:42:04 +0200 Subject: [PATCH 033/677] ijpost translation update THX SpcCw --- ijpost/lang/ru/messages.po | 44 ++++++++++++++++++++++++++++++++++++++ ijpost/lang/ru/strings.php | 22 +++++++++++-------- 2 files changed, 57 insertions(+), 9 deletions(-) create mode 100644 ijpost/lang/ru/messages.po diff --git a/ijpost/lang/ru/messages.po b/ijpost/lang/ru/messages.po new file mode 100644 index 00000000..00211299 --- /dev/null +++ b/ijpost/lang/ru/messages.po @@ -0,0 +1,44 @@ +# ADDON ijpost +# Copyright (C) +# This file is distributed under the same license as the Friendica ijpost addon package. +# +# +# Translators: +# Alexander An , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2014-06-23 08:37+0000\n" +"Last-Translator: Alexander An , 2022\n" +"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#: ijpost.php:42 +msgid "Post to Insanejournal" +msgstr "Отправить в Insanejournal" + +#: ijpost.php:61 +msgid "Enable InsaneJournal Post Addon" +msgstr "Включить дополнение для InsaneJournal" + +#: ijpost.php:62 +msgid "InsaneJournal username" +msgstr "Имя пользователя InsaneJournal" + +#: ijpost.php:63 +msgid "InsaneJournal password" +msgstr "Пароль в InsaneJournal" + +#: ijpost.php:64 +msgid "Post to InsaneJournal by default" +msgstr "Отправлять записи в InsaneJournal по-умолчанию" + +#: ijpost.php:69 +msgid "InsaneJournal Export" +msgstr "Экспорт InsaneJournal" diff --git a/ijpost/lang/ru/strings.php b/ijpost/lang/ru/strings.php index dc869896..ac1f4df9 100644 --- a/ijpost/lang/ru/strings.php +++ b/ijpost/lang/ru/strings.php @@ -1,9 +1,13 @@ -strings["Post to Insanejournal"] = ""; -$a->strings["InsaneJournal Post Settings"] = ""; -$a->strings["Enable InsaneJournal Post Addon"] = "Включить InsaneJournal плагин сообщений"; -$a->strings["InsaneJournal username"] = ""; -$a->strings["InsaneJournal password"] = ""; -$a->strings["Post to InsaneJournal by default"] = ""; -$a->strings["Submit"] = "Подтвердить"; +=2 && $n%10<=4 && ($n%100<12 || $n%100>14)) { return 1; } else if ($n%10==0 || ($n%10>=5 && $n%10<=9) || ($n%100>=11 && $n%100<=14)) { return 2; } else { return 3; } +}} +$a->strings['Post to Insanejournal'] = 'Отправить в Insanejournal'; +$a->strings['Enable InsaneJournal Post Addon'] = 'Включить дополнение для InsaneJournal'; +$a->strings['InsaneJournal username'] = 'Имя пользователя InsaneJournal'; +$a->strings['InsaneJournal password'] = 'Пароль в InsaneJournal'; +$a->strings['Post to InsaneJournal by default'] = 'Отправлять записи в InsaneJournal по-умолчанию'; +$a->strings['InsaneJournal Export'] = 'Экспорт InsaneJournal'; From ecc841b5f7e2073b9a97b0d4ea3b7d5bc678685d Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 7 Jun 2022 06:42:10 +0200 Subject: [PATCH 034/677] startpage translation update THX SpcCw --- startpage/lang/ru/messages.po | 32 ++++++++++++++++++++++++++++++++ startpage/lang/ru/strings.php | 16 ++++++++++------ 2 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 startpage/lang/ru/messages.po diff --git a/startpage/lang/ru/messages.po b/startpage/lang/ru/messages.po new file mode 100644 index 00000000..6c2a0852 --- /dev/null +++ b/startpage/lang/ru/messages.po @@ -0,0 +1,32 @@ +# ADDON startpage +# Copyright (C) +# This file is distributed under the same license as the Friendica startpage addon package. +# +# +# Translators: +# Alexander An , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2014-06-23 12:51+0000\n" +"Last-Translator: Alexander An , 2022\n" +"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#: startpage.php:70 +msgid "Home page to load after login - leave blank for profile wall" +msgstr "Стартовая страница, которая будет загружаться после логина. Оставьте пустым для загрузки страницы профиля." + +#: startpage.php:70 +msgid "Examples: \"network\" or \"notifications/system\"" +msgstr "Примеры: \"network\" или \"notifications/system\"" + +#: startpage.php:75 +msgid "Startpage" +msgstr "Стартовая страница" diff --git a/startpage/lang/ru/strings.php b/startpage/lang/ru/strings.php index 361b40b3..0a48afaf 100644 --- a/startpage/lang/ru/strings.php +++ b/startpage/lang/ru/strings.php @@ -1,6 +1,10 @@ -strings["Startpage Settings"] = ""; -$a->strings["Home page to load after login - leave blank for profile wall"] = ""; -$a->strings["Examples: "network" or "notifications/system""] = ""; -$a->strings["Submit"] = "Подтвердить"; +=2 && $n%10<=4 && ($n%100<12 || $n%100>14)) { return 1; } else if ($n%10==0 || ($n%10>=5 && $n%10<=9) || ($n%100>=11 && $n%100<=14)) { return 2; } else { return 3; } +}} +$a->strings['Home page to load after login - leave blank for profile wall'] = 'Стартовая страница, которая будет загружаться после логина. Оставьте пустым для загрузки страницы профиля.'; +$a->strings['Examples: "network" or "notifications/system"'] = 'Примеры: "network" или "notifications/system"'; +$a->strings['Startpage'] = 'Стартовая страница'; From 6d3c4e51aca344edd6b3e179d9a1192c72bc2699 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Tue, 7 Jun 2022 06:42:10 +0200 Subject: [PATCH 035/677] planets translation update THX SpcCw --- planets/lang/ru/messages.po | 28 ++++++++++++++++++++++++++++ planets/lang/ru/strings.php | 14 +++++++++----- 2 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 planets/lang/ru/messages.po diff --git a/planets/lang/ru/messages.po b/planets/lang/ru/messages.po new file mode 100644 index 00000000..3105b659 --- /dev/null +++ b/planets/lang/ru/messages.po @@ -0,0 +1,28 @@ +# ADDON planets +# Copyright (C) +# This file is distributed under the same license as the Friendica planets addon package. +# +# +# Translators: +# Alexander An , 2022 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2014-06-23 11:19+0000\n" +"Last-Translator: Alexander An , 2022\n" +"Language-Team: Russian (http://www.transifex.com/Friendica/friendica/language/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#: planets.php:126 +msgid "Enable Planets Addon" +msgstr "Включить дополнение Planets" + +#: planets.php:131 +msgid "Planets Settings" +msgstr "Настройки Planets" diff --git a/planets/lang/ru/strings.php b/planets/lang/ru/strings.php index b84e2bbc..f6c97362 100644 --- a/planets/lang/ru/strings.php +++ b/planets/lang/ru/strings.php @@ -1,5 +1,9 @@ -strings["Planets Settings"] = ""; -$a->strings["Enable Planets Addon"] = ""; -$a->strings["Submit"] = "Подтвердить"; +=2 && $n%10<=4 && ($n%100<12 || $n%100>14)) { return 1; } else if ($n%10==0 || ($n%10>=5 && $n%10<=9) || ($n%100>=11 && $n%100<=14)) { return 2; } else { return 3; } +}} +$a->strings['Enable Planets Addon'] = 'Включить дополнение Planets'; +$a->strings['Planets Settings'] = 'Настройки Planets'; From 357c7e75979390a7f58d7af96bb12484802ceaaf Mon Sep 17 00:00:00 2001 From: loma-one <44441246+loma-one@users.noreply.github.com> Date: Wed, 8 Jun 2022 12:24:53 +0200 Subject: [PATCH 036/677] Update unicode_smilies.php :p in re:pubica was interpreted as emoji and output in text --- unicode_smilies/unicode_smilies.php | 3444 +++++++++++++-------------- 1 file changed, 1721 insertions(+), 1723 deletions(-) diff --git a/unicode_smilies/unicode_smilies.php b/unicode_smilies/unicode_smilies.php index ef7bb615..d9636d89 100644 --- a/unicode_smilies/unicode_smilies.php +++ b/unicode_smilies/unicode_smilies.php @@ -2,7 +2,7 @@ /* * Name: Unicode Smilies * Description: Smilies based on the unicode emojis - On Linux use https://github.com/eosrei/emojione-color-font to see them in color and http://www.unicode.org/emoji/charts/full-emoji-list.html - * Version: 1.1 + * Version: 1.1.1 * Author: Michael Vogel * Author: Matthias Ebers */ @@ -14,30 +14,30 @@ function unicode_smilies_install() { } function unicode_smilies_smilies(&$a,&$b) { - Smilies::add($b, ':-)', '😀'); - Smilies::add($b, ':)', '😀'); - Smilies::add($b, ':-(', '🙁'); - Smilies::add($b, ':(', '🙁'); - Smilies::add($b, ':-[', '😳'); - Smilies::add($b, ':-D', '😁'); - Smilies::add($b, ':D', '😁'); - Smilies::add($b, ';-)', '😉'); - // Smilies::add($b, ';)', '😉'); // Deactivated since this leads to disturbed html entities - Smilies::add($b, ':-P', '😛'); - Smilies::add($b, ':-p', '😛'); - Smilies::add($b, ':P', '😛'); - Smilies::add($b, ':p', '😛'); - Smilies::add($b, ':-O', '😮'); - Smilies::add($b, ':O', '😮'); - Smilies::add($b, ':-X', '🤐'); - Smilies::add($b, ':-x', '🤐'); - Smilies::add($b, ':X', '🤐'); - Smilies::add($b, ':x', '🤐'); - Smilies::add($b, '8-)', '😎'); - Smilies::add($b, ':-/', '😕'); - Smilies::add($b, ':-"', '💏'); + Smilies::add($b, ':-):', '😀'); + Smilies::add($b, ':):', '😀'); + Smilies::add($b, ':-(:', '🙁'); + Smilies::add($b, ':(:', '🙁'); + Smilies::add($b, ':-[:', '😳'); + Smilies::add($b, ':-D:', '😁'); + Smilies::add($b, ':D:', '😁'); + Smilies::add($b, ';-):', '😉'); + // Smilies::add($b, ';):', '😉'); // Deactivated since this leads to disturbed html entities + Smilies::add($b, ':-P:', '😛'); + Smilies::add($b, ':-p:', '😛'); + Smilies::add($b, ':P:', '😛'); + Smilies::add($b, ':p:', '😛'); + Smilies::add($b, ':-O:', '😮'); + Smilies::add($b, ':O:', '😮'); + Smilies::add($b, ':-X:', '🤐'); + Smilies::add($b, ':-x:', '🤐'); + Smilies::add($b, ':X:', '🤐'); + Smilies::add($b, ':x:', '🤐'); + Smilies::add($b, '8-):', '😎'); + Smilies::add($b, ':-/:', '😕'); + Smilies::add($b, ':-":', '💏'); Smilies::add($b, ':-"', '💏'); - Smilies::add($b, ':-!', '🤒'); + Smilies::add($b, ':-!:', '🤒'); Smilies::add($b, '<3', '❤'); Smilies::add($b, '</3', '💔'); Smilies::add($b, '<\\3', '💔'); @@ -45,555 +45,552 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, '8-O', '😲'); Smilies::add($b, '\\o/', '👍'); Smilies::add($b, ":'(", '😢'); - Smilies::add($b, ':coffee', '☕'); - Smilies::add($b, ':beer', '🍺'); - Smilies::add($b, ':homebrew', '🍺'); - Smilies::add($b, ':like', '👍'); - Smilies::add($b, ':dislike', '👎'); - Smilies::add($b, ':kaffee', '☕'); - Smilies::add($b, ':bier', '🍺'); - Smilies::add($b, ':mögen', '👍'); - Smilies::add($b, ':nicht mögen', '👎'); + Smilies::add($b, ':coffee:', '☕'); + Smilies::add($b, ':beer:', '🍺'); + Smilies::add($b, ':homebrew:', '🍺'); + Smilies::add($b, ':like:', '👍'); + Smilies::add($b, ':dislike:', '👎'); // Smilies::add($b, 'o.O', '&#x;'); // Smilies::add($b, 'O.o', '&#x;'); // Smilies::add($b, 'o_O', '&#x;'); // Smilies::add($b, 'O_o', '&#x;'); -// Smilies::add($b, ':facepalm', '🤦'); // Bad client support +// Smilies::add($b, ':facepalm:', '🤦'); // Bad client support + // Animal smileys. -// Smilies::add($b, ':bunnyflowers', '&#x;'); - Smilies::add($b, ':chick', '🐤'); - Smilies::add($b, ':bumblebee', '🐝'); - Smilies::add($b, ':ladybird', '🐞'); - Smilies::add($b, ':bigspider', '🕷'); - Smilies::add($b, ':cat', '🐈'); - Smilies::add($b, ':bunny', '🐰'); - Smilies::add($b, ':cow', '🐮'); - Smilies::add($b, ':crab', '🦀'); - Smilies::add($b, ':dolphin', '🐬'); -// Smilies::add($b, ':dragonfly', '&#x;'); - Smilies::add($b, ':frog', '🐸'); - Smilies::add($b, ':hamster', '🐹'); - Smilies::add($b, ':monkey', '🐒'); - Smilies::add($b, ':horse', '🐴'); -// Smilies::add($b, ':parrot', '&#x;'); - Smilies::add($b, ':tux', '🐧'); - Smilies::add($b, ':snail', '🐌'); - Smilies::add($b, ':sheep', '🐑'); - Smilies::add($b, ':dog', '🐶'); - Smilies::add($b, ':elephant', '🐘'); - Smilies::add($b, ':fish', '🐟'); -// Smilies::add($b, ':giraffe', '🦒'); // Bad client support - Smilies::add($b, ':pig', '🐖'); +// Smilies::add($b, ':bunnyflowers:', '&#x;'); + Smilies::add($b, ':chick:', '🐤'); + Smilies::add($b, ':bumblebee:', '🐝'); + Smilies::add($b, ':ladybird:', '🐞'); + Smilies::add($b, ':bigspider:', '🕷'); + Smilies::add($b, ':cat:', '🐈'); + Smilies::add($b, ':bunny:', '🐰'); + Smilies::add($b, ':cow:', '🐮'); + Smilies::add($b, ':crab:', '🦀'); + Smilies::add($b, ':dolphin:', '🐬'); +// Smilies::add($b, ':dragonfly:', '&#x;'); + Smilies::add($b, ':frog:', '🐸'); + Smilies::add($b, ':hamster:', '🐹'); + Smilies::add($b, ':monkey:', '🐒'); + Smilies::add($b, ':horse:', '🐴'); +// Smilies::add($b, ':parrot:', '&#x;'); + Smilies::add($b, ':tux:', '🐧'); + Smilies::add($b, ':snail:', '🐌'); + Smilies::add($b, ':sheep:', '🐑'); + Smilies::add($b, ':dog:', '🐶'); + Smilies::add($b, ':elephant:', '🐘'); + Smilies::add($b, ':fish:', '🐟'); +// Smilies::add($b, ':giraffe:', '🦒'); // Bad client support + Smilies::add($b, ':pig:', '🐖'); // Baby Smileys - Smilies::add($b, ':baby', '👶'); -// Smilies::add($b, ':babycot', '&#x;'); -// Smilies::add($b, ':pregnant', '🤰'); // Bad client support -// Smilies::add($b, ':stork', '&#x;'); + Smilies::add($b, ':baby:', '👶'); +// Smilies::add($b, ':babycot:', '&#x;'); +// Smilies::add($b, ':pregnant:', '🤰'); // Bad client support +// Smilies::add($b, ':stork:', '&#x;'); // Confused Smileys - Smilies::add($b, ':confused', '😕'); - Smilies::add($b, ':shrug', '🤷'); -// Smilies::add($b, ':stupid', '&#x;'); -// Smilies::add($b, ':dazed', '&#x;'); + Smilies::add($b, ':confused:', '😕'); + Smilies::add($b, ':shrug:', '🤷'); +// Smilies::add($b, ':stupid:', '&#x;'); +// Smilies::add($b, ':dazed:', '&#x;'); // Cool Smileys -// Smilies::add($b, ':affro', '&#x;'); +// Smilies::add($b, ':affro:', '&#x;'); // Devil/Angel Smileys - Smilies::add($b, ':angel', '👼'); - Smilies::add($b, ':cherub', '👼'); -// Smilies::add($b, ':devilangel', '&#x;'); -// Smilies::add($b, ':catdevil', '&#x;'); -// Smilies::add($b, ':devillish', '&#x;'); -// Smilies::add($b, ':daseesaw', '&#x;'); -// Smilies::add($b, ':turnevil', '&#x;'); -// Smilies::add($b, ':saint', '&#x;'); -// Smilies::add($b, ':graveside', '&#x;'); + Smilies::add($b, ':angel:', '👼'); + Smilies::add($b, ':cherub:', '👼'); +// Smilies::add($b, ':devilangel:', '&#x;'); +// Smilies::add($b, ':catdevil:', '&#x;'); +// Smilies::add($b, ':devillish:', '&#x;'); +// Smilies::add($b, ':daseesaw:', '&#x;'); +// Smilies::add($b, ':turnevil:', '&#x;'); +// Smilies::add($b, ':saint:', '&#x;'); +// Smilies::add($b, ':graveside:', '&#x;'); // Unpleasent smileys. - Smilies::add($b, ':toilet', '🚽'); -// Smilies::add($b, ':fartinbed', '&#x;'); -// Smilies::add($b, ':fartblush', '&#x;'); + Smilies::add($b, ':toilet:', '🚽'); +// Smilies::add($b, ':fartinbed:', '&#x;'); +// Smilies::add($b, ':fartblush:', '&#x;'); // Sad smileys - Smilies::add($b, ':crying', '😢'); -// Smilies::add($b, ':prisoner', '&#x;'); -// Smilies::add($b, ':sigh', '&#x;'); + Smilies::add($b, ':crying:', '😢'); +// Smilies::add($b, ':prisoner:', '&#x;'); +// Smilies::add($b, ':sigh:', '&#x;'); // Sport smileys - Smilies::add($b, ':basketball', '🏀'); - Smilies::add($b, ':bowling', '🎳'); - Smilies::add($b, ':cycling', '🚴'); - Smilies::add($b, ':darts', '🎯'); - Smilies::add($b, ':fencing', '🤺'); - Smilies::add($b, ':juggling', '🤹'); -// Smilies::add($b, ':skipping', '&#x;'); -// Smilies::add($b, ':archery', '&#x;'); - Smilies::add($b, ':surfing', '🏄'); - Smilies::add($b, ':snooker', '🎱'); - Smilies::add($b, ':horseriding', '🏇'); + Smilies::add($b, ':basketball:', '🏀'); + Smilies::add($b, ':bowling:', '🎳'); + Smilies::add($b, ':cycling:', '🚴'); + Smilies::add($b, ':darts:', '🎯'); + Smilies::add($b, ':fencing:', '🤺'); + Smilies::add($b, ':juggling:', '🤹'); +// Smilies::add($b, ':skipping:', '&#x;'); +// Smilies::add($b, ':archery:', '&#x;'); + Smilies::add($b, ':surfing:', '🏄'); + Smilies::add($b, ':snooker:', '🎱'); + Smilies::add($b, ':horseriding:', '🏇'); // Love smileys -// Smilies::add($b, ':iloveyou', '&#x;'); -// Smilies::add($b, ':inlove', '&#x;'); -// Smilies::add($b, '~love', '&#x;'); -// Smilies::add($b, ':lovebear', '&#x;'); -// Smilies::add($b, ':lovebed', '&#x;'); - Smilies::add($b, ':loveheart', '💖'); +// Smilies::add($b, ':iloveyou:', '&#x;'); +// Smilies::add($b, ':inlove:', '&#x;'); +// Smilies::add($b, '~love:', '&#x;'); +// Smilies::add($b, ':lovebear:', '&#x;'); +// Smilies::add($b, ':lovebed:', '&#x;'); + Smilies::add($b, ':loveheart:', '💖'); // Tired/Sleep smileys -// Smilies::add($b, ':countsheep', '&#x;'); -// Smilies::add($b, ':hammock', '&#x;'); -// Smilies::add($b, ':pillow', '&#x;'); -// Smilies::add($b, ':yawn', '&#x;'); +// Smilies::add($b, ':countsheep:', '&#x;'); +// Smilies::add($b, ':hammock:', '&#x;'); +// Smilies::add($b, ':pillow:', '&#x;'); +// Smilies::add($b, ':yawn:', '&#x;'); // Fight/Flame/Violent smileys -// Smilies::add($b, ':2guns', '&#x;'); -// Smilies::add($b, ':alienfight', '&#x;'); -// Smilies::add($b, ':army', '&#x;'); -// Smilies::add($b, ':arrowhead', '&#x;'); -// Smilies::add($b, ':bfg', '&#x;'); -// Smilies::add($b, ':bowman', '&#x;'); -// Smilies::add($b, ':chainsaw', '&#x;'); -// Smilies::add($b, ':crossbow', '&#x;'); -// Smilies::add($b, ':crusader', '&#x;'); -// Smilies::add($b, ':dead', '&#x;'); -// Smilies::add($b, ':hammersplat', '&#x;'); -// Smilies::add($b, ':lasergun', '&#x;'); -// Smilies::add($b, ':machinegun', '&#x;'); -// Smilies::add($b, ':acid', '&#x;'); +// Smilies::add($b, ':2guns:', '&#x;'); +// Smilies::add($b, ':alienfight:', '&#x;'); +// Smilies::add($b, ':army:', '&#x;'); +// Smilies::add($b, ':arrowhead:', '&#x;'); +// Smilies::add($b, ':bfg:', '&#x;'); +// Smilies::add($b, ':bowman:', '&#x;'); +// Smilies::add($b, ':chainsaw:', '&#x;'); +// Smilies::add($b, ':crossbow:', '&#x;'); +// Smilies::add($b, ':crusader:', '&#x;'); +// Smilies::add($b, ':dead:', '&#x;'); +// Smilies::add($b, ':hammersplat:', '&#x;'); +// Smilies::add($b, ':lasergun:', '&#x;'); +// Smilies::add($b, ':machinegun:', '&#x;'); +// Smilies::add($b, ':acid:', '&#x;'); // Fantasy smileys - monsters and dragons fantasy. The other type of fantasy belongs in adult smileys - Smilies::add($b, ':alienmonster', '👾'); -// Smilies::add($b, ':barbarian', '&#x;'); -// Smilies::add($b, ':dinosaur', '&#x;'); - Smilies::add($b, ':dragon', '🐉'); - Smilies::add($b, ':draco', '🐉'); - Smilies::add($b, ':ghost', '👻'); -// Smilies::add($b, ':mummy', '&#x;'); + Smilies::add($b, ':alienmonster:', '👾'); +// Smilies::add($b, ':barbarian:', '&#x;'); +// Smilies::add($b, ':dinosaur:', '&#x;'); + Smilies::add($b, ':dragon:', '🐉'); + Smilies::add($b, ':draco:', '🐉'); + Smilies::add($b, ':ghost:', '👻'); +// Smilies::add($b, ':mummy:', '&#x;'); // Food smileys - Smilies::add($b, ':apple', '🍎'); -// Smilies::add($b, ':broccoli', '&#x;'); - Smilies::add($b, ':cake', '🍰'); -// Smilies::add($b, ':carrot', '🥕'); // Bad client support - Smilies::add($b, ':popcorn', '🍿'); - Smilies::add($b, ':tomato', '🍅'); - Smilies::add($b, ':banana', '🍌'); - Smilies::add($b, ':cooking', '🍳'); - Smilies::add($b, ':fryegg', '🍳'); - Smilies::add($b, ':birthday cake', '🎂'); + Smilies::add($b, ':apple:', '🍎'); +// Smilies::add($b, ':broccoli:', '&#x;'); + Smilies::add($b, ':cake:', '🍰'); +// Smilies::add($b, ':carrot:', '🥕'); // Bad client support + Smilies::add($b, ':popcorn:', '🍿'); + Smilies::add($b, ':tomato:', '🍅'); + Smilies::add($b, ':banana:', '🍌'); + Smilies::add($b, ':cooking:', '🍳'); + Smilies::add($b, ':fryegg:', '🍳'); + Smilies::add($b, ':birthday cake:', '🎂'); // Happy smileys -// Smilies::add($b, ':cloud9', '&#x;'); - Smilies::add($b, ':tearsofjoy', '😂'); +// Smilies::add($b, ':cloud9:', '&#x;'); + Smilies::add($b, ':tearsofjoy:', '😂'); // Respect smileys - Smilies::add($b, ':bow', '🙇'); -// Smilies::add($b, ':bravo', '&#x;'); -// Smilies::add($b, ':hailking', '&#x;'); -// Smilies::add($b, ':number1', '&#x;'); + Smilies::add($b, ':bow:', '🙇'); +// Smilies::add($b, ':bravo:', '&#x;'); +// Smilies::add($b, ':hailking:', '&#x;'); +// Smilies::add($b, ':number1:', '&#x;'); // Laugh smileys -// Smilies::add($b, ':hahaha', '&#x;'); -// Smilies::add($b, ':loltv', '&#x;'); -// Smilies::add($b, ':rofl', '🤣'); // Bad client support +// Smilies::add($b, ':hahaha:', '&#x;'); +// Smilies::add($b, ':loltv:', '&#x;'); +// Smilies::add($b, ':rofl:', '🤣'); // Bad client support // Music smileys -// Smilies::add($b, ':drums', '🥁'); // Bad client support - Smilies::add($b, ':guitar', '🎸'); - Smilies::add($b, ':trumpet', '🎺'); +// Smilies::add($b, ':drums:', '🥁'); // Bad client support + Smilies::add($b, ':guitar:', '🎸'); + Smilies::add($b, ':trumpet:', '🎺'); // Smileys that used to be in core -// Smilies::add($b, ':headbang', '&#x;'); -// Smilies::add($b, ':beard', '🧔'); // Bad client support -// Smilies::add($b, ':whitebeard', '&#x;'); -// Smilies::add($b, ':shaka', '&#x;'); -// Smilies::add($b, ':\\.../', '&#x;'); -// Smilies::add($b, ':\\ooo/', '&#x;'); -// Smilies::add($b, ':headdesk', '&#x;'); +// Smilies::add($b, ':headbang:', '&#x;'); +// Smilies::add($b, ':beard:', '🧔'); // Bad client support +// Smilies::add($b, ':whitebeard:', '&#x;'); +// Smilies::add($b, ':shaka:', '&#x;'); +// Smilies::add($b, ':\\.../:', '&#x;'); +// Smilies::add($b, ':\\ooo/:', '&#x;'); +// Smilies::add($b, ':headdesk:', '&#x;'); // These two are still in core, so oldcore isn't strictly right, but we don't want too many directories -// Smilies::add($b, ':-d', '&#x;'); - Smilies::add($b, ':-o', '😮'); +// Smilies::add($b, ':-d:', '&#x;'); + Smilies::add($b, ':-o:', '😮'); // Regex killers - stick these at the bottom so they appear at the end of the English and // at the start of $OtherLanguage. // Drinks - Smilies::add($b, ':tea', '☕'); - Smilies::add($b, ':tee', '☕'); -// Smilies::add($b, ':drool', '🤤'); // Bad client support + Smilies::add($b, ':tea:', '☕'); + Smilies::add($b, ':tee:', '☕'); +// Smilies::add($b, ':drool:', '🤤'); // Bad client support - Smilies::add($b, ':cool', '🆒'); -// Smilies::add($b, ':vomit', '🤮'); // Bad client support - Smilies::add($b, ':golf', '🏌'); - Smilies::add($b, ':football', '🏈'); - Smilies::add($b, ':tennis', '🎾'); -// Smilies::add($b, ':alpha', '&#x;'); -// Smilies::add($b, ':marine', '&#x;'); - Smilies::add($b, ':sabre', '🗡'); -// Smilies::add($b, ':tank', '&#x;'); -// Smilies::add($b, ':viking', '&#x;'); -// Smilies::add($b, ':gangs', '&#x;'); -// Smilies::add($b, ':dj', '&#x;'); -// Smilies::add($b, ':elvis', '&#x;'); - Smilies::add($b, ':violin', '🎻'); + Smilies::add($b, ':cool:', '🆒'); +// Smilies::add($b, ':vomit:', '🤮'); // Bad client support + Smilies::add($b, ':golf:', '🏌'); + Smilies::add($b, ':football:', '🏈'); + Smilies::add($b, ':tennis:', '🎾'); +// Smilies::add($b, ':alpha:', '&#x;'); +// Smilies::add($b, ':marine:', '&#x;'); + Smilies::add($b, ':sabre:', '🗡'); +// Smilies::add($b, ':tank:', '&#x;'); +// Smilies::add($b, ':viking:', '&#x;'); +// Smilies::add($b, ':gangs:', '&#x;'); +// Smilies::add($b, ':dj:', '&#x;'); +// Smilies::add($b, ':elvis:', '&#x;'); + Smilies::add($b, ':violin:', '🎻'); // Neu hinzugefügte Unicode Emoji von Matthias Ebers // face-smiling - Smilies::add($b, ':grinning face', '😀'); - Smilies::add($b, ':grinning face with big eyes', '😃'); - Smilies::add($b, ':grinning face with smiling eyes', '😄'); - Smilies::add($b, ':beaming face with smiling eyes', '😁'); - Smilies::add($b, ':grinning squinting face', '😆'); - Smilies::add($b, ':laughing', '😆'); - Smilies::add($b, ':grinning face with sweat', '😅'); - Smilies::add($b, ':rolling on the floor laughing', '🤣'); - Smilies::add($b, ':face with tears of joy', '😂'); - Smilies::add($b, ':slightly smiling face', '🙂'); - Smilies::add($b, ':upside-down face', '🙃'); - Smilies::add($b, ':winking face', '😉'); - Smilies::add($b, ':smiling face with smiling eyes', '😊'); - Smilies::add($b, ':smiling face with halo', '😇'); + Smilies::add($b, ':grinning face:', '😀'); + Smilies::add($b, ':grinning face with big eyes:', '😃'); + Smilies::add($b, ':grinning face with smiling eyes:', '😄'); + Smilies::add($b, ':beaming face with smiling eyes:', '😁'); + Smilies::add($b, ':grinning squinting face:', '😆'); + Smilies::add($b, ':laughing:', '😆'); + Smilies::add($b, ':grinning face with sweat:', '😅'); + Smilies::add($b, ':rolling on the floor laughing:', '🤣'); + Smilies::add($b, ':face with tears of joy:', '😂'); + Smilies::add($b, ':slightly smiling face:', '🙂'); + Smilies::add($b, ':upside-down face:', '🙃'); + Smilies::add($b, ':winking face:', '😉'); + Smilies::add($b, ':smiling face with smiling eyes:', '😊'); + Smilies::add($b, ':smiling face with halo:', '😇'); // face-affection - Smilies::add($b, ':smiling face with hearts', '🥰'); - Smilies::add($b, ':smiling face with heart-eyes', '😍'); - Smilies::add($b, ':star-struck', '🤩'); - Smilies::add($b, ':face blowing a kiss', '😘'); - Smilies::add($b, ':kissing face', '😗'); - Smilies::add($b, ':smiling face', '☺'); - Smilies::add($b, ':kissing face with closed eyes', '😚'); - Smilies::add($b, ':kissing face with smiling eyes', '😙'); + Smilies::add($b, ':smiling face with hearts:', '🥰'); + Smilies::add($b, ':smiling face with heart-eyes:', '😍'); + Smilies::add($b, ':star-struck:', '🤩'); + Smilies::add($b, ':face blowing a kiss:', '😘'); + Smilies::add($b, ':kissing face:', '😗'); + Smilies::add($b, ':smiling face:', '☺'); + Smilies::add($b, ':kissing face with closed eyes:', '😚'); + Smilies::add($b, ':kissing face with smiling eyes:', '😙'); // face-tongue - Smilies::add($b, ':face savoring food', '😋'); - Smilies::add($b, ':face with tongue', '😛'); - Smilies::add($b, ':winking face with tongue', '😜'); - Smilies::add($b, ':zany face', '🤪'); - Smilies::add($b, ':squinting face with tongue', '😝'); - Smilies::add($b, ':money-mouth face', '🤑'); + Smilies::add($b, ':face savoring food:', '😋'); + Smilies::add($b, ':face with tongue:', '😛'); + Smilies::add($b, ':winking face with tongue:', '😜'); + Smilies::add($b, ':zany face:', '🤪'); + Smilies::add($b, ':squinting face with tongue:', '😝'); + Smilies::add($b, ':money-mouth face:', '🤑'); // face-hand - Smilies::add($b, ':hugging face', '🤗'); - Smilies::add($b, ':face with hand over mouth', '🤭'); - Smilies::add($b, ':shushing face', '🤫'); - Smilies::add($b, ':thinking face', '🤔'); + Smilies::add($b, ':hugging face:', '🤗'); + Smilies::add($b, ':face with hand over mouth:', '🤭'); + Smilies::add($b, ':shushing face:', '🤫'); + Smilies::add($b, ':thinking face:', '🤔'); // face-neutral-skeptical - Smilies::add($b, ':zipper-mouth face', '🤐'); - Smilies::add($b, ':face with raised eyebrow', '🤨'); - Smilies::add($b, ':neutral face', '😐'); - Smilies::add($b, ':expressionless face', '😑'); - Smilies::add($b, ':face without mouth', '😶'); - Smilies::add($b, ':smirking face', '😏'); - Smilies::add($b, ':unamused face', '😒'); - Smilies::add($b, ':face with rolling eyes', '🙄'); - Smilies::add($b, ':grimacing face', '😬'); - Smilies::add($b, ':lying face', '🤥'); + Smilies::add($b, ':zipper-mouth face:', '🤐'); + Smilies::add($b, ':face with raised eyebrow:', '🤨'); + Smilies::add($b, ':neutral face:', '😐'); + Smilies::add($b, ':expressionless face:', '😑'); + Smilies::add($b, ':face without mouth:', '😶'); + Smilies::add($b, ':smirking face:', '😏'); + Smilies::add($b, ':unamused face:', '😒'); + Smilies::add($b, ':face with rolling eyes:', '🙄'); + Smilies::add($b, ':grimacing face:', '😬'); + Smilies::add($b, ':lying face:', '🤥'); // face-sleepy - Smilies::add($b, ':relieved face', '😌'); - Smilies::add($b, ':pensive face', '😔'); - Smilies::add($b, ':sleepy face', '😪'); - Smilies::add($b, ':drooling face', '🤤'); - Smilies::add($b, ':sleeping face', '😴'); + Smilies::add($b, ':relieved face:', '😌'); + Smilies::add($b, ':pensive face:', '😔'); + Smilies::add($b, ':sleepy face:', '😪'); + Smilies::add($b, ':drooling face:', '🤤'); + Smilies::add($b, ':sleeping face:', '😴'); // face-unwell - Smilies::add($b, ':face with medical mask', '😷'); - Smilies::add($b, ':face with thermometer', '🤒'); - Smilies::add($b, ':face with head-bandage', '🤕'); - Smilies::add($b, ':nauseated face', '🤢'); - Smilies::add($b, ':face vomiting', '🤮'); - Smilies::add($b, ':sneezing face', '🤧'); - Smilies::add($b, ':hot face', '🥵'); - Smilies::add($b, ':cold face', '🥶'); - Smilies::add($b, ':woozy face', '🥴'); - Smilies::add($b, ':dizzy face', '😵'); - Smilies::add($b, ':exploding head', '🤯'); + Smilies::add($b, ':face with medical mask:', '😷'); + Smilies::add($b, ':face with thermometer:', '🤒'); + Smilies::add($b, ':face with head-bandage:', '🤕'); + Smilies::add($b, ':nauseated face:', '🤢'); + Smilies::add($b, ':face vomiting:', '🤮'); + Smilies::add($b, ':sneezing face:', '🤧'); + Smilies::add($b, ':hot face:', '🥵'); + Smilies::add($b, ':cold face:', '🥶'); + Smilies::add($b, ':woozy face:', '🥴'); + Smilies::add($b, ':dizzy face:', '😵'); + Smilies::add($b, ':exploding head:', '🤯'); // face-hat - Smilies::add($b, ':cowboy hat face', '🤠'); - Smilies::add($b, ':partying face', '🥳'); + Smilies::add($b, ':cowboy hat face:', '🤠'); + Smilies::add($b, ':partying face:', '🥳'); // face-glasses - Smilies::add($b, ':smiling face with sunglasses', '😎'); - Smilies::add($b, ':nerd face', '🤓'); - Smilies::add($b, ':face with monocle', '🧐'); + Smilies::add($b, ':smiling face with sunglasses:', '😎'); + Smilies::add($b, ':nerd face:', '🤓'); + Smilies::add($b, ':face with monocle:', '🧐'); // face-concerned - Smilies::add($b, ':confused face', '😕'); - Smilies::add($b, ':worried face', '😟'); - Smilies::add($b, ':slightly frowning face', '🙁'); - Smilies::add($b, ':frowning face', '☹'); - Smilies::add($b, ':face with open mouth', '😮'); - Smilies::add($b, ':hushed face', '😯'); - Smilies::add($b, ':astonished face', '😲'); - Smilies::add($b, ':flushed face', '😳'); - Smilies::add($b, ':pleading face', '🥺'); - Smilies::add($b, ':frowning face with open mouth', '😦'); - Smilies::add($b, ':anguished face', '😧'); - Smilies::add($b, ':fearful face', '😨'); - Smilies::add($b, ':anxious face with sweat', '😰'); - Smilies::add($b, ':sad but relieved face', '😥'); - Smilies::add($b, ':crying face', '😢'); - Smilies::add($b, ':loudly crying face', '😭'); - Smilies::add($b, ':face screaming in fear', '😱'); - Smilies::add($b, ':confounded face', '😖'); - Smilies::add($b, ':persevering face', '😣'); - Smilies::add($b, ':disappointed face', '😞'); + Smilies::add($b, ':confused face:', '😕'); + Smilies::add($b, ':worried face:', '😟'); + Smilies::add($b, ':slightly frowning face:', '🙁'); + Smilies::add($b, ':frowning face:', '☹'); + Smilies::add($b, ':face with open mouth:', '😮'); + Smilies::add($b, ':hushed face:', '😯'); + Smilies::add($b, ':astonished face:', '😲'); + Smilies::add($b, ':flushed face:', '😳'); + Smilies::add($b, ':pleading face:', '🥺'); + Smilies::add($b, ':frowning face with open mouth:', '😦'); + Smilies::add($b, ':anguished face:', '😧'); + Smilies::add($b, ':fearful face:', '😨'); + Smilies::add($b, ':anxious face with sweat:', '😰'); + Smilies::add($b, ':sad but relieved face:', '😥'); + Smilies::add($b, ':crying face:', '😢'); + Smilies::add($b, ':loudly crying face:', '😭'); + Smilies::add($b, ':face screaming in fear:', '😱'); + Smilies::add($b, ':confounded face:', '😖'); + Smilies::add($b, ':persevering face:', '😣'); + Smilies::add($b, ':disappointed face:', '😞'); // face-negative - Smilies::add($b, ':face with steam from nose', '😤'); - Smilies::add($b, ':pouting face', '😡'); - Smilies::add($b, ':angry face', '😠'); - Smilies::add($b, ':face with symbols on mouth', '🤬'); - Smilies::add($b, ':smiling face with horns', '😈'); - Smilies::add($b, ':angry face with horns', '👿'); - Smilies::add($b, ':skull', '💀'); - Smilies::add($b, ':skull and crossbones', '☠'); + Smilies::add($b, ':face with steam from nose:', '😤'); + Smilies::add($b, ':pouting face:', '😡'); + Smilies::add($b, ':angry face:', '😠'); + Smilies::add($b, ':face with symbols on mouth:', '🤬'); + Smilies::add($b, ':smiling face with horns:', '😈'); + Smilies::add($b, ':angry face with horns:', '👿'); + Smilies::add($b, ':skull:', '💀'); + Smilies::add($b, ':skull and crossbones:', '☠'); // face-costume - Smilies::add($b, ':pile of poo', '💩'); - Smilies::add($b, ':clown face', '🤡'); - Smilies::add($b, ':ogre', '👹'); - Smilies::add($b, ':goblin', '👺'); - Smilies::add($b, ':ghost', '👻'); - Smilies::add($b, ':alien', '👽'); - Smilies::add($b, ':alien monster', '👾'); - Smilies::add($b, ':robot', '🤖'); + Smilies::add($b, ':pile of poo:', '💩'); + Smilies::add($b, ':clown face:', '🤡'); + Smilies::add($b, ':ogre:', '👹'); + Smilies::add($b, ':goblin:', '👺'); + Smilies::add($b, ':ghost:', '👻'); + Smilies::add($b, ':alien:', '👽'); + Smilies::add($b, ':alien monster:', '👾'); + Smilies::add($b, ':robot:', '🤖'); // cat-face - Smilies::add($b, ':grinning cat', '😺'); - Smilies::add($b, ':grinning cat with smiling eyes', '😸'); - Smilies::add($b, ':cat with tears of joy', '😹'); - Smilies::add($b, ':smiling cat with heart-eyes', '😻'); - Smilies::add($b, ':cat with wry smile', '😼'); - Smilies::add($b, ':kissing cat', '😽'); - Smilies::add($b, ':weary cat', '🙀'); - Smilies::add($b, ':crying cat', '😿'); - Smilies::add($b, ':pouting cat', '😾'); + Smilies::add($b, ':grinning cat:', '😺'); + Smilies::add($b, ':grinning cat with smiling eyes:', '😸'); + Smilies::add($b, ':cat with tears of joy:', '😹'); + Smilies::add($b, ':smiling cat with heart-eyes:', '😻'); + Smilies::add($b, ':cat with wry smile:', '😼'); + Smilies::add($b, ':kissing cat:', '😽'); + Smilies::add($b, ':weary cat:', '🙀'); + Smilies::add($b, ':crying cat:', '😿'); + Smilies::add($b, ':pouting cat:', '😾'); // monkey-face - Smilies::add($b, ':see-no-evil monkey', '🙈'); - Smilies::add($b, ':hear-no-evil monkey', '🙉'); - Smilies::add($b, ':speak-no-evil monkey', '🙊'); + Smilies::add($b, ':see-no-evil monkey:', '🙈'); + Smilies::add($b, ':hear-no-evil monkey:', '🙉'); + Smilies::add($b, ':speak-no-evil monkey:', '🙊'); //emotion - Smilies::add($b, ':kiss mark', '💋'); - Smilies::add($b, ':love letter', '💌'); - Smilies::add($b, ':heart with arrow', '💘'); - Smilies::add($b, ':heart with ribbon', '💝'); - Smilies::add($b, ':sparkling heart', '💖'); - Smilies::add($b, ':growing heart', '💗'); - Smilies::add($b, ':beating heart', '💓'); - Smilies::add($b, ':revolving hearts', '💞'); - Smilies::add($b, ':two hearts', '💕'); - Smilies::add($b, ':heart decoration', '💟'); - Smilies::add($b, ':heart exclamation', '❣'); - Smilies::add($b, ':broken heart', '💔'); - Smilies::add($b, ':red heart', '❤'); - Smilies::add($b, ':orange heart', '🧡'); - Smilies::add($b, ':yellow heart', '💛'); - Smilies::add($b, ':green heart', '💚'); - Smilies::add($b, ':blue heart', '💙'); - Smilies::add($b, ':purple heart', '💜'); -// Smilies::add($b, ':brown heart', '🤎'); - Smilies::add($b, ':black heart', '🖤'); -// Smilies::add($b, ':white heart', '🤍'); - Smilies::add($b, ':hundred points', '💯'); - Smilies::add($b, ':anger symbol', '💢'); - Smilies::add($b, ':collision', '💥'); - Smilies::add($b, ':dizzy', '💫'); - Smilies::add($b, ':sweat droplets', '💦'); - Smilies::add($b, ':dashing away', '💨'); - Smilies::add($b, ':hole', '🕳'); - Smilies::add($b, ':bomb', '💣'); - Smilies::add($b, ':speech balloon', '💬'); - Smilies::add($b, ':left speech bubble', '🗨'); - Smilies::add($b, ':right anger bubble', '🗯'); - Smilies::add($b, ':thought balloon', '💭'); - Smilies::add($b, ':zzz', '💤'); + Smilies::add($b, ':kiss mark:', '💋'); + Smilies::add($b, ':love letter:', '💌'); + Smilies::add($b, ':heart with arrow:', '💘'); + Smilies::add($b, ':heart with ribbon:', '💝'); + Smilies::add($b, ':sparkling heart:', '💖'); + Smilies::add($b, ':growing heart:', '💗'); + Smilies::add($b, ':beating heart:', '💓'); + Smilies::add($b, ':revolving hearts:', '💞'); + Smilies::add($b, ':two hearts:', '💕'); + Smilies::add($b, ':heart decoration:', '💟'); + Smilies::add($b, ':heart exclamation:', '❣'); + Smilies::add($b, ':broken heart:', '💔'); + Smilies::add($b, ':red heart:', '❤'); + Smilies::add($b, ':orange heart:', '🧡'); + Smilies::add($b, ':yellow heart:', '💛'); + Smilies::add($b, ':green heart:', '💚'); + Smilies::add($b, ':blue heart:', '💙'); + Smilies::add($b, ':purple heart:', '💜'); +// Smilies::add($b, ':brown heart:', '🤎'); + Smilies::add($b, ':black heart:', '🖤'); +// Smilies::add($b, ':white heart:', '🤍'); + Smilies::add($b, ':hundred points:', '💯'); + Smilies::add($b, ':anger symbol:', '💢'); + Smilies::add($b, ':collision:', '💥'); + Smilies::add($b, ':dizzy:', '💫'); + Smilies::add($b, ':sweat droplets:', '💦'); + Smilies::add($b, ':dashing away:', '💨'); + Smilies::add($b, ':hole:', '🕳'); + Smilies::add($b, ':bomb:', '💣'); + Smilies::add($b, ':speech balloon:', '💬'); + Smilies::add($b, ':left speech bubble:', '🗨'); + Smilies::add($b, ':right anger bubble:', '🗯'); + Smilies::add($b, ':thought balloon:', '💭'); + Smilies::add($b, ':zzz:', '💤'); // People & Body // hand-fingers-open - Smilies::add($b, ':waving hand', '👋'); - Smilies::add($b, ':raised back of hand', '🤚'); - Smilies::add($b, ':hand with fingers splayed', '🖐'); - Smilies::add($b, ':raised hand', '✋'); - Smilies::add($b, ':vulcan salute', '🖖'); + Smilies::add($b, ':waving hand:', '👋'); + Smilies::add($b, ':raised back of hand:', '🤚'); + Smilies::add($b, ':hand with fingers splayed:', '🖐'); + Smilies::add($b, ':raised hand:', '✋'); + Smilies::add($b, ':vulcan salute:', '🖖'); // hand-fingers-partial - Smilies::add($b, ':OK hand', '👌'); -// Smilies::add($b, ':pinching hand', '🤏'); - Smilies::add($b, ':victory hand', '✌'); - Smilies::add($b, ':crossed fingers', '🤞'); - Smilies::add($b, ':love-you gesture', '🤟'); - Smilies::add($b, ':sign of the horns', '🤘'); - Smilies::add($b, ':call me hand', '🤙'); + Smilies::add($b, ':OK hand:', '👌'); +// Smilies::add($b, ':pinching hand:', '🤏'); + Smilies::add($b, ':victory hand:', '✌'); + Smilies::add($b, ':crossed fingers:', '🤞'); + Smilies::add($b, ':love-you gesture:', '🤟'); + Smilies::add($b, ':sign of the horns:', '🤘'); + Smilies::add($b, ':call me hand:', '🤙'); // hand-single-finger - Smilies::add($b, ':backhand index pointing left', '👈'); - Smilies::add($b, ':backhand index pointing right', '👉'); - Smilies::add($b, ':backhand index pointing up', '👆'); - Smilies::add($b, ':middle finger', '🖕'); - Smilies::add($b, ':backhand index pointing down', '👇'); - Smilies::add($b, ':index pointing up', '☝'); + Smilies::add($b, ':backhand index pointing left:', '👈'); + Smilies::add($b, ':backhand index pointing right:', '👉'); + Smilies::add($b, ':backhand index pointing up:', '👆'); + Smilies::add($b, ':middle finger:', '🖕'); + Smilies::add($b, ':backhand index pointing down:', '👇'); + Smilies::add($b, ':index pointing up:', '☝'); // hand-fingers-closed - Smilies::add($b, ':thumbs up', '👍'); - Smilies::add($b, ':thumbs down', '👎'); - Smilies::add($b, ':raised fist', '✊'); - Smilies::add($b, ':oncoming fist', '👊'); - Smilies::add($b, ':left-facing fist', '🤛'); - Smilies::add($b, ':right-facing fist', '🤜'); + Smilies::add($b, ':thumbs up:', '👍'); + Smilies::add($b, ':thumbs down:', '👎'); + Smilies::add($b, ':raised fist:', '✊'); + Smilies::add($b, ':oncoming fist:', '👊'); + Smilies::add($b, ':left-facing fist:', '🤛'); + Smilies::add($b, ':right-facing fist:', '🤜'); // hands - Smilies::add($b, ':clapping hands', '👏'); - Smilies::add($b, ':raising hands', '🙌'); - Smilies::add($b, ':open hands', '👐'); - Smilies::add($b, ':palms up together', '🤲'); - Smilies::add($b, ':handshake', '🤝'); - Smilies::add($b, ':folded hands', '🙏'); + Smilies::add($b, ':clapping hands:', '👏'); + Smilies::add($b, ':raising hands:', '🙌'); + Smilies::add($b, ':open hands:', '👐'); + Smilies::add($b, ':palms up together:', '🤲'); + Smilies::add($b, ':handshake:', '🤝'); + Smilies::add($b, ':folded hands:', '🙏'); // hand-prop - Smilies::add($b, ':writing hand', '✍'); - Smilies::add($b, ':nail polish', '💅'); - Smilies::add($b, ':selfie', '🤳'); + Smilies::add($b, ':writing hand:', '✍'); + Smilies::add($b, ':nail polish:', '💅'); + Smilies::add($b, ':selfie:', '🤳'); // body-parts - Smilies::add($b, ':flexed biceps', '💪'); -// Smilies::add($b, ':mechanical arm', '🦾'); -// Smilies::add($b, ':mechanical leg', '🦿'); - Smilies::add($b, ':leg', '🦵'); - Smilies::add($b, ':foot', '🦶'); - Smilies::add($b, ':ear', '👂'); -// Smilies::add($b, ':ear with hearing aid', '🦻'); - Smilies::add($b, ':nose', '👃'); - Smilies::add($b, ':brain', '🧠'); - Smilies::add($b, ':tooth', '🦷'); - Smilies::add($b, ':bone', '🦴'); - Smilies::add($b, ':eyes', '👀'); - Smilies::add($b, ':eye', '👁'); - Smilies::add($b, ':tongue', '👅'); - Smilies::add($b, ':mouth', '👄'); + Smilies::add($b, ':flexed biceps:', '💪'); +// Smilies::add($b, ':mechanical arm:', '🦾'); +// Smilies::add($b, ':mechanical leg:', '🦿'); + Smilies::add($b, ':leg:', '🦵'); + Smilies::add($b, ':foot:', '🦶'); + Smilies::add($b, ':ear:', '👂'); +// Smilies::add($b, ':ear with hearing aid:', '🦻'); + Smilies::add($b, ':nose:', '👃'); + Smilies::add($b, ':brain:', '🧠'); + Smilies::add($b, ':tooth:', '🦷'); + Smilies::add($b, ':bone:', '🦴'); + Smilies::add($b, ':eyes:', '👀'); + Smilies::add($b, ':eye:', '👁'); + Smilies::add($b, ':tongue:', '👅'); + Smilies::add($b, ':mouth:', '👄'); // person - Smilies::add($b, ':baby', '👶'); - Smilies::add($b, ':child', '🧒'); - Smilies::add($b, ':boy', '👦'); - Smilies::add($b, ':girl', '👧'); - Smilies::add($b, ':person', '🧑'); - Smilies::add($b, ':person: blond hair', '👱'); - Smilies::add($b, ':man', '👨'); - Smilies::add($b, ':man: beard', '🧔'); - Smilies::add($b, ':man: red hair', '👨‍🦰'); - Smilies::add($b, ':man: curly hair', '👨‍🦱'); - Smilies::add($b, ':man: white hair', '👨‍🦳'); - Smilies::add($b, ':man: bald', '👨‍🦲'); - Smilies::add($b, ':woman', '👩'); - Smilies::add($b, ':woman: red hair', '👩‍🦰'); - Smilies::add($b, ':⊛ person: red hair', '🧑‍🦰'); - Smilies::add($b, ':woman: curly hair', '👩‍🦱'); - Smilies::add($b, ':⊛ person: curly hair', '🧑‍🦱'); - Smilies::add($b, ':woman: white hair', '👩‍🦳'); - Smilies::add($b, ':⊛ person: white hair', '🧑‍🦳'); - Smilies::add($b, ':woman: bald', '👩‍🦲'); - Smilies::add($b, ':bald', '🧑‍🦲'); - Smilies::add($b, ':woman: blond hair', '👱‍♀️'); - Smilies::add($b, ':man: blond hair', '👱‍♂️'); - Smilies::add($b, ':older person', '🧓'); - Smilies::add($b, ':old man', '👴'); - Smilies::add($b, ':old woman', '👵'); + Smilies::add($b, ':baby:', '👶'); + Smilies::add($b, ':child:', '🧒'); + Smilies::add($b, ':boy:', '👦'); + Smilies::add($b, ':girl:', '👧'); + Smilies::add($b, ':person:', '🧑'); + Smilies::add($b, ':person: blond hair:', '👱'); + Smilies::add($b, ':man:', '👨'); + Smilies::add($b, ':man: beard:', '🧔'); + Smilies::add($b, ':man: red hair:', '👨‍🦰'); + Smilies::add($b, ':man: curly hair:', '👨‍🦱'); + Smilies::add($b, ':man: white hair:', '👨‍🦳'); + Smilies::add($b, ':man: bald:', '👨‍🦲'); + Smilies::add($b, ':woman:', '👩'); + Smilies::add($b, ':woman: red hair:', '👩‍🦰'); + Smilies::add($b, ':⊛ person: red hair:', '🧑‍🦰'); + Smilies::add($b, ':woman: curly hair:', '👩‍🦱'); + Smilies::add($b, ':⊛ person: curly hair:', '🧑‍🦱'); + Smilies::add($b, ':woman: white hair:', '👩‍🦳'); + Smilies::add($b, ':⊛ person: white hair:', '🧑‍🦳'); + Smilies::add($b, ':woman: bald:', '👩‍🦲'); + Smilies::add($b, ':bald::', '🧑‍🦲'); + Smilies::add($b, ':woman: blond hair:', '👱‍♀️'); + Smilies::add($b, ':man: blond hair:', '👱‍♂️'); + Smilies::add($b, ':older person:', '🧓'); + Smilies::add($b, ':old man:', '👴'); + Smilies::add($b, ':old woman:', '👵'); // person-gesture - Smilies::add($b, ':person frowning', '🙍'); - Smilies::add($b, ':man frowning', '🙍‍♂️'); - Smilies::add($b, ':woman frowning', '🙍‍♀️'); - Smilies::add($b, ':person pouting', '🙎'); - Smilies::add($b, ':man pouting', '🙎‍♂️'); - Smilies::add($b, ':woman pouting', '🙎‍♀️'); - Smilies::add($b, ':person gesturing NO', '🙅'); - Smilies::add($b, ':man gesturing NO', '🙅‍♂️'); - Smilies::add($b, ':woman gesturing NO', '🙅‍♀️'); - Smilies::add($b, ':person gesturing OK', '🙆'); - Smilies::add($b, ':man gesturing OK', '🙆‍♂️'); - Smilies::add($b, ':woman gesturing OK', '🙆‍♀️'); - Smilies::add($b, ':person tipping hand', '💁'); - Smilies::add($b, ':man tipping hand', '💁‍♂️'); - Smilies::add($b, ':woman tipping hand', '💁‍♀️'); - Smilies::add($b, ':person raising hand', '🙋'); - Smilies::add($b, ':man raising hand', '🙋‍♂️'); + Smilies::add($b, ':person frowning:', '🙍'); + Smilies::add($b, ':man frowning:', '🙍‍♂️'); + Smilies::add($b, ':woman frowning:', '🙍‍♀️'); + Smilies::add($b, ':person pouting:', '🙎'); + Smilies::add($b, ':man pouting:', '🙎‍♂️'); + Smilies::add($b, ':woman pouting:', '🙎‍♀️'); + Smilies::add($b, ':person gesturing NO:', '🙅'); + Smilies::add($b, ':man gesturing NO:', '🙅‍♂️'); + Smilies::add($b, ':woman gesturing NO:', '🙅‍♀️'); + Smilies::add($b, ':person gesturing OK:', '🙆'); + Smilies::add($b, ':man gesturing OK:', '🙆‍♂️'); + Smilies::add($b, ':woman gesturing OK:', '🙆‍♀️'); + Smilies::add($b, ':person tipping hand:', '💁'); + Smilies::add($b, ':man tipping hand:', '💁‍♂️'); + Smilies::add($b, ':woman tipping hand:', '💁‍♀️'); + Smilies::add($b, ':person raising hand:', '🙋'); + Smilies::add($b, ':man raising hand:', '🙋‍♂️'); Smilies::add($b, ':woman raising hand', '🙋‍♀️'); -// Smilies::add($b, ':deaf person', '🧏'); -// Smilies::add($b, ':deaf man', '🧏‍♂️'); -// Smilies::add($b, ':deaf woman', '🧏‍♀️'); - Smilies::add($b, ':person bowing', '🙇'); - Smilies::add($b, ':man bowing', '🙇‍♂️'); - Smilies::add($b, ':woman bowing', '🙇‍♀️'); - Smilies::add($b, ':person facepalming', '🤦'); - Smilies::add($b, ':man facepalming', '🤦‍♂️'); - Smilies::add($b, ':woman facepalming', '🤦‍♀️'); - Smilies::add($b, ':person shrugging', '🤷'); - Smilies::add($b, ':man shrugging', '🤷‍♂️'); - Smilies::add($b, ':woman shrugging', '🤷‍♀️'); +// Smilies::add($b, ':deaf person:', '🧏'); +// Smilies::add($b, ':deaf man:', '🧏‍♂️'); +// Smilies::add($b, ':deaf woman:', '🧏‍♀️'); + Smilies::add($b, ':person bowing:', '🙇'); + Smilies::add($b, ':man bowing:', '🙇‍♂️'); + Smilies::add($b, ':woman bowing:', '🙇‍♀️'); + Smilies::add($b, ':person facepalming:', '🤦'); + Smilies::add($b, ':man facepalming:', '🤦‍♂️'); + Smilies::add($b, ':woman facepalming:', '🤦‍♀️'); + Smilies::add($b, ':person shrugging:', '🤷'); + Smilies::add($b, ':man shrugging:', '🤷‍♂️'); + Smilies::add($b, ':woman shrugging:', '🤷‍♀️'); // person-role // person-fantasy - Smilies::add($b, ':baby angel', '👼'); - Smilies::add($b, ':Santa Claus', '🎅'); - Smilies::add($b, ':Mrs. Claus', '🤶'); - Smilies::add($b, ':superhero', '🦸'); - Smilies::add($b, ':man superhero', '🦸‍♂️'); - Smilies::add($b, ':woman superhero', '🦸‍♀️'); - Smilies::add($b, ':supervillain', '🦹'); - Smilies::add($b, ':man supervillain', '🦹‍♂️'); - Smilies::add($b, ':woman supervillain', '🦹‍♀️'); - Smilies::add($b, ':mage', '🧙'); - Smilies::add($b, ':man mage', '🧙‍♂️'); - Smilies::add($b, ':woman mage', '🧙‍♀️'); - Smilies::add($b, ':fairy', '🧚'); - Smilies::add($b, ':man fairy', '🧚‍♂️'); - Smilies::add($b, ':woman fairy', '🧚‍♀️'); - Smilies::add($b, ':vampire', '🧛'); - Smilies::add($b, ':man vampire', '🧛‍♂️'); - Smilies::add($b, ':woman vampire', '🧛‍♀️'); - Smilies::add($b, ':merperson', '🧜'); - Smilies::add($b, ':merman', '🧜‍♂️'); - Smilies::add($b, ':mermaid', '🧜‍♀️'); - Smilies::add($b, ':elf', '🧝'); - Smilies::add($b, ':man elf', '🧝‍♂️'); - Smilies::add($b, ':woman elf', '🧝‍♀️'); - Smilies::add($b, ':genie', '🧞'); - Smilies::add($b, ':man genie', '🧞‍♂️'); - Smilies::add($b, ':woman genie', '🧞‍♀️'); - Smilies::add($b, ':zombie', '🧟'); - Smilies::add($b, ':man zombie', '🧟‍♂️'); - Smilies::add($b, ':woman zombie', '🧟‍♀️'); + Smilies::add($b, ':baby angel:', '👼'); + Smilies::add($b, ':Santa Claus:', '🎅'); + Smilies::add($b, ':Mrs. Claus:', '🤶'); + Smilies::add($b, ':superhero:', '🦸'); + Smilies::add($b, ':man superhero:', '🦸‍♂️'); + Smilies::add($b, ':woman superhero:', '🦸‍♀️'); + Smilies::add($b, ':supervillain:', '🦹'); + Smilies::add($b, ':man supervillain:', '🦹‍♂️'); + Smilies::add($b, ':woman supervillain:', '🦹‍♀️'); + Smilies::add($b, ':mage:', '🧙'); + Smilies::add($b, ':man mage:', '🧙‍♂️'); + Smilies::add($b, ':woman mage:', '🧙‍♀️'); + Smilies::add($b, ':fairy:', '🧚'); + Smilies::add($b, ':man fairy:', '🧚‍♂️'); + Smilies::add($b, ':woman fairy:', '🧚‍♀️'); + Smilies::add($b, ':vampire:', '🧛'); + Smilies::add($b, ':man vampire:', '🧛‍♂️'); + Smilies::add($b, ':woman vampire:', '🧛‍♀️'); + Smilies::add($b, ':merperson:', '🧜'); + Smilies::add($b, ':merman:', '🧜‍♂️'); + Smilies::add($b, ':mermaid:', '🧜‍♀️'); + Smilies::add($b, ':elf:', '🧝'); + Smilies::add($b, ':man elf:', '🧝‍♂️'); + Smilies::add($b, ':woman elf:', '🧝‍♀️'); + Smilies::add($b, ':genie:', '🧞'); + Smilies::add($b, ':man genie:', '🧞‍♂️'); + Smilies::add($b, ':woman genie:', '🧞‍♀️'); + Smilies::add($b, ':zombie:', '🧟'); + Smilies::add($b, ':man zombie:', '🧟‍♂️'); + Smilies::add($b, ':woman zombie:', '🧟‍♀️'); // person-activity @@ -602,1424 +599,1425 @@ function unicode_smilies_smilies(&$a,&$b) { // person-resting // family - Smilies::add($b, ':people holding hands', '🧑‍🤝‍🧑'); - Smilies::add($b, ':women holding hands', '👭'); - Smilies::add($b, ':woman and man holding hands', '👫'); - Smilies::add($b, ':men holding hands', '👬'); - Smilies::add($b, ':kiss', '💏'); - Smilies::add($b, ':couple with heart', '💑'); - Smilies::add($b, ':family', '👪'); + Smilies::add($b, ':people holding hands:', '🧑‍🤝‍🧑'); + Smilies::add($b, ':women holding hands:', '👭'); + Smilies::add($b, ':woman and man holding hands:', '👫'); + Smilies::add($b, ':men holding hands:', '👬'); + Smilies::add($b, ':kiss:', '💏'); + Smilies::add($b, ':couple with heart:', '💑'); + Smilies::add($b, ':family:', '👪'); // person-symbol - Smilies::add($b, ':speaking head', '🗣'); - Smilies::add($b, ':bust in silhouette', '👤'); - Smilies::add($b, ':busts in silhouette', '👥'); - Smilies::add($b, ':footprints', '👣'); + Smilies::add($b, ':speaking head:', '🗣'); + Smilies::add($b, ':bust in silhouette:', '👤'); + Smilies::add($b, ':busts in silhouette:', '👥'); + Smilies::add($b, ':footprints:', '👣'); // Component // hair-style // Animals & Nature // animal-mammal - Smilies::add($b, ':monkey face', '🐵'); - Smilies::add($b, ':monkey', '🐒'); - Smilies::add($b, ':gorilla', '🦍'); -// Smilies::add($b, ':orangutan', '🦧'); - Smilies::add($b, ':dog face', '🐶'); - Smilies::add($b, ':dog', '🐕'); -// Smilies::add($b, ':guide dog', '🦮'); - Smilies::add($b, ':poodle', '🐩'); - Smilies::add($b, ':wolf', '🐺'); - Smilies::add($b, ':fox', '🦊'); - Smilies::add($b, ':raccoon', '🦝'); - Smilies::add($b, ':cat face', '🐱'); - Smilies::add($b, ':cat', '🐈'); - Smilies::add($b, ':lion', '🦁'); - Smilies::add($b, ':tiger face', '🐯'); - Smilies::add($b, ':tiger', '🐅'); - Smilies::add($b, ':leopard', '🐆'); - Smilies::add($b, ':horse face', '🐴'); - Smilies::add($b, ':horse', '🐎'); - Smilies::add($b, ':unicorn', '🦄'); - Smilies::add($b, ':zebra', '🦓'); - Smilies::add($b, ':deer', '🦌'); - Smilies::add($b, ':cow face', '🐮'); - Smilies::add($b, ':ox', '🐂'); - Smilies::add($b, ':water buffalo', '🐃'); - Smilies::add($b, ':cow', '🐄'); - Smilies::add($b, ':pig face', '🐷'); - Smilies::add($b, ':pig', '🐖'); - Smilies::add($b, ':boar', '🐗'); - Smilies::add($b, ':pig nose', '🐽'); - Smilies::add($b, ':ram', '🐏'); - Smilies::add($b, ':ewe', '🐑'); - Smilies::add($b, ':goat', '🐐'); - Smilies::add($b, ':camel', '🐪'); - Smilies::add($b, ':two-hump camel', '🐫'); - Smilies::add($b, ':llama', '🦙'); - Smilies::add($b, ':giraffe', '🦒'); - Smilies::add($b, ':elephant', '🐘'); - Smilies::add($b, ':rhinoceros', '🦏'); - Smilies::add($b, ':hippopotamus', '🦛'); - Smilies::add($b, ':mouse face', '🐭'); - Smilies::add($b, ':mouse', '🐁'); - Smilies::add($b, ':rat', '🐀'); - Smilies::add($b, ':hamster', '🐹'); - Smilies::add($b, ':rabbit face', '🐰'); - Smilies::add($b, ':rabbit', '🐇'); - Smilies::add($b, ':chipmunk', '🐿'); - Smilies::add($b, ':hedgehog', '🦔'); - Smilies::add($b, ':bat', '🦇'); - Smilies::add($b, ':bear', '🐻'); - Smilies::add($b, ':koala', '🐨'); - Smilies::add($b, ':panda', '🐼'); -// Smilies::add($b, ':sloth', '🦥'); -// Smilies::add($b, ':otter', '🦦'); -// Smilies::add($b, ':skunk', '🦨'); -// Smilies::add($b, ':kangaroo', '🦘'); - Smilies::add($b, ':badger', '🦡'); - Smilies::add($b, ':paw prints', '🐾'); + Smilies::add($b, ':monkey face:', '🐵'); + Smilies::add($b, ':monkey:', '🐒'); + Smilies::add($b, ':gorilla:', '🦍'); +// Smilies::add($b, ':orangutan:', '🦧'); + Smilies::add($b, ':dog face:', '🐶'); + Smilies::add($b, ':dog:', '🐕'); +// Smilies::add($b, ':guide dog:', '🦮'); + Smilies::add($b, ':poodle:', '🐩'); + Smilies::add($b, ':wolf:', '🐺'); + Smilies::add($b, ':fox:', '🦊'); + Smilies::add($b, ':raccoon:', '🦝'); + Smilies::add($b, ':cat face:', '🐱'); + Smilies::add($b, ':cat:', '🐈'); + Smilies::add($b, ':lion:', '🦁'); + Smilies::add($b, ':tiger face:', '🐯'); + Smilies::add($b, ':tiger:', '🐅'); + Smilies::add($b, ':leopard:', '🐆'); + Smilies::add($b, ':horse face:', '🐴'); + Smilies::add($b, ':horse:', '🐎'); + Smilies::add($b, ':unicorn:', '🦄'); + Smilies::add($b, ':zebra:', '🦓'); + Smilies::add($b, ':deer:', '🦌'); + Smilies::add($b, ':cow face:', '🐮'); + Smilies::add($b, ':ox:', '🐂'); + Smilies::add($b, ':water buffalo:', '🐃'); + Smilies::add($b, ':cow:', '🐄'); + Smilies::add($b, ':pig face:', '🐷'); + Smilies::add($b, ':pig:', '🐖'); + Smilies::add($b, ':boar:', '🐗'); + Smilies::add($b, ':pig nose:', '🐽'); + Smilies::add($b, ':ram:', '🐏'); + Smilies::add($b, ':ewe:', '🐑'); + Smilies::add($b, ':goat:', '🐐'); + Smilies::add($b, ':camel:', '🐪'); + Smilies::add($b, ':two-hump camel:', '🐫'); + Smilies::add($b, ':llama:', '🦙'); + Smilies::add($b, ':giraffe:', '🦒'); + Smilies::add($b, ':elephant:', '🐘'); + Smilies::add($b, ':rhinoceros:', '🦏'); + Smilies::add($b, ':hippopotamus:', '🦛'); + Smilies::add($b, ':mouse face:', '🐭'); + Smilies::add($b, ':mouse:', '🐁'); + Smilies::add($b, ':rat:', '🐀'); + Smilies::add($b, ':hamster:', '🐹'); + Smilies::add($b, ':rabbit face:', '🐰'); + Smilies::add($b, ':rabbit:', '🐇'); + Smilies::add($b, ':chipmunk:', '🐿'); + Smilies::add($b, ':hedgehog:', '🦔'); + Smilies::add($b, ':bat:', '🦇'); + Smilies::add($b, ':bear:', '🐻'); + Smilies::add($b, ':koala:', '🐨'); + Smilies::add($b, ':panda:', '🐼'); +// Smilies::add($b, ':sloth:', '🦥'); +// Smilies::add($b, ':otter:', '🦦'); +// Smilies::add($b, ':skunk:', '🦨'); +// Smilies::add($b, ':kangaroo:', '🦘'); + Smilies::add($b, ':badger:', '🦡'); + Smilies::add($b, ':paw prints:', '🐾'); // animal-bird - Smilies::add($b, ':turkey', '🦃'); - Smilies::add($b, ':chicken', '🐔'); - Smilies::add($b, ':rooster', '🐓'); - Smilies::add($b, ':hatching chick', '🐣'); - Smilies::add($b, ':baby chick', '🐤'); - Smilies::add($b, ':front-facing baby chick', '🐥'); - Smilies::add($b, ':bird', '🐦'); - Smilies::add($b, ':penguin', '🐧'); - Smilies::add($b, ':dove', '🕊'); - Smilies::add($b, ':eagle', '🦅'); - Smilies::add($b, ':duck', '🦆'); - Smilies::add($b, ':swan', '🦢'); - Smilies::add($b, ':owl', '🦉'); -// Smilies::add($b, ':flamingo', '🦩'); - Smilies::add($b, ':peacock', '🦚'); - Smilies::add($b, ':parrot', '🦜'); + Smilies::add($b, ':turkey:', '🦃'); + Smilies::add($b, ':chicken:', '🐔'); + Smilies::add($b, ':rooster:', '🐓'); + Smilies::add($b, ':hatching chick:', '🐣'); + Smilies::add($b, ':baby chick:', '🐤'); + Smilies::add($b, ':front-facing baby chick:', '🐥'); + Smilies::add($b, ':bird:', '🐦'); + Smilies::add($b, ':penguin:', '🐧'); + Smilies::add($b, ':dove:', '🕊'); + Smilies::add($b, ':eagle:', '🦅'); + Smilies::add($b, ':duck:', '🦆'); + Smilies::add($b, ':swan:', '🦢'); + Smilies::add($b, ':owl:', '🦉'); +// Smilies::add($b, ':flamingo:', '🦩'); + Smilies::add($b, ':peacock:', '🦚'); + Smilies::add($b, ':parrot:', '🦜'); // animal-amphibian - Smilies::add($b, ':frog', '🐸'); + Smilies::add($b, ':frog:', '🐸'); // animal-reptile - Smilies::add($b, ':crocodile', '🐊'); - Smilies::add($b, ':turtle', '🐢'); - Smilies::add($b, ':lizard', '🦎'); - Smilies::add($b, ':snake', '🐍'); - Smilies::add($b, ':dragon face', '🐲'); - Smilies::add($b, ':dragon', '🐉'); - Smilies::add($b, ':sauropod', '🦕'); - Smilies::add($b, ':T-Rex', '🦖'); + Smilies::add($b, ':crocodile:', '🐊'); + Smilies::add($b, ':turtle:', '🐢'); + Smilies::add($b, ':lizard:', '🦎'); + Smilies::add($b, ':snake:', '🐍'); + Smilies::add($b, ':dragon face:', '🐲'); + Smilies::add($b, ':dragon:', '🐉'); + Smilies::add($b, ':sauropod:', '🦕'); + Smilies::add($b, ':T-Rex:', '🦖'); // animal-marine - Smilies::add($b, ':spouting whale', '🐳'); - Smilies::add($b, ':whale', '🐋'); - Smilies::add($b, ':dolphin', '🐬'); - Smilies::add($b, ':fish', '🐟'); - Smilies::add($b, ':tropical fish', '🐠'); - Smilies::add($b, ':blowfish', '🐡'); - Smilies::add($b, ':shark', '🦈'); - Smilies::add($b, ':octopus', '🐙'); - Smilies::add($b, ':spiral shell', '🐚'); + Smilies::add($b, ':spouting whale:', '🐳'); + Smilies::add($b, ':whale:', '🐋'); + Smilies::add($b, ':dolphin:', '🐬'); + Smilies::add($b, ':fish:', '🐟'); + Smilies::add($b, ':tropical fish:', '🐠'); + Smilies::add($b, ':blowfish:', '🐡'); + Smilies::add($b, ':shark:', '🦈'); + Smilies::add($b, ':octopus:', '🐙'); + Smilies::add($b, ':spiral shell:', '🐚'); // animal-bug - Smilies::add($b, ':snail', '🐌'); - Smilies::add($b, ':butterfly', '🦋'); - Smilies::add($b, ':bug', '🐛'); - Smilies::add($b, ':ant', '🐜'); - Smilies::add($b, ':honeybee', '🐝'); - Smilies::add($b, ':lady beetle', '🐞'); - Smilies::add($b, ':cricket', '🦗'); - Smilies::add($b, ':spider', '🕷'); - Smilies::add($b, ':spider web', '🕸'); - Smilies::add($b, ':scorpion', '🦂'); - Smilies::add($b, ':mosquito', '🦟'); - Smilies::add($b, ':microbe', '🦠'); + Smilies::add($b, ':snail:', '🐌'); + Smilies::add($b, ':butterfly:', '🦋'); + Smilies::add($b, ':bug:', '🐛'); + Smilies::add($b, ':ant:', '🐜'); + Smilies::add($b, ':honeybee:', '🐝'); + Smilies::add($b, ':lady beetle:', '🐞'); + Smilies::add($b, ':cricket:', '🦗'); + Smilies::add($b, ':spider:', '🕷'); + Smilies::add($b, ':spider web:', '🕸'); + Smilies::add($b, ':scorpion:', '🦂'); + Smilies::add($b, ':mosquito:', '🦟'); + Smilies::add($b, ':microbe:', '🦠'); // plant-flower - Smilies::add($b, ':bouquet', '💐'); - Smilies::add($b, ':cherry blossom', '🌸'); - Smilies::add($b, ':white flower', '💮'); - Smilies::add($b, ':rosette', '🏵'); - Smilies::add($b, ':rose', '🌹'); - Smilies::add($b, ':wilted flower', '🥀'); - Smilies::add($b, ':hibiscus', '🌺'); - Smilies::add($b, ':sunflower', '🌻'); - Smilies::add($b, ':blossom', '🌼'); - Smilies::add($b, ':tulip', '🌷'); + Smilies::add($b, ':bouquet:', '💐'); + Smilies::add($b, ':cherry blossom:', '🌸'); + Smilies::add($b, ':white flower:', '💮'); + Smilies::add($b, ':rosette:', '🏵'); + Smilies::add($b, ':rose:', '🌹'); + Smilies::add($b, ':wilted flower:', '🥀'); + Smilies::add($b, ':hibiscus:', '🌺'); + Smilies::add($b, ':sunflower:', '🌻'); + Smilies::add($b, ':blossom:', '🌼'); + Smilies::add($b, ':tulip:', '🌷'); // plant-other - Smilies::add($b, ':seedling', '🌱'); - Smilies::add($b, ':evergreen tree', '🌲'); - Smilies::add($b, ':deciduous tree', '🌳'); - Smilies::add($b, ':palm tree', '🌴'); - Smilies::add($b, ':cactus', '🌵'); - Smilies::add($b, ':sheaf of rice', '🌾'); - Smilies::add($b, ':herb', '🌿'); - Smilies::add($b, ':shamrock', '☘'); - Smilies::add($b, ':four leaf clover', '🍀'); - Smilies::add($b, ':maple leaf', '🍁'); - Smilies::add($b, ':fallen leaf', '🍂'); - Smilies::add($b, ':leaf fluttering in wind', '🍃'); + Smilies::add($b, ':seedling:', '🌱'); + Smilies::add($b, ':evergreen tree:', '🌲'); + Smilies::add($b, ':deciduous tree:', '🌳'); + Smilies::add($b, ':palm tree:', '🌴'); + Smilies::add($b, ':cactus:', '🌵'); + Smilies::add($b, ':sheaf of rice:', '🌾'); + Smilies::add($b, ':herb:', '🌿'); + Smilies::add($b, ':shamrock:', '☘'); + Smilies::add($b, ':four leaf clover:', '🍀'); + Smilies::add($b, ':maple leaf:', '🍁'); + Smilies::add($b, ':fallen leaf:', '🍂'); + Smilies::add($b, ':leaf fluttering in wind:', '🍃'); // Food & Drink // food-fruit - Smilies::add($b, ':grapes', '🍇'); - Smilies::add($b, ':melon', '🍈'); - Smilies::add($b, ':watermelon', '🍉'); - Smilies::add($b, ':tangerine', '🍊'); - Smilies::add($b, ':lemon', '🍋'); - Smilies::add($b, ':banana', '🍌'); - Smilies::add($b, ':pineapple', '🍍'); - Smilies::add($b, ':mango', '🥭'); - Smilies::add($b, ':red apple', '🍎'); - Smilies::add($b, ':green apple', '🍏'); - Smilies::add($b, ':pear', '🍐'); - Smilies::add($b, ':peach', '🍑'); - Smilies::add($b, ':cherries', '🍒'); - Smilies::add($b, ':strawberry', '🍓'); - Smilies::add($b, ':kiwi fruit', '🥝'); - Smilies::add($b, ':tomato', '🍅'); - Smilies::add($b, ':coconut', '🥥'); + Smilies::add($b, ':grapes:', '🍇'); + Smilies::add($b, ':melon:', '🍈'); + Smilies::add($b, ':watermelon:', '🍉'); + Smilies::add($b, ':tangerine:', '🍊'); + Smilies::add($b, ':lemon:', '🍋'); + Smilies::add($b, ':banana:', '🍌'); + Smilies::add($b, ':pineapple:', '🍍'); + Smilies::add($b, ':mango:', '🥭'); + Smilies::add($b, ':red apple:', '🍎'); + Smilies::add($b, ':green apple:', '🍏'); + Smilies::add($b, ':pear:', '🍐'); + Smilies::add($b, ':peach:', '🍑'); + Smilies::add($b, ':cherries:', '🍒'); + Smilies::add($b, ':strawberry:', '🍓'); + Smilies::add($b, ':kiwi fruit:', '🥝'); + Smilies::add($b, ':tomato:', '🍅'); + Smilies::add($b, ':coconut:', '🥥'); // food-vegetable - Smilies::add($b, ':avocado', '🥑'); - Smilies::add($b, ':eggplant', '🍆'); - Smilies::add($b, ':potato', '🥔'); - Smilies::add($b, ':carrot', '🥕'); - Smilies::add($b, ':ear of corn', '🌽'); - Smilies::add($b, ':hot pepper', '🌶'); - Smilies::add($b, ':cucumber', '🥒'); - Smilies::add($b, ':leafy green', '🥬'); - Smilies::add($b, ':broccoli', '🥦'); -// Smilies::add($b, ':garlic', '🧄'); -// Smilies::add($b, ':onion', '🧅'); - Smilies::add($b, ':mushroom', '🍄'); - Smilies::add($b, ':peanuts', '🥜'); - Smilies::add($b, ':chestnut', '🌰'); + Smilies::add($b, ':avocado:', '🥑'); + Smilies::add($b, ':eggplant:', '🍆'); + Smilies::add($b, ':potato:', '🥔'); + Smilies::add($b, ':carrot:', '🥕'); + Smilies::add($b, ':ear of corn:', '🌽'); + Smilies::add($b, ':hot pepper:', '🌶'); + Smilies::add($b, ':cucumber:', '🥒'); + Smilies::add($b, ':leafy green:', '🥬'); + Smilies::add($b, ':broccoli:', '🥦'); +// Smilies::add($b, ':garlic:', '🧄'); +// Smilies::add($b, ':onion:', '🧅'); + Smilies::add($b, ':mushroom:', '🍄'); + Smilies::add($b, ':peanuts:', '🥜'); + Smilies::add($b, ':chestnut:', '🌰'); // food-prepared - Smilies::add($b, ':bread', '🍞'); - Smilies::add($b, ':croissant', '🥐'); - Smilies::add($b, ':baguette bread', '🥖'); - Smilies::add($b, ':pretzel', '🥨'); - Smilies::add($b, ':bagel', '🥯'); - Smilies::add($b, ':pancakes', '🥞'); -// Smilies::add($b, ':waffle', '🧇'); - Smilies::add($b, ':cheese wedge', '🧀'); - Smilies::add($b, ':meat on bone', '🍖'); - Smilies::add($b, ':poultry leg', '🍗'); - Smilies::add($b, ':cut of meat', '🥩'); - Smilies::add($b, ':bacon', '🥓'); - Smilies::add($b, ':hamburger', '🍔'); - Smilies::add($b, ':french fries', '🍟'); - Smilies::add($b, ':pizza', '🍕'); - Smilies::add($b, ':hot dog', '🌭'); - Smilies::add($b, ':sandwich', '🥪'); - Smilies::add($b, ':taco', '🌮'); - Smilies::add($b, ':burrito', '🌯'); - Smilies::add($b, ':stuffed flatbread', '🥙'); -// Smilies::add($b, ':falafel', '🧆'); - Smilies::add($b, ':egg', '🥚'); - Smilies::add($b, ':cooking', '🍳'); - Smilies::add($b, ':shallow pan of food', '🥘'); - Smilies::add($b, ':pot of food', '🍲'); - Smilies::add($b, ':bowl with spoon', '🥣'); - Smilies::add($b, ':green salad', '🥗'); - Smilies::add($b, ':popcorn', '🍿'); -// Smilies::add($b, ':butter', '🧈'); - Smilies::add($b, ':salt', '🧂'); - Smilies::add($b, ':canned food', '🥫'); + Smilies::add($b, ':bread:', '🍞'); + Smilies::add($b, ':croissant:', '🥐'); + Smilies::add($b, ':baguette bread:', '🥖'); + Smilies::add($b, ':pretzel:', '🥨'); + Smilies::add($b, ':bagel:', '🥯'); + Smilies::add($b, ':pancakes:', '🥞'); +// Smilies::add($b, ':waffle:', '🧇'); + Smilies::add($b, ':cheese wedge:', '🧀'); + Smilies::add($b, ':meat on bone:', '🍖'); + Smilies::add($b, ':poultry leg:', '🍗'); + Smilies::add($b, ':cut of meat:', '🥩'); + Smilies::add($b, ':bacon:', '🥓'); + Smilies::add($b, ':hamburger:', '🍔'); + Smilies::add($b, ':french fries:', '🍟'); + Smilies::add($b, ':pizza:', '🍕'); + Smilies::add($b, ':hot dog:', '🌭'); + Smilies::add($b, ':sandwich:', '🥪'); + Smilies::add($b, ':taco:', '🌮'); + Smilies::add($b, ':burrito:', '🌯'); + Smilies::add($b, ':stuffed flatbread:', '🥙'); +// Smilies::add($b, ':falafel:', '🧆'); + Smilies::add($b, ':egg:', '🥚'); + Smilies::add($b, ':cooking:', '🍳'); + Smilies::add($b, ':shallow pan of food:', '🥘'); + Smilies::add($b, ':pot of food:', '🍲'); + Smilies::add($b, ':bowl with spoon:', '🥣'); + Smilies::add($b, ':green salad:', '🥗'); + Smilies::add($b, ':popcorn:', '🍿'); +// Smilies::add($b, ':butter:', '🧈'); + Smilies::add($b, ':salt:', '🧂'); + Smilies::add($b, ':canned food:', '🥫'); // food-asian - Smilies::add($b, ':bento box', '🍱'); - Smilies::add($b, ':rice cracker', '🍘'); - Smilies::add($b, ':rice ball', '🍙'); - Smilies::add($b, ':cooked rice', '🍚'); - Smilies::add($b, ':curry rice', '🍛'); - Smilies::add($b, ':steaming bowl', '🍜'); - Smilies::add($b, ':spaghetti', '🍝'); - Smilies::add($b, ':roasted sweet potato', '🍠'); - Smilies::add($b, ':oden', '🍢'); - Smilies::add($b, ':sushi', '🍣'); - Smilies::add($b, ':fried shrimp', '🍤'); - Smilies::add($b, ':fish cake with swirl', '🍥'); - Smilies::add($b, ':moon cake', '🥮'); - Smilies::add($b, ':dango', '🍡'); - Smilies::add($b, ':dumpling', '🥟'); - Smilies::add($b, ':fortune cookie', '🥠'); - Smilies::add($b, ':takeout box', '🥡'); + Smilies::add($b, ':bento box:', '🍱'); + Smilies::add($b, ':rice cracker:', '🍘'); + Smilies::add($b, ':rice ball:', '🍙'); + Smilies::add($b, ':cooked rice:', '🍚'); + Smilies::add($b, ':curry rice:', '🍛'); + Smilies::add($b, ':steaming bowl:', '🍜'); + Smilies::add($b, ':spaghetti:', '🍝'); + Smilies::add($b, ':roasted sweet potato:', '🍠'); + Smilies::add($b, ':oden:', '🍢'); + Smilies::add($b, ':sushi:', '🍣'); + Smilies::add($b, ':fried shrimp:', '🍤'); + Smilies::add($b, ':fish cake with swirl:', '🍥'); + Smilies::add($b, ':moon cake:', '🥮'); + Smilies::add($b, ':dango:', '🍡'); + Smilies::add($b, ':dumpling:', '🥟'); + Smilies::add($b, ':fortune cookie:', '🥠'); + Smilies::add($b, ':takeout box:', '🥡'); // food-marine - Smilies::add($b, ':crab', '🦀'); - Smilies::add($b, ':lobster', '🦞'); - Smilies::add($b, ':shrimp', '🦐'); - Smilies::add($b, ':squid', '🦑'); -// Smilies::add($b, ':oyster', '🦪'); + Smilies::add($b, ':crab:', '🦀'); + Smilies::add($b, ':lobster:', '🦞'); + Smilies::add($b, ':shrimp:', '🦐'); + Smilies::add($b, ':squid:', '🦑'); +// Smilies::add($b, ':oyster:', '🦪'); // food-sweet - Smilies::add($b, ':soft ice cream', '🍦'); - Smilies::add($b, ':shaved ice', '🍧'); - Smilies::add($b, ':ice cream', '🍨'); - Smilies::add($b, ':doughnut', '🍩'); - Smilies::add($b, ':cookie', '🍪'); - Smilies::add($b, ':birthday cake', '🎂'); - Smilies::add($b, ':shortcake', '🍰'); - Smilies::add($b, ':cupcake', '🧁'); - Smilies::add($b, ':pie', '🥧'); - Smilies::add($b, ':chocolate bar', '🍫'); - Smilies::add($b, ':candy', '🍬'); - Smilies::add($b, ':lollipop', '🍭'); - Smilies::add($b, ':custard', '🍮'); - Smilies::add($b, ':honey pot', '🍯'); + Smilies::add($b, ':soft ice cream:', '🍦'); + Smilies::add($b, ':shaved ice:', '🍧'); + Smilies::add($b, ':ice cream:', '🍨'); + Smilies::add($b, ':doughnut:', '🍩'); + Smilies::add($b, ':cookie:', '🍪'); + Smilies::add($b, ':birthday cake:', '🎂'); + Smilies::add($b, ':shortcake:', '🍰'); + Smilies::add($b, ':cupcake:', '🧁'); + Smilies::add($b, ':pie:', '🥧'); + Smilies::add($b, ':chocolate bar:', '🍫'); + Smilies::add($b, ':candy:', '🍬'); + Smilies::add($b, ':lollipop:', '🍭'); + Smilies::add($b, ':custard:', '🍮'); + Smilies::add($b, ':honey pot:', '🍯'); // drink - Smilies::add($b, ':baby bottle', '🍼'); - Smilies::add($b, ':glass of milk', '🥛'); - Smilies::add($b, ':hot beverage', '☕'); - Smilies::add($b, ':teacup without handle', '🍵'); - Smilies::add($b, ':sake', '🍶'); - Smilies::add($b, ':bottle with popping cork', '🍾'); - Smilies::add($b, ':wine glass', '🍷'); - Smilies::add($b, ':cocktail glass', '🍸'); - Smilies::add($b, ':tropical drink', '🍹'); - Smilies::add($b, ':beer mug', '🍺'); - Smilies::add($b, ':clinking beer mugs', '🍻'); - Smilies::add($b, ':clinking glasses', '🥂'); - Smilies::add($b, ':tumbler glass', '🥃'); - Smilies::add($b, ':cup with straw', '🥤'); -// Smilies::add($b, ':beverage box', '🧃'); -// Smilies::add($b, ':mate', '🧉'); -// Smilies::add($b, ':ice', '🧊'); + Smilies::add($b, ':baby bottle:', '🍼'); + Smilies::add($b, ':glass of milk:', '🥛'); + Smilies::add($b, ':hot beverage:', '☕'); + Smilies::add($b, ':teacup without handle:', '🍵'); + Smilies::add($b, ':sake:', '🍶'); + Smilies::add($b, ':bottle with popping cork:', '🍾'); + Smilies::add($b, ':wine glass:', '🍷'); + Smilies::add($b, ':cocktail glass:', '🍸'); + Smilies::add($b, ':tropical drink:', '🍹'); + Smilies::add($b, ':beer mug:', '🍺'); + Smilies::add($b, ':clinking beer mugs:', '🍻'); + Smilies::add($b, ':clinking glasses:', '🥂'); + Smilies::add($b, ':tumbler glass:', '🥃'); + Smilies::add($b, ':cup with straw:', '🥤'); +// Smilies::add($b, ':beverage box:', '🧃'); +// Smilies::add($b, ':mate:', '🧉'); +// Smilies::add($b, ':ice:', '🧊'); // dishware - Smilies::add($b, ':chopsticks', '🥢'); - Smilies::add($b, ':fork and knife with plate', '🍽'); - Smilies::add($b, ':fork and knife', '🍴'); - Smilies::add($b, ':spoon', '🥄'); - Smilies::add($b, ':kitchen knife', '🔪'); - Smilies::add($b, ':amphora', '🏺'); + Smilies::add($b, ':chopsticks:', '🥢'); + Smilies::add($b, ':fork and knife with plate:', '🍽'); + Smilies::add($b, ':fork and knife:', '🍴'); + Smilies::add($b, ':spoon:', '🥄'); + Smilies::add($b, ':kitchen knife:', '🔪'); + Smilies::add($b, ':amphora:', '🏺'); // Travel & Places // place-map - Smilies::add($b, ':globe showing Europe-Africa', '🌍'); - Smilies::add($b, ':globe showing Americas', '🌎'); - Smilies::add($b, ':globe showing Asia-Australia', '🌏'); - Smilies::add($b, ':globe with meridians', '🌐'); - Smilies::add($b, ':world map', '🗺'); - Smilies::add($b, ':map of Japan', '🗾'); - Smilies::add($b, ':compass', '🧭'); + Smilies::add($b, ':globe showing Europe-Africa:', '🌍'); + Smilies::add($b, ':globe showing Americas:', '🌎'); + Smilies::add($b, ':globe showing Asia-Australia:', '🌏'); + Smilies::add($b, ':globe with meridians:', '🌐'); + Smilies::add($b, ':world map:', '🗺'); + Smilies::add($b, ':map of Japan:', '🗾'); + Smilies::add($b, ':compass:', '🧭'); // place-geographic - Smilies::add($b, ':snow-capped mountain', '🏔'); - Smilies::add($b, ':mountain', '⛰'); - Smilies::add($b, ':volcano', '🌋'); - Smilies::add($b, ':mount fuji', '🗻'); - Smilies::add($b, ':camping', '🏕'); - Smilies::add($b, ':beach with umbrella', '🏖'); - Smilies::add($b, ':desert', '🏜'); - Smilies::add($b, ':desert island', '🏝'); - Smilies::add($b, ':national park', '🏞'); + Smilies::add($b, ':snow-capped mountain:', '🏔'); + Smilies::add($b, ':mountain:', '⛰'); + Smilies::add($b, ':volcano:', '🌋'); + Smilies::add($b, ':mount fuji:', '🗻'); + Smilies::add($b, ':camping:', '🏕'); + Smilies::add($b, ':beach with umbrella:', '🏖'); + Smilies::add($b, ':desert:', '🏜'); + Smilies::add($b, ':desert island:', '🏝'); + Smilies::add($b, ':national park:', '🏞'); // place-building - Smilies::add($b, ':stadium', '🏟'); - Smilies::add($b, ':classical building', '🏛'); - Smilies::add($b, ':building construction', '🏗'); - Smilies::add($b, ':brick', '🧱'); - Smilies::add($b, ':houses', '🏘'); - Smilies::add($b, ':derelict house', '🏚'); - Smilies::add($b, ':house', '🏠'); - Smilies::add($b, ':house with garden', '🏡'); - Smilies::add($b, ':office building', '🏢'); - Smilies::add($b, ':Japanese post office', '🏣'); - Smilies::add($b, ':post office', '🏤'); - Smilies::add($b, ':hospital', '🏥'); - Smilies::add($b, ':bank', '🏦'); - Smilies::add($b, ':hotel', '🏨'); - Smilies::add($b, ':love hotel', '🏩'); - Smilies::add($b, ':convenience store', '🏪'); - Smilies::add($b, ':school', '🏫'); - Smilies::add($b, ':department store', '🏬'); - Smilies::add($b, ':factory', '🏭'); - Smilies::add($b, ':Japanese castle', '🏯'); - Smilies::add($b, ':castle', '🏰'); - Smilies::add($b, ':wedding', '💒'); - Smilies::add($b, ':Tokyo tower', '🗼'); - Smilies::add($b, ':Statue of Liberty', '🗽'); + Smilies::add($b, ':stadium:', '🏟'); + Smilies::add($b, ':classical building:', '🏛'); + Smilies::add($b, ':building construction:', '🏗'); + Smilies::add($b, ':brick:', '🧱'); + Smilies::add($b, ':houses:', '🏘'); + Smilies::add($b, ':derelict house:', '🏚'); + Smilies::add($b, ':house:', '🏠'); + Smilies::add($b, ':house with garden:', '🏡'); + Smilies::add($b, ':office building:', '🏢'); + Smilies::add($b, ':Japanese post office:', '🏣'); + Smilies::add($b, ':post office:', '🏤'); + Smilies::add($b, ':hospital:', '🏥'); + Smilies::add($b, ':bank:', '🏦'); + Smilies::add($b, ':hotel:', '🏨'); + Smilies::add($b, ':love hotel:', '🏩'); + Smilies::add($b, ':convenience store:', '🏪'); + Smilies::add($b, ':school:', '🏫'); + Smilies::add($b, ':department store:', '🏬'); + Smilies::add($b, ':factory:', '🏭'); + Smilies::add($b, ':Japanese castle:', '🏯'); + Smilies::add($b, ':castle:', '🏰'); + Smilies::add($b, ':wedding:', '💒'); + Smilies::add($b, ':Tokyo tower:', '🗼'); + Smilies::add($b, ':Statue of Liberty:', '🗽'); + // place-religious - Smilies::add($b, ':church', '⛪'); - Smilies::add($b, ':mosque', '🕌'); -// Smilies::add($b, ':hindu temple', '🛕'); - Smilies::add($b, ':synagogue', '🕍'); - Smilies::add($b, ':shinto shrine', '⛩'); - Smilies::add($b, ':kaaba', '🕋'); + Smilies::add($b, ':church:', '⛪'); + Smilies::add($b, ':mosque:', '🕌'); +// Smilies::add($b, ':hindu temple:', '🛕'); + Smilies::add($b, ':synagogue:', '🕍'); + Smilies::add($b, ':shinto shrine:', '⛩'); + Smilies::add($b, ':kaaba:', '🕋'); // place-other - Smilies::add($b, ':fountain', '⛲'); - Smilies::add($b, ':tent', '⛺'); - Smilies::add($b, ':foggy', '🌁'); - Smilies::add($b, ':night with stars', '🌃'); - Smilies::add($b, ':cityscape', '🏙'); - Smilies::add($b, ':sunrise over mountains', '🌄'); - Smilies::add($b, ':sunrise', '🌅'); - Smilies::add($b, ':cityscape at dusk', '🌆'); - Smilies::add($b, ':sunset', '🌇'); - Smilies::add($b, ':bridge at night', '🌉'); - Smilies::add($b, ':hot springs', '♨'); - Smilies::add($b, ':carousel horse', '🎠'); - Smilies::add($b, ':ferris wheel', '🎡'); - Smilies::add($b, ':roller coaster', '🎢'); - Smilies::add($b, ':barber pole', '💈'); - Smilies::add($b, ':circus tent', '🎪'); + Smilies::add($b, ':fountain:', '⛲'); + Smilies::add($b, ':tent:', '⛺'); + Smilies::add($b, ':foggy:', '🌁'); + Smilies::add($b, ':night with stars:', '🌃'); + Smilies::add($b, ':cityscape:', '🏙'); + Smilies::add($b, ':sunrise over mountains:', '🌄'); + Smilies::add($b, ':sunrise:', '🌅'); + Smilies::add($b, ':cityscape at dusk:', '🌆'); + Smilies::add($b, ':sunset:', '🌇'); + Smilies::add($b, ':bridge at night:', '🌉'); + Smilies::add($b, ':hot springs:', '♨'); + Smilies::add($b, ':carousel horse:', '🎠'); + Smilies::add($b, ':ferris wheel:', '🎡'); + Smilies::add($b, ':roller coaster:', '🎢'); + Smilies::add($b, ':barber pole:', '💈'); + Smilies::add($b, ':circus tent:', '🎪'); // transport-ground - Smilies::add($b, ':locomotive', '🚂'); - Smilies::add($b, ':railway car', '🚃'); - Smilies::add($b, ':high-speed train', '🚄'); - Smilies::add($b, ':bullet train', '🚅'); - Smilies::add($b, ':train', '🚆'); - Smilies::add($b, ':metro', '🚇'); - Smilies::add($b, ':light rail', '🚈'); - Smilies::add($b, ':station', '🚉'); - Smilies::add($b, ':tram', '🚊'); - Smilies::add($b, ':monorail', '🚝'); - Smilies::add($b, ':mountain railway', '🚞'); - Smilies::add($b, ':tram car', '🚋'); - Smilies::add($b, ':bus', '🚌'); - Smilies::add($b, ':oncoming bus', '🚍'); - Smilies::add($b, ':trolleybus', '🚎'); - Smilies::add($b, ':minibus', '🚐'); - Smilies::add($b, ':ambulance', '🚑'); - Smilies::add($b, ':fire engine', '🚒'); - Smilies::add($b, ':police car', '🚓'); - Smilies::add($b, ':oncoming police car', '🚔'); - Smilies::add($b, ':taxi', '🚕'); - Smilies::add($b, ':oncoming taxi', '🚖'); - Smilies::add($b, ':automobile', '🚗'); - Smilies::add($b, ':oncoming automobile', '🚘'); - Smilies::add($b, ':sport utility vehicle', '🚙'); - Smilies::add($b, ':delivery truck', '🚚'); - Smilies::add($b, ':articulated lorry', '🚛'); - Smilies::add($b, ':tractor', '🚜'); - Smilies::add($b, ':racing car', '🏎'); - Smilies::add($b, ':motorcycle', '🏍'); - Smilies::add($b, ':motor scooter', '🛵'); -// Smilies::add($b, ':manual wheelchair', '🦽'); -// Smilies::add($b, ':motorized wheelchair', '🦼'); -// Smilies::add($b, ':auto rickshaw', '🛺'); - Smilies::add($b, ':bicycle', '🚲'); - Smilies::add($b, ':kick scooter', '🛴'); - Smilies::add($b, ':skateboard', '🛹'); - Smilies::add($b, ':bus stop', '🚏'); - Smilies::add($b, ':motorway', '🛣'); - Smilies::add($b, ':railway track', '🛤'); - Smilies::add($b, ':oil drum', '🛢'); - Smilies::add($b, ':fuel pump', '⛽'); - Smilies::add($b, ':police car light', '🚨'); - Smilies::add($b, ':horizontal traffic light', '🚥'); - Smilies::add($b, ':vertical traffic light', '🚦'); - Smilies::add($b, ':stop sign', '🛑'); - Smilies::add($b, ':construction', '🚧'); + Smilies::add($b, ':locomotive:', '🚂'); + Smilies::add($b, ':railway car:', '🚃'); + Smilies::add($b, ':high-speed train:', '🚄'); + Smilies::add($b, ':bullet train:', '🚅'); + Smilies::add($b, ':train:', '🚆'); + Smilies::add($b, ':metro:', '🚇'); + Smilies::add($b, ':light rail:', '🚈'); + Smilies::add($b, ':station:', '🚉'); + Smilies::add($b, ':tram:', '🚊'); + Smilies::add($b, ':monorail:', '🚝'); + Smilies::add($b, ':mountain railway:', '🚞'); + Smilies::add($b, ':tram car:', '🚋'); + Smilies::add($b, ':bus:', '🚌'); + Smilies::add($b, ':oncoming bus:', '🚍'); + Smilies::add($b, ':trolleybus:', '🚎'); + Smilies::add($b, ':minibus:', '🚐'); + Smilies::add($b, ':ambulance:', '🚑'); + Smilies::add($b, ':fire engine:', '🚒'); + Smilies::add($b, ':police car:', '🚓'); + Smilies::add($b, ':oncoming police car:', '🚔'); + Smilies::add($b, ':taxi:', '🚕'); + Smilies::add($b, ':oncoming taxi:', '🚖'); + Smilies::add($b, ':automobile:', '🚗'); + Smilies::add($b, ':oncoming automobile:', '🚘'); + Smilies::add($b, ':sport utility vehicle:', '🚙'); + Smilies::add($b, ':delivery truck:', '🚚'); + Smilies::add($b, ':articulated lorry:', '🚛'); + Smilies::add($b, ':tractor:', '🚜'); + Smilies::add($b, ':racing car:', '🏎'); + Smilies::add($b, ':motorcycle:', '🏍'); + Smilies::add($b, ':motor scooter:', '🛵'); +// Smilies::add($b, ':manual wheelchair:', '🦽'); +// Smilies::add($b, ':motorized wheelchair:', '🦼'); +// Smilies::add($b, ':auto rickshaw:', '🛺'); + Smilies::add($b, ':bicycle:', '🚲'); + Smilies::add($b, ':kick scooter:', '🛴'); + Smilies::add($b, ':skateboard:', '🛹'); + Smilies::add($b, ':bus stop:', '🚏'); + Smilies::add($b, ':motorway:', '🛣'); + Smilies::add($b, ':railway track:', '🛤'); + Smilies::add($b, ':oil drum:', '🛢'); + Smilies::add($b, ':fuel pump:', '⛽'); + Smilies::add($b, ':police car light:', '🚨'); + Smilies::add($b, ':horizontal traffic light:', '🚥'); + Smilies::add($b, ':vertical traffic light:', '🚦'); + Smilies::add($b, ':stop sign:', '🛑'); + Smilies::add($b, ':construction:', '🚧'); // transport-water - Smilies::add($b, ':anchor', '⚓'); - Smilies::add($b, ':sailboat', '⛵'); - Smilies::add($b, ':canoe', '🛶'); - Smilies::add($b, ':speedboat', '🚤'); - Smilies::add($b, ':passenger ship', '🛳'); - Smilies::add($b, ':ferry', '⛴'); - Smilies::add($b, ':motor boat', '🛥'); - Smilies::add($b, ':ship', '🚢'); + Smilies::add($b, ':anchor:', '⚓'); + Smilies::add($b, ':sailboat:', '⛵'); + Smilies::add($b, ':canoe:', '🛶'); + Smilies::add($b, ':speedboat:', '🚤'); + Smilies::add($b, ':passenger ship:', '🛳'); + Smilies::add($b, ':ferry:', '⛴'); + Smilies::add($b, ':motor boat:', '🛥'); + Smilies::add($b, ':ship:', '🚢'); // transport-air - Smilies::add($b, ':airplane', '✈'); - Smilies::add($b, ':small airplane', '🛩'); - Smilies::add($b, ':airplane departure', '🛫'); - Smilies::add($b, ':airplane arrival', '🛬'); -// Smilies::add($b, ':parachute', '🪂'); - Smilies::add($b, ':seat', '💺'); - Smilies::add($b, ':helicopter', '🚁'); - Smilies::add($b, ':suspension railway', '🚟'); - Smilies::add($b, ':mountain cableway', '🚠'); - Smilies::add($b, ':aerial tramway', '🚡'); - Smilies::add($b, ':satellite', '🛰'); - Smilies::add($b, ':rocket', '🚀'); - Smilies::add($b, ':flying saucer', '🛸'); + Smilies::add($b, ':airplane:', '✈'); + Smilies::add($b, ':small airplane:', '🛩'); + Smilies::add($b, ':airplane departure:', '🛫'); + Smilies::add($b, ':airplane arrival:', '🛬'); +// Smilies::add($b, ':parachute:', '🪂'); + Smilies::add($b, ':seat:', '💺'); + Smilies::add($b, ':helicopter:', '🚁'); + Smilies::add($b, ':suspension railway:', '🚟'); + Smilies::add($b, ':mountain cableway:', '🚠'); + Smilies::add($b, ':aerial tramway:', '🚡'); + Smilies::add($b, ':satellite:', '🛰'); + Smilies::add($b, ':rocket:', '🚀'); + Smilies::add($b, ':flying saucer:', '🛸'); // hotel - Smilies::add($b, ':bellhop bell', '🛎'); - Smilies::add($b, ':luggage', '🧳'); + Smilies::add($b, ':bellhop bell:', '🛎'); + Smilies::add($b, ':luggage:', '🧳'); // time - Smilies::add($b, ':hourglass done', '⌛'); - Smilies::add($b, ':hourglass not done', '⏳'); - Smilies::add($b, ':watch', '⌚'); - Smilies::add($b, ':alarm clock', '⏰'); - Smilies::add($b, ':stopwatch', '⏱'); - Smilies::add($b, ':timer clock', '⏲'); - Smilies::add($b, ':mantelpiece clock', '🕰'); - Smilies::add($b, ':twelve o’clock', '🕛'); - Smilies::add($b, ':twelve-thirty', '🕧'); - Smilies::add($b, ':one o’clock', '🕐'); - Smilies::add($b, ':one-thirty', '🕜'); - Smilies::add($b, ':two o’clock', '🕑'); - Smilies::add($b, ':two-thirty', '🕝'); - Smilies::add($b, ':three o’clock', '🕒'); - Smilies::add($b, ':three-thirty', '🕞'); - Smilies::add($b, ':four o’clock', '🕓'); - Smilies::add($b, ':four-thirty', '🕟'); - Smilies::add($b, ':five o’clock', '🕔'); - Smilies::add($b, ':five-thirty', '🕠'); - Smilies::add($b, ':six o’clock', '🕕'); - Smilies::add($b, ':six-thirty', '🕡'); - Smilies::add($b, ':seven o’clock', '🕖'); - Smilies::add($b, ':seven-thirty', '🕢'); - Smilies::add($b, ':eight o’clock', '🕗'); - Smilies::add($b, ':eight-thirty', '🕣'); - Smilies::add($b, ':nine o’clock', '🕘'); - Smilies::add($b, ':nine-thirty', '🕤'); - Smilies::add($b, ':ten o’clock', '🕙'); - Smilies::add($b, ':ten-thirty', '🕥'); - Smilies::add($b, ':eleven o’clock', '🕚'); - Smilies::add($b, ':eleven-thirty', '🕦'); + Smilies::add($b, ':hourglass done:', '⌛'); + Smilies::add($b, ':hourglass not done:', '⏳'); + Smilies::add($b, ':watch:', '⌚'); + Smilies::add($b, ':alarm clock:', '⏰'); + Smilies::add($b, ':stopwatch:', '⏱'); + Smilies::add($b, ':timer clock:', '⏲'); + Smilies::add($b, ':mantelpiece clock:', '🕰'); + Smilies::add($b, ':twelve o’clock:', '🕛'); + Smilies::add($b, ':twelve-thirty:', '🕧'); + Smilies::add($b, ':one o’clock:', '🕐'); + Smilies::add($b, ':one-thirty:', '🕜'); + Smilies::add($b, ':two o’clock:', '🕑'); + Smilies::add($b, ':two-thirty:', '🕝'); + Smilies::add($b, ':three o’clock:', '🕒'); + Smilies::add($b, ':three-thirty:', '🕞'); + Smilies::add($b, ':four o’clock:', '🕓'); + Smilies::add($b, ':four-thirty:', '🕟'); + Smilies::add($b, ':five o’clock:', '🕔'); + Smilies::add($b, ':five-thirty:', '🕠'); + Smilies::add($b, ':six o’clock:', '🕕'); + Smilies::add($b, ':six-thirty:', '🕡'); + Smilies::add($b, ':seven o’clock:', '🕖'); + Smilies::add($b, ':seven-thirty:', '🕢'); + Smilies::add($b, ':eight o’clock:', '🕗'); + Smilies::add($b, ':eight-thirty:', '🕣'); + Smilies::add($b, ':nine o’clock:', '🕘'); + Smilies::add($b, ':nine-thirty:', '🕤'); + Smilies::add($b, ':ten o’clock:', '🕙'); + Smilies::add($b, ':ten-thirty:', '🕥'); + Smilies::add($b, ':eleven o’clock:', '🕚'); + Smilies::add($b, ':eleven-thirty:', '🕦'); // sky & weather - Smilies::add($b, ':new moon', '🌑'); - Smilies::add($b, ':waxing crescent moon', '🌒'); - Smilies::add($b, ':first quarter moon', '🌓'); - Smilies::add($b, ':waxing gibbous moon', '🌔'); - Smilies::add($b, ':full moon', '🌕'); - Smilies::add($b, ':waning gibbous moon', '🌖'); - Smilies::add($b, ':last quarter moon', '🌗'); - Smilies::add($b, ':waning crescent moon', '🌘'); - Smilies::add($b, ':crescent moon', '🌙'); - Smilies::add($b, ':new moon face', '🌚'); - Smilies::add($b, ':first quarter moon face', '🌛'); - Smilies::add($b, ':last quarter moon face', '🌜'); - Smilies::add($b, ':thermometer', '🌡'); - Smilies::add($b, ':sun', '☀'); - Smilies::add($b, ':full moon face', '🌝'); - Smilies::add($b, ':sun with face', '🌞'); -// Smilies::add($b, ':ringed planet', '🪐'); - Smilies::add($b, ':star', '⭐'); - Smilies::add($b, ':glowing star', '🌟'); - Smilies::add($b, ':shooting star', '🌠'); - Smilies::add($b, ':milky way', '🌌'); - Smilies::add($b, ':cloud', '☁'); - Smilies::add($b, ':sun behind cloud', '⛅'); - Smilies::add($b, ':cloud with lightning and rain', '⛈'); - Smilies::add($b, ':sun behind small cloud', '🌤'); - Smilies::add($b, ':sun behind large cloud', '🌥'); - Smilies::add($b, ':sun behind rain cloud', '🌦'); - Smilies::add($b, ':cloud with rain', '🌧'); - Smilies::add($b, ':cloud with snow', '🌨'); - Smilies::add($b, ':cloud with lightning', '🌩'); - Smilies::add($b, ':tornado', '🌪'); - Smilies::add($b, ':fog', '🌫'); - Smilies::add($b, ':wind face', '🌬'); - Smilies::add($b, ':cyclone', '🌀'); - Smilies::add($b, ':rainbow', '🌈'); - Smilies::add($b, ':closed umbrella', '🌂'); - Smilies::add($b, ':umbrella', '☂'); - Smilies::add($b, ':umbrella with rain drops', '☔'); - Smilies::add($b, ':umbrella on ground', '⛱'); - Smilies::add($b, ':high voltage', '⚡'); - Smilies::add($b, ':snowflake', '❄'); - Smilies::add($b, ':snowman', '☃'); - Smilies::add($b, ':snowman without snow', '⛄'); - Smilies::add($b, ':comet', '☄'); - Smilies::add($b, ':fire', '🔥'); - Smilies::add($b, ':droplet', '💧'); - Smilies::add($b, ':water wave', '🌊'); + Smilies::add($b, ':new moon:', '🌑'); + Smilies::add($b, ':waxing crescent moon:', '🌒'); + Smilies::add($b, ':first quarter moon:', '🌓'); + Smilies::add($b, ':waxing gibbous moon:', '🌔'); + Smilies::add($b, ':full moon:', '🌕'); + Smilies::add($b, ':waning gibbous moon:', '🌖'); + Smilies::add($b, ':last quarter moon:', '🌗'); + Smilies::add($b, ':waning crescent moon:', '🌘'); + Smilies::add($b, ':crescent moon:', '🌙'); + Smilies::add($b, ':new moon face:', '🌚'); + Smilies::add($b, ':first quarter moon face:', '🌛'); + Smilies::add($b, ':last quarter moon face:', '🌜'); + Smilies::add($b, ':thermometer:', '🌡'); + Smilies::add($b, ':sun:', '☀'); + Smilies::add($b, ':full moon face:', '🌝'); + Smilies::add($b, ':sun with face:', '🌞'); +// Smilies::add($b, ':ringed planet:', '🪐'); + Smilies::add($b, ':star:', '⭐'); + Smilies::add($b, ':glowing star:', '🌟'); + Smilies::add($b, ':shooting star:', '🌠'); + Smilies::add($b, ':milky way:', '🌌'); + Smilies::add($b, ':cloud:', '☁'); + Smilies::add($b, ':sun behind cloud:', '⛅'); + Smilies::add($b, ':cloud with lightning and rain:', '⛈'); + Smilies::add($b, ':sun behind small cloud:', '🌤'); + Smilies::add($b, ':sun behind large cloud:', '🌥'); + Smilies::add($b, ':sun behind rain cloud:', '🌦'); + Smilies::add($b, ':cloud with rain:', '🌧'); + Smilies::add($b, ':cloud with snow:', '🌨'); + Smilies::add($b, ':cloud with lightning:', '🌩'); + Smilies::add($b, ':tornado:', '🌪'); + Smilies::add($b, ':fog:', '🌫'); + Smilies::add($b, ':wind face:', '🌬'); + Smilies::add($b, ':cyclone:', '🌀'); + Smilies::add($b, ':rainbow:', '🌈'); + Smilies::add($b, ':closed umbrella:', '🌂'); + Smilies::add($b, ':umbrella:', '☂'); + Smilies::add($b, ':umbrella with rain drops:', '☔'); + Smilies::add($b, ':umbrella on ground:', '⛱'); + Smilies::add($b, ':high voltage:', '⚡'); + Smilies::add($b, ':snowflake:', '❄'); + Smilies::add($b, ':snowman:', '☃'); + Smilies::add($b, ':snowman without snow:', '⛄'); + Smilies::add($b, ':comet:', '☄'); + Smilies::add($b, ':fire:', '🔥'); + Smilies::add($b, ':droplet:', '💧'); + Smilies::add($b, ':water wave:', '🌊'); // Activities // event - Smilies::add($b, ':jack-o-lantern', '🎃'); - Smilies::add($b, ':Christmas tree', '🎄'); - Smilies::add($b, ':fireworks', '🎆'); - Smilies::add($b, ':sparkler', '🎇'); - Smilies::add($b, ':firecracker', '🧨'); - Smilies::add($b, ':sparkles', '✨'); - Smilies::add($b, ':balloon', '🎈'); - Smilies::add($b, ':party popper', '🎉'); - Smilies::add($b, ':confetti ball', '🎊'); - Smilies::add($b, ':tanabata tree', '🎋'); - Smilies::add($b, ':pine decoration', '🎍'); - Smilies::add($b, ':Japanese dolls', '🎎'); - Smilies::add($b, ':carp streamer', '🎏'); - Smilies::add($b, ':wind chime', '🎐'); - Smilies::add($b, ':moon viewing ceremony', '🎑'); - Smilies::add($b, ':red envelope', '🧧'); - Smilies::add($b, ':ribbon', '🎀'); - Smilies::add($b, ':wrapped gift', '🎁'); - Smilies::add($b, ':reminder ribbon', '🎗'); - Smilies::add($b, ':admission tickets', '🎟'); - Smilies::add($b, ':ticket', '🎫'); + Smilies::add($b, ':jack-o-lantern:', '🎃'); + Smilies::add($b, ':Christmas tree:', '🎄'); + Smilies::add($b, ':fireworks:', '🎆'); + Smilies::add($b, ':sparkler:', '🎇'); + Smilies::add($b, ':firecracker:', '🧨'); + Smilies::add($b, ':sparkles:', '✨'); + Smilies::add($b, ':balloon:', '🎈'); + Smilies::add($b, ':party popper:', '🎉'); + Smilies::add($b, ':confetti ball:', '🎊'); + Smilies::add($b, ':tanabata tree:', '🎋'); + Smilies::add($b, ':pine decoration:', '🎍'); + Smilies::add($b, ':Japanese dolls:', '🎎'); + Smilies::add($b, ':carp streamer:', '🎏'); + Smilies::add($b, ':wind chime:', '🎐'); + Smilies::add($b, ':moon viewing ceremony:', '🎑'); + Smilies::add($b, ':red envelope:', '🧧'); + Smilies::add($b, ':ribbon:', '🎀'); + Smilies::add($b, ':wrapped gift:', '🎁'); + Smilies::add($b, ':reminder ribbon:', '🎗'); + Smilies::add($b, ':admission tickets:', '🎟'); + Smilies::add($b, ':ticket:', '🎫'); // award-medal - Smilies::add($b, ':military medal', '🎖'); - Smilies::add($b, ':trophy', '🏆'); - Smilies::add($b, ':sports medal', '🏅'); - Smilies::add($b, ':1st place medal', '🥇'); - Smilies::add($b, ':2nd place medal', '🥈'); - Smilies::add($b, ':3rd place medal', '🥉'); + Smilies::add($b, ':military medal:', '🎖'); + Smilies::add($b, ':trophy:', '🏆'); + Smilies::add($b, ':sports medal:', '🏅'); + Smilies::add($b, ':1st place medal:', '🥇'); + Smilies::add($b, ':2nd place medal:', '🥈'); + Smilies::add($b, ':3rd place medal:', '🥉'); // sport - Smilies::add($b, ':soccer ball', '⚽'); - Smilies::add($b, ':baseball', '⚾'); - Smilies::add($b, ':softball', '🥎'); - Smilies::add($b, ':basketball', '🏀'); - Smilies::add($b, ':volleyball', '🏐'); - Smilies::add($b, ':american football', '🏈'); - Smilies::add($b, ':rugby football', '🏉'); - Smilies::add($b, ':tennis', '🎾'); - Smilies::add($b, ':flying disc', '🥏'); - Smilies::add($b, ':bowling', '🎳'); - Smilies::add($b, ':cricket game', '🏏'); - Smilies::add($b, ':field hockey', '🏑'); - Smilies::add($b, ':ice hockey', '🏒'); - Smilies::add($b, ':lacrosse', '🥍'); - Smilies::add($b, ':ping pong', '🏓'); - Smilies::add($b, ':badminton', '🏸'); - Smilies::add($b, ':boxing glove', '🥊'); - Smilies::add($b, ':martial arts uniform', '🥋'); - Smilies::add($b, ':goal net', '🥅'); - Smilies::add($b, ':flag in hole', '⛳'); - Smilies::add($b, ':ice skate', '⛸'); - Smilies::add($b, ':fishing pole', '🎣'); -// Smilies::add($b, ':diving mask', '🤿'); - Smilies::add($b, ':running shirt', '🎽'); - Smilies::add($b, ':skis', '🎿'); - Smilies::add($b, ':sled', '🛷'); - Smilies::add($b, ':curling stone', '🥌'); + Smilies::add($b, ':soccer ball:', '⚽'); + Smilies::add($b, ':baseball:', '⚾'); + Smilies::add($b, ':softball:', '🥎'); + Smilies::add($b, ':basketball:', '🏀'); + Smilies::add($b, ':volleyball:', '🏐'); + Smilies::add($b, ':american football:', '🏈'); + Smilies::add($b, ':rugby football:', '🏉'); + Smilies::add($b, ':tennis:', '🎾'); + Smilies::add($b, ':flying disc:', '🥏'); + Smilies::add($b, ':bowling:', '🎳'); + Smilies::add($b, ':cricket game:', '🏏'); + Smilies::add($b, ':field hockey:', '🏑'); + Smilies::add($b, ':ice hockey:', '🏒'); + Smilies::add($b, ':lacrosse:', '🥍'); + Smilies::add($b, ':ping pong:', '🏓'); + Smilies::add($b, ':badminton:', '🏸'); + Smilies::add($b, ':boxing glove:', '🥊'); + Smilies::add($b, ':martial arts uniform:', '🥋'); + Smilies::add($b, ':goal net:', '🥅'); + Smilies::add($b, ':flag in hole:', '⛳'); + Smilies::add($b, ':ice skate:', '⛸'); + Smilies::add($b, ':fishing pole:', '🎣'); +// Smilies::add($b, ':diving mask:', '🤿'); + Smilies::add($b, ':running shirt:', '🎽'); + Smilies::add($b, ':skis:', '🎿'); + Smilies::add($b, ':sled:', '🛷'); + Smilies::add($b, ':curling stone:', '🥌'); // game - Smilies::add($b, ':direct hit', '🎯'); -// Smilies::add($b, ':yo-yo', '🪀'); -// Smilies::add($b, ':kite', '🪁'); - Smilies::add($b, ':pool 8 ball', '🎱'); - Smilies::add($b, ':crystal ball', '🔮'); - Smilies::add($b, ':nazar amulet', '🧿'); - Smilies::add($b, ':video game', '🎮'); - Smilies::add($b, ':joystick', '🕹'); - Smilies::add($b, ':slot machine', '🎰'); - Smilies::add($b, ':game die', '🎲'); - Smilies::add($b, ':puzzle piece', '🧩'); - Smilies::add($b, ':teddy bear', '🧸'); - Smilies::add($b, ':spade suit', '♠'); - Smilies::add($b, ':heart suit', '♥'); - Smilies::add($b, ':diamond suit', '♦'); - Smilies::add($b, ':club suit', '♣'); - Smilies::add($b, ':chess pawn', '♟'); - Smilies::add($b, ':joker', '🃏'); - Smilies::add($b, ':mahjong red dragon', '🀄'); - Smilies::add($b, ':flower playing cards', '🎴'); + Smilies::add($b, ':direct hit:', '🎯'); +// Smilies::add($b, ':yo-yo:', '🪀'); +// Smilies::add($b, ':kite:', '🪁'); + Smilies::add($b, ':pool 8 ball:', '🎱'); + Smilies::add($b, ':crystal ball:', '🔮'); + Smilies::add($b, ':nazar amulet:', '🧿'); + Smilies::add($b, ':video game:', '🎮'); + Smilies::add($b, ':joystick:', '🕹'); + Smilies::add($b, ':slot machine:', '🎰'); + Smilies::add($b, ':game die:', '🎲'); + Smilies::add($b, ':puzzle piece:', '🧩'); + Smilies::add($b, ':teddy bear:', '🧸'); + Smilies::add($b, ':spade suit:', '♠'); + Smilies::add($b, ':heart suit:', '♥'); + Smilies::add($b, ':diamond suit:', '♦'); + Smilies::add($b, ':club suit:', '♣'); + Smilies::add($b, ':chess pawn:', '♟'); + Smilies::add($b, ':joker:', '🃏'); + Smilies::add($b, ':mahjong red dragon:', '🀄'); + Smilies::add($b, ':flower playing cards:', '🎴'); // arts & crafts - Smilies::add($b, ':performing arts', '🎭'); - Smilies::add($b, ':framed picture', '🖼'); - Smilies::add($b, ':artist palette', '🎨'); - Smilies::add($b, ':thread', '🧵'); - Smilies::add($b, ':yarn', '🧶'); + Smilies::add($b, ':performing arts:', '🎭'); + Smilies::add($b, ':framed picture:', '🖼'); + Smilies::add($b, ':artist palette:', '🎨'); + Smilies::add($b, ':thread:', '🧵'); + Smilies::add($b, ':yarn:', '🧶'); // Objects // clothing - Smilies::add($b, ':glasses', '👓'); - Smilies::add($b, ':sunglasses', '🕶'); - Smilies::add($b, ':goggles', '🥽'); - Smilies::add($b, ':lab coat', '🥼'); -// Smilies::add($b, ':safety vest', '🦺'); - Smilies::add($b, ':necktie', '👔'); - Smilies::add($b, ':t-shirt', '👕'); - Smilies::add($b, ':jeans', '👖'); - Smilies::add($b, ':scarf', '🧣'); - Smilies::add($b, ':gloves', '🧤'); - Smilies::add($b, ':coat', '🧥'); - Smilies::add($b, ':socks', '🧦'); - Smilies::add($b, ':dress', '👗'); - Smilies::add($b, ':kimono', '👘'); -// Smilies::add($b, ':sari', '🥻'); -// Smilies::add($b, ':one-piece swimsuit', '🩱'); -// Smilies::add($b, ':briefs', '🩲'); -// Smilies::add($b, ':shorts', '🩳'); - Smilies::add($b, ':bikini', '👙'); - Smilies::add($b, ':woman’s clothes', '👚'); - Smilies::add($b, ':purse', '👛'); - Smilies::add($b, ':handbag', '👜'); - Smilies::add($b, ':clutch bag', '👝'); - Smilies::add($b, ':shopping bags', '🛍'); - Smilies::add($b, ':backpack', '🎒'); - Smilies::add($b, ':man’s shoe', '👞'); - Smilies::add($b, ':running shoe', '👟'); - Smilies::add($b, ':hiking boot', '🥾'); - Smilies::add($b, ':flat shoe', '🥿'); - Smilies::add($b, ':high-heeled shoe', '👠'); - Smilies::add($b, ':woman’s sandal', '👡'); -// Smilies::add($b, ':ballet shoes', '🩰'); - Smilies::add($b, ':woman’s boot', '👢'); - Smilies::add($b, ':crown', '👑'); - Smilies::add($b, ':woman’s hat', '👒'); - Smilies::add($b, ':top hat', '🎩'); - Smilies::add($b, ':graduation cap', '🎓'); - Smilies::add($b, ':billed cap', '🧢'); - Smilies::add($b, ':rescue worker’s helmet', '⛑'); - Smilies::add($b, ':prayer beads', '📿'); - Smilies::add($b, ':lipstick', '💄'); - Smilies::add($b, ':ring', '💍'); - Smilies::add($b, ':gem stone', '💎'); + Smilies::add($b, ':glasses:', '👓'); + Smilies::add($b, ':sunglasses:', '🕶'); + Smilies::add($b, ':goggles:', '🥽'); + Smilies::add($b, ':lab coat:', '🥼'); +// Smilies::add($b, ':safety vest:', '🦺'); + Smilies::add($b, ':necktie:', '👔'); + Smilies::add($b, ':t-shirt:', '👕'); + Smilies::add($b, ':jeans:', '👖'); + Smilies::add($b, ':scarf:', '🧣'); + Smilies::add($b, ':gloves:', '🧤'); + Smilies::add($b, ':coat:', '🧥'); + Smilies::add($b, ':socks:', '🧦'); + Smilies::add($b, ':dress:', '👗'); + Smilies::add($b, ':kimono:', '👘'); +// Smilies::add($b, ':sari:', '🥻'); +// Smilies::add($b, ':one-piece swimsuit:', '🩱'); +// Smilies::add($b, ':briefs:', '🩲'); +// Smilies::add($b, ':shorts:', '🩳'); + Smilies::add($b, ':bikini:', '👙'); + Smilies::add($b, ':woman’s clothes:', '👚'); + Smilies::add($b, ':purse:', '👛'); + Smilies::add($b, ':handbag:', '👜'); + Smilies::add($b, ':clutch bag:', '👝'); + Smilies::add($b, ':shopping bags:', '🛍'); + Smilies::add($b, ':backpack:', '🎒'); + Smilies::add($b, ':man’s shoe:', '👞'); + Smilies::add($b, ':running shoe:', '👟'); + Smilies::add($b, ':hiking boot:', '🥾'); + Smilies::add($b, ':flat shoe:', '🥿'); + Smilies::add($b, ':high-heeled shoe:', '👠'); + Smilies::add($b, ':woman’s sandal:', '👡'); +// Smilies::add($b, ':ballet shoes:', '🩰'); + Smilies::add($b, ':woman’s boot:', '👢'); + Smilies::add($b, ':crown:', '👑'); + Smilies::add($b, ':woman’s hat:', '👒'); + Smilies::add($b, ':top hat:', '🎩'); + Smilies::add($b, ':graduation cap:', '🎓'); + Smilies::add($b, ':billed cap:', '🧢'); + Smilies::add($b, ':rescue worker’s helmet:', '⛑'); + Smilies::add($b, ':prayer beads:', '📿'); + Smilies::add($b, ':lipstick:', '💄'); + Smilies::add($b, ':ring:', '💍'); + Smilies::add($b, ':gem stone:', '💎'); // sound - Smilies::add($b, ':muted speaker', '🔇'); - Smilies::add($b, ':speaker low volume', '🔈'); - Smilies::add($b, ':speaker medium volume', '🔉'); - Smilies::add($b, ':speaker high volume', '🔊'); - Smilies::add($b, ':loudspeaker', '📢'); - Smilies::add($b, ':megaphone', '📣'); - Smilies::add($b, ':postal horn', '📯'); - Smilies::add($b, ':bell', '🔔'); - Smilies::add($b, ':bell with slash', '🔕'); + Smilies::add($b, ':muted speaker:', '🔇'); + Smilies::add($b, ':speaker low volume:', '🔈'); + Smilies::add($b, ':speaker medium volume:', '🔉'); + Smilies::add($b, ':speaker high volume:', '🔊'); + Smilies::add($b, ':loudspeaker:', '📢'); + Smilies::add($b, ':megaphone:', '📣'); + Smilies::add($b, ':postal horn:', '📯'); + Smilies::add($b, ':bell:', '🔔'); + Smilies::add($b, ':bell with slash:', '🔕'); // musik - Smilies::add($b, ':musical score', '🎼'); - Smilies::add($b, ':musical note', '🎵'); - Smilies::add($b, ':musical notes', '🎶'); - Smilies::add($b, ':studio microphone', '🎙'); - Smilies::add($b, ':level slider', '🎚'); - Smilies::add($b, ':control knobs', '🎛'); - Smilies::add($b, ':microphone', '🎤'); - Smilies::add($b, ':headphone', '🎧'); - Smilies::add($b, ':radio', '📻'); + Smilies::add($b, ':musical score:', '🎼'); + Smilies::add($b, ':musical note:', '🎵'); + Smilies::add($b, ':musical notes:', '🎶'); + Smilies::add($b, ':studio microphone:', '🎙'); + Smilies::add($b, ':level slider:', '🎚'); + Smilies::add($b, ':control knobs:', '🎛'); + Smilies::add($b, ':microphone:', '🎤'); + Smilies::add($b, ':headphone:', '🎧'); + Smilies::add($b, ':radio:', '📻'); // musical-instrument - Smilies::add($b, ':saxophone', '🎷'); - Smilies::add($b, ':guitar', '🎸'); - Smilies::add($b, ':musical keyboard', '🎹'); - Smilies::add($b, ':trumpet', '🎺'); - Smilies::add($b, ':violin', '🎻'); -// Smilies::add($b, ':banjo', '🪕'); - Smilies::add($b, ':drum', '🥁'); + Smilies::add($b, ':saxophone:', '🎷'); + Smilies::add($b, ':guitar:', '🎸'); + Smilies::add($b, ':musical keyboard:', '🎹'); + Smilies::add($b, ':trumpet:', '🎺'); + Smilies::add($b, ':violin:', '🎻'); +// Smilies::add($b, ':banjo:', '🪕'); + Smilies::add($b, ':drum:', '🥁'); // phone - Smilies::add($b, ':mobile phone', '📱'); - Smilies::add($b, ':mobile phone with arrow', '📲'); - Smilies::add($b, ':telephone', '☎'); - Smilies::add($b, ':telephone receiver', '📞'); - Smilies::add($b, ':pager', '📟'); - Smilies::add($b, ':fax machine', '📠'); + Smilies::add($b, ':mobile phone:', '📱'); + Smilies::add($b, ':mobile phone with arrow:', '📲'); + Smilies::add($b, ':telephone:', '☎'); + Smilies::add($b, ':telephone receiver:', '📞'); + Smilies::add($b, ':pager:', '📟'); + Smilies::add($b, ':fax machine:', '📠'); // computer - Smilies::add($b, ':battery', '🔋'); - Smilies::add($b, ':electric plug', '🔌'); - Smilies::add($b, ':laptop', '💻'); - Smilies::add($b, ':desktop computer', '🖥'); - Smilies::add($b, ':printer', '🖨'); - Smilies::add($b, ':keyboard', '⌨'); - Smilies::add($b, ':computer mouse', '🖱'); - Smilies::add($b, ':trackball', '🖲'); - Smilies::add($b, ':computer disk', '💽'); - Smilies::add($b, ':floppy disk', '💾'); - Smilies::add($b, ':optical disk', '💿'); - Smilies::add($b, ':dvd', '📀'); - Smilies::add($b, ':abacus', '🧮'); + Smilies::add($b, ':battery:', '🔋'); + Smilies::add($b, ':electric plug:', '🔌'); + Smilies::add($b, ':laptop:', '💻'); + Smilies::add($b, ':desktop computer:', '🖥'); + Smilies::add($b, ':printer:', '🖨'); + Smilies::add($b, ':keyboard:', '⌨'); + Smilies::add($b, ':computer mouse:', '🖱'); + Smilies::add($b, ':trackball:', '🖲'); + Smilies::add($b, ':computer disk:', '💽'); + Smilies::add($b, ':floppy disk:', '💾'); + Smilies::add($b, ':optical disk:', '💿'); + Smilies::add($b, ':dvd:', '📀'); + Smilies::add($b, ':abacus:', '🧮'); // light & video - Smilies::add($b, ':movie camera', '🎥'); - Smilies::add($b, ':film frames', '🎞'); - Smilies::add($b, ':film projector', '📽'); - Smilies::add($b, ':clapper board', '🎬'); - Smilies::add($b, ':television', '📺'); - Smilies::add($b, ':camera', '📷'); - Smilies::add($b, ':camera with flash', '📸'); - Smilies::add($b, ':video camera', '📹'); - Smilies::add($b, ':videocassette', '📼'); - Smilies::add($b, ':magnifying glass tilted left', '🔍'); - Smilies::add($b, ':magnifying glass tilted right', '🔎'); - Smilies::add($b, ':candle', '🕯'); - Smilies::add($b, ':light bulb', '💡'); - Smilies::add($b, ':flashlight', '🔦'); - Smilies::add($b, ':red paper lantern', '🏮'); -// Smilies::add($b, ':diya lamp', '🪔'); + Smilies::add($b, ':movie camera:', '🎥'); + Smilies::add($b, ':film frames:', '🎞'); + Smilies::add($b, ':film projector:', '📽'); + Smilies::add($b, ':clapper board:', '🎬'); + Smilies::add($b, ':television:', '📺'); + Smilies::add($b, ':camera:', '📷'); + Smilies::add($b, ':camera with flash:', '📸'); + Smilies::add($b, ':video camera:', '📹'); + Smilies::add($b, ':videocassette:', '📼'); + Smilies::add($b, ':magnifying glass tilted left:', '🔍'); + Smilies::add($b, ':magnifying glass tilted right:', '🔎'); + Smilies::add($b, ':candle:', '🕯'); + Smilies::add($b, ':light bulb:', '💡'); + Smilies::add($b, ':flashlight:', '🔦'); + Smilies::add($b, ':red paper lantern:', '🏮'); +// Smilies::add($b, ':diya lamp:', '🪔'); // book-paper - Smilies::add($b, ':notebook with decorative cover', '📔'); - Smilies::add($b, ':closed book', '📕'); - Smilies::add($b, ':open book', '📖'); - Smilies::add($b, ':green book', '📗'); - Smilies::add($b, ':blue book', '📘'); - Smilies::add($b, ':orange book', '📙'); - Smilies::add($b, ':books', '📚'); - Smilies::add($b, ':notebook', '📓'); - Smilies::add($b, ':ledger', '📒'); - Smilies::add($b, ':page with curl', '📃'); - Smilies::add($b, ':scroll', '📜'); - Smilies::add($b, ':page facing up', '📄'); - Smilies::add($b, ':newspaper', '📰'); - Smilies::add($b, ':rolled-up newspaper', '🗞'); - Smilies::add($b, ':bookmark tabs', '📑'); - Smilies::add($b, ':bookmark', '🔖'); - Smilies::add($b, ':label', '🏷'); + Smilies::add($b, ':notebook with decorative cover:', '📔'); + Smilies::add($b, ':closed book:', '📕'); + Smilies::add($b, ':open book:', '📖'); + Smilies::add($b, ':green book:', '📗'); + Smilies::add($b, ':blue book:', '📘'); + Smilies::add($b, ':orange book:', '📙'); + Smilies::add($b, ':books:', '📚'); + Smilies::add($b, ':notebook:', '📓'); + Smilies::add($b, ':ledger:', '📒'); + Smilies::add($b, ':page with curl:', '📃'); + Smilies::add($b, ':scroll:', '📜'); + Smilies::add($b, ':page facing up:', '📄'); + Smilies::add($b, ':newspaper:', '📰'); + Smilies::add($b, ':rolled-up newspaper:', '🗞'); + Smilies::add($b, ':bookmark tabs:', '📑'); + Smilies::add($b, ':bookmark:', '🔖'); + Smilies::add($b, ':label:', '🏷'); // money - Smilies::add($b, ':money bag', '💰'); - Smilies::add($b, ':yen banknote', '💴'); - Smilies::add($b, ':dollar banknote', '💵'); - Smilies::add($b, ':euro banknote', '💶'); - Smilies::add($b, ':pound banknote', '💷'); - Smilies::add($b, ':money with wings', '💸'); - Smilies::add($b, ':credit card', '💳'); - Smilies::add($b, ':receipt', '🧾'); - Smilies::add($b, ':chart increasing with yen', '💹'); + Smilies::add($b, ':money bag:', '💰'); + Smilies::add($b, ':yen banknote:', '💴'); + Smilies::add($b, ':dollar banknote:', '💵'); + Smilies::add($b, ':euro banknote:', '💶'); + Smilies::add($b, ':pound banknote:', '💷'); + Smilies::add($b, ':money with wings:', '💸'); + Smilies::add($b, ':credit card:', '💳'); + Smilies::add($b, ':receipt:', '🧾'); + Smilies::add($b, ':chart increasing with yen:', '💹'); // mail - Smilies::add($b, ':envelope', '✉'); - Smilies::add($b, ':e-mail', '📧'); - Smilies::add($b, ':incoming envelope', '📨'); - Smilies::add($b, ':envelope with arrow', '📩'); - Smilies::add($b, ':outbox tray', '📤'); - Smilies::add($b, ':inbox tray', '📥'); - Smilies::add($b, ':package', '📦'); - Smilies::add($b, ':closed mailbox with raised flag', '📫'); - Smilies::add($b, ':closed mailbox with lowered flag', '📪'); - Smilies::add($b, ':open mailbox with raised flag', '📬'); - Smilies::add($b, ':open mailbox with lowered flag', '📭'); - Smilies::add($b, ':postbox', '📮'); - Smilies::add($b, ':ballot box with ballot', '🗳'); + Smilies::add($b, ':envelope:', '✉'); + Smilies::add($b, ':e-mail:', '📧'); + Smilies::add($b, ':incoming envelope:', '📨'); + Smilies::add($b, ':envelope with arrow:', '📩'); + Smilies::add($b, ':outbox tray:', '📤'); + Smilies::add($b, ':inbox tray:', '📥'); + Smilies::add($b, ':package:', '📦'); + Smilies::add($b, ':closed mailbox with raised flag:', '📫'); + Smilies::add($b, ':closed mailbox with lowered flag:', '📪'); + Smilies::add($b, ':open mailbox with raised flag:', '📬'); + Smilies::add($b, ':open mailbox with lowered flag:', '📭'); + Smilies::add($b, ':postbox:', '📮'); + Smilies::add($b, ':ballot box with ballot:', '🗳'); // writing - Smilies::add($b, ':pencil', '✏'); - Smilies::add($b, ':black nib', '✒'); - Smilies::add($b, ':fountain pen', '🖋'); - Smilies::add($b, ':pen', '🖊'); - Smilies::add($b, ':paintbrush', '🖌'); - Smilies::add($b, ':crayon', '🖍'); - Smilies::add($b, ':memo', '📝'); + Smilies::add($b, ':pencil:', '✏'); + Smilies::add($b, ':black nib:', '✒'); + Smilies::add($b, ':fountain pen:', '🖋'); + Smilies::add($b, ':pen:', '🖊'); + Smilies::add($b, ':paintbrush:', '🖌'); + Smilies::add($b, ':crayon:', '🖍'); + Smilies::add($b, ':memo:', '📝'); // office - Smilies::add($b, ':briefcase', '💼'); - Smilies::add($b, ':file folder', '📁'); - Smilies::add($b, ':open file folder', '📂'); - Smilies::add($b, ':card index dividers', '🗂'); - Smilies::add($b, ':calendar', '📅'); - Smilies::add($b, ':tear-off calendar', '📆'); - Smilies::add($b, ':spiral notepad', '🗒'); - Smilies::add($b, ':spiral calendar', '🗓'); - Smilies::add($b, ':card index', '📇'); - Smilies::add($b, ':chart increasing', '📈'); - Smilies::add($b, ':chart decreasing', '📉'); - Smilies::add($b, ':bar chart', '📊'); - Smilies::add($b, ':clipboard', '📋'); - Smilies::add($b, ':pushpin', '📌'); - Smilies::add($b, ':round pushpin', '📍'); - Smilies::add($b, ':paperclip', '📎'); - Smilies::add($b, ':linked paperclips', '🖇'); - Smilies::add($b, ':straight ruler', '📏'); - Smilies::add($b, ':triangular ruler', '📐'); - Smilies::add($b, ':scissors', '✂'); - Smilies::add($b, ':card file box', '🗃'); - Smilies::add($b, ':file cabinet', '🗄'); - Smilies::add($b, ':wastebasket', '🗑'); + Smilies::add($b, ':briefcase:', '💼'); + Smilies::add($b, ':file folder:', '📁'); + Smilies::add($b, ':open file folder:', '📂'); + Smilies::add($b, ':card index dividers:', '🗂'); + Smilies::add($b, ':calendar:', '📅'); + Smilies::add($b, ':tear-off calendar:', '📆'); + Smilies::add($b, ':spiral notepad:', '🗒'); + Smilies::add($b, ':spiral calendar:', '🗓'); + Smilies::add($b, ':card index:', '📇'); + Smilies::add($b, ':chart increasing:', '📈'); + Smilies::add($b, ':chart decreasing:', '📉'); + Smilies::add($b, ':bar chart:', '📊'); + Smilies::add($b, ':clipboard:', '📋'); + Smilies::add($b, ':pushpin:', '📌'); + Smilies::add($b, ':round pushpin:', '📍'); + Smilies::add($b, ':paperclip:', '📎'); + Smilies::add($b, ':linked paperclips:', '🖇'); + Smilies::add($b, ':straight ruler:', '📏'); + Smilies::add($b, ':triangular ruler:', '📐'); + Smilies::add($b, ':scissors:', '✂'); + Smilies::add($b, ':card file box:', '🗃'); + Smilies::add($b, ':file cabinet:', '🗄'); + Smilies::add($b, ':wastebasket:', '🗑'); // lock - Smilies::add($b, ':locked', '🔒'); - Smilies::add($b, ':unlocked', '🔓'); - Smilies::add($b, ':locked with pen', '🔏'); - Smilies::add($b, ':locked with key', '🔐'); - Smilies::add($b, ':key', '🔑'); - Smilies::add($b, ':old key', '🗝'); + Smilies::add($b, ':locked:', '🔒'); + Smilies::add($b, ':unlocked:', '🔓'); + Smilies::add($b, ':locked with pen:', '🔏'); + Smilies::add($b, ':locked with key:', '🔐'); + Smilies::add($b, ':key:', '🔑'); + Smilies::add($b, ':old key:', '🗝'); // tool - Smilies::add($b, ':hammer', '🔨'); -// Smilies::add($b, ':axe', '🪓'); - Smilies::add($b, ':pick', '⛏'); - Smilies::add($b, ':hammer and pick', '⚒'); - Smilies::add($b, ':hammer and wrench', '🛠'); - Smilies::add($b, ':dagger', '🗡'); - Smilies::add($b, ':crossed swords', '⚔'); - Smilies::add($b, ':pistol', '🔫'); - Smilies::add($b, ':bow and arrow', '🏹'); - Smilies::add($b, ':shield', '🛡'); - Smilies::add($b, ':wrench', '🔧'); - Smilies::add($b, ':nut and bolt', '🔩'); - Smilies::add($b, ':gear', '⚙'); - Smilies::add($b, ':clamp', '🗜'); - Smilies::add($b, ':balance scale', '⚖'); -// Smilies::add($b, ':white cane', '🦯'); - Smilies::add($b, ':link', '🔗'); - Smilies::add($b, ':chains', '⛓'); - Smilies::add($b, ':toolbox', '🧰'); - Smilies::add($b, ':magnet', '🧲'); + Smilies::add($b, ':hammer:', '🔨'); +// Smilies::add($b, ':axe:', '🪓'); + Smilies::add($b, ':pick:', '⛏'); + Smilies::add($b, ':hammer and pick:', '⚒'); + Smilies::add($b, ':hammer and wrench:', '🛠'); + Smilies::add($b, ':dagger:', '🗡'); + Smilies::add($b, ':crossed swords:', '⚔'); + Smilies::add($b, ':pistol:', '🔫'); + Smilies::add($b, ':bow and arrow:', '🏹'); + Smilies::add($b, ':shield:', '🛡'); + Smilies::add($b, ':wrench:', '🔧'); + Smilies::add($b, ':nut and bolt:', '🔩'); + Smilies::add($b, ':gear:', '⚙'); + Smilies::add($b, ':clamp:', '🗜'); + Smilies::add($b, ':balance scale:', '⚖'); +// Smilies::add($b, ':white cane:', '🦯'); + Smilies::add($b, ':link:', '🔗'); + Smilies::add($b, ':chains:', '⛓'); + Smilies::add($b, ':toolbox:', '🧰'); + Smilies::add($b, ':magnet:', '🧲'); // science - Smilies::add($b, ':alembic', '⚗'); - Smilies::add($b, ':test tube', '🧪'); - Smilies::add($b, ':petri dish', '🧫'); - Smilies::add($b, ':dna', '🧬'); - Smilies::add($b, ':microscope', '🔬'); - Smilies::add($b, ':telescope', '🔭'); - Smilies::add($b, ':satellite antenna', '📡'); + Smilies::add($b, ':alembic:', '⚗'); + Smilies::add($b, ':test tube:', '🧪'); + Smilies::add($b, ':petri dish:', '🧫'); + Smilies::add($b, ':dna:', '🧬'); + Smilies::add($b, ':microscope:', '🔬'); + Smilies::add($b, ':telescope:', '🔭'); + Smilies::add($b, ':satellite antenna:', '📡'); // medical - Smilies::add($b, ':syringe', '💉'); -// Smilies::add($b, ':drop of blood', '🩸'); - Smilies::add($b, ':pill', '💊'); -// Smilies::add($b, ':adhesive bandage', '🩹'); -// Smilies::add($b, ':stethoscope', '🩺'); + Smilies::add($b, ':syringe:', '💉'); +// Smilies::add($b, ':drop of blood:', '🩸'); + Smilies::add($b, ':pill:', '💊'); +// Smilies::add($b, ':adhesive bandage:', '🩹'); +// Smilies::add($b, ':stethoscope:', '🩺'); // household - Smilies::add($b, ':door', '🚪'); - Smilies::add($b, ':bed', '🛏'); - Smilies::add($b, ':couch and lamp', '🛋'); -// Smilies::add($b, ':chair', '🪑'); - Smilies::add($b, ':toilet', '🚽'); - Smilies::add($b, ':shower', '🚿'); -// Smilies::add($b, ':bathtub', '🛁'); -// Smilies::add($b, ':razor', '🪒'); - Smilies::add($b, ':lotion bottle', '🧴'); - Smilies::add($b, ':safety pin', '🧷'); - Smilies::add($b, ':broom', '🧹'); - Smilies::add($b, ':basket', '🧺'); - Smilies::add($b, ':roll of paper', '🧻'); - Smilies::add($b, ':soap', '🧼'); - Smilies::add($b, ':sponge', '🧽'); - Smilies::add($b, ':fire extinguisher', '🧯'); - Smilies::add($b, ':shopping cart', '🛒'); + Smilies::add($b, ':door:', '🚪'); + Smilies::add($b, ':bed:', '🛏'); + Smilies::add($b, ':couch and lamp:', '🛋'); +// Smilies::add($b, ':chair:', '🪑'); + Smilies::add($b, ':toilet:', '🚽'); + Smilies::add($b, ':shower:', '🚿'); +// Smilies::add($b, ':bathtub:', '🛁'); +// Smilies::add($b, ':razor:', '🪒'); + Smilies::add($b, ':lotion bottle:', '🧴'); + Smilies::add($b, ':safety pin:', '🧷'); + Smilies::add($b, ':broom:', '🧹'); + Smilies::add($b, ':basket:', '🧺'); + Smilies::add($b, ':roll of paper:', '🧻'); + Smilies::add($b, ':soap:', '🧼'); + Smilies::add($b, ':sponge:', '🧽'); + Smilies::add($b, ':fire extinguisher:', '🧯'); + Smilies::add($b, ':shopping cart:', '🛒'); // other-object - Smilies::add($b, ':cigarette', '🚬'); - Smilies::add($b, ':coffin', '⚰'); - Smilies::add($b, ':funeral urn', '⚱'); - Smilies::add($b, ':moai', '🗿'); + Smilies::add($b, ':cigarette:', '🚬'); + Smilies::add($b, ':coffin:', '⚰'); + Smilies::add($b, ':funeral urn:', '⚱'); + Smilies::add($b, ':moai:', '🗿'); // Symbols // transport-sign - Smilies::add($b, ':atm sign', '🏧'); - Smilies::add($b, ':litter in bin sign', '🚮'); - Smilies::add($b, ':potable water', '🚰'); - Smilies::add($b, ':wheelchair symbol', '♿'); - Smilies::add($b, ':men’s room', '🚹'); - Smilies::add($b, ':women’s room', '🚺'); - Smilies::add($b, ':restroom', '🚻'); - Smilies::add($b, ':baby symbol', '🚼'); - Smilies::add($b, ':water closet', '🚾'); - Smilies::add($b, ':passport control', '🛂'); - Smilies::add($b, ':customs', '🛃'); - Smilies::add($b, ':baggage claim', '🛄'); - Smilies::add($b, ':left luggage', '🛅'); + Smilies::add($b, ':atm sign:', '🏧'); + Smilies::add($b, ':litter in bin sign:', '🚮'); + Smilies::add($b, ':potable water:', '🚰'); + Smilies::add($b, ':wheelchair symbol:', '♿'); + Smilies::add($b, ':men’s room:', '🚹'); + Smilies::add($b, ':women’s room:', '🚺'); + Smilies::add($b, ':restroom:', '🚻'); + Smilies::add($b, ':baby symbol:', '🚼'); + Smilies::add($b, ':water closet:', '🚾'); + Smilies::add($b, ':passport control:', '🛂'); + Smilies::add($b, ':customs:', '🛃'); + Smilies::add($b, ':baggage claim:', '🛄'); + Smilies::add($b, ':left luggage:', '🛅'); // warning - Smilies::add($b, ':warning', '⚠'); - Smilies::add($b, ':children crossing', '🚸'); - Smilies::add($b, ':no entry', '⛔'); - Smilies::add($b, ':prohibited', '🚫'); - Smilies::add($b, ':no bicycles', '🚳'); - Smilies::add($b, ':no smoking', '🚭'); - Smilies::add($b, ':no littering', '🚯'); - Smilies::add($b, ':non-potable water', '🚱'); - Smilies::add($b, ':no pedestrians', '🚷'); - Smilies::add($b, ':no mobile phones', '📵'); - Smilies::add($b, ':no one under eighteen', '🔞'); - Smilies::add($b, ':radioactive', '☢'); - Smilies::add($b, ':biohazard', '☣'); + Smilies::add($b, ':warning:', '⚠'); + Smilies::add($b, ':children crossing:', '🚸'); + Smilies::add($b, ':no entry:', '⛔'); + Smilies::add($b, ':prohibited:', '🚫'); + Smilies::add($b, ':no bicycles:', '🚳'); + Smilies::add($b, ':no smoking:', '🚭'); + Smilies::add($b, ':no littering:', '🚯'); + Smilies::add($b, ':non-potable water:', '🚱'); + Smilies::add($b, ':no pedestrians:', '🚷'); + Smilies::add($b, ':no mobile phones:', '📵'); + Smilies::add($b, ':no one under eighteen:', '🔞'); + Smilies::add($b, ':radioactive:', '☢'); + Smilies::add($b, ':biohazard:', '☣'); // arrow - Smilies::add($b, ':up arrow', '⬆'); - Smilies::add($b, ':up-right arrow', '↗'); - Smilies::add($b, ':right arrow', '➡'); - Smilies::add($b, ':down-right arrow', '↘'); - Smilies::add($b, ':down arrow', '⬇'); - Smilies::add($b, ':down-left arrow', '↙'); - Smilies::add($b, ':left arrow', '⬅'); - Smilies::add($b, ':up-left arrow', '↖'); - Smilies::add($b, ':up-down arrow', '↕'); - Smilies::add($b, ':left-right arrow', '↔'); - Smilies::add($b, ':right arrow curving left', '↩'); - Smilies::add($b, ':left arrow curving right', '↪'); - Smilies::add($b, ':right arrow curving up', '⤴'); - Smilies::add($b, ':right arrow curving down', '⤵'); - Smilies::add($b, ':clockwise vertical arrows', '🔃'); - Smilies::add($b, ':counterclockwise arrows button', '🔄'); - Smilies::add($b, ':BACK arrow', '🔙'); - Smilies::add($b, ':END arrow', '🔚'); - Smilies::add($b, ':ON! arrow', '🔛'); - Smilies::add($b, ':SOON arrow', '🔜'); - Smilies::add($b, ':TOP arrow', '🔝'); + Smilies::add($b, ':up arrow:', '⬆'); + Smilies::add($b, ':up-right arrow:', '↗'); + Smilies::add($b, ':right arrow:', '➡'); + Smilies::add($b, ':down-right arrow:', '↘'); + Smilies::add($b, ':down arrow:', '⬇'); + Smilies::add($b, ':down-left arrow:', '↙'); + Smilies::add($b, ':left arrow:', '⬅'); + Smilies::add($b, ':up-left arrow:', '↖'); + Smilies::add($b, ':up-down arrow:', '↕'); + Smilies::add($b, ':left-right arrow:', '↔'); + Smilies::add($b, ':right arrow curving left:', '↩'); + Smilies::add($b, ':left arrow curving right:', '↪'); + Smilies::add($b, ':right arrow curving up:', '⤴'); + Smilies::add($b, ':right arrow curving down:', '⤵'); + Smilies::add($b, ':clockwise vertical arrows:', '🔃'); + Smilies::add($b, ':counterclockwise arrows button:', '🔄'); + Smilies::add($b, ':BACK arrow:', '🔙'); + Smilies::add($b, ':END arrow:', '🔚'); + Smilies::add($b, ':ON! arrow:', '🔛'); + Smilies::add($b, ':SOON arrow:', '🔜'); + Smilies::add($b, ':TOP arrow:', '🔝'); // religion - Smilies::add($b, ':place of worship', '🛐'); - Smilies::add($b, ':atom symbol', '⚛'); - Smilies::add($b, ':om', '🕉'); - Smilies::add($b, ':star of David', '✡'); - Smilies::add($b, ':wheel of dharma', '☸'); - Smilies::add($b, ':yin yang', '☯'); - Smilies::add($b, ':latin cross', '✝'); - Smilies::add($b, ':orthodox cross', '☦'); - Smilies::add($b, ':star and crescent', '☪'); - Smilies::add($b, ':peace symbol', '☮'); - Smilies::add($b, ':menorah', '🕎'); - Smilies::add($b, ':dotted six-pointed star', '🔯'); + Smilies::add($b, ':place of worship:', '🛐'); + Smilies::add($b, ':atom symbol:', '⚛'); + Smilies::add($b, ':om:', '🕉'); + Smilies::add($b, ':star of David:', '✡'); + Smilies::add($b, ':wheel of dharma:', '☸'); + Smilies::add($b, ':yin yang:', '☯'); + Smilies::add($b, ':latin cross:', '✝'); + Smilies::add($b, ':orthodox cross:', '☦'); + Smilies::add($b, ':star and crescent:', '☪'); + Smilies::add($b, ':peace symbol:', '☮'); + Smilies::add($b, ':menorah:', '🕎'); + Smilies::add($b, ':dotted six-pointed star:', '🔯'); // zodiac - Smilies::add($b, ':Aries', '♈'); - Smilies::add($b, ':Taurus', '♉'); - Smilies::add($b, ':Gemini', '♊'); - Smilies::add($b, ':Cancer', '♋'); - Smilies::add($b, ':Leo', '♌'); - Smilies::add($b, ':Virgo', '♍'); - Smilies::add($b, ':Libra', '♎'); - Smilies::add($b, ':Scorpio', '♏'); - Smilies::add($b, ':Sagittarius', '♐'); - Smilies::add($b, ':Capricorn', '♑'); - Smilies::add($b, ':Aquarius', '♒'); - Smilies::add($b, ':Pisces', '♓'); - Smilies::add($b, ':Ophiuchus', '⛎'); + Smilies::add($b, ':Aries:', '♈'); + Smilies::add($b, ':Taurus:', '♉'); + Smilies::add($b, ':Gemini:', '♊'); + Smilies::add($b, ':Cancer:', '♋'); + Smilies::add($b, ':Leo:', '♌'); + Smilies::add($b, ':Virgo:', '♍'); + Smilies::add($b, ':Libra:', '♎'); + Smilies::add($b, ':Scorpio:', '♏'); + Smilies::add($b, ':Sagittarius:', '♐'); + Smilies::add($b, ':Capricorn:', '♑'); + Smilies::add($b, ':Aquarius:', '♒'); + Smilies::add($b, ':Pisces:', '♓'); + Smilies::add($b, ':Ophiuchus:', '⛎'); // av-symbol - Smilies::add($b, ':shuffle tracks button', '🔀'); - Smilies::add($b, ':repeat button', '🔁'); - Smilies::add($b, ':repeat single button', '🔂'); - Smilies::add($b, ':play button', '▶'); - Smilies::add($b, ':fast-forward button', '⏩'); - Smilies::add($b, ':next track button', '⏭'); - Smilies::add($b, ':play or pause button', '⏯'); - Smilies::add($b, ':reverse button', '◀'); - Smilies::add($b, ':fast reverse button', '⏪'); - Smilies::add($b, ':last track button', '⏮'); - Smilies::add($b, ':upwards button', '🔼'); - Smilies::add($b, ':fast up button', '⏫'); - Smilies::add($b, ':downwards button', '🔽'); - Smilies::add($b, ':fast down button', '⏬'); - Smilies::add($b, ':pause button', '⏸'); - Smilies::add($b, ':stop button', '⏹'); - Smilies::add($b, ':record button', '⏺'); - Smilies::add($b, ':eject button', '⏏'); - Smilies::add($b, ':cinema', '🎦'); - Smilies::add($b, ':dim button', '🔅'); - Smilies::add($b, ':bright button', '🔆'); - Smilies::add($b, ':antenna bars', '📶'); - Smilies::add($b, ':vibration mode', '📳'); - Smilies::add($b, ':mobile phone off', '📴'); + Smilies::add($b, ':shuffle tracks button:', '🔀'); + Smilies::add($b, ':repeat button:', '🔁'); + Smilies::add($b, ':repeat single button:', '🔂'); + Smilies::add($b, ':play button:', '▶'); + Smilies::add($b, ':fast-forward button:', '⏩'); + Smilies::add($b, ':next track button:', '⏭'); + Smilies::add($b, ':play or pause button:', '⏯'); + Smilies::add($b, ':reverse button:', '◀'); + Smilies::add($b, ':fast reverse button:', '⏪'); + Smilies::add($b, ':last track button:', '⏮'); + Smilies::add($b, ':upwards button:', '🔼'); + Smilies::add($b, ':fast up button:', '⏫'); + Smilies::add($b, ':downwards button:', '🔽'); + Smilies::add($b, ':fast down button:', '⏬'); + Smilies::add($b, ':pause button:', '⏸'); + Smilies::add($b, ':stop button:', '⏹'); + Smilies::add($b, ':record button:', '⏺'); + Smilies::add($b, ':eject button:', '⏏'); + Smilies::add($b, ':cinema:', '🎦'); + Smilies::add($b, ':dim button:', '🔅'); + Smilies::add($b, ':bright button:', '🔆'); + Smilies::add($b, ':antenna bars:', '📶'); + Smilies::add($b, ':vibration mode:', '📳'); + Smilies::add($b, ':mobile phone off:', '📴'); // gender - Smilies::add($b, ':female sign', '♀'); - Smilies::add($b, ':male sign', '♂'); + Smilies::add($b, ':female sign:', '♀'); + Smilies::add($b, ':male sign:', '♂'); // math - Smilies::add($b, ':multiply', '✖'); - Smilies::add($b, ':plus', '➕'); - Smilies::add($b, ':minus', '➖'); - Smilies::add($b, ':divide', '➗'); - Smilies::add($b, ':infinity', '♾'); - Smilies::add($b, ':kreisoperator', '∘'); - Smilies::add($b, ':leere menge', '∅'); - Smilies::add($b, ':rundung', '≈'); - Smilies::add($b, ':gleichung', '='); - Smilies::add($b, ':ungleichung', '≠'); - Smilies::add($b, ':kleiner als', '<'); - Smilies::add($b, ':groesser als', '>'); - Smilies::add($b, ':prozent', '%'); + Smilies::add($b, ':multiply:', '✖'); + Smilies::add($b, ':plus:', '➕'); + Smilies::add($b, ':minus:', '➖'); + Smilies::add($b, ':divide:', '➗'); + Smilies::add($b, ':infinity:', '♾'); + Smilies::add($b, ':kreisoperator:', '∘'); + Smilies::add($b, ':leere menge:', '∅'); + Smilies::add($b, ':rundung:', '≈'); + Smilies::add($b, ':gleichung:', '='); + Smilies::add($b, ':ungleichung:', '≠'); + Smilies::add($b, ':kleiner als:', '<'); + Smilies::add($b, ':groesser als:', '>'); + Smilies::add($b, ':prozent:', '%'); // punctuation - Smilies::add($b, ':double exclamation mark', '‼'); - Smilies::add($b, ':exclamation question mark', '⁉'); - Smilies::add($b, ':question mark', '❓'); - Smilies::add($b, ':white question mark', '❔'); - Smilies::add($b, ':white exclamation mark', '❕'); - Smilies::add($b, ':exclamation mark', '❗'); - Smilies::add($b, ':wavy dash', '〰'); + Smilies::add($b, ':double exclamation mark:', '‼'); + Smilies::add($b, ':exclamation question mark:', '⁉'); + Smilies::add($b, ':question mark:', '❓'); + Smilies::add($b, ':white question mark:', '❔'); + Smilies::add($b, ':white exclamation mark:', '❕'); + Smilies::add($b, ':exclamation mark:', '❗'); + Smilies::add($b, ':wavy dash:', '〰'); // currency - Smilies::add($b, ':currency exchange', '💱'); - Smilies::add($b, ':heavy dollar sign', '💲'); + Smilies::add($b, ':currency exchange:', '💱'); + Smilies::add($b, ':heavy dollar sign:', '💲'); // other-symbol - Smilies::add($b, ':medical symbol', '⚕'); - Smilies::add($b, ':recycling symbol', '♻'); - Smilies::add($b, ':fleur-de-lis', '⚜'); - Smilies::add($b, ':trident emblem', '🔱'); - Smilies::add($b, ':name badge', '📛'); - Smilies::add($b, ':Japanese symbol for beginner', '🔰'); - Smilies::add($b, ':hollow red circle', '⭕'); - Smilies::add($b, ':check mark button', '✅'); - Smilies::add($b, ':check box with check', '☑'); - Smilies::add($b, ':check mark', '✔'); - Smilies::add($b, ':cross mark', '❌'); - Smilies::add($b, ':cross mark button', '❎'); - Smilies::add($b, ':curly loop', '➰'); - Smilies::add($b, ':double curly loop', '➿'); - Smilies::add($b, ':part alternation mark', '〽'); - Smilies::add($b, ':eight-spoked asterisk', '✳'); - Smilies::add($b, ':eight-pointed star', '✴'); - Smilies::add($b, ':sparkle', '❇'); - Smilies::add($b, ':copyright', '©'); - Smilies::add($b, ':registered', '®'); - Smilies::add($b, ':trade mark', '™'); + Smilies::add($b, ':medical symbol:', '⚕'); + Smilies::add($b, ':recycling symbol:', '♻'); + Smilies::add($b, ':fleur-de-lis:', '⚜'); + Smilies::add($b, ':trident emblem:', '🔱'); + Smilies::add($b, ':name badge:', '📛'); + Smilies::add($b, ':Japanese symbol for beginner:', '🔰'); + Smilies::add($b, ':hollow red circle:', '⭕'); + Smilies::add($b, ':check mark button:', '✅'); + Smilies::add($b, ':check box with check:', '☑'); + Smilies::add($b, ':check mark:', '✔'); + Smilies::add($b, ':cross mark:', '❌'); + Smilies::add($b, ':cross mark button:', '❎'); + Smilies::add($b, ':curly loop:', '➰'); + Smilies::add($b, ':double curly loop:', '➿'); + Smilies::add($b, ':part alternation mark:', '〽'); + Smilies::add($b, ':eight-spoked asterisk:', '✳'); + Smilies::add($b, ':eight-pointed star:', '✴'); + Smilies::add($b, ':sparkle:', '❇'); + Smilies::add($b, ':copyright:', '©'); + Smilies::add($b, ':registered:', '®'); + Smilies::add($b, ':trade mark:', '™'); // keycap - Smilies::add($b, ':keycap: #', '#️⃣'); - Smilies::add($b, ':keycap: *', '*️⃣'); - Smilies::add($b, ':keycap: 0', '0️⃣'); - Smilies::add($b, ':keycap: 1', '1️⃣'); - Smilies::add($b, ':keycap: 2', '2️⃣'); - Smilies::add($b, ':keycap: 3', '3️⃣'); - Smilies::add($b, ':keycap: 4', '4️⃣'); - Smilies::add($b, ':keycap: 5', '5️⃣'); - Smilies::add($b, ':keycap: 6', '6️⃣'); - Smilies::add($b, ':keycap: 7', '7️⃣'); - Smilies::add($b, ':keycap: 8', '8️⃣'); - Smilies::add($b, ':keycap: 9', '9️⃣'); - Smilies::add($b, ':keycap: 10', '🔟'); + Smilies::add($b, ':keycap: #:', '#️⃣'); + Smilies::add($b, ':keycap: *:', '*️⃣'); + Smilies::add($b, ':keycap: 0:', '0️⃣'); + Smilies::add($b, ':keycap: 1:', '1️⃣'); + Smilies::add($b, ':keycap: 2:', '2️⃣'); + Smilies::add($b, ':keycap: 3:', '3️⃣'); + Smilies::add($b, ':keycap: 4:', '4️⃣'); + Smilies::add($b, ':keycap: 5:', '5️⃣'); + Smilies::add($b, ':keycap: 6:', '6️⃣'); + Smilies::add($b, ':keycap: 7:', '7️⃣'); + Smilies::add($b, ':keycap: 8:', '8️⃣'); + Smilies::add($b, ':keycap: 9:', '9️⃣'); + Smilies::add($b, ':keycap: 10:', '🔟'); // alphanum - Smilies::add($b, ':input latin uppercase', '🔠'); - Smilies::add($b, ':input latin lowercase', '🔡'); - Smilies::add($b, ':input numbers', '🔢'); - Smilies::add($b, ':input symbols', '🔣'); - Smilies::add($b, ':input latin letters', '🔤'); - Smilies::add($b, ':A button (blood type)', '🅰'); - Smilies::add($b, ':AB button (blood type)', '🆎'); - Smilies::add($b, ':B button (blood type)', '🅱'); - Smilies::add($b, ':CL button', '🆑'); - Smilies::add($b, ':COOL button', '🆒'); - Smilies::add($b, ':FREE button', '🆓'); - Smilies::add($b, ':information', 'ℹ'); - Smilies::add($b, ':ID button', '🆔'); - Smilies::add($b, ':circled M', 'Ⓜ'); - Smilies::add($b, ':NEW button', '🆕'); - Smilies::add($b, ':NG button', '🆖'); - Smilies::add($b, ':O button (blood type)', '🅾'); - Smilies::add($b, ':OK button', '🆗'); - Smilies::add($b, ':P button', '🅿'); - Smilies::add($b, ':SOS button', '🆘'); - Smilies::add($b, ':UP! button', '🆙'); - Smilies::add($b, ':VS button', '🆚'); - Smilies::add($b, ':Japanese “here” button', '🈁'); - Smilies::add($b, ':Japanese “service charge” button', '🈂'); - Smilies::add($b, ':Japanese “monthly amount” button', '🈷'); - Smilies::add($b, ':Japanese “not free of charge” button', '🈶'); - Smilies::add($b, ':Japanese “reserved” button', '🈯'); - Smilies::add($b, ':Japanese “bargain” button', '🉐'); - Smilies::add($b, ':Japanese “discount” button', '🈹'); - Smilies::add($b, ':Japanese “free of charge” button', '🈚'); - Smilies::add($b, ':Japanese “prohibited” button', '🈲'); - Smilies::add($b, ':Japanese “acceptable” button', '🉑'); - Smilies::add($b, ':Japanese “application” button', '🈸'); - Smilies::add($b, ':Japanese “passing grade” button', '🈴'); - Smilies::add($b, ':Japanese “vacancy” button', '🈳'); - Smilies::add($b, ':Japanese “congratulations” button', '㊗'); - Smilies::add($b, ':Japanese “secret” button', '㊙'); - Smilies::add($b, ':Japanese “open for business” button', '🈺'); - Smilies::add($b, ':Japanese “no vacancy” button', '🈵'); + Smilies::add($b, ':input latin uppercase:', '🔠'); + Smilies::add($b, ':input latin lowercase:', '🔡'); + Smilies::add($b, ':input numbers:', '🔢'); + Smilies::add($b, ':input symbols:', '🔣'); + Smilies::add($b, ':input latin letters:', '🔤'); + Smilies::add($b, ':A button (blood type):', '🅰'); + Smilies::add($b, ':AB button (blood type):', '🆎'); + Smilies::add($b, ':B button (blood type):', '🅱'); + Smilies::add($b, ':CL button:', '🆑'); + Smilies::add($b, ':COOL button:', '🆒'); + Smilies::add($b, ':FREE button:', '🆓'); + Smilies::add($b, ':information:', 'ℹ'); + Smilies::add($b, ':ID button:', '🆔'); + Smilies::add($b, ':circled M:', 'Ⓜ'); + Smilies::add($b, ':NEW button:', '🆕'); + Smilies::add($b, ':NG button:', '🆖'); + Smilies::add($b, ':O button (blood type):', '🅾'); + Smilies::add($b, ':OK button:', '🆗'); + Smilies::add($b, ':P button:', '🅿'); + Smilies::add($b, ':SOS button:', '🆘'); + Smilies::add($b, ':UP! button:', '🆙'); + Smilies::add($b, ':VS button:', '🆚'); + Smilies::add($b, ':Japanese “here” button:', '🈁'); + Smilies::add($b, ':Japanese “service charge” button:', '🈂'); + Smilies::add($b, ':Japanese “monthly amount” button:', '🈷'); + Smilies::add($b, ':Japanese “not free of charge” button:', '🈶'); + Smilies::add($b, ':Japanese “reserved” button:', '🈯'); + Smilies::add($b, ':Japanese “bargain” button:', '🉐'); + Smilies::add($b, ':Japanese “discount” button:', '🈹'); + Smilies::add($b, ':Japanese “free of charge” button:', '🈚'); + Smilies::add($b, ':Japanese “prohibited” button:', '🈲'); + Smilies::add($b, ':Japanese “acceptable” button:', '🉑'); + Smilies::add($b, ':Japanese “application” button:', '🈸'); + Smilies::add($b, ':Japanese “passing grade” button:', '🈴'); + Smilies::add($b, ':Japanese “vacancy” button:', '🈳'); + Smilies::add($b, ':Japanese “congratulations” button:', '㊗'); + Smilies::add($b, ':Japanese “secret” button:', '㊙'); + Smilies::add($b, ':Japanese “open for business” button:', '🈺'); + Smilies::add($b, ':Japanese “no vacancy” button:', '🈵'); // geometric - Smilies::add($b, ':red circle', '🔴'); -// Smilies::add($b, ':orange circle', '🟠'); -// Smilies::add($b, ':yellow circle', '🟡'); -// Smilies::add($b, ':green circle', '🟢'); - Smilies::add($b, ':blue circle', '🔵'); -// Smilies::add($b, ':purple circle', '🟣'); -// Smilies::add($b, ':brown circle', '🟤'); - Smilies::add($b, ':black circle', '⚫'); - Smilies::add($b, ':white circle', '⚪'); -// Smilies::add($b, ':red square', '🟥'); -// Smilies::add($b, ':orange square', '🟧'); -// Smilies::add($b, ':yellow square', '🟨'); -// Smilies::add($b, ':green square', '🟩'); -// Smilies::add($b, ':blue square', '🟦'); -// Smilies::add($b, ':purple square', '🟪'); -// Smilies::add($b, ':brown square', '🟫'); - Smilies::add($b, ':black large square', '⬛'); - Smilies::add($b, ':white large square', '⬜'); - Smilies::add($b, ':black medium square', '◼'); - Smilies::add($b, ':white medium square', '◻'); - Smilies::add($b, ':black medium-small square', '◾'); - Smilies::add($b, ':white medium-small square', '◽'); - Smilies::add($b, ':black small square', '▪'); - Smilies::add($b, ':white small square', '▫'); - Smilies::add($b, ':large orange diamond', '🔶'); - Smilies::add($b, ':large blue diamond', '🔷'); - Smilies::add($b, ':small orange diamond', '🔸'); - Smilies::add($b, ':small blue diamond', '🔹'); - Smilies::add($b, ':red triangle pointed up', '🔺'); - Smilies::add($b, ':red triangle pointed down', '🔻'); - Smilies::add($b, ':diamond with a dot', '💠'); - Smilies::add($b, ':radio button', '🔘'); - Smilies::add($b, ':white square button', '🔳'); - Smilies::add($b, ':black square button', '🔲'); + Smilies::add($b, ':red circle:', '🔴'); +// Smilies::add($b, ':orange circle:', '🟠'); +// Smilies::add($b, ':yellow circle:', '🟡'); +// Smilies::add($b, ':green circle:', '🟢'); + Smilies::add($b, ':blue circle:', '🔵'); +// Smilies::add($b, ':purple circle:', '🟣'); +// Smilies::add($b, ':brown circle:', '🟤'); + Smilies::add($b, ':black circle:', '⚫'); + Smilies::add($b, ':white circle:', '⚪'); +// Smilies::add($b, ':red square:', '🟥'); +// Smilies::add($b, ':orange square:', '🟧'); +// Smilies::add($b, ':yellow square:', '🟨'); +// Smilies::add($b, ':green square:', '🟩'); +// Smilies::add($b, ':blue square:', '🟦'); +// Smilies::add($b, ':purple square:', '🟪'); +// Smilies::add($b, ':brown square:', '🟫'); + Smilies::add($b, ':black large square:', '⬛'); + Smilies::add($b, ':white large square:', '⬜'); + Smilies::add($b, ':black medium square:', '◼'); + Smilies::add($b, ':white medium square:', '◻'); + Smilies::add($b, ':black medium-small square:', '◾'); + Smilies::add($b, ':white medium-small square:', '◽'); + Smilies::add($b, ':black small square:', '▪'); + Smilies::add($b, ':white small square:', '▫'); + Smilies::add($b, ':large orange diamond:', '🔶'); + Smilies::add($b, ':large blue diamond:', '🔷'); + Smilies::add($b, ':small orange diamond:', '🔸'); + Smilies::add($b, ':small blue diamond:', '🔹'); + Smilies::add($b, ':red triangle pointed up:', '🔺'); + Smilies::add($b, ':red triangle pointed down:', '🔻'); + Smilies::add($b, ':diamond with a dot:', '💠'); + Smilies::add($b, ':radio button:', '🔘'); + Smilies::add($b, ':white square button:', '🔳'); + Smilies::add($b, ':black square button:', '🔲'); // Flags // flag - Smilies::add($b, ':chequered flag', '🏁'); - Smilies::add($b, ':triangular flag', '🚩'); - Smilies::add($b, ':crossed flags', '🎌'); - Smilies::add($b, ':black flag', '🏴'); - Smilies::add($b, ':white flag', '🏳'); - Smilies::add($b, ':rainbow flag', '🏳️‍🌈'); - Smilies::add($b, ':pirate flag', '🏴‍☠️'); + Smilies::add($b, ':chequered flag:', '🏁'); + Smilies::add($b, ':triangular flag:', '🚩'); + Smilies::add($b, ':crossed flags:', '🎌'); + Smilies::add($b, ':black flag:', '🏴'); + Smilies::add($b, ':white flag:', '🏳'); + Smilies::add($b, ':rainbow flag:', '🏳️‍🌈'); + Smilies::add($b, ':pirate flag:', '🏴‍☠️'); // country-flag - Smilies::add($b, ':ascension island', '🇦🇨'); - Smilies::add($b, ':andorra', '🇦🇩'); - Smilies::add($b, ':united arab emirates', '🇦🇪'); - Smilies::add($b, ':afghanistan', '🇦🇫'); - Smilies::add($b, ':antigua & barbuda', '🇦🇬'); - Smilies::add($b, ':anguilla', '🇦🇮'); - Smilies::add($b, ':albania', '🇦🇱'); - Smilies::add($b, ':armenia', '🇦🇲'); - Smilies::add($b, ':angola', '🇦🇴'); - Smilies::add($b, ':antarctica', '🇦🇶'); - Smilies::add($b, ':argentina', '🇦🇷'); - Smilies::add($b, ':americansamoa', '🇦🇸'); - Smilies::add($b, ':austria', '🇦🇹'); - Smilies::add($b, ':australia', '🇦🇺'); - Smilies::add($b, ':aruba', '🇦🇼'); - Smilies::add($b, ':ålandislands', '🇦🇽'); - Smilies::add($b, ':azerbaijan', '🇦🇿'); - Smilies::add($b, ':bosnia&herzegovina', '🇧🇦'); - Smilies::add($b, ':barbados', '🇧🇧'); - Smilies::add($b, ':bangladesh', '🇧🇩'); - Smilies::add($b, ':belgium', '🇧🇪'); - Smilies::add($b, ':burkinafaso', '🇧🇫'); - Smilies::add($b, ':bulgaria', '🇧🇬'); - Smilies::add($b, ':bahrain', '🇧🇭'); - Smilies::add($b, ':burundi', '🇧🇮'); - Smilies::add($b, ':benin', '🇧🇯'); - Smilies::add($b, ':st.barthélemy', '🇧🇱'); - Smilies::add($b, ':bermuda', '🇧🇲'); - Smilies::add($b, ':brunei', '🇧🇳'); - Smilies::add($b, ':bolivia', '🇧🇴'); - Smilies::add($b, ':caribbeannetherlands', '🇧🇶'); - Smilies::add($b, ':brazil', '🇧🇷'); - Smilies::add($b, ':bahamas', '🇧🇸'); - Smilies::add($b, ':bhutan', '🇧🇹'); - Smilies::add($b, ':bouvetisland', '🇧🇻'); - Smilies::add($b, ':botswana', '🇧🇼'); - Smilies::add($b, ':belarus', '🇧🇾'); - Smilies::add($b, ':belize', '🇧🇿'); - Smilies::add($b, ':canada', '🇨🇦'); - Smilies::add($b, ':cocos(keeling)islands', '🇨🇨'); - Smilies::add($b, ':congo-kinshasa', '🇨🇩'); - Smilies::add($b, ':centralafricanrepublic', '🇨🇫'); - Smilies::add($b, ':congo-brazzaville', '🇨🇬'); - Smilies::add($b, ':switzerland', '🇨🇭'); - Smilies::add($b, ':côted’ivoire', '🇨🇮'); - Smilies::add($b, ':cookislands', '🇨🇰'); - Smilies::add($b, ':chile', '🇨🇱'); - Smilies::add($b, ':cameroon', '🇨🇲'); - Smilies::add($b, ':china', '🇨🇳'); - Smilies::add($b, ':colombia', '🇨🇴'); - Smilies::add($b, ':clippertonisland', '🇨🇵'); - Smilies::add($b, ':costarica', '🇨🇷'); - Smilies::add($b, ':cuba', '🇨🇺'); - Smilies::add($b, ':capeverde', '🇨🇻'); - Smilies::add($b, ':curaçao', '🇨🇼'); - Smilies::add($b, ':christmasisland', '🇨🇽'); - Smilies::add($b, ':cyprus', '🇨🇾'); - Smilies::add($b, ':czechia', '🇨🇿'); - Smilies::add($b, ':germany', '🇩🇪'); - Smilies::add($b, ':diegogarcia', '🇩🇬'); - Smilies::add($b, ':djibouti', '🇩🇯'); - Smilies::add($b, ':denmark', '🇩🇰'); - Smilies::add($b, ':dominica', '🇩🇲'); - Smilies::add($b, ':dominicanrepublic', '🇩🇴'); - Smilies::add($b, ':algeria', '🇩🇿'); - Smilies::add($b, ':ceuta&melilla', '🇪🇦'); - Smilies::add($b, ':ecuador', '🇪🇨'); - Smilies::add($b, ':estonia', '🇪🇪'); - Smilies::add($b, ':egypt', '🇪🇬'); - Smilies::add($b, ':westernsahara', '🇪🇭'); - Smilies::add($b, ':eritrea', '🇪🇷'); - Smilies::add($b, ':spain', '🇪🇸'); - Smilies::add($b, ':ethiopia', '🇪🇹'); - Smilies::add($b, ':europeanunion', '🇪🇺'); - Smilies::add($b, ':finland', '🇫🇮'); - Smilies::add($b, ':fiji', '🇫🇯'); - Smilies::add($b, ':falklandislands', '🇫🇰'); - Smilies::add($b, ':micronesia', '🇫🇲'); - Smilies::add($b, ':faroeislands', '🇫🇴'); - Smilies::add($b, ':france', '🇫🇷'); - Smilies::add($b, ':gabon', '🇬🇦'); - Smilies::add($b, ':unitedkingdom', '🇬🇧'); - Smilies::add($b, ':grenada', '🇬🇩'); - Smilies::add($b, ':georgia', '🇬🇪'); - Smilies::add($b, ':frenchguiana', '🇬🇫'); - Smilies::add($b, ':guernsey', '🇬🇬'); - Smilies::add($b, ':ghana', '🇬🇭'); - Smilies::add($b, ':gibraltar', '🇬🇮'); - Smilies::add($b, ':greenland', '🇬🇱'); - Smilies::add($b, ':gambia', '🇬🇲'); - Smilies::add($b, ':guinea', '🇬🇳'); - Smilies::add($b, ':guadeloupe', '🇬🇵'); - Smilies::add($b, ':equatorialguinea', '🇬🇶'); - Smilies::add($b, ':greece', '🇬🇷'); - Smilies::add($b, ':southgeorgia&southsandwichislands', '🇬🇸'); - Smilies::add($b, ':guatemala', '🇬🇹'); - Smilies::add($b, ':guam', '🇬🇺'); - Smilies::add($b, ':guinea-bissau', '🇬🇼'); - Smilies::add($b, ':guyana', '🇬🇾'); - Smilies::add($b, ':hongkongsarchina', '🇭🇰'); - Smilies::add($b, ':heard&mcdonaldislands', '🇭🇲'); - Smilies::add($b, ':honduras', '🇭🇳'); - Smilies::add($b, ':croatia', '🇭🇷'); - Smilies::add($b, ':haiti', '🇭🇹'); - Smilies::add($b, ':hungary', '🇭🇺'); - Smilies::add($b, ':canaryislands', '🇮🇨'); - Smilies::add($b, ':indonesia', '🇮🇩'); - Smilies::add($b, ':ireland', '🇮🇪'); - Smilies::add($b, ':israel', '🇮🇱'); - Smilies::add($b, ':isleofman', '🇮🇲'); - Smilies::add($b, ':india', '🇮🇳'); - Smilies::add($b, ':britishindianoceanterritory', '🇮🇴'); - Smilies::add($b, ':iraq', '🇮🇶'); - Smilies::add($b, ':iran', '🇮🇷'); - Smilies::add($b, ':iceland', '🇮🇸'); - Smilies::add($b, ':italy', '🇮🇹'); - Smilies::add($b, ':jersey', '🇯🇪'); - Smilies::add($b, ':jamaica', '🇯🇲'); - Smilies::add($b, ':jordan', '🇯🇴'); - Smilies::add($b, ':japan', '🇯🇵'); - Smilies::add($b, ':kenya', '🇰🇪'); - Smilies::add($b, ':kyrgyzstan', '🇰🇬'); - Smilies::add($b, ':cambodia', '🇰🇭'); - Smilies::add($b, ':kiribati', '🇰🇮'); - Smilies::add($b, ':comoros', '🇰🇲'); - Smilies::add($b, ':st.kitts&nevis', '🇰🇳'); - Smilies::add($b, ':northkorea', '🇰🇵'); - Smilies::add($b, ':southkorea', '🇰🇷'); - Smilies::add($b, ':kuwait', '🇰🇼'); - Smilies::add($b, ':caymanislands', '🇰🇾'); - Smilies::add($b, ':kazakhstan', '🇰🇿'); - Smilies::add($b, ':laos', '🇱🇦'); - Smilies::add($b, ':lebanon', '🇱🇧'); - Smilies::add($b, ':st.lucia', '🇱🇨'); - Smilies::add($b, ':liechtenstein', '🇱🇮'); - Smilies::add($b, ':srilanka', '🇱🇰'); - Smilies::add($b, ':liberia', '🇱🇷'); - Smilies::add($b, ':lesotho', '🇱🇸'); - Smilies::add($b, ':lithuania', '🇱🇹'); - Smilies::add($b, ':luxembourg', '🇱🇺'); - Smilies::add($b, ':latvia', '🇱🇻'); - Smilies::add($b, ':libya', '🇱🇾'); - Smilies::add($b, ':morocco', '🇲🇦'); - Smilies::add($b, ':monaco', '🇲🇨'); - Smilies::add($b, ':moldova', '🇲🇩'); - Smilies::add($b, ':montenegro', '🇲🇪'); - Smilies::add($b, ':st.martin', '🇲🇫'); - Smilies::add($b, ':madagascar', '🇲🇬'); - Smilies::add($b, ':marshallislands', '🇲🇭'); - Smilies::add($b, ':northmacedonia', '🇲🇰'); - Smilies::add($b, ':mali', '🇲🇱'); - Smilies::add($b, ':myanmar(burma)', '🇲🇲'); - Smilies::add($b, ':mongolia', '🇲🇳'); - Smilies::add($b, ':macaosarchina', '🇲🇴'); - Smilies::add($b, ':northernmarianaislands', '🇲🇵'); - Smilies::add($b, ':martinique', '🇲🇶'); - Smilies::add($b, ':mauritania', '🇲🇷'); - Smilies::add($b, ':montserrat', '🇲🇸'); - Smilies::add($b, ':malta', '🇲🇹'); - Smilies::add($b, ':mauritius', '🇲🇺'); - Smilies::add($b, ':maldives', '🇲🇻'); - Smilies::add($b, ':malawi', '🇲🇼'); - Smilies::add($b, ':mexico', '🇲🇽'); - Smilies::add($b, ':malaysia', '🇲🇾'); - Smilies::add($b, ':mozambique', '🇲🇿'); - Smilies::add($b, ':namibia', '🇳🇦'); - Smilies::add($b, ':newcaledonia', '🇳🇨'); - Smilies::add($b, ':niger', '🇳🇪'); - Smilies::add($b, ':norfolkisland', '🇳🇫'); - Smilies::add($b, ':nigeria', '🇳🇬'); - Smilies::add($b, ':nicaragua', '🇳🇮'); - Smilies::add($b, ':netherlands', '🇳🇱'); - Smilies::add($b, ':norway', '🇳🇴'); - Smilies::add($b, ':nepal', '🇳🇵'); - Smilies::add($b, ':nauru', '🇳🇷'); - Smilies::add($b, ':niue', '🇳🇺'); - Smilies::add($b, ':newzealand', '🇳🇿'); - Smilies::add($b, ':oman', '🇴🇲'); - Smilies::add($b, ':panama', '🇵🇦'); - Smilies::add($b, ':peru', '🇵🇪'); - Smilies::add($b, ':frenchpolynesia', '🇵🇫'); - Smilies::add($b, ':papuanewguinea', '🇵🇬'); - Smilies::add($b, ':philippines', '🇵🇭'); - Smilies::add($b, ':pakistan', '🇵🇰'); - Smilies::add($b, ':poland', '🇵🇱'); - Smilies::add($b, ':st.pierre&miquelon', '🇵🇲'); - Smilies::add($b, ':pitcairnislands', '🇵🇳'); - Smilies::add($b, ':puertorico', '🇵🇷'); - Smilies::add($b, ':palestinianterritories', '🇵🇸'); - Smilies::add($b, ':portugal', '🇵🇹'); - Smilies::add($b, ':palau', '🇵🇼'); - Smilies::add($b, ':paraguay', '🇵🇾'); - Smilies::add($b, ':qatar', '🇶🇦'); - Smilies::add($b, ':réunion', '🇷🇪'); - Smilies::add($b, ':romania', '🇷🇴'); - Smilies::add($b, ':serbia', '🇷🇸'); - Smilies::add($b, ':russia', '🇷🇺'); - Smilies::add($b, ':rwanda', '🇷🇼'); - Smilies::add($b, ':saudiarabia', '🇸🇦'); - Smilies::add($b, ':solomonislands', '🇸🇧'); - Smilies::add($b, ':seychelles', '🇸🇨'); - Smilies::add($b, ':sudan', '🇸🇩'); - Smilies::add($b, ':sweden', '🇸🇪'); - Smilies::add($b, ':singapore', '🇸🇬'); - Smilies::add($b, ':st.helena', '🇸🇭'); - Smilies::add($b, ':slovenia', '🇸🇮'); - Smilies::add($b, ':svalbard&janmayen', '🇸🇯'); - Smilies::add($b, ':slovakia', '🇸🇰'); - Smilies::add($b, ':sierraleone', '🇸🇱'); - Smilies::add($b, ':sanmarino', '🇸🇲'); - Smilies::add($b, ':senegal', '🇸🇳'); - Smilies::add($b, ':somalia', '🇸🇴'); - Smilies::add($b, ':suriname', '🇸🇷'); - Smilies::add($b, ':southsudan', '🇸🇸'); - Smilies::add($b, ':sãotomé&príncipe', '🇸🇹'); - Smilies::add($b, ':elsalvador', '🇸🇻'); - Smilies::add($b, ':sintmaarten', '🇸🇽'); - Smilies::add($b, ':syria', '🇸🇾'); - Smilies::add($b, ':eswatini', '🇸🇿'); - Smilies::add($b, ':tristandacunha', '🇹🇦'); - Smilies::add($b, ':turks&caicosislands', '🇹🇨'); - Smilies::add($b, ':chad', '🇹🇩'); - Smilies::add($b, ':frenchsouthernterritories', '🇹🇫'); - Smilies::add($b, ':togo', '🇹🇬'); - Smilies::add($b, ':thailand', '🇹🇭'); - Smilies::add($b, ':tajikistan', '🇹🇯'); - Smilies::add($b, ':tokelau', '🇹🇰'); - Smilies::add($b, ':timor-leste', '🇹🇱'); - Smilies::add($b, ':turkmenistan', '🇹🇲'); - Smilies::add($b, ':tunisia', '🇹🇳'); - Smilies::add($b, ':tonga', '🇹🇴'); - Smilies::add($b, ':turkey', '🇹🇷'); - Smilies::add($b, ':trinidad&tobago', '🇹🇹'); - Smilies::add($b, ':tuvalu', '🇹🇻'); - Smilies::add($b, ':taiwan', '🇹🇼'); - Smilies::add($b, ':tanzania', '🇹🇿'); - Smilies::add($b, ':ukraine', '🇺🇦'); - Smilies::add($b, ':uganda', '🇺🇬'); - Smilies::add($b, ':u.s.outlyingislands', '🇺🇲'); - Smilies::add($b, ':unitednations', '🇺🇳'); - Smilies::add($b, ':unitedstates', '🇺🇸'); - Smilies::add($b, ':uruguay', '🇺🇾'); - Smilies::add($b, ':uzbekistan', '🇺🇿'); - Smilies::add($b, ':vaticancity', '🇻🇦'); - Smilies::add($b, ':st.vincent&grenadines', '🇻🇨'); - Smilies::add($b, ':venezuela', '🇻🇪'); - Smilies::add($b, ':britishvirginislands', '🇻🇬'); - Smilies::add($b, ':u.s.virginislands', '🇻🇮'); - Smilies::add($b, ':vietnam', '🇻🇳'); - Smilies::add($b, ':vanuatu', '🇻🇺'); - Smilies::add($b, ':wallis&futuna', '🇼🇫'); - Smilies::add($b, ':samoa', '🇼🇸'); - Smilies::add($b, ':kosovo', '🇽🇰'); - Smilies::add($b, ':yemen', '🇾🇪'); - Smilies::add($b, ':mayotte', '🇾🇹'); - Smilies::add($b, ':southafrica', '🇿🇦'); - Smilies::add($b, ':zambia', '🇿🇲'); - Smilies::add($b, ':zimbabwe', '🇿🇼'); + Smilies::add($b, ':ascension island:', '🇦🇨'); + Smilies::add($b, ':andorra:', '🇦🇩'); + Smilies::add($b, ':united arab emirates:', '🇦🇪'); + Smilies::add($b, ':afghanistan:', '🇦🇫'); + Smilies::add($b, ':antigua & barbuda:', '🇦🇬'); + Smilies::add($b, ':anguilla:', '🇦🇮'); + Smilies::add($b, ':albania:', '🇦🇱'); + Smilies::add($b, ':armenia:', '🇦🇲'); + Smilies::add($b, ':angola:', '🇦🇴'); + Smilies::add($b, ':antarctica:', '🇦🇶'); + Smilies::add($b, ':argentina:', '🇦🇷'); + Smilies::add($b, ':americansamoa:', '🇦🇸'); + Smilies::add($b, ':austria:', '🇦🇹'); + Smilies::add($b, ':australia:', '🇦🇺'); + Smilies::add($b, ':aruba:', '🇦🇼'); + Smilies::add($b, ':ålandislands:', '🇦🇽'); + Smilies::add($b, ':azerbaijan:', '🇦🇿'); + Smilies::add($b, ':bosnia&herzegovina:', '🇧🇦'); + Smilies::add($b, ':barbados:', '🇧🇧'); + Smilies::add($b, ':bangladesh:', '🇧🇩'); + Smilies::add($b, ':belgium:', '🇧🇪'); + Smilies::add($b, ':burkinafaso:', '🇧🇫'); + Smilies::add($b, ':bulgaria:', '🇧🇬'); + Smilies::add($b, ':bahrain:', '🇧🇭'); + Smilies::add($b, ':burundi:', '🇧🇮'); + Smilies::add($b, ':benin:', '🇧🇯'); + Smilies::add($b, ':st.barthélemy:', '🇧🇱'); + Smilies::add($b, ':bermuda:', '🇧🇲'); + Smilies::add($b, ':brunei:', '🇧🇳'); + Smilies::add($b, ':bolivia:', '🇧🇴'); + Smilies::add($b, ':caribbeannetherlands:', '🇧🇶'); + Smilies::add($b, ':brazil:', '🇧🇷'); + Smilies::add($b, ':bahamas:', '🇧🇸'); + Smilies::add($b, ':bhutan:', '🇧🇹'); + Smilies::add($b, ':bouvetisland:', '🇧🇻'); + Smilies::add($b, ':botswana:', '🇧🇼'); + Smilies::add($b, ':belarus:', '🇧🇾'); + Smilies::add($b, ':belize:', '🇧🇿'); + Smilies::add($b, ':canada:', '🇨🇦'); + Smilies::add($b, ':cocos(keeling)islands:', '🇨🇨'); + Smilies::add($b, ':congo-kinshasa:', '🇨🇩'); + Smilies::add($b, ':centralafricanrepublic:', '🇨🇫'); + Smilies::add($b, ':congo-brazzaville:', '🇨🇬'); + Smilies::add($b, ':switzerland:', '🇨🇭'); + Smilies::add($b, ':côted’ivoire:', '🇨🇮'); + Smilies::add($b, ':cookislands:', '🇨🇰'); + Smilies::add($b, ':chile:', '🇨🇱'); + Smilies::add($b, ':cameroon:', '🇨🇲'); + Smilies::add($b, ':china:', '🇨🇳'); + Smilies::add($b, ':colombia:', '🇨🇴'); + Smilies::add($b, ':clippertonisland:', '🇨🇵'); + Smilies::add($b, ':costarica:', '🇨🇷'); + Smilies::add($b, ':cuba:', '🇨🇺'); + Smilies::add($b, ':capeverde:', '🇨🇻'); + Smilies::add($b, ':curaçao:', '🇨🇼'); + Smilies::add($b, ':christmasisland:', '🇨🇽'); + Smilies::add($b, ':cyprus:', '🇨🇾'); + Smilies::add($b, ':czechia:', '🇨🇿'); + Smilies::add($b, ':germany:', '🇩🇪'); + Smilies::add($b, ':diegogarcia:', '🇩🇬'); + Smilies::add($b, ':djibouti:', '🇩🇯'); + Smilies::add($b, ':denmark:', '🇩🇰'); + Smilies::add($b, ':dominica:', '🇩🇲'); + Smilies::add($b, ':dominicanrepublic:', '🇩🇴'); + Smilies::add($b, ':algeria:', '🇩🇿'); + Smilies::add($b, ':ceuta&melilla:', '🇪🇦'); + Smilies::add($b, ':ecuador:', '🇪🇨'); + Smilies::add($b, ':estonia:', '🇪🇪'); + Smilies::add($b, ':egypt:', '🇪🇬'); + Smilies::add($b, ':westernsahara:', '🇪🇭'); + Smilies::add($b, ':eritrea:', '🇪🇷'); + Smilies::add($b, ':spain:', '🇪🇸'); + Smilies::add($b, ':ethiopia:', '🇪🇹'); + Smilies::add($b, ':europeanunion:', '🇪🇺'); + Smilies::add($b, ':finland:', '🇫🇮'); + Smilies::add($b, ':fiji:', '🇫🇯'); + Smilies::add($b, ':falklandislands:', '🇫🇰'); + Smilies::add($b, ':micronesia:', '🇫🇲'); + Smilies::add($b, ':faroeislands:', '🇫🇴'); + Smilies::add($b, ':france:', '🇫🇷'); + Smilies::add($b, ':gabon:', '🇬🇦'); + Smilies::add($b, ':unitedkingdom:', '🇬🇧'); + Smilies::add($b, ':grenada:', '🇬🇩'); + Smilies::add($b, ':georgia:', '🇬🇪'); + Smilies::add($b, ':frenchguiana:', '🇬🇫'); + Smilies::add($b, ':guernsey:', '🇬🇬'); + Smilies::add($b, ':ghana:', '🇬🇭'); + Smilies::add($b, ':gibraltar:', '🇬🇮'); + Smilies::add($b, ':greenland:', '🇬🇱'); + Smilies::add($b, ':gambia:', '🇬🇲'); + Smilies::add($b, ':guinea:', '🇬🇳'); + Smilies::add($b, ':guadeloupe:', '🇬🇵'); + Smilies::add($b, ':equatorialguinea:', '🇬🇶'); + Smilies::add($b, ':greece:', '🇬🇷'); + Smilies::add($b, ':southgeorgia&southsandwichislands:', '🇬🇸'); + Smilies::add($b, ':guatemala:', '🇬🇹'); + Smilies::add($b, ':guam:', '🇬🇺'); + Smilies::add($b, ':guinea-bissau:', '🇬🇼'); + Smilies::add($b, ':guyana:', '🇬🇾'); + Smilies::add($b, ':hongkongsarchina:', '🇭🇰'); + Smilies::add($b, ':heard&mcdonaldislands:', '🇭🇲'); + Smilies::add($b, ':honduras:', '🇭🇳'); + Smilies::add($b, ':croatia:', '🇭🇷'); + Smilies::add($b, ':haiti:', '🇭🇹'); + Smilies::add($b, ':hungary:', '🇭🇺'); + Smilies::add($b, ':canaryislands:', '🇮🇨'); + Smilies::add($b, ':indonesia:', '🇮🇩'); + Smilies::add($b, ':ireland:', '🇮🇪'); + Smilies::add($b, ':israel:', '🇮🇱'); + Smilies::add($b, ':isleofman:', '🇮🇲'); + Smilies::add($b, ':india:', '🇮🇳'); + Smilies::add($b, ':britishindianoceanterritory:', '🇮🇴'); + Smilies::add($b, ':iraq:', '🇮🇶'); + Smilies::add($b, ':iran:', '🇮🇷'); + Smilies::add($b, ':iceland:', '🇮🇸'); + Smilies::add($b, ':italy:', '🇮🇹'); + Smilies::add($b, ':jersey:', '🇯🇪'); + Smilies::add($b, ':jamaica:', '🇯🇲'); + Smilies::add($b, ':jordan:', '🇯🇴'); + Smilies::add($b, ':japan:', '🇯🇵'); + Smilies::add($b, ':kenya:', '🇰🇪'); + Smilies::add($b, ':kyrgyzstan:', '🇰🇬'); + Smilies::add($b, ':cambodia:', '🇰🇭'); + Smilies::add($b, ':kiribati:', '🇰🇮'); + Smilies::add($b, ':comoros:', '🇰🇲'); + Smilies::add($b, ':st.kitts&nevis:', '🇰🇳'); + Smilies::add($b, ':northkorea:', '🇰🇵'); + Smilies::add($b, ':southkorea:', '🇰🇷'); + Smilies::add($b, ':kuwait:', '🇰🇼'); + Smilies::add($b, ':caymanislands:', '🇰🇾'); + Smilies::add($b, ':kazakhstan:', '🇰🇿'); + Smilies::add($b, ':laos:', '🇱🇦'); + Smilies::add($b, ':lebanon:', '🇱🇧'); + Smilies::add($b, ':st.lucia:', '🇱🇨'); + Smilies::add($b, ':liechtenstein:', '🇱🇮'); + Smilies::add($b, ':srilanka:', '🇱🇰'); + Smilies::add($b, ':liberia:', '🇱🇷'); + Smilies::add($b, ':lesotho:', '🇱🇸'); + Smilies::add($b, ':lithuania:', '🇱🇹'); + Smilies::add($b, ':luxembourg:', '🇱🇺'); + Smilies::add($b, ':latvia:', '🇱🇻'); + Smilies::add($b, ':libya:', '🇱🇾'); + Smilies::add($b, ':morocco:', '🇲🇦'); + Smilies::add($b, ':monaco:', '🇲🇨'); + Smilies::add($b, ':moldova:', '🇲🇩'); + Smilies::add($b, ':montenegro:', '🇲🇪'); + Smilies::add($b, ':st.martin:', '🇲🇫'); + Smilies::add($b, ':madagascar:', '🇲🇬'); + Smilies::add($b, ':marshallislands:', '🇲🇭'); + Smilies::add($b, ':northmacedonia:', '🇲🇰'); + Smilies::add($b, ':mali:', '🇲🇱'); + Smilies::add($b, ':myanmar(burma):', '🇲🇲'); + Smilies::add($b, ':mongolia:', '🇲🇳'); + Smilies::add($b, ':macaosarchina:', '🇲🇴'); + Smilies::add($b, ':northernmarianaislands:', '🇲🇵'); + Smilies::add($b, ':martinique:', '🇲🇶'); + Smilies::add($b, ':mauritania:', '🇲🇷'); + Smilies::add($b, ':montserrat:', '🇲🇸'); + Smilies::add($b, ':malta:', '🇲🇹'); + Smilies::add($b, ':mauritius:', '🇲🇺'); + Smilies::add($b, ':maldives:', '🇲🇻'); + Smilies::add($b, ':malawi:', '🇲🇼'); + Smilies::add($b, ':mexico:', '🇲🇽'); + Smilies::add($b, ':malaysia:', '🇲🇾'); + Smilies::add($b, ':mozambique:', '🇲🇿'); + Smilies::add($b, ':namibia:', '🇳🇦'); + Smilies::add($b, ':newcaledonia:', '🇳🇨'); + Smilies::add($b, ':niger:', '🇳🇪'); + Smilies::add($b, ':norfolkisland:', '🇳🇫'); + Smilies::add($b, ':nigeria:', '🇳🇬'); + Smilies::add($b, ':nicaragua:', '🇳🇮'); + Smilies::add($b, ':netherlands:', '🇳🇱'); + Smilies::add($b, ':norway:', '🇳🇴'); + Smilies::add($b, ':nepal:', '🇳🇵'); + Smilies::add($b, ':nauru:', '🇳🇷'); + Smilies::add($b, ':niue:', '🇳🇺'); + Smilies::add($b, ':newzealand:', '🇳🇿'); + Smilies::add($b, ':oman:', '🇴🇲'); + Smilies::add($b, ':panama:', '🇵🇦'); + Smilies::add($b, ':peru:', '🇵🇪'); + Smilies::add($b, ':frenchpolynesia:', '🇵🇫'); + Smilies::add($b, ':papuanewguinea:', '🇵🇬'); + Smilies::add($b, ':philippines:', '🇵🇭'); + Smilies::add($b, ':pakistan:', '🇵🇰'); + Smilies::add($b, ':poland:', '🇵🇱'); + Smilies::add($b, ':st.pierre&miquelon:', '🇵🇲'); + Smilies::add($b, ':pitcairnislands:', '🇵🇳'); + Smilies::add($b, ':puertorico:', '🇵🇷'); + Smilies::add($b, ':palestinianterritories:', '🇵🇸'); + Smilies::add($b, ':portugal:', '🇵🇹'); + Smilies::add($b, ':palau:', '🇵🇼'); + Smilies::add($b, ':paraguay:', '🇵🇾'); + Smilies::add($b, ':qatar:', '🇶🇦'); + Smilies::add($b, ':réunion:', '🇷🇪'); + Smilies::add($b, ':romania:', '🇷🇴'); + Smilies::add($b, ':serbia:', '🇷🇸'); + Smilies::add($b, ':russia:', '🇷🇺'); + Smilies::add($b, ':rwanda:', '🇷🇼'); + Smilies::add($b, ':saudiarabia:', '🇸🇦'); + Smilies::add($b, ':solomonislands:', '🇸🇧'); + Smilies::add($b, ':seychelles:', '🇸🇨'); + Smilies::add($b, ':sudan:', '🇸🇩'); + Smilies::add($b, ':sweden:', '🇸🇪'); + Smilies::add($b, ':singapore:', '🇸🇬'); + Smilies::add($b, ':st.helena:', '🇸🇭'); + Smilies::add($b, ':slovenia:', '🇸🇮'); + Smilies::add($b, ':svalbard&janmayen:', '🇸🇯'); + Smilies::add($b, ':slovakia:', '🇸🇰'); + Smilies::add($b, ':sierraleone:', '🇸🇱'); + Smilies::add($b, ':sanmarino:', '🇸🇲'); + Smilies::add($b, ':senegal:', '🇸🇳'); + Smilies::add($b, ':somalia:', '🇸🇴'); + Smilies::add($b, ':suriname:', '🇸🇷'); + Smilies::add($b, ':southsudan:', '🇸🇸'); + Smilies::add($b, ':sãotomé&príncipe:', '🇸🇹'); + Smilies::add($b, ':elsalvador:', '🇸🇻'); + Smilies::add($b, ':sintmaarten:', '🇸🇽'); + Smilies::add($b, ':syria:', '🇸🇾'); + Smilies::add($b, ':eswatini:', '🇸🇿'); + Smilies::add($b, ':tristandacunha:', '🇹🇦'); + Smilies::add($b, ':turks&caicosislands:', '🇹🇨'); + Smilies::add($b, ':chad:', '🇹🇩'); + Smilies::add($b, ':frenchsouthernterritories:', '🇹🇫'); + Smilies::add($b, ':togo:', '🇹🇬'); + Smilies::add($b, ':thailand:', '🇹🇭'); + Smilies::add($b, ':tajikistan:', '🇹🇯'); + Smilies::add($b, ':tokelau:', '🇹🇰'); + Smilies::add($b, ':timor-leste:', '🇹🇱'); + Smilies::add($b, ':turkmenistan:', '🇹🇲'); + Smilies::add($b, ':tunisia:', '🇹🇳'); + Smilies::add($b, ':tonga:', '🇹🇴'); + Smilies::add($b, ':turkey:', '🇹🇷'); + Smilies::add($b, ':trinidad&tobago:', '🇹🇹'); + Smilies::add($b, ':tuvalu:', '🇹🇻'); + Smilies::add($b, ':taiwan:', '🇹🇼'); + Smilies::add($b, ':tanzania:', '🇹🇿'); + Smilies::add($b, ':ukraine:', '🇺🇦'); + Smilies::add($b, ':uganda:', '🇺🇬'); + Smilies::add($b, ':u.s.outlyingislands:', '🇺🇲'); + Smilies::add($b, ':unitednations:', '🇺🇳'); + Smilies::add($b, ':unitedstates:', '🇺🇸'); + Smilies::add($b, ':uruguay:', '🇺🇾'); + Smilies::add($b, ':uzbekistan:', '🇺🇿'); + Smilies::add($b, ':vaticancity:', '🇻🇦'); + Smilies::add($b, ':st.vincent&grenadines:', '🇻🇨'); + Smilies::add($b, ':venezuela:', '🇻🇪'); + Smilies::add($b, ':britishvirginislands:', '🇻🇬'); + Smilies::add($b, ':u.s.virginislands:', '🇻🇮'); + Smilies::add($b, ':vietnam:', '🇻🇳'); + Smilies::add($b, ':vanuatu:', '🇻🇺'); + Smilies::add($b, ':wallis&futuna:', '🇼🇫'); + Smilies::add($b, ':samoa:', '🇼🇸'); + Smilies::add($b, ':kosovo:', '🇽🇰'); + Smilies::add($b, ':yemen:', '🇾🇪'); + Smilies::add($b, ':mayotte:', '🇾🇹'); + Smilies::add($b, ':southafrica:', '🇿🇦'); + Smilies::add($b, ':zambia:', '🇿🇲'); + Smilies::add($b, ':zimbabwe:', '🇿🇼'); // subdivision-flag - Smilies::add($b, ':england', '🏴󠁧󠁢󠁥󠁮󠁧󠁿'); - Smilies::add($b, ':scotland', '🏴󠁧󠁢󠁳󠁴󠁿'); - Smilies::add($b, ':wales', '🏴󠁧󠁢󠁷󠁬󠁳󠁿'); + Smilies::add($b, ':england:', '🏴󠁧󠁢󠁥󠁮󠁧󠁿'); + Smilies::add($b, ':scotland:', '🏴󠁧󠁢󠁳󠁴󠁿'); + Smilies::add($b, ':wales:', '🏴󠁧󠁢󠁷󠁬󠁳󠁿'); } From 8d84f2a557d9fc7b838714398a90db0f291250a9 Mon Sep 17 00:00:00 2001 From: loma-one <44441246+loma-one@users.noreply.github.com> Date: Wed, 8 Jun 2022 13:17:05 +0200 Subject: [PATCH 037/677] Update unicode_smilies.php The plain ASCII emoticons are not enclosed by a : --- unicode_smilies/unicode_smilies.php | 46 ++++++++++++++--------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/unicode_smilies/unicode_smilies.php b/unicode_smilies/unicode_smilies.php index d9636d89..3bc47e5b 100644 --- a/unicode_smilies/unicode_smilies.php +++ b/unicode_smilies/unicode_smilies.php @@ -14,30 +14,30 @@ function unicode_smilies_install() { } function unicode_smilies_smilies(&$a,&$b) { - Smilies::add($b, ':-):', '😀'); - Smilies::add($b, ':):', '😀'); - Smilies::add($b, ':-(:', '🙁'); - Smilies::add($b, ':(:', '🙁'); - Smilies::add($b, ':-[:', '😳'); - Smilies::add($b, ':-D:', '😁'); - Smilies::add($b, ':D:', '😁'); - Smilies::add($b, ';-):', '😉'); - // Smilies::add($b, ';):', '😉'); // Deactivated since this leads to disturbed html entities - Smilies::add($b, ':-P:', '😛'); - Smilies::add($b, ':-p:', '😛'); - Smilies::add($b, ':P:', '😛'); - Smilies::add($b, ':p:', '😛'); - Smilies::add($b, ':-O:', '😮'); - Smilies::add($b, ':O:', '😮'); - Smilies::add($b, ':-X:', '🤐'); - Smilies::add($b, ':-x:', '🤐'); - Smilies::add($b, ':X:', '🤐'); - Smilies::add($b, ':x:', '🤐'); - Smilies::add($b, '8-):', '😎'); - Smilies::add($b, ':-/:', '😕'); - Smilies::add($b, ':-":', '💏'); + Smilies::add($b, ':-)', '😀'); + Smilies::add($b, ':)', '😀'); + Smilies::add($b, ':-(', '🙁'); + Smilies::add($b, ':(', '🙁'); + Smilies::add($b, ':-[', '😳'); + Smilies::add($b, ':-D', '😁'); + Smilies::add($b, ':D', '😁'); + Smilies::add($b, ';-)', '😉'); + // Smilies::add($b, ';)', '😉'); // Deactivated since this leads to disturbed html entities + Smilies::add($b, ':-P', '😛'); + Smilies::add($b, ':-p', '😛'); + Smilies::add($b, ':P', '😛'); + Smilies::add($b, ':p', '😛'); + Smilies::add($b, ':-O', '😮'); + Smilies::add($b, ':O', '😮'); + Smilies::add($b, ':-X', '🤐'); + Smilies::add($b, ':-x', '🤐'); + Smilies::add($b, ':X', '🤐'); + Smilies::add($b, ':x', '🤐'); + Smilies::add($b, '8-)', '😎'); + Smilies::add($b, ':-/', '😕'); + Smilies::add($b, ':-"', '💏'); Smilies::add($b, ':-"', '💏'); - Smilies::add($b, ':-!:', '🤒'); + Smilies::add($b, ':-!', '🤒'); Smilies::add($b, '<3', '❤'); Smilies::add($b, '</3', '💔'); Smilies::add($b, '<\\3', '💔'); From 14baddba322bddf740a6c3f576b57b6ad11efbe6 Mon Sep 17 00:00:00 2001 From: loma-one <44441246+loma-one@users.noreply.github.com> Date: Wed, 8 Jun 2022 20:07:32 +0200 Subject: [PATCH 038/677] Update unicode_smilies.php changed --- unicode_smilies/unicode_smilies.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/unicode_smilies/unicode_smilies.php b/unicode_smilies/unicode_smilies.php index 3bc47e5b..77bdfcdb 100644 --- a/unicode_smilies/unicode_smilies.php +++ b/unicode_smilies/unicode_smilies.php @@ -231,8 +231,8 @@ function unicode_smilies_smilies(&$a,&$b) { // These two are still in core, so oldcore isn't strictly right, but we don't want too many directories -// Smilies::add($b, ':-d:', '&#x;'); - Smilies::add($b, ':-o:', '😮'); +// Smilies::add($b, ':-d', '&#x;'); + Smilies::add($b, ':-o', '😮'); // Regex killers - stick these at the bottom so they appear at the end of the English and // at the start of $OtherLanguage. From bea8d103bfc8ff09fb5e42c64ffc491629881d22 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Sat, 11 Jun 2022 13:56:52 +0200 Subject: [PATCH 039/677] mark the whindowsphonepush as unsupported The Windows Phone app for Friendica does not seem to exist anymore (see https://www.microsoft.com/store/p/friendica-mobile/9nblggh0fhmn) which was linked from a promo video as store location. So lets set it to unsupported and deprecate it once 2022.09 was released. --- windowsphonepush/windowsphonepush.php | 1 + 1 file changed, 1 insertion(+) diff --git a/windowsphonepush/windowsphonepush.php b/windowsphonepush/windowsphonepush.php index 8f289d12..ebe19728 100644 --- a/windowsphonepush/windowsphonepush.php +++ b/windowsphonepush/windowsphonepush.php @@ -5,6 +5,7 @@ * Description: Enable push notification to send information to Friendica Mobile app on Windows phone (count of unread timeline entries, text of last posting - if wished by user) * Version: 2.0 * Author: Gerhard Seeber + * Status: Unsupported * * * Pre-requisite: Windows Phone mobile device (at least WP 7.0) From 1f0372c4b5b88d7be44bf354101e30ddc865fc16 Mon Sep 17 00:00:00 2001 From: ImgBotApp Date: Sat, 11 Jun 2022 09:42:38 +0000 Subject: [PATCH 040/677] [ImgBot] Optimize images *Total -- 939.27kb -> 798.60kb (14.98%) /smilies_adult/icons/bong.gif -- 0.96kb -> 0.19kb (80.06%) /smiley_pack/icons/animals/bunnyflowers.gif -- 6.48kb -> 1.30kb (80.02%) /smiley_pack/icons/love/inlove.gif -- 0.98kb -> 0.21kb (78.51%) /smiley_pack/icons/fantasy/dragon.gif -- 3.35kb -> 0.98kb (70.74%) /smiley_pack/icons/food/popcorn.gif -- 1.13kb -> 0.34kb (69.87%) /smiley_pack/icons/sport/tennis.gif -- 1.04kb -> 0.34kb (67.58%) /smiley_pack/icons/fantasy/dragonwhelp.gif -- 2.28kb -> 0.77kb (66.47%) /smileybutton/view/default.svg -- 3.43kb -> 1.24kb (63.78%) /smileybutton/view/vier.svg -- 3.48kb -> 1.29kb (62.95%) /smiley_pack/icons/fight/acid.gif -- 69.20kb -> 26.86kb (61.19%) /smiley_pack/icons/smoking/smoking.gif -- 2.23kb -> 0.95kb (57.56%) /smiley_pack/icons/love/loveheart.gif -- 0.64kb -> 0.28kb (56.75%) /smiley_pack/icons/animals/frog.gif -- 1.54kb -> 0.69kb (55.57%) /smiley_pack/icons/music/guitar.gif -- 2.02kb -> 0.91kb (54.88%) /smiley_pack/icons/fight/bfg.gif -- 2.21kb -> 1.01kb (54.43%) /smileybutton/view/smoothly.svg -- 4.46kb -> 2.09kb (53.16%) /smiley_pack/icons/devilangel/catdevil.gif -- 1.92kb -> 0.95kb (50.28%) /smilies_adult/icons/sperm.gif -- 2.84kb -> 1.41kb (50.28%) /smiley_pack/icons/animals/bunny.gif -- 1.45kb -> 0.72kb (50.2%) /smiley_pack/icons/tired/countsheep.gif -- 1.48kb -> 0.75kb (49.34%) /smiley_pack/icons/sport/cycling.gif -- 1.84kb -> 0.95kb (48.22%) /smiley_pack/icons/animals/sheep.gif -- 7.45kb -> 3.86kb (48.19%) /js_upload/file-uploader/client/loading.gif -- 1.65kb -> 0.88kb (46.39%) /js_upload/file-uploader/tests/sample-files/1imagelonglonglonglonglonglongname.gif -- 1.65kb -> 0.88kb (46.39%) /smiley_pack/icons/sport/snooker.gif -- 10.99kb -> 5.94kb (45.99%) /smiley_pack/icons/music/violin.gif -- 1.76kb -> 0.99kb (43.66%) /smiley_pack/icons/fight/chainsaw.gif -- 19.89kb -> 11.25kb (43.41%) /smiley_pack/icons/fight/gangs.gif -- 1.65kb -> 1.04kb (37.31%) /smiley_pack/icons/music/drums.gif -- 7.42kb -> 4.66kb (37.23%) /birdavatar/avatars/accessorie_7.png -- 7.24kb -> 4.56kb (37.05%) /smiley_pack/icons/food/broccoli.gif -- 3.93kb -> 2.62kb (33.47%) /smiley_pack/icons/sport/bowling.gif -- 3.48kb -> 2.39kb (31.39%) /smiley_pack/icons/animals/horse.gif -- 2.41kb -> 1.72kb (28.69%) /smiley_pack/icons/food/apple.gif -- 1.65kb -> 1.18kb (28.24%) /smiley_pack/icons/love/iloveyou.gif -- 15.31kb -> 11.22kb (26.71%) /smiley_pack/icons/drool/drool.gif -- 1.35kb -> 1.02kb (24.37%) /smiley_pack/icons/devilangel/saint.gif -- 1.17kb -> 0.89kb (24.23%) /smiley_pack/icons/babies/babycot.gif -- 3.37kb -> 2.61kb (22.62%) /smiley_pack/icons/animals/monkey.gif -- 4.79kb -> 3.71kb (22.42%) /smiley_pack/icons/animals/pig.gif -- 0.90kb -> 0.71kb (21.19%) /birdavatar/avatars/accessorie_17.png -- 0.38kb -> 0.31kb (19.9%) /birdavatar/avatars/accessorie_2.png -- 0.38kb -> 0.31kb (19.9%) /birdavatar/avatars/accessorie_13.png -- 0.38kb -> 0.31kb (19.9%) /birdavatar/avatars/accessorie_18.png -- 0.38kb -> 0.31kb (19.9%) /birdavatar/avatars/accessorie_20.png -- 0.38kb -> 0.31kb (19.9%) /birdavatar/avatars/accessorie_4.png -- 0.38kb -> 0.31kb (19.9%) /birdavatar/avatars/accessorie_19.png -- 0.38kb -> 0.31kb (19.9%) /birdavatar/avatars/hoop_8.png -- 0.38kb -> 0.31kb (19.9%) /smiley_pack/icons/fight/2guns.gif -- 0.79kb -> 0.64kb (19.51%) /smiley_pack/icons/sport/archery.gif -- 2.73kb -> 2.28kb (16.58%) /smiley_pack/icons/music/elvis.gif -- 1.75kb -> 1.46kb (16.27%) /smiley_pack/icons/laugh/rofl.gif -- 0.99kb -> 0.83kb (15.94%) /smiley_pack/icons/tired/yawn.gif -- 1.70kb -> 1.44kb (15.7%) /smiley_pack/icons/confused/shrug.gif -- 0.18kb -> 0.15kb (15.3%) /smiley_pack/icons/babies/pregnant.gif -- 1.47kb -> 1.26kb (14.53%) /smiley_pack/icons/animals/fish.gif -- 4.39kb -> 3.80kb (13.51%) /smiley_pack/icons/fight/viking.gif -- 9.42kb -> 8.15kb (13.5%) /smiley_pack/icons/fantasy/alienmonster.gif -- 7.46kb -> 6.46kb (13.42%) /smiley_pack/icons/cool/affro.gif -- 0.15kb -> 0.13kb (12.66%) /smiley_pack/icons/devilangel/blondedevil.gif -- 2.89kb -> 2.54kb (12.07%) /smiley_pack/icons/disgust/fartinbed.gif -- 22.74kb -> 20.01kb (12.03%) /smiley_pack/icons/devilangel/turnevil.gif -- 0.62kb -> 0.55kb (11.95%) /smiley_pack/icons/sport/golf.gif -- 2.34kb -> 2.06kb (11.88%) /smiley_pack/icons/animals/cow.gif -- 0.76kb -> 0.67kb (11.79%) /smiley_pack/icons/animals/chick.gif -- 3.58kb -> 3.17kb (11.62%) /smiley_pack/icons/devilangel/daseesaw.gif -- 6.62kb -> 5.87kb (11.34%) /smiley_pack/icons/sport/fencing.gif -- 10.98kb -> 9.76kb (11.13%) /ljpost/livejournal.png -- 3.51kb -> 3.14kb (10.63%) /smiley_pack/icons/confused/dazed.gif -- 1.58kb -> 1.42kb (10.16%) /smiley_pack/icons/fight/bowman.gif -- 1.31kb -> 1.18kb (9.95%) /smiley_pack/icons/fight/alienfight.gif -- 25.52kb -> 23.31kb (8.64%) /smiley_pack/icons/fight/samurai.gif -- 3.21kb -> 2.94kb (8.37%) /smiley_pack/icons/disgust/toilet.gif -- 8.73kb -> 8.03kb (7.96%) /smiley_pack/icons/sport/juggling.gif -- 4.19kb -> 3.86kb (7.88%) /smiley_pack/icons/animals/cat.gif -- 0.84kb -> 0.78kb (7.52%) /smilies_adult/icons/drunk.gif -- 0.31kb -> 0.29kb (7.48%) /smiley_pack/icons/fight/lasergun.gif -- 2.02kb -> 1.87kb (7.39%) /smiley_pack/icons/fight/hammersplat.gif -- 16.44kb -> 15.26kb (7.22%) /smiley_pack/icons/animals/bee.gif -- 4.40kb -> 4.08kb (7.21%) /smiley_pack/icons/devilangel/cherub.gif -- 1.58kb -> 1.46kb (7.06%) /smiley_pack/icons/sport/skipping.gif -- 0.84kb -> 0.78kb (6.98%) /smiley_pack/icons/fight/machinegun.gif -- 1.67kb -> 1.55kb (6.85%) /smiley_pack/icons/fight/sabre.gif -- 0.65kb -> 0.60kb (6.78%) /smiley_pack/icons/music/dj.gif -- 4.34kb -> 4.05kb (6.77%) /smiley_pack/icons/cool/cool.gif -- 5.02kb -> 4.71kb (6.26%) /birdavatar/avatars/accessorie_8.png -- 13.16kb -> 12.34kb (6.24%) /smiley_pack/icons/disgust/fartblush.gif -- 29.16kb -> 27.37kb (6.11%) /smiley_pack/icons/fight/marine.gif -- 5.69kb -> 5.34kb (6.11%) /smiley_pack/icons/food/fryegg.gif -- 6.34kb -> 5.97kb (5.84%) /birdavatar/avatars/wing_5.png -- 5.54kb -> 5.22kb (5.8%) /birdavatar/avatars/body_7.png -- 17.19kb -> 16.20kb (5.72%) /smiley_pack/icons/disgust/vomit.gif -- 2.66kb -> 2.51kb (5.57%) /smiley_pack/icons/food/banana.gif -- 1.51kb -> 1.43kb (5.44%) /smiley_pack/icons/sad/sigh.gif -- 0.73kb -> 0.69kb (5.08%) /smiley_pack/icons/sport/darts.gif -- 6.94kb -> 6.59kb (5.03%) /smiley_pack/icons/food/tomato.gif -- 2.57kb -> 2.45kb (4.83%) /smiley_pack/icons/fight/crossbow.gif -- 0.87kb -> 0.84kb (3.82%) /smiley_pack/icons/animals/snail.gif -- 0.63kb -> 0.61kb (3.72%) /twitter/vendor/abraham/twitteroauth/tests/kitten.jpg -- 210.64kb -> 202.94kb (3.66%) /smiley_pack/icons/sport/horseriding.gif -- 10.24kb -> 9.89kb (3.48%) /smiley_pack/icons/food/carrot.gif -- 0.57kb -> 0.55kb (3.09%) /smiley_pack/icons/fantasy/ghost.gif -- 1.03kb -> 1.00kb (2.86%) /smiley_pack/icons/sport/surfing.gif -- 1.60kb -> 1.56kb (2.68%) /smiley_pack/icons/animals/bigspider.gif -- 25.37kb -> 24.71kb (2.59%) /smiley_pack/icons/fantasy/dinosaur.gif -- 2.77kb -> 2.70kb (2.57%) /smiley_pack/icons/animals/hamster.gif -- 1.22kb -> 1.19kb (2.57%) /smiley_pack/icons/animals/dragonfly.gif -- 2.49kb -> 2.42kb (2.51%) /smiley_pack/icons/animals/dolphin.gif -- 1.54kb -> 1.51kb (2.34%) /birdavatar/avatars/tail_6.png -- 12.88kb -> 12.58kb (2.33%) /highlightjs/asset/styles/brown-papersq.png -- 17.77kb -> 17.36kb (2.32%) /smiley_pack/icons/love/love.gif -- 3.37kb -> 3.29kb (2.32%) /smiley_pack/icons/animals/dog.gif -- 5.25kb -> 5.13kb (2.22%) /birdavatar/avatars/tail_4.png -- 5.36kb -> 5.25kb (2.04%) /smiley_pack/icons/oldcore/headbang.gif -- 0.86kb -> 0.85kb (1.92%) /smiley_pack/icons/laugh/loltv.gif -- 2.28kb -> 2.25kb (1.54%) /smiley_pack/icons/animals/elephant.gif -- 0.93kb -> 0.92kb (1.47%) /smiley_pack/icons/sad/prisoner.gif -- 1.92kb -> 1.89kb (1.12%) /smiley_pack/icons/babies/stork.gif -- 18.54kb -> 18.37kb (0.94%) /smiley_pack/icons/tired/hammock.gif -- 8.12kb -> 8.05kb (0.9%) /smiley_pack/icons/animals/crab.gif -- 2.65kb -> 2.63kb (0.88%) /smiley_pack/icons/oldcore/shaka.gif -- 2.19kb -> 2.17kb (0.85%) /smiley_pack/icons/sport/football.gif -- 1.89kb -> 1.88kb (0.83%) /birdavatar/avatars/tail_2.png -- 10.09kb -> 10.02kb (0.75%) /birdavatar/avatars/eyes_1.png -- 6.67kb -> 6.62kb (0.75%) /smiley_pack/icons/food/cooking.gif -- 3.05kb -> 3.03kb (0.7%) /smiley_pack/icons/devilangel/devil.gif -- 1.95kb -> 1.94kb (0.45%) /smiley_pack/icons/love/lovebear.gif -- 4.39kb -> 4.37kb (0.31%) /smiley_pack/icons/drink/tea.gif -- 9.68kb -> 9.66kb (0.27%) /birdavatar/avatars/body_9.png -- 21.06kb -> 21.01kb (0.25%) /smiley_pack/icons/happy/tearsofjoy.gif -- 1.27kb -> 1.26kb (0.23%) /birdavatar/avatars/body_3.png -- 20.46kb -> 20.43kb (0.17%) /smiley_pack/icons/respect/hailking.gif -- 23.18kb -> 23.14kb (0.17%) /smiley_pack/icons/fight/tank.gif -- 11.19kb -> 11.18kb (0.11%) /birdavatar/avatars/accessorie_6.png -- 7.99kb -> 7.99kb (0.02%) Signed-off-by: ImgBotApp --- birdavatar/avatars/accessorie_13.png | Bin 392 -> 314 bytes birdavatar/avatars/accessorie_17.png | Bin 392 -> 314 bytes birdavatar/avatars/accessorie_18.png | Bin 392 -> 314 bytes birdavatar/avatars/accessorie_19.png | Bin 392 -> 314 bytes birdavatar/avatars/accessorie_2.png | Bin 392 -> 314 bytes birdavatar/avatars/accessorie_20.png | Bin 392 -> 314 bytes birdavatar/avatars/accessorie_4.png | Bin 392 -> 314 bytes birdavatar/avatars/accessorie_6.png | Bin 8179 -> 8177 bytes birdavatar/avatars/accessorie_7.png | Bin 7418 -> 4670 bytes birdavatar/avatars/accessorie_8.png | Bin 13478 -> 12637 bytes birdavatar/avatars/body_3.png | Bin 20954 -> 20918 bytes birdavatar/avatars/body_7.png | Bin 17598 -> 16591 bytes birdavatar/avatars/body_9.png | Bin 21569 -> 21516 bytes birdavatar/avatars/eyes_1.png | Bin 6834 -> 6783 bytes birdavatar/avatars/hoop_8.png | Bin 392 -> 314 bytes birdavatar/avatars/tail_2.png | Bin 10337 -> 10259 bytes birdavatar/avatars/tail_4.png | Bin 5490 -> 5378 bytes birdavatar/avatars/tail_6.png | Bin 13193 -> 12886 bytes birdavatar/avatars/wing_5.png | Bin 5671 -> 5342 bytes highlightjs/asset/styles/brown-papersq.png | Bin 18198 -> 17775 bytes js_upload/file-uploader/client/loading.gif | Bin 1688 -> 905 bytes .../1imagelonglonglonglonglonglongname.gif | Bin 1688 -> 905 bytes ljpost/livejournal.png | Bin 3594 -> 3212 bytes smiley_pack/icons/animals/bee.gif | Bin 4506 -> 4181 bytes smiley_pack/icons/animals/bigspider.gif | Bin 25978 -> 25306 bytes smiley_pack/icons/animals/bunny.gif | Bin 1482 -> 738 bytes smiley_pack/icons/animals/bunnyflowers.gif | Bin 6640 -> 1327 bytes smiley_pack/icons/animals/cat.gif | Bin 864 -> 799 bytes smiley_pack/icons/animals/chick.gif | Bin 3667 -> 3241 bytes smiley_pack/icons/animals/cow.gif | Bin 780 -> 688 bytes smiley_pack/icons/animals/crab.gif | Bin 2718 -> 2694 bytes smiley_pack/icons/animals/dog.gif | Bin 5371 -> 5252 bytes smiley_pack/icons/animals/dolphin.gif | Bin 1581 -> 1544 bytes smiley_pack/icons/animals/dragonfly.gif | Bin 2545 -> 2481 bytes smiley_pack/icons/animals/elephant.gif | Bin 951 -> 937 bytes smiley_pack/icons/animals/fish.gif | Bin 4499 -> 3891 bytes smiley_pack/icons/animals/frog.gif | Bin 1580 -> 702 bytes smiley_pack/icons/animals/hamster.gif | Bin 1246 -> 1214 bytes smiley_pack/icons/animals/horse.gif | Bin 2464 -> 1757 bytes smiley_pack/icons/animals/monkey.gif | Bin 4901 -> 3802 bytes smiley_pack/icons/animals/pig.gif | Bin 925 -> 729 bytes smiley_pack/icons/animals/sheep.gif | Bin 7631 -> 3954 bytes smiley_pack/icons/animals/snail.gif | Bin 645 -> 621 bytes smiley_pack/icons/babies/babycot.gif | Bin 3453 -> 2672 bytes smiley_pack/icons/babies/pregnant.gif | Bin 1507 -> 1288 bytes smiley_pack/icons/babies/stork.gif | Bin 18986 -> 18807 bytes smiley_pack/icons/confused/dazed.gif | Bin 1614 -> 1450 bytes smiley_pack/icons/confused/shrug.gif | Bin 183 -> 155 bytes smiley_pack/icons/cool/affro.gif | Bin 158 -> 138 bytes smiley_pack/icons/cool/cool.gif | Bin 5140 -> 4818 bytes smiley_pack/icons/devilangel/blondedevil.gif | Bin 2957 -> 2600 bytes smiley_pack/icons/devilangel/catdevil.gif | Bin 1965 -> 977 bytes smiley_pack/icons/devilangel/cherub.gif | Bin 1614 -> 1500 bytes smiley_pack/icons/devilangel/daseesaw.gif | Bin 6780 -> 6011 bytes smiley_pack/icons/devilangel/devil.gif | Bin 1996 -> 1987 bytes smiley_pack/icons/devilangel/saint.gif | Bin 1197 -> 907 bytes smiley_pack/icons/devilangel/turnevil.gif | Bin 636 -> 560 bytes smiley_pack/icons/disgust/fartblush.gif | Bin 29855 -> 28031 bytes smiley_pack/icons/disgust/fartinbed.gif | Bin 23289 -> 20487 bytes smiley_pack/icons/disgust/toilet.gif | Bin 8936 -> 8225 bytes smiley_pack/icons/disgust/vomit.gif | Bin 2727 -> 2575 bytes smiley_pack/icons/drink/tea.gif | Bin 9915 -> 9888 bytes smiley_pack/icons/drool/drool.gif | Bin 1379 -> 1043 bytes smiley_pack/icons/fantasy/alienmonster.gif | Bin 7636 -> 6611 bytes smiley_pack/icons/fantasy/dinosaur.gif | Bin 2837 -> 2764 bytes smiley_pack/icons/fantasy/dragon.gif | Bin 3431 -> 1004 bytes smiley_pack/icons/fantasy/dragonwhelp.gif | Bin 2338 -> 784 bytes smiley_pack/icons/fantasy/ghost.gif | Bin 1050 -> 1020 bytes smiley_pack/icons/fight/2guns.gif | Bin 810 -> 652 bytes smiley_pack/icons/fight/acid.gif | Bin 70863 -> 27500 bytes smiley_pack/icons/fight/alienfight.gif | Bin 26130 -> 23873 bytes smiley_pack/icons/fight/bfg.gif | Bin 2267 -> 1033 bytes smiley_pack/icons/fight/bowman.gif | Bin 1337 -> 1204 bytes smiley_pack/icons/fight/chainsaw.gif | Bin 20364 -> 11524 bytes smiley_pack/icons/fight/crossbow.gif | Bin 891 -> 857 bytes smiley_pack/icons/fight/gangs.gif | Bin 1694 -> 1062 bytes smiley_pack/icons/fight/hammersplat.gif | Bin 16839 -> 15623 bytes smiley_pack/icons/fight/lasergun.gif | Bin 2070 -> 1917 bytes smiley_pack/icons/fight/machinegun.gif | Bin 1708 -> 1591 bytes smiley_pack/icons/fight/marine.gif | Bin 5829 -> 5473 bytes smiley_pack/icons/fight/sabre.gif | Bin 664 -> 619 bytes smiley_pack/icons/fight/samurai.gif | Bin 3286 -> 3011 bytes smiley_pack/icons/fight/tank.gif | Bin 11457 -> 11444 bytes smiley_pack/icons/fight/viking.gif | Bin 9650 -> 8347 bytes smiley_pack/icons/food/apple.gif | Bin 1689 -> 1212 bytes smiley_pack/icons/food/banana.gif | Bin 1545 -> 1461 bytes smiley_pack/icons/food/broccoli.gif | Bin 4025 -> 2678 bytes smiley_pack/icons/food/carrot.gif | Bin 583 -> 565 bytes smiley_pack/icons/food/cooking.gif | Bin 3125 -> 3103 bytes smiley_pack/icons/food/fryegg.gif | Bin 6492 -> 6113 bytes smiley_pack/icons/food/popcorn.gif | Bin 1155 -> 348 bytes smiley_pack/icons/food/tomato.gif | Bin 2632 -> 2505 bytes smiley_pack/icons/happy/tearsofjoy.gif | Bin 1297 -> 1294 bytes smiley_pack/icons/laugh/loltv.gif | Bin 2335 -> 2299 bytes smiley_pack/icons/laugh/rofl.gif | Bin 1010 -> 849 bytes smiley_pack/icons/love/iloveyou.gif | Bin 15681 -> 11492 bytes smiley_pack/icons/love/inlove.gif | Bin 1005 -> 216 bytes smiley_pack/icons/love/love.gif | Bin 3451 -> 3371 bytes smiley_pack/icons/love/lovebear.gif | Bin 4491 -> 4477 bytes smiley_pack/icons/love/loveheart.gif | Bin 652 -> 282 bytes smiley_pack/icons/music/dj.gif | Bin 4446 -> 4145 bytes smiley_pack/icons/music/drums.gif | Bin 7596 -> 4768 bytes smiley_pack/icons/music/elvis.gif | Bin 1789 -> 1498 bytes smiley_pack/icons/music/guitar.gif | Bin 2070 -> 934 bytes smiley_pack/icons/music/violin.gif | Bin 1798 -> 1013 bytes smiley_pack/icons/oldcore/headbang.gif | Bin 885 -> 868 bytes smiley_pack/icons/oldcore/shaka.gif | Bin 2238 -> 2219 bytes smiley_pack/icons/respect/hailking.gif | Bin 23733 -> 23693 bytes smiley_pack/icons/sad/prisoner.gif | Bin 1961 -> 1939 bytes smiley_pack/icons/sad/sigh.gif | Bin 748 -> 710 bytes smiley_pack/icons/smoking/smoking.gif | Bin 2288 -> 971 bytes smiley_pack/icons/sport/archery.gif | Bin 2793 -> 2330 bytes smiley_pack/icons/sport/bowling.gif | Bin 3562 -> 2444 bytes smiley_pack/icons/sport/cycling.gif | Bin 1883 -> 975 bytes smiley_pack/icons/sport/darts.gif | Bin 7103 -> 6746 bytes smiley_pack/icons/sport/fencing.gif | Bin 11247 -> 9995 bytes smiley_pack/icons/sport/football.gif | Bin 1937 -> 1921 bytes smiley_pack/icons/sport/golf.gif | Bin 2399 -> 2114 bytes smiley_pack/icons/sport/horseriding.gif | Bin 10489 -> 10124 bytes smiley_pack/icons/sport/juggling.gif | Bin 4292 -> 3954 bytes smiley_pack/icons/sport/skipping.gif | Bin 859 -> 799 bytes smiley_pack/icons/sport/snooker.gif | Bin 11255 -> 6079 bytes smiley_pack/icons/sport/surfing.gif | Bin 1639 -> 1595 bytes smiley_pack/icons/sport/tennis.gif | Bin 1061 -> 344 bytes smiley_pack/icons/tired/countsheep.gif | Bin 1520 -> 770 bytes smiley_pack/icons/tired/hammock.gif | Bin 8317 -> 8242 bytes smiley_pack/icons/tired/yawn.gif | Bin 1745 -> 1471 bytes smileybutton/view/default.svg | 100 +--------------- smileybutton/view/smoothly.svg | 113 +----------------- smileybutton/view/vier.svg | 100 +--------------- smilies_adult/icons/bong.gif | Bin 988 -> 197 bytes smilies_adult/icons/drunk.gif | Bin 321 -> 297 bytes smilies_adult/icons/sperm.gif | Bin 2908 -> 1446 bytes .../abraham/twitteroauth/tests/kitten.jpg | Bin 215694 -> 207808 bytes 134 files changed, 3 insertions(+), 310 deletions(-) diff --git a/birdavatar/avatars/accessorie_13.png b/birdavatar/avatars/accessorie_13.png index 64fe705c6ce2c71d2ab66d4a18940663a6568e01..aa0a48f2207296969be351dc214ff0bdc6c5ab09 100644 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5!6ZWo=hV|c9!t8TuOkD)#(wTUiL5}rLb6AY zF9SoB8UsT^3j@P1pisjL28L1t28LG&3=CE?7#PG0=Ijcz0ZK5H1o;IsFqBO`YXRaV zdAqwXFy8GFUIOHC7I;J!Gca%qgD@k*tT_@uLG}_)Usv{LY}}k$%xkUNnt?*{o-U3d z8TZ~EWaI_%4lVfZpUY>y0LTP`eY}c52iHr^Sq|i?mbgZgq$HN4S|t~y0x1R~10y3{ z12bJi!w>^YD`N{QBMWT<11kfAS6gOpLD7(#pOTqYiA94MM8oN85uqRpJzf1=);T3K F0RU0AO8Ec) literal 392 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&6|H(?D8gCb z5n0T@z%2~Ij105pNB{-dOFVsD*&nlV2?#KoZ1G_R8YAlI;uunK>+L~9kg10jeD!~u g&9MN;9KoQ1nbC%U@rI@|3n&mgUHx3vIVCg!00=rDU;qFB diff --git a/birdavatar/avatars/accessorie_17.png b/birdavatar/avatars/accessorie_17.png index 43f6968f706163dc4ab0395c34c50fc773570e4c..c1ff1fcbe1e2dcd3c2fc63903d0544c685044e33 100644 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5!6ZWo=hV|c9!t8TuOkD)#(wTUiL5}rLb6AY zF9SoB8UsT^3j@P1pisjL28L1t28LG&3=CE?7#PG0=Ijcz0ZK5H1o;IsFqBO`YXRaV zdAqwXFy8GFUIOHC7I;J!Gca%qgD@k*tT_@uLG}_)Usv{LY}}lh=F1l;egz82d%8G= zWZZjukdYV2JG9`te=eW-0w5C%_VFqL9b7LtXE~6oTH+c}l9E`GYL#4+3Zxi}42+C) z4a{^64MPkpt&A|H(?D8gCb z5n0T@z%2~Ij105pNB{-dOFVsD*&nlV2?#JbZ?2gNG)C0Z#WAGf*4u-IAX5)5`0D>Q gn_~fxIf6k2GouXy;|)z`7EmB~y85}Sb4q9e0Q|!tF8}}l diff --git a/birdavatar/avatars/accessorie_18.png b/birdavatar/avatars/accessorie_18.png index 43f6968f706163dc4ab0395c34c50fc773570e4c..37c22f001609b0f0b3561a7e84873fec78c4e553 100644 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5!6ZWo=hV|c9!t8TuOkD)#(wTUiL5}rLb6AY zF9SoB8UsT^3j@P1pisjL28L1t28LG&3=CE?7#PG0=Ijcz0ZK5H1o;IsFqBO`YXRaV zdAqwXFy8GFUIOHC7I;J!Gca%qgD@k*tT_@uLG}_)Usv{LY}}k$EXMJ|3P2%wPZ!6K zjC*enGV%g>hZcPI&*d{;0Azx}K3+wjgX<;dEC+H`OI#yLQW8s2t&)pUffR$0fsv7} zftjwMVTggHm9d4Dk%hK_ft7*5t1Yv)plHa=PsvQH#G=6rqT%$lh)|G)p00i_>zopr E0Gu^R&Hw-a literal 392 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&6|H(?D8gCb z5n0T@z%2~Ij105pNB{-dOFVsD*&nlV2?#JbZ?2gNG)C0Z#WAGf*4u-IAX5)5`0D>Q gn_~fxIf6k2GouXy;|)z`7EmB~y85}Sb4q9e0Q|!tF8}}l diff --git a/birdavatar/avatars/accessorie_19.png b/birdavatar/avatars/accessorie_19.png index 43f6968f706163dc4ab0395c34c50fc773570e4c..a8c3d0bd2b6ac7bd6a751e337b23ae95c40aeca0 100644 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5!6ZWo=hV|c9!t8TuOkD)#(wTUiL5}rLb6AY zF9SoB8UsT^3j@P1pisjL28L1t28LG&3=CE?7#PG0=Ijcz0ZK5H1o;IsFqBO`YXRaV zdAqwXFy8GFUIOHC7I;J!Gca%qgD@k*tT_@uLG}_)Usv{LY}}k$yk5<#f#x&Fd%8G= zWZZjukdYV2JG9`te=eW-0w5C%_VFqL9b7LtXE~6oTH+c}l9E`GYL#4+3Zxi}42+C) z4a{^64MPkpt&A|H(?D8gCb z5n0T@z%2~Ij105pNB{-dOFVsD*&nlV2?#JbZ?2gNG)C0Z#WAGf*4u-IAX5)5`0D>Q gn_~fxIf6k2GouXy;|)z`7EmB~y85}Sb4q9e0Q|!tF8}}l diff --git a/birdavatar/avatars/accessorie_2.png b/birdavatar/avatars/accessorie_2.png index f850aab01f8de13e31f2fed006832b6ea4d5cf74..afb2ab9db0603479f022babcc1ed47318244d3d9 100644 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5!6ZWo=hV|c9!t8TuOkD)#(wTUiL5}rLb6AY zF9SoB8UsT^3j@P1pisjL28L1t28LG&3=CE?7#PG0=Ijcz0ZK5H1o;IsFqBO`YXRaV zdAqwXFy8GFUIOHC7I;J!Gca%qgD@k*tT_@uLG}_)Usv{LY}}k$jLxRd*8_#*JzX3_ zGVZ-S$jA%i9a`|+KbOyZ0gwp>`*;l@qMi$xz237_JueQwIf}$ZeKP5A*5{m{ih=$YGB0@nHdb;|#taD0e F0svtIOB4VA literal 392 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&6|H(?D8gCb z5n0T@z%2~Ij105pNB{-dOFVsD*&nlV2?(&Px^Qy=&=^rq7srr_TW=2gTe~DWM4f7kMHb diff --git a/birdavatar/avatars/accessorie_20.png b/birdavatar/avatars/accessorie_20.png index 43f6968f706163dc4ab0395c34c50fc773570e4c..58c88213ca992c88a386857a505b8b01694eaeb2 100644 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5!6ZWo=hV|c9!t8TuOkD)#(wTUiL5}rLb6AY zF9SoB8UsT^3j@P1pisjL28L1t28LG&3=CE?7#PG0=Ijcz0ZK5H1o;IsFqBO`YXRaV zdAqwXFy8GFUIOHC7I;J!Gca%qgD@k*tT_@uLG}_)Usv{LY}}k$?5o0@W&wrdJzX3_ zGVZ-S$jA%i9a`|+KbOyZ0gwp>`*;l@qMi$xz237_JueQwIf}$ZeKP5A*5{m{ih=$YGB0@nHdb;|#taD0e F0su#LO6ULp literal 392 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&6|H(?D8gCb z5n0T@z%2~Ij105pNB{-dOFVsD*&nlV2?#JbZ?2gNG)C0Z#WAGf*4u-IAX5)5`0D>Q gn_~fxIf6k2GouXy;|)z`7EmB~y85}Sb4q9e0Q|!tF8}}l diff --git a/birdavatar/avatars/accessorie_4.png b/birdavatar/avatars/accessorie_4.png index f850aab01f8de13e31f2fed006832b6ea4d5cf74..e29728c0c32ab98bac3700038f32ba9276e6f781 100644 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5!6ZWo=hV|c9!t8TuOkD)#(wTUiL5}rLb6AY zF9SoB8UsT^3j@P1pisjL28L1t28LG&3=CE?7#PG0=Ijcz0ZK5H1o;IsFqBO`YXRaV zdAqwXFy8GFUIOHC7I;J!Gca%qgD@k*tT_@uLG}_)Usv{LY}}k$Jhm;fg@8ixo-U3d z8TZ~EWaI_%4lVfZpUY>y0LTP`eY}c52iHr^Sq|i?mbgZgq$HN4S|t~y0x1R~10y3{ z12bJi!w>^YD`N{QBMWT<11kfAS6gOpLD7(#pOTqYiA94MM8oN85uqRpJzf1=);T3K F0RRWiN`C+V literal 392 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&6|H(?D8gCb z5n0T@z%2~Ij105pNB{-dOFVsD*&nlV2?(&Px^Qy=&=^rq7srr_TW=2gTe~DWM4f7kMHb diff --git a/birdavatar/avatars/accessorie_6.png b/birdavatar/avatars/accessorie_6.png index 7e91f4acc7bcfc6834da2723d579bfb5e2824346..f8186a2b1a2075ee866f739b128bf83ff19109c3 100644 GIT binary patch literal 8177 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 BitYda diff --git a/birdavatar/avatars/accessorie_7.png b/birdavatar/avatars/accessorie_7.png index 20b6b505493f244e084617d6c256d162db5aea9a..5cf31864c3800079f91218a3069c39084c7d2436 100644 GIT binary patch literal 4670 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 M^r3o{cN|~+4@fQnj{pDw literal 7418 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 diff --git a/birdavatar/avatars/accessorie_8.png b/birdavatar/avatars/accessorie_8.png index 3453d5f2b6cccaa8645f59cf4e3e63f21de6d817..a65d8ebe4f476ef2e3b9b969b7df08601169223e 100644 GIT binary patch literal 12637 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 literal 13478 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 diff --git a/birdavatar/avatars/body_3.png b/birdavatar/avatars/body_3.png index ccbcf0fda5780aa693acd248697e81f887ef4c3b..97edad0edb0eec81c258c6c2138edb8581611571 100644 GIT binary patch literal 20918 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 TzTXU900000NkvXXu0mjfqS25* diff --git a/birdavatar/avatars/body_7.png b/birdavatar/avatars/body_7.png index dc1b34beb6c152908141c34ad50c9335aaf1ece0..8cdbc9c3efd1daa610ad3d6a68dcb1a185cf7952 100644 GIT binary patch literal 16591 zcmch8byQT}7w^n4bT=a1B@NPzfOI2BgNQWJJ%p5`L5Q?~BGMt90@5Je2%=I$4n6Pq z{r&aUdVjy=bzK7C1fjE_(t_ za3@7=MF^xi1^?O>6a3C(uWq0Xfdp|tAQ90J$R&6w;x`21D+q!7wShpSG9eIZ&zxp` z8Sn=zJ54ne2>Rc@{I=3p;1yg?^+(Sk5Pb4~|DllV92)QX z2t>YJLq*XjU}3K<@U??!D96)kf~F+5g&`r4l10JiOAJw^EwWQ*kV3Z9*8-@QcXvWb z4_U1E1kOSSUoMpkyBKPy zZp*dS4Yk(8N|1N6y2F#XuN}44(aGF7LNU)vknAN$LBoI-+%kg{4Al%RZ@8~bGrO(7 zQ`{<*Ah##b#<2C@B>yfD(OP#aLHd>;)v~%*$0%+ywAQWd@z7Aib5v$`M<2zlb_w!8 zIOZqb?wt~(he!-s((pVuv%5uWy)?5sPcsh-;rWI%d&=rgX8fLTjC`mh{7hGEJyP6`4@z2*OI-Vk9xD9vSup6dJzm<3dh^2 zIGOT>)IQPMWH_U}YoQ4Fe*$uOFSnli}FsfA;-lP_WUm!FQE35JGnQ zhbzQT$2(^GRUH2ZQj70QzeMis4=LGW8FaB26p(>~pdL%Pg1K}?e{!LWEkj>}zbMyS zRirK1Go+WbXn zR?3TWbro-x6{K67E&AuWy>CTL@SLg)B%-#i@9=Hw+DnGhwrvoZBuFb@-6e*#!=^^(SeVoW za5~JT62<;pO;0}h{AO&PL!~R^JvZ$TrXh{gH!5(L&ubfzSvs&9BQck!qSD9`s5866 zGfgnodpmhrZf*zYz0Fl^II!CD7h6L37Zfyh{>>OTa?O27R<*+vFWuc2*+SP}wzZ%V zX7;TX`ko!~nP|2UrB|Ac+P8VHC@#0~XPhY#DBoLmco!i4KE*zq-ZCsoh>_xF;%ab*DlkK6~3nXV|&({EF2CJ&E$R!F^z&*d&t#m&c!KZPugCBqLXevUr?`< zvU&=kTgi0a>Pb5tJik&$e!gYOM&|DinpV772ZU5-{7;x%d^2J-R1vo7gD;kyvYsr|*{Xe93mScBPL?UPg*eI;Jwoc?-7ijUycqvMNvi1~VVj z!q5`rJLf(!qF2`f_`@oBf@3|;RWgLr7gxPcep}yz&hZkYzKhu0o|!85Qy>5Cn*UB- zcJ6|`akYHbnhMdD9`-ZcV)ycATxS@p`cX?9VY%z0xJHuPsm|BxtJ7}t#cwnv2pZAU z*AIW>w)aqOvR_~SK`M;EEAF-f;_!~E$I zGMG>TAU}_1GLuEukhCI91lJ!9pzTVK@+6zYqueadc3n(pir0)#lB>+eiPpj_5jpXB!Uk;!a&5 zE;eNZA#VY^#IrZcmh&dz@T`FI`pesC!zT>+uNG-@CdNE0IFEYZWb=Ic8|dky|;M`VL( z-4|qf$%57uiOG9{hsI`x{Iy$Hxghq=J}67I&Y`MP?UcI5^)0%BVl>}W7rCXfaTw3a zw^Q(-qoN1BS>N7gu*0nAqsl+jnvLc?kX!J{zy{gQ*8C8jb$wqXro%$#TD4+1+`upF z5gb${MHkN}JDir+j|9RMfwD-Fds&)*}L+b8g#LU|AE(P{=l0 z@^BQlDf9JT6uh3ANbH4>MFfJtuH_$x8%nSoYrL*IQ`x<>`q`bG<*Q~fAP3ebpih6=0s*QJ8pe z+P%gQ)veP3S_q+)zgMO21u;m|3RHv3b8lN(98#>q2yX@>9c~uw#NaB_B3huG^X%f4CQHj zGv4>AW6ec2lHtv(V6EOsFAH!shaMLi_xltuaz4nBfi~rFU*A1Co&TukZ08pqn1RYB z|4jvxWUGql^ju+KvnJrdxd&I?-90k4v78+h2ovXnwKEdmR3+5x zuOQd3+df}ry0m8zuD06R_Vlh}#Z<~Lrz2@VbP!yJ>LSm6`Ny&4Ro$xHGduIpzWoD^ zuUa9M>&(g;-7iIThUa{Ck&&BrO>s1WEYV#%8~Ta?!Qus{kB_fJ%y{#T>F(__sPV&< z;yV5I(k*jkmYaI+pl7kSz?W+H9-t&B{vySFVdHm~n9wST9N^211**5=Bc8nKWc%i0(pbT9b1 zaOx(Y7$hK6psq#Npv!17Mr_H)BJ%>&9XfwJS0jPl2|PYRMf%4M&(gz43QscdoyLV4 zY>>2(wO-7y)qDgCrxObOV(#WshOQIf*mE(d6&r^wYMpTJI*H#1&E z3IAy$i>+b8>Bc+4Cs$(i3tMNdt4LK^x!4kSm~S>QTWe=iIbr^s0Y+fHAy?9B*&*r^ z5;#63sIF%|opgKDiC^_aQhwRP@&0AJ0)v6?S|UJGs(g|wuqsz}^lopSqTp39jN;@QyJ6@64r`JZ{7H=qfH1fQg{8iKin{MNEEP zUe$v^eXYUcvQ@owwsK9Ub1bO**#gfJff&x4dK583i#OwkB6^{pO?CQuV5G@~r;zWqHkh|8LaS7rapgrJ+tMU2JU*Bruyt9dDL@ zJ9WQl_j!4KrM2#8_x+F!-O^uq7cvU^aKrtJ*-S)8 zosd@xdP|f5cXE(AWnr~6NZAT;#-Jac-EH6hm2YMso-1| zL8F+eAQF{dD=$|^JQYVZKNDQiT)NqlzyEw8H!|Ezk7`UB3FBX%NgCF~aL}?^n&uVF zd1LYf!-{2%UkI;eNIGb7Zr4A_twm|_JHf-Ee|KIuyqf7K6}XYT$zD+&&e(egvx$WT z+KnBOL{J7!dJJbME@i|N%;>UwyqeuX;naN1`#Gv#C*0G91F-%3u9wPcN@GE8tHSeF zse}7O%F&RMijE@dNhx=MwV~eJpUjX0N*L%dm`AKBGz!TNy zX-h$_f!Ka8I_zEJ-vcmhzRE7FY-dlpa?5k`*;@1T((6g5m@bmTZhRBJGjDLKLjrIc z&&kEM!bFhjhIy}D{O1bvTF1{CGF_pxL^qP=m3bhxV}QL zlPW?wPLcd&r`E|=0IGPck13t7$ZnT3bRcJy>sKfgDHPjztNICx-vN!qO+)pcUEZqn zz>3`ms|y!btVa}~r~{hA`*ZS%S2ah3z2TaC**52;)7ykPx2hx--!ow(19>NKYcy?# zM>w&!6hrxkpinQE{w5Y5s$=!L`^g@L-V^cg*QOJU$Nt2)D*7&oD)~s54(TfnX?Voa z?Oi7g`Wzl2r(%aXr!!nfOk6O^Z>JKmJ zuv!z%M89r^uh<}C6D0mIGBs&DxSi9ah+7&j^xT-+lbJnnEBy}Y53QuVs{%`%aU{Km zt9=2BLfV;`qF-Ui4k>tNM$E4B z)%%pBFl3nBlmni^JU?{wn;SHVlZz))n&d=k2BWxkX#utfBT3?fkQSuGo2XmpPzpBpBO-s+ zZ1N}tx2{*5kb|m4$x`EE!BhcFnCEGHGRBi@;tl49G#w_z&x)@*yYR(^pV}nCQfGpA7tW#=tesq;BrV$7wX|f zK^IA~KSe2$-Wk!E(#W6*#oA^~sSR!L(7yjJh~OE+(4#htyXTmE6T_rdXYQH$J~#)y ztffA3XT(u5FLu|_hq^(g(!p_UkUofqYIXFphCKyL@BtqO>b zF-|}27ZA7u6tEE_mJb0eA-|K7>9423pA!7oKgVEIA~v2VhmFtK?ff+k;A@q4vk9P? z8JJ9>)M`FLNe)a0O+O-cFCVdgbv1EJ&oEY^nK*swMI>^k~dVDRq$OU!v7-!!qZ@?!b_$P7Ded*5ms5 zRuMb8x45m6lEQfuE`PRqzYLN@G!B9cnZzudr}BaaIxBXT_oIBO;t7)!t&Ae9iWxuR z5s?-P=|D>BS@z4}#h@yF!h*MJxMUI5Uib=6O_Y7OmES;WFy2W}4p6MH_-QBOT)$!^ z$V_Gt&dbNtUhhNP8+C!tB4E0!3o+^QT1x?0L4=@bjU7Tef}Qy~ z@j+$F1fk+9KFHMH${<{@cn{$0M+Yvd75Cr~*%2J1?H>p5Wrq+651+#Z&+7RqaiIZ( z)z02M5vylMu=B{|X9-l2^G`L;k45puF9s}Fgq7%}o7tJ_**cOiI2%N*$ z11dslinv~!*q>X-5!Mn4>PixvoPu*br2ih#jnCDaO+loGOQNOUcbUoZi;fX`Zd-zs zZcRrNND@j8;d42^CYKmAnUq3m$MjtWFbi#;<8%^&=6HnS_PwnD6A}3MZx#b;ce$MD zUz1z1^lG?4#Vaw<(sm<<+xPfPq!K!%w^DwYPC8JX zgfVn~95bgfJQv73ncL2as;WFjHLVd;30`D~pEJl;DPnHCoEd#iXbPd94)L8pyFrH+ zEkxHE80V{BMA$!HS#`Z}pNFLqy-~Sl!3|b#Xg(x;EBa}Wna$>qc)yb+kyLbj2DSqxTLqV7TeZmGW zJQKWKbxkd^d-ee#Y0_1VAD0ayy-qr{poV+6K1(|v6Bhr0n-nop@i8=7&2FCbfv0#_kJt%3*E^3I$;$(9 zTyc*hMWHr@U5PQ-YhsCnKxo!=VS?ey#4$G}$glN0kc=&QYsmMZ>MY1tKq5OLgC4gk z^d+#r15p(v6CucQ;!6odje3wv8JcWN!qls zNex0fIn$b>qs!&!DK zUuJ6YfkFTzm#)P;mp3st92LI?IW`DqFHmSw!*h9auj00<4L)A5qC$2{inp6x8n&D#9e}Bng^uaBO z#q?$7nq=h=e`CkW?YDKwf6k6S$!uHCp|yB3JTqC4JV5gW@OEUGivs01(xW`XM0!z^ z7P`EFO9H)EU1$25!M;Tw-ipS~P`>pp#E&vf!!^yvP7LK$*|Er*(0tm*@N;v?_j-AW zhcIlJo~SI58|=v7)VM0?npd^%YxOZ<#J;x9qVlUpV#$6Q`jgdQl4(eds*> z&5S$%1jR2z*6~>IH3VZ&_l`K@nfvK({}fG)4pM|wQhEegDLi{p;^Nm*CC!%VKc1k% zqo&Suzqe`NcYUI@&^n5&Ods}^MqqwhBjoB~!&WGoki7ywYBm)w14zK6xw-?=;n8!7 z>z$`0h*+S&yJhYCtuC|7P4|~*dXs`$Uh&Z@C=5golmQas$>{>tz_u_mDLSGLnh-)n}$dK!;KW$7*N zkJrX#LMuw*1~EXLrsPwyRG;5;O1P|FbG>G-JHk;@h2-{A+$!>NpUVo6s>cqQR4PoZ z-wx#>q?tL?H{QsT1jh6*-HtLfJeslba!giLp|@JHJ~@4+ zVQ1yY*ul}XPoZge|5+p-nJF1jKs~&Lm&Bf(mVJZz=e>Td_8jy3Xp8J0yt$lKpg8W) z%irMw?SBD(Nmq$6Xdq3pjL~;x%|e(fyu0;J;a0BkowKc9nD8Gdt4s1OGIG=H%;Eb%PlX5wPUW7J z5+9_4tr3wvh=!X=1@_kl+3uZ3Nvt|YUSn0xlLyt1PJKSJ1Ur)r7WnQuC_gS!K!mB? zx#JGX$y$pyQBZ>g8E$U)0$pwa2L)2)*Q){Z9^T%VViq4obYz>h$NOfKE2uoPl+%YT~I$mSOk?^=UHVE4Nrlo>Gd59a^A7TKn1peyJa zAC;f^vHYdzwQ1a7N9~^hB=uwd@VBOE$*~4iu($?c#82srT>v~Dki{lmrN@7c9;jK&s zL$?wyT>cwrol!sBlJmKpfw1ka>KCxF)uSrWG+vYy~IU4)#H4eo zFj@9pThmnYKL=(|ZT*dseIji@|NYn9PZ$1p%<8c*Ljt7M50BU}0#&He-8aH}QZ>m5D?Vj{8tjKY?9 z4_fQ-ilFwgopN+9g>UHDuMbWWc+5F)(%%=9r^iYV_+bpD(@&f+fS9$I$-m4A)iDLX zHQl3aZaOq^m{Z-o*Rp0;%I{3y|KW}|fqbUT4?j9c`q0ZhGyE6N64JRA2Ty|*EBw=} zh$&K$+ZD%`pIldM6PiKeL}yMJ{fYyYXN!lv3wqM)DSchiHGHWbeH0*lWW_xa(2X4u zpYNk|%<}B}{%JdvU=u`HDjsD4Hhu{<>6baLW+cPW#EU06h63=sqX?dJ(XXd_}ss^ z2?PQw{gm+*c`#D@P%Xsp+Ipf?mkCsGOz;^ZF{tHDYN}k#ITn&*$Ik&RII?ExL0kCh z=g-G85pxDu|Jka*x7z#m&S9Ld(Rnx|_Zz|Qu0rE`PbJL#w!CwhI(DH1WFa$G=GEaj zcYs-HuSe?bX{h0~+$u%sd9FgL!2Ltszb~!zfxv(64>O@zql#E_rTeS&oeJtJggKH| z>!xRV-yfYR5cS)D7MPrn+u*>eXn3psbaGZD-)4*G@4!dGO{3X;k2e&mILwI=415aq zScQqsW%$2VsWRhnH^OJ{_vub?>M-rzgXIA!7$03HwSb?=7yu1X#I_zMwfqhoD!|%9 zb*O#R|5gi{s>;2W(P8PL2?Yk9~}j{Zxtl+an4^4$RG3m zUA>|_tdtYd;q3Ze`snP9X1G96lCh&=arL{gX-b>JwJwyH)&dw2;ZEK|UR+{$PF ztL}aC*^-;%ozPfTgrL4H#PHnWrUV-~%mu|6?xjE=gGM$cM28Iq@6Lp!B6Coar-e6PknfS>sddy$D`3S)0Oz|bNm+~hdHiJi5dD-FX`Z{otGF14PT z^pxo-S{Ipyij#wRZUDAIyH3UCF8KZ--1oe8t5=l?i-;LdUAJAm#CR0p&NJZ}Bgws^n^ zI}42Y3g6&!VZ_&od8m$sk2B(2gL6$3ItlN-wL^*nG5VDEuZR{Eq;bBbYLVR(#rByR z(O=)`I!uMX4hki?Iu@Q_0Ab&`P3zadZ}~7^A@)Rt7&%**tp_xK)9_sFCShS!6Vm$1 z{ZmMtA2BLaAxxx4K1YyXjNSEsNyg;`c44Uk!@p!>Tjtx3Oa(H=z4`?2?i_hgPrOgp zRR66-5$0Ny)_NWZOz zU@MeuOEB@nsMy5<%2HkJyWcbxPm5>uG|zo7p|`2{Y$a ze{JY8r39b5=Sd2RQoETs-HtFb9TCdCFmHT!1n9Y9wCKd5*PCfMBT)wdm*Rab$1qYerUVON;1WF=L+#&6-=Gc+$gq8 zhMX^~iw!*{5+nboT~sAghD)?L^8trJHOE!M1DwvT-cIe13okEpgd|BFBB4DpeMV8+ zy6Yh@PA*mgTLQQrurc<}ie-=h(L;~g0Lh&;JH-hq11w)8CVW6j1p_s0Tkxp-od{6w}LmzRo>8+xzAR0sy45w znYJ;3{cBe+CwVeQp*x-(UHf?#9d3tr(1O`{pHflkal`UK=tz(B+?b)KJb&T?{ThST zq))zvddAk(<&cqKskhG;&qf7QI`=T+de@pM@XXqvq9UoDc9=G4+}D6WSv~bePxn!L zH~06{h;{tHTdfZhdJz#fq|7_$_`^W91-Iy0C9yhS9kA9g{|YI;s}~IiQ4A(a1z4Etj~-!P+~=XDgH@Tx#XhvV z(=~q{Uid~)V!s#dHMB)+(I2)hhwP!C{HQm<(e8RQy-Z|FBL6%P$8o2@dXcS~D~X$? z=SjQnz3JK>M9?$Jp^K>o&VO##+91-q(}`g7-#LQKJhtt8Xp0T>hW3v*MaD`J$-QXM z1_AdvK0x;-jd|D?lA_^6#>*@jKD}p5COUqoGn%twhTfk<%w8{;>`;{)+W$ z4Yo0`nD>gt`As{nB;F`Y3V+)&F_7iur=Bs>ac;<`a9>*s#-MAae;=1x9kxq!-$gm< zPmfp{?|wNm4Q0YnqB|qUQT$OI)4Ai7kvVW+s#{SA+}+v-gt4%1Z?%Kw@k!zpQGtk{ zPn@GTOG>=4o^%6fS0Lws=ED>iW8--{+xTQk6^W^^RaVE+SNxcWndj**noP@tz5}<% z4}%hj=%h;nH83?!jCj}=1(5;|>XUa>MjVf8<2uZj{`tnA_+dR+-D(X#Xh^o+$(bioLc|r8_##`mTA36EtaR3j((+;W;EsZ> z(26j5NUZAR5CP>Gd4m4fVF>Y#zu2S;*nVk0eV-fX`C%lTWOHMEE71sYQ5t{thwm-E zQW_cLJMRo@IX_X*h8NjP-H?Cgk<`n4r zn?x7DNbkbufMiRip*yHYVkOu~!_=41^dEw1~PTuu}3A_{sX;>^QvH6y6vHqEytcvH6M~mPbt> z0v`m82q`vYJyHV&RjZg~l}qJ03`dRn{nFW(Bg-2B!i*C#F8X>)G_8e{LA6@SkcMs= zF9=?JZK5Nr`qx?18d!KWkk)LIJL>}lZ_Pu)*uRGO`*80qol+9X8r4xBYcwde#tcNd zuPWMlJ9!MaaaDAoMrh4Ui1TY_z&@eMUQN)RKV%vwt6iS#$)=}UdE5T$zH7!R-(D8yS={c5 z$;-x0YQuEuR6m@EkdGe=W&rrtqn@gPgdj{9)|(5{AKwmsTDeMpyol0P1x&Esl=JNB z*on!c~n=q3ARJOSEDU>?7+1c4}4Tg_*)aE^`LaLlcxFh)qa4rr55Se{!>_8 z!`{qQX%T3cc?Q4CA4%_BqiJ*ETNtkhDwMi?6^*R}H8fm^->=}0IB%XYjuTkj-Gr6c z1GzSpfMVFW^H&?B=%o^*+jsC}3~=GwX_nqs#P0P*#2@tr_wjMY*gv}rk^`;@NW4Yx zwYzn+xU<>Ugvu3!(uD zeYOtZ#(AnEy=33QIWw%G#9onP(A{dPcg@G>(jDrvP_sSpo$WFH5o&1@xYPjriNBuh z{2tFgxh@=Hs0>5m|IZ?=asQ%7)49Ahg)A&~`i|K$YoPh0lxH~B+huj$*Phd01=?kX z%9CTLExzXr7>1Zm9Zi&o5jYx6=`9{XUchY-Cfw_v^3$xY0$*L*s_BNm9|#9#A$3Z? zSr8+hGOdqwl@j18M40fbk5@mEMd$EUhN-Q1MZW&i5ws2K-jXHO`k>6-8}g{i7MfWy z{ZPWkf#pr?@_ZP}-)UJIitK5dGO;mu{;#p5zu4#Z>&$Uu69!su@%NiW=(pOwFGoD1 z2b@4UgFoYDp>OY7Vb3vxx-SpINh{2{3kveFnZ<4goVD#RK6rsfNk>!G-|lDI^yyoxk@$zK=HZUg+T|IZA2v-l&BJGCHB|jV zk05r<1_RmnRoEARSjhW8sntYwgvJB-xVP|O>`)YfL4#$}7Z(E-)24p#1#(SLVb}cz zr_;1Aax&AFGk5o$dwlBbmeHD=dq)-VBp%1(kB~Y1hhI?ONritJ)z3XyUML%dsgr1C zFilx(Xd?Hu+EYyOFGi4CGX`l(@CcEP4`|K+zU`4GS9OqcwzQajzLaaB!(UYF3#|8P zDPn0U;z08Ovov$%1KtgKSfF8X^>S4=Fx9jSHm0q2KJ^N7^#MjzK#zVjVrN@JTxCe)qMwu$a@)k{)-+H z-`VMaKV&#K?IVD>0L(~zDNT=!1kY-Kp!kQfGhcioaOifVu>0lk4(M$mb+#>N@aWTr zfM7mTvpL(e&!13wUZE9M+lO0VxBt-#e4JrDXFUZ%j3>k}gh!D6W`T>DgxaJj{MWk# zCW*UI&6!HTQwI)L?x-dKz{r1otT07}XsEwJJs^`~bYY?7VFrwWOh!a=J}ddhh4^oF ztw~zNkq>L6ss8K);g2|A?l~~f%O>VB^kvQKDG>QA+l{VoRw*N#hr@yT?# z&aH$9ky41Qye98k&)+~~Lko-EMSm-c;rvoTd-I%f{VTjs^Nvc!WZZ=?z@Gnh$QV0G zuCCI5jD-^Mn^as=z8WVt0aiisT7hpM(hK-Mq~UCmW{U_6;EZM_2{rcz1_pliV|}D3 zoz>?poP62~Yk1XY!x>2KclyrLq~p%^RH>)X&9lb?tytS4h7x)2zr}oxl=g018(pes zV)f_c-*T$9FPj@Esmj*)8PXOxqJ&#M52O7^#M8i89r>w!Ql9HyvN|Vva4lzeo|x6` zkw5*gi6>y^gTKsBWtr}7JxN&#J-r~^Z9rXIDmWScb@CKqe@`|T%wbT2S%NCHcGpQvQ zNvW6@7X~=4OUU?&^$R?yN+ZVGj&< z!L6y$8-KrY@<>IgmKHEJfK3{Y!Zb3J6+Mw^sDD>g)J7(q&2-DVXNfjAqu3u_j+TCD*whik zyV5Eg`)_Ir-bQj-GxlTeCv4mw`xvmg%pG#%b}!`Dtn@jtKRa?pj8X2eLA)J#V0!qq z-{L%}mQ-db`UMrd<4Vlpk*b>FP26AxNXD z=1I{z?6CWT72UJnjJWyYq*@`0x5!p*2yQq7{c@-K2IZV~J6X%1=|;$3V~I+zzNdG+ znwaO47XVFw+CeFsZ#y8BlrJDnH~ zHeRI|BhN}9x(i${=UdRYJ@V)q`hwUZ!LO5 zDpf^fQ#wyvx=KR9-l>c}skvdRQ0YFUK>T~Qy^;GE5ewn9C&2SZ8^2 z{Lys%>?ElvwV9N9^8N;xSog7ZT9mOzAM2iTYqeyIwS{%(EC2q(TWRCg5BFn#5MvSn({o2qHT`N<0Hbe zH3t!^(qXsu1u?f4p@EB|cGz>PHHt$n~#&cs;1nt-XVbSpt0;}$dQ zGrwMxMERT%rsVs@;7{_DH-|r> zoMldJXm#b&`<)m)Hl{p2u6?}!1lf`yA$R%KwhDG4-4);Js$|w2tg9k{x{OE0`VzJ zdA)|j#mEV4gMhzXqPJ^ZqH7$h@#il~nQj{8^`BE#AG4lFHp-2UBLp;hb#EZt-<#r`tOGX zxH>Wr&y;#P?Q^s`Is&70@8Q4c|9vBs8zdN0$^agt<%6D|-^D&VQN9zhVf*SjFQAtq zqLe{>JqlHFSa4-<-rMu2c%IuKsx^_*0i^I=eV|8znu6j zX8e0p-DKv?IvTr_G(~hOti}aA+|TZ#YUbl$>*FY8@9hXq5Me=K;d_GO_k@Iu1SO?J yB&38Tcm)Ne1O@-ry{r4bE^za3aDEc_|G41(|1NMVFkA;0Kr~c!RK6(LME)P+J(wc^ literal 17598 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 Hu0mjfvd;WH diff --git a/birdavatar/avatars/body_9.png b/birdavatar/avatars/body_9.png index 9dd1da4d3271cb74e64ac3f0640b2e00e031300c..8b6d3e1a285c896bdd9cadadd01797bea0842969 100644 GIT binary patch literal 21516 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 GnDie>+;va@ literal 21569 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 literal 6834 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 r$dHH9M{d%zkm=6Dwp diff --git a/birdavatar/avatars/hoop_8.png b/birdavatar/avatars/hoop_8.png index b0cf84c64ce50efd0485562c7e19896a6d05b0a5..059363366781fc6f6c924ea2dbcc6362c5da922c 100644 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5!6ZWo=hV|c9!t8TuOkD)#(wTUiL5}rLb6AY zF9SoB8UsT^3j@P1pisjL28L1t28LG&3=CE?7#PG0=Ijcz0ZK5H1o;IsFqBO`YXRaV zdAqwXFy8GFUIOHC7I;J!Gca%qgD@k*tT_@uLG}_)Usv{LY}}k$B6=^FU4TOJo-U3d z8TZ~EWaI_%4lVfZpUY>y0LTP`eY}c52iHr^Sq|i?mbgZgq$HN4S|t~y0x1R~10y3{ z12bJi!w>^YD`N{QBMWT<11kfAS6gOpLD7(#pOTqYiA94sL__Yv;D;a!Jzf1=);T3K F0RRAbN^1ZB literal 392 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&6|H(?D8gCb z5n0T@z%2~Ij105pNB{-dOFVsD*&nlV2?%g3PMg{dG)C0Z#WAGf*4u-IAX5)5`0D>Q gn_~fxIf6k2GouXy;|)z`7EmB~y85}Sb4q9e04%v7R{#J2 diff --git a/birdavatar/avatars/tail_2.png b/birdavatar/avatars/tail_2.png index 5ca71c889ac0b53ae162c5ecc4376283521edacc..355b6d16808f088bb2bb9a4dac00c2f78ac7f772 100644 GIT binary patch literal 10259 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 YGXLuUmu&q-a0bX@HEq?>2bSUg1K*}NrvLx| literal 10337 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 diff --git a/birdavatar/avatars/tail_4.png b/birdavatar/avatars/tail_4.png index e549eb268fa07083ab01f3143b1d556e79384061..88e686e6234c4105cb22db6142fba390cc7b98ad 100644 GIT binary patch literal 5378 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 PioJ5l@*?TNt(gA+c~LzI literal 5490 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 literal 13193 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 WY`RnQEx>33qF~KFk>Bt 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 diff --git a/highlightjs/asset/styles/brown-papersq.png b/highlightjs/asset/styles/brown-papersq.png index 3813903dbf9fa7b1fb5bd11d9534c06667d9056f..8ee339f85fa0d3feb8c8bf1632260eabc448ac62 100644 GIT binary patch literal 17775 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


G3S-EN>9CM!{YB*|;6wg-K3V?)eR((z#1 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 diff --git a/js_upload/file-uploader/client/loading.gif b/js_upload/file-uploader/client/loading.gif index 6fba77609ec50f9ab338a90d658e16bb05b8d206..20b46bc86c881ee4f42a78f199b9ca105397941d 100644 GIT binary patch literal 905 zcmZ?wbhEHb13Y?%j!r zi}~{D%aln|o;-UpXWkqiFQ1yKnh-yqH}BpYId;Uw&E?FgGfy5p>FMfeX=+)rY{{Q* zUwZm__Uzh|l9n=O)|{NYoRqkjoV1jhx|%DOu7m`I+_`mU%eE~!Sve&|C0jOaX=!VD za_`QZX;aoLTe4))k}1=sq$H*Ew6&C!m8@B{rX(+?rmQ3+EM(2PHAfB|*|TpC11eDb z&+X?L671|4;A*62z|07gRs6}q$;P0}paW6~@+JdY`GJWA9y(m+txt}5T#?}u<#>E? zhk+%7L+eCF84cGKmI*hk3{qcjU_4R6Cah@fEW#k7%F~{oo!N(*fz_FfGpkaW zr_M!!LBd%{UY#nJEK=31bn(Awd~$`E1eDWIj`7#OiY=s?FL3Be%FYs(bH z7Kvm#q$x8TFz0xv!gy1L&EE;=5;ji004E-HQE8w{q**jN_!$JH#RXJZ^%$i1IXTsw zM6~#rqd3+5)j2~185^ZlG-5V8v8YRVz?>qE?39uN-31kuz8xpLdD>hKu&_HnS|Bk= zf#HC{#9j_Tp#v*!F{ntjdRLmPIm^Uy+I7MTF3&>}Pl_Z|^g#|$l@@2@apDnW7Z>5- zGZN|)=Vyo$H;K>?=K(v!B$AUmhEv^HdbucrsInT1i7FfcHjx)@|Qgh5VV>@e4y#c3GAsh-Zu$|cFnz^Oc^ zx0iK;FxUmGYz%^+6v70I6OaoE4|EtbHE{B=ol8BT;>gh8$i#5cu$3{yO>k#|Q0LPR zu1W$kcn_Rd*fryTZ;9L_`z}TqQJv1BI;;7%X_4dG!4)1g+Gx8Dzp)_zcpW l#QkN2>-kk>!v#eWIJtv4)fWo_oe`p3x5k-uCNOPS0|1A_5@7%U literal 1688 zcmb`{Z%i9?90u@T|8OmBp{1p?1LC6bjoZDt zkXep>N0_=eva4($!i&&_A= zW;rjn{OxjfHIq1=2=5CoTwNF*91gVyGpm_kvp>8yy0hlS_a|Ji)@kL>dI%ZU?-^tFX>XV|yhM;_kA{Hbj4_?z5yjh^aFnC>zj^ z_o#~Hj9!_H_*k7~=KW86b?g7){QF<}*1#h#Mg;I?KfvJ(Qn0`|`BAdFr+c0K))KhV z*VBp7xc^E2^r^{p+tmzG058~M{V~WRzNN315Fgk94t9hH^W?`#Bm#eA1pn#xrXL)h zI^;Ui`0^Wt{g;NKDbM;@HlU>SeVzx$S zD(zKa4PR~x=t+@VO553Pr?otfml2s$r5>svWlh@%v+uePKj_d>&Sdse`V8u3A-efVY*!3yWCkn;jGN z4p{|BeYkjFBuDAmvz64yq>ELiQR#^<2l$(TJ_(cKNgIz_Nhh1{G-^uptX@&fDfK2t z(V)gap5e@`c^bWergglzjkZ2b7t|ZiD2PIur&VL64kt(#wk%s zfpfc0(7HF(kPybcEeIz;ajkaEet4sf;8~k<7z?FDCO6U`$2I{oVnGgoggOchLhOqN zujBo1p!U0lG3Lc@doPaP9*MBWqJ6csgq&1;(|E<#M=8iVshFbW=dNn!XfpbUcOt5= zE9QQ%mv7-6?w%-TGfT~7?vfl`ue3$U8Hk1(Ar{J5VlbKLUbFb5$<}64dvvPYQY$gZ z-{o1=x%2J~N7H{eLJ-9RB~A-UI6@GPsO9tr(~w0oVGU3e5=_{g(8NjrC^SKdatd>N zZ_ojXLLvZ|&VD*8OgVP*-7I$V!nFk~4-nrk^8fCs{i$`wIdNfSjQ?CDCdQYDd}#4E zzO35eJ}t3O)RgwDxNBFV=}K*%X_Sk;Fy$B%yR;^qxMio+)13Y?%j!r zi}~{D%aln|o;-UpXWkqiFQ1yKnh-yqH}BpYId;Uw&E?FgGfy5p>FMfeX=+)rY{{Q* zUwZm__Uzh|l9n=O)|{NYoRqkjoV1jhx|%DOu7m`I+_`mU%eE~!Sve&|C0jOaX=!VD za_`QZX;aoLTe4))k}1=sq$H*Ew6&C!m8@B{rX(+?rmQ3+EM(2PHAfB|*|TpC11eDb z&+X?L671|4;A*62z|07gRs6}q$;P0}paW6~@+JdY`GJWA9y(m+txt}5T#?}u<#>E? zhk+%7L+eCF84cGKmI*hk3{qcjU_4R6Cah@fEW#k7%F~{oo!N(*fz_FfGpkaW zr_M!!LBd%{UY#nJEK=31bn(Awd~$`E1eDWIj`7#OiY=s?FL3Be%FYs(bH z7Kvm#q$x8TFz0xv!gy1L&EE;=5;ji004E-HQE8w{q**jN_!$JH#RXJZ^%$i1IXTsw zM6~#rqd3+5)j2~185^ZlG-5V8v8YRVz?>qE?39uN-31kuz8xpLdD>hKu&_HnS|Bk= zf#HC{#9j_Tp#v*!F{ntjdRLmPIm^Uy+I7MTF3&>}Pl_Z|^g#|$l@@2@apDnW7Z>5- zGZN|)=Vyo$H;K>?=K(v!B$AUmhEv^HdbucrsInT1i7FfcHjx)@|Qgh5VV>@e4y#c3GAsh-Zu$|cFnz^Oc^ zx0iK;FxUmGYz%^+6v70I6OaoE4|EtbHE{B=ol8BT;>gh8$i#5cu$3{yO>k#|Q0LPR zu1W$kcn_Rd*fryTZ;9L_`z}TqQJv1BI;;7%X_4dG!4)1g+Gx8Dzp)_zcpW l#QkN2>-kk>!v#eWIJtv4)fWo_oe`p3x5k-uCNOPS0|1A_5@7%U literal 1688 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 Xp#C55?stwx5CE9ttg*GmUU&Zk?Cs6k literal 3594 zcmV+l4)yVgP)s$1eD&EWq0TOLskMRuo~Y>GT(Q;IWzapIp?1_XYQG~l>EaB{i_Z5zW{jh z{fy+45ccPdOeweu><^m&H(M2MUhMBX8Onk{fvyB>q7mIh|Qbuo9$y zFE0`iHg>K|Dp}E(GWXG|L?USuZ?HZfSCB2pNc*@1lnS~CN=Vr}CF7L=sMYGNAAY`d z?7<_+#K%gXt?p@0k3TFXtCO=yUWJOeI@?k+Lpi&2GmREwWfq16Rs{ug=>ZU@pOw{q z48lYr?+dW+QcC-wt7)|l(rVR8kO)ly)plr~@zqQKy9hvjc_{!Iji&eR1E-J7Te^d` zGn0|8{adiGGnq8uw<6N6jU8F=@dyV0r>UvgENW{4-HjCz3WaRX=Ghr-TU&ccCE_Ps zj^~68O{qXQ6~;_M(*nkv0e=E~vZ}KDwzA~OqpI?vN`an4AThKs)sq`J<9Ro{Hv)A# zZX0+t_!SzJa{i_0nHrq{R905ScN_efe_mcOi4AB?B7VsxNf{-iqpJfM;@^P;2KFEV z0j+kQsF=fKTWli9%q<}HHs<8}=+L+=36}%+oVf7;M1_Fvf})sOweM2&jC@`F+H2BR zeNaV!T(n)=HC2^kF2{WET%6Sb5FZ~eGPZCmdS`ODth2R2^$Kjh`j~a|YE3zSYCmr8 z$a0Fx==v>jEIlia%H&calSx>9UJ>o&>q2rRMgJ(_{#joE#SD%q>htAhSB>|~! z?pv&Q&h>&Lq(X^25-Sj_b*)gi)5^vGNQv08WJ+kH(9K*t zwYITj-Fy1bR!;UrS*c{3*6pH2g(YNsa9>qGf8Xxzt*p*GmFqV0ORA@D z>;W14JJJQlv;%L+{hxa++IeUvgWso7t9D)5GQEP2a}5lm(x#T%z>dZ{72LHjDGwTS zp+`9di9Lrc>{?z?NyK_0GI2;(B9-WoGPL&`xkw6%%ZN`WchY}gccP8E>XMP3O`;>e zCnBMM?1`G4u5Z}HYuvH}s&b`zA|7)RfRaGhK$i+mCL@k^XKO--rhtm6_enBotQ*VM0Y1#Adid6iJPAf%f9n~ zjvYUk$>q}8I|n_Tm_iQ6B{2tE3)*{dk1K~R+!x|Q7>h6V&Xmnl?>6N3?SsSR*kWfu z)Ix|7qw8JFb}WD9Jvp*J`VXPM7y)gGfUc|;fEL7nQ*p*gL;D$nM-qrS04t$(Qp-ed^|DwT!$(K>&Az zs06TL$aBMtr)v9eqMxrqcK}Ol5CAWQMWr!A$FB^&pPEgC0s*mbupyqkyVg9vcj;H+ zXlX>==;BdlTt&HpARb6@Q7J*Hp&Bu$^P4iM_zZc80%Lis90ElFz+`RTVpQ`$AE9qe zqX6>r3-q&ciZ2YGxT>w9vWm9v(V1AccBnnuEamV?I_T}Lga>r(57EQ4M>J;hJ|Yqc z*xt<{51k#Gdm~@Udl?XLn|O%wRaF#QT-_e30)T!{5r;?NSb>m60cc&xZSTReXFvOL zr@mBQPPz{3NAx7(8UV@)1-*X!3>i0JFq6sZ#zWGHWO6j&G;3jJL1VYfImk51!RBUW zI_FCO@D4=nfq)n_9MG@Cyfqx%bToP5FCQ06y_eq7Q9x(W1n<4Xz z^v&%H@aQYFr|ArUm*_*u2iC3KGYB6m()JBc(!#xMo#*#bu9H?)#>BUC`#SyQWfj%& zP=c-Zi%)`7!{6@I9U#u?qSJYBs7T+UCC`=o;Pa>21k5#%n>!Su{UzG-bq3Jk{YYzj z3!@qHM)(AboD$JSsZz5y2KJ^+EzJJ#dwhygj+~@}2X-UPtu5-rL)vedG-k_wA{GhR z-l&j=PA#nv50XaXq0Nv_C2}+S3J7nV5;g69yLXpbOAJhThB_H5uvsSn?xR*vk<4(3 zm9cD5Y}mVP_Z~cR=JRE{WHJMN+I46@CYDNS46Q^w+(0~xoe+R{kkpBX6F;9P$Bv#u zJXrGc!w<$yn*=llz+>E+mI9F^MOm6}dVSYCHG0kzs~|FofVH#Jr*C;0lii8A zY~{WT`mfM;$mrqSI|u}Viwyz5E)>aAZ~)k*1@IMAw1z#sYQIMt5HM3!S+?=YwvW}? zb}(LcTQv5~FKi6O$$^u?TUDtww9}y8#K_#V=1Y9;yZ!89gnJzq;(Wrzd^T;Io4FeRV8#n)f6Qtzj-bbw zMl&EKYHE>I|1yYjf=xr8eg8QCUK2Ok5Gru|WA-=O zNTQ#L;qSnv#Kr+k`YN!hym0Te9dnts{V6H|1}}N`-QwaBqx)%(lLIG*J1Uhb;^SmU z)=z0g%nU^@bd52qZbt%`H@`Id9J)r;>YKoaqR;O|GV1`qF^|g4 zY=;2-KHhd2zJN-No8Jc83j)$#Bmnu6_wECyPlZM7m8w)~BGIEP;0-f6p-(g7*i2ey z1s3j1quYerUzIewj7AQFEA*O>&@DbTtTztOk>c06oKY7_u`%?*0W zVC(}edVW$`i?%Omps3X9pq$4=%Xh>k+U-7YiscuUR-4_!y(yd2ry2EeG9W*k&tuDD z(`im&6^UFmg?00BvXaZ?In{;+hYPUlYy!ImhTf<(`yW6M|8ND?r@IaS40s#H9;($2 zLnT7rJkm&c@Zf>a!NFk&f_vtVN0Pg3`|ddT_4e;@t zgL5#R3MKl>(Y+sf&eqb+&&=mRT^qXOssq4t{CacjyEXTmSdkN0k#!JI@1Fglf@7p7 zs+qrBz84g;`qp-|2| z5PzY|Pp7UED;KAf%XhPS#jOY~s{Jlprvs{JWTAe@LJR*4fY#WN?x-rut*>nRDC^Gv zs9n@*wYOTsW+Lk_k%&cuo-y7YRXjW`5VL<>7kLc*_j5QzR@-9gRC?|)kO9~Yi-aQ8S@S(J0}*F6h0uOk0{4&d)p{_z0*3j^hGi=kmZ QI7Rw6-4 zgdjzYQX+1I1%wDl7m%)qz)~(=UA@Xuu5#zj{kZpwemUpNymRKA-}C&>JHKOj%mS_N zfdEv16(QhWb=6ZIZ)Rp@ZEXzzfb+h-n|DBEP1M%h(c!3xo%umcZGOJ>HI+ZXI{-ik zK&?Lm8?PJlzm2TpnJuvOEdjLOnGd@8Og^shPl`enu5)ApO1bOj&d3T~)A2Qslt8e; zYAl938_BmDP?q*KF2?SVW!Oqb5%<*RO_#tjgDgz!!jCWq+FvE_6=N%fWM+0>m-+0( z4$E_q@Myq(>bV-2MU5)JTriPMh2~Ji;I>x(MFIvW0|0;j z7KvkY@*yY4hg(A=jiWNcmT~|}#I#VgD!%2J|I!KV+DWE@=7ZA)X~iD4FvosPFval$ zQIL){32pmf*Hx}^_}pbo$(V|R0c!VsDi?-fN;G2MakYz5A^ho4GY)b&rjat z<&_v59JlWx(gqYpIOl2U5|m?Z;Z{U+b=5H_c67}1h831nFiXoyikOa7g*C(q$$C!1 zZA+EYB|FF9j@IwGzgjLmmF7}Y%zq+&1*^T z*p|LA0b5Z=wxbTHY(~wCAezVvGhQDg*WFxkF@bADAjdzlo}7(L{uHl1wJh^KSvb*q zwHhoUNO}_lWJifpeWh5R!nj>YdNKY7SP7=rw8#5r+Ruf{U8`IOCHUh4F+tvOBp1H` z14BRn@Fj<3ldW{q`Fwobj{5pVBb9ZKbUNPMJ@fzyQX1kwxS=6aT2;nkt3If%#n*El z-eJM(8yNYr%^D#cAyDq)8gEFqOh;e;z@XV~-pIJg9_Ax-%hSi;T zAG^y5R=O#C85vRT;P4HrIXP*$U}q!>l13#3!(lgX7HP;7vTonK$94!J)rhjL9F^3n zp)^yV4XO$3ilzqcHPbeU$A@}*1_mFQ^)(Kg!O>%bFCf#sk{wgSGHA&01(oMg|KW5y z=r`|_|EtsQT(HMk1h5O16GrdmUC8){Va${s0C{#z^t-mko9ew^cj!Uln8VS6iVeuPdjSr_La3im$tl&GXUP0c>E-mX!uMA1{zg=yezW?P|1_P+= z%+^+QBcHX~^r`fo)B>~jIjaJux-^eNrf^w7V@07W*GJK!(=lrd3{SIFR`VRkb)K~P z6h!IFj8u*EZz>OOUx<1%UKMGhdA)NIywP2@m!C9a{b7a0pZf;?O5>vg}fQ2itMHo+irm^6@-wnsPZ-whWW%xs>zRTh?G=$PV4d7(VDXY#(%7dixGPjG*iXm4-TBh zT($Drxi1)W;($qe>o(Ze_lEK|x7cDU_?7MRzm4sL9tovbRWz$zV24i{tqXLqt@JZQ zTsRp;rMLsJKOoH!Q8;%8ieQug0v1o>ON+*3;b@@qmq6Ej=^0r{1?pu6#p(1L8ESHQ zOy)gybi$olx#BAvBSm>E^>Krtcw%+d6IpSGTe!}yXIU+M{m|y2HtELB7tfqVtrajY zhpeUMUtx468YGQoNB535e3?`M0JWX=jPvHCmL}FXy6Mn_@lX5334i1oKUWiD zTRFV=o)g=-_;D?s1linn3-bE)`yAly;QzM)-spti+2OEGb^UMv0igBZ66-&&##VaW zAGEQ3O_8dvpD-oJs|ob00V7E?EWio0tMCsPYkN5v6L$oo1VhVN;2S0`Qua23C?v0A P{ytXwe?FNB07w1;dPFRj literal 4506 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 b;r8vj<={#6sqUIz5A5|fSm(!T8SvC!_fs&w literal 25978 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 N2l`?#! diff --git a/smiley_pack/icons/animals/bunny.gif b/smiley_pack/icons/animals/bunny.gif index 402b2b31b5fb879b653d60f13bae95687e94e6f1..d57745b6be408fe59d7f2167ed7924ac9755fde4 100644 GIT binary patch delta 717 zcmX@b{fO1d-P6s&GEtAgmf?#u!+#(+bLRidnP-3iNT$sM0U(){Hq$r_1dKsIiGe|o zfnoAXCY5>yRG|2ig_VIpnn4F73^J5~_5TC4zLd;)8LQUiyxv!!b6#_+!I{CDJcEb8)GlB$u(M zq(Hwkyn?pn<^TGE;T*s&TNUZ4!bYOOlWfsvnBIG&ee3a32R)YhDhukG4{8}#-Y(2@! zYJS#eLE*tvUEWA}$s3VD3CDMOXV&}NHrsHhU++oZwZ#)UHTW63L^@K092?o#xiU^U zIDBhoh3OtIJ%4vsUEFX(b;LWgz)S@heoE{ zRDtP1CNr)GuyC~;VPU(!aRN);ixh({me7k0XPS?Oh8;_ssbMC-%pGtbf&2fT15s&D qelCrXkyc1>OrI(m8QD=N;BbIZMC8JfUI#Z$&8JgB76~vhSOWk}j0Wxi literal 1482 zcmbu8`%~0q6vj^jD;EcsTQVjhEa8}-U0%(F+}$Y`M5zd56&n!Acr7bS4H+a*21j;q z%s~`Q{`tU^GB7a|F9xb!+}4j`!;IH*`A4sy|T7v9dh|3dFid*+<;oX>gAcUP^B zQirE50S!C_5b|*$m=IJ5A_T~YbHSP5RB$3V$Ry)}F~O){L@IPB;fS79++uqnr`WKvH0mGEOO{ zgj0}ESW6fuloP@UAS1SNU>qn1!U3luHHslLQX&@Sa4>44G-_cp$c1E#k1|FW1GyiL z#fVZy38Ns_MG8z3$_QZuaC?NpS_YH>VSwwQABc(FXb0|(5V#>yqZmRXC6*!w4n}R1 zMlF!e$u!3J2&Ev6#QktAMuboT=qs*^6quwyD4>t%G#Y?hSdK>HwrC~#ftc8hb|4cj zj2j{~iXk+1A{KJsVAMuwkSCJWn8p|%;Kk5L+z-cML_mHV(pSg5Wzum%X|v-hvesd= zblu^dY<1WnkKou)DmkF#O&lCj*ddLd16~Qu!<|L|EC9^_CIBNq27m!T51<0@LX7{B z9vK<2SS-!W%_ft{Xf$SIWEczvy@ABJShF zqu+HY{iCy=Cr*u3nIEn%5$C^pH`8Z}CVNVIvG(HQxe3Nu)AzCty!v?1G-+2HuQsQ& zoC`~z%=#r^I3<5|&^iB`Uq<%k*k1m&(!|m<>!w$@d=VBm+Sk^`Zfk9@*qQ<+`g0#xi`?R({PxU$*e04z7Y*#( zua24#p)I@Da@zmG-p%RR-}GPe&9`M)v`-#gnC@8~u-@v{m-4yk-jFgfd3cW3byRu(VaAV*|X#CP!+lKxgi;Hb9O-$Bi z7IqdoZB?iOVzB!zHhSzuhR|Me=;91jINvuOV9IuGmUdd zOs;+QXS(iXikf%M-K1%TW6zDstvdqt#c9^6o*vq<*c$zDZOHC!!>4Q8y1jMw+b4Zg zZRx2dnp^L^DD+@yL|UV3@7V=0S@(-#1K)e@bE?31PX9(tu5)L+?$R4aynpDll77vy z_~wFnjjwuk*kDKhW_1 zSnv1$Ai#ErP4uX!`bl-$vo^NpY&|b{PWBUVn*4!Jaq>lGL%u^T|Bv;2Jvrz9u_^!0 zO_?0SuRd8{RB`e`ri977%wqMdMhuJ$It)MnvXX)Qe*(J^b%%;_%k=DWF1U+f~Mw5V;8lAMd%>Xu3F@+&uOW>_b`kzo#lj-vdk zeXVQdNqP3fn{pdByU9JczJG)J)B0%)Zf>Wh zu9^Go%b9Ple!Tzn=jXqFo|l(LJrqtDx-K}S;S zMH~N8f7PEKHl}p;%d<8A(Rj7EjaR{;e&4MhQYo7IS7lsY6)UtvXWtgn|5Mg&)!Lq= zyec#IjO*&{tN5k8q^`b=Hsy>`F!}IGc1x1$!W9fzKN_4`y{51RF0!e7)Uql>;k``q z=3Oq{BDyPr^=E8SS*OA!V$@NyoyGmChTkloMkCd7VJ%^`8`I`4{IP)ZFN1`}UWKj2 zy4>|m{u=Why0AGOWLD5yb#h4I267z$+hXP@Uzdi zmnUR!PS!l1yRcOxGRCoykbny3&DMm8R;4!JshA=M)y zOlA)pSfUtKv~~*WtZ;1RxfSlw;-7Pnk)0=I#nJj+OSy_hRxzE3Miyf(#UsKBB^MkE zxdbv8T_?$|_|PCMlCzJLvYSlNIU5;7xeFRy#p4s$ZqJJ0Vqyt3-6AH& zYj#B-JuqwU%?>_~FB6#gt=}AA=Cgir;qU@uj;IWNE13XKrdd4`7!;kS91u|AoRIKR zMRi632WP#ri&ds#BLjotPZm}#23Al~6lIWLkY-?D){NN2^>2db%e1-M94~CRJ5jwa zC39ZJs&zT9_Z8@fAJjTqClGg%^l(}H?Qb}(BKrxR) literal 6640 zcmeHL3s6(p8NR?x2w8z7m=Ii4vameV1>w4@AlM`%yrdc{ix23UAY9RP6%>o@TAPFb z5s`wVEmxijRqJCwgjsb&!Yf_lRZ(YWSIeyOP=To~j`CP_bNb)xbZ2L0I%B6Zt#vqa zlRN*MbN>JPzW?N#Gl`9lSrV?9i-lp6Ut;z_U>J#E6o%0lhA@Z-0wYL_pfG~Q2*ga1 z1V)k=Nns?7k%(DK5g0{c6opYVMj>V^O<**M(G*707>ytkh6oIi7@{ylV+aDs4XGg) zY=+f{slyDCASi;M2?8-?AtFhFqzIBGNW`FkNs1&WilAtMLJTNaOOpgm5j0KE2r$A{ z0+9rw2t*SIssd_A2A}~Yz=Am_47njSKP!=MZrf3AZ0$o4>lN6#U1UiD!AOPTkqhQCV4O{Mu;hH=XPM>_vM%YBNlnXq`COI@#DfajIpirSW;&@$uSm zTh%x^WJ8rUR09t}t(ON|2FH$lV>{Mwt9v|AH-YMH=qN&`ZKx5Uc7)7Y)M-GLVq`fm zez^)+Oz0XsRd5PMzZ`kq@f?{EvY?@X!3RV4AKbq``fy})WaP=Cu_uq7z?g(~jZdQS zDKz;VdNGNnY-kFhZxMQq(90=ggK6dif=!SA7X{FZvAVhjtyasljrnmhFUG>5kqB{Y z*h-FfTvJ^~9=kj+QD1sbUf@c_Red$qttfI1NmCqOm1fx=8@V^Bd1&Bs-`R5GqQFo^ zp>IO6z;v!VIst6%+%sOeORWEU(%q_&v+CvUbL67$I4yaFqUFwEvfB>xR@4iW2F~SX zC5QjEFZqbK^XNf0b)(I2zTuS8Kfx4u`t#=cUtUOjbfV`)a>(6_dr`s{Cs#E|JM&q- zkB{#@bGf}_?qD0oLH<|k!TBo;YW7p|y_))>j9-K=8o8D{GI)_hRx zW!QAis1aMXbT0fzJcpw+mh6u(NWFp=I`i&df7j8$k;N_bDJaB)+=ke068RY_X~Fv*7mMM30VS)3J^15j^jei;_0{?u&3;4ex_{$L>lOG^tcM ziG7$txGr6j@0Gk(#uBbp1yu94ha3N}OQqGY#DPaM*&cbl_Ei$y1rOEGrSc4ZKzJZk8BwB6O(w5tV~>?)k$SFD%?dml{DM5@&qRa7bsMJ zc1b?C&rcA;b7pycXgJ>^N>!+jxsVSwKg8KGK1;N+z`-KikP|AyGt<-oNBHUH0GW!n zN?8@OK$}*jPKxMY70)a3ulcr@R%hBF;(ZYtMu z`uvl{h z#2ISN;DtV}AHHjGi@3&hNgr=}_GsJRcX>_EuZl02 zwNH!7VoJ?od0esjiNepM?&ZWNBC}-<4tAI3z7{TBTU+~sOOId7`&ULiTs!>l8ufTb z$$#k8(?$(O_Qs4?cj-R`rhf0z)jxIV_{hEKH^HU-{^`6$vY(Vf& zT-w=lxpTyiT>9n@F701#cj?>U(gBGTujJAPswy5UID*g(*SwRrl2<(?+LBq>>;qoL zO>}AK;5Vb>$+-A_N8lGw*7NM@{PF{2eM}bpgnC*3$FG&RL|Xe>8VfnkwrP%?}nSkqWgGv z_c*oo%4ODYT{Lga)-x>8CbceKn4EN@Z%6dST|UXz#%uy z{F%I+Ym;R8qBWTkUtvm|PsjfGY4--Df@k+}?wlIQK$)iMa6P^(P3_2b9NF#omY;Wj z`Of%v!qde3IG(QDKk{})X^hW}%9$Cdhu`%~&Ea=c`tJ#PSm`15>zTRUCn!d|PTSvu z^9}ntDs?fXvT8hjRkv`<(I%;JOF{oI?m06evm*PQJ1PA2e?N~oxf{whiEEchGuZ{A z=cKG?y~M&UdOHx?EN-%LkF$hH(m)o!X}yA0Z6Ze~tSRzyfhZf@@T z!Q_sNjNFX0U{~(8jNmO)*V@Jp~%_o|y5Ld1%SKp~Wsi*Y~`m_2|uH3X= L>!g2d#+LpAV+UNd diff --git a/smiley_pack/icons/animals/cat.gif b/smiley_pack/icons/animals/cat.gif index a612c476589022d971813cdd9829936e147ad9b5..34e81be3dba5e758ef13946174da6c20a7a6c542 100644 GIT binary patch delta 767 zcmV8DM@dFFIbkdSHURSvkqj<>0000X`2+<301p5x00000EC4nD00jT= z$w{lVA>7UTB}JooWH~JjqYP%tfrXSHdreHst5tgd5yAl!%`VPkyFYC zC;`Xp!0@3i&}IU76hN>lUx7CN5d4UL15g*100tK1lO;yX4+)2)EMkOU;{sx9|HkmT z_#lsz1t<|1^fV?INkU=40XYTK!=o4g5*s@URph5CbD0d5ee&M zK|M@%eq0?xM_NL880}&Jid0O0%b%g??4`y`ki0(f(B^jzKmZWIg51>YWPr>81RVE* zcX@UzD{&AY+(cPW zkl~Vr*mDdOxe-!ENvkZ9%6}DbDF6YDMPX164+LPPO9bTb9~N*@(4CwVAQKUu(@e8L xSh-bGQ<}-aPys!F;?>ijFfd|)Asnn}hBAY=P{0LmR4PCmfLNK delta 833 zcmbQw_JEDY-P6s&GEs-YjG={fB9C7Ef6{^CPZmZ71_1^g1|R^L#K8JbL8UJxbCzSl zx}0hu|HZpXZ1s2-^OT)G#NVFe_(9UMeTLJ=2eQ2lZ0`y(EV|qdIc!i`vV)=V!G!t+ zMsl6X!HgP$3?CXQ_KEV$Xis)NXt70+jfo+ixiy5HS+kseRdH6%g!y>q+E0JquCL!bv@G!4zj9b9MEOsbE}J0 zNQs`Y*ZlRt)2Xb!bG<81wHY2!NKf_SIkN0R^yLEz(XAd;TsL04T;N#tr|yWw>-h?L zruM7%JTAYi8^l<>kVh)u%$DX=ACGnF-cEPfe?qvSK6%&gFKP3cr*Ii`WEeB(xXlPN zx*0J2m6fKS{l&PI6^o2EAF6Nryrf3vEAQPpzWG~^eY1G|)Md`jnKzuhpL{i+7QmU2 zo=~>w?)~Fe7&u&77^0`#NpE0eN%(%ay7Ne(XD|m#l7p*kp6I=jT^a!m+-&nU#aaEY zu{c}pvsTqLMW_D3cEv28pVMv?O{*|zFff_6K(6OKXHtXH9>Y*p^=E%f4oSbu-7Z>^ z@nni{8`namlqpYbmx~0t*%mY~?_+T~P@=Nbv8gL2tmuMiiiW$Vtl8U5o_aY`FDzqV zsSrEn>gynIV5Ys`1eWLw7O$r2=1BnuT9hMAE-`7JSsG)>G-rp-iZT|F1ur>RRlC}l m{6cT7Tt2@qfs?!D*21$Yc1u>R;!a{=IytlY=`Cjt25SJi_h@YZ diff --git a/smiley_pack/icons/animals/chick.gif b/smiley_pack/icons/animals/chick.gif index 6bcddcd8209386162fe1c1b9b063962582392e4e..bdf0863993555e0519bb65160d0e82363580f5aa 100644 GIT binary patch literal 3241 zcmZ{mdo+~!AIHD*kTDF+mKm2(O+u60x(Nxb?OFIHAYZ(ByNNQH8od2EdKOS5v2l~*SH*JXV$OZ{*u^tMf*5+B7JR>x8LB0Att}UEN{9vUTOZhDdiQfe16UG(=I0 z30&a>HOmR!8dbK1Jq@|En1C^@W_58@bIHML_7^ss2-ig@(@d#G;eMv1OzRaJGC$ zm0wYX3xGuFW=4|om_|=Y>IG{FQtW|)I%OTboye|>b*U{n%it(r{8fF8`Pf(WhW}SR zTE)3m6gS#}@O23?Gg8w+yRV`U)*Ne*nCyJbXHZF3_)XdG{FJMB`&OP34P#GKufFBMOBxEvTp`tr+#rz!4Hj$->wY{# z96*vsrcWg<*gAcfNju}6o)SeRF*GuRoI$pCq&7Cs8DE&hD}Zv3YnnI!r~+4JT`k5U zYpsPM$$4v2WNT})9%%Z4}P7^G$9E zpT}jXtGk|<)#2yA@0nJ2plhRtrzcS-TAvCJ{>U&)xrO62JJjVRdPne2Wf4x!KQ$z# zK2Gf_dRszV>vqK#2O1siuSd;V3k-gW{JqFa0#x1jnRr#6xh+W@nMG9M;Ah zWC@3xU#Ptd1N%{eVKkOt(zv60$-Ue6<7FKWpL6_`xnUqUlr61ZaBXxSXx}aEdh+g) z?-0fq!E(HVso&OLtYpakVB^^2{aa!2YjveN(mz$1?AG8bDX(oVw6f-X8w8;#^P5fA zsXgil2_LU!G1^BDgyHrKMQS>&dc)e%H!+on}?<=m;N+X%k5(GB+N zh&YRb_f+?-AAUedZM-PB8S9XiSvN9rs`azL6q-MC)KT#W#g9fuFuhsyZ1=56+C-dY z5I}QGwMx-tMY>R6Wz{B7y}o=a)X*TQsH;_6R;IM53!BE(k+Drqnj(Ex9TFC?h;%!W-QCT)6&-? zZM>>|1(-Y##LD{Fsy1LkMh+a^x~J4H9ItT9Nj!Zx!p`?QZz3j%Cra29>7!~W`oo#S zyTrR}VMVMMA3l=(8Z>bq6Um!;V6YaxpO79R#2Nc8o1Om&@}v zDB=|(IgD~MK9rkPxf?0wRF~DRDv@%R`QW3&S9wLVqbV@o{T{?;yg1P7e4#9<)pIL+r01#AIPEhqZ zTPq~i)YMjrSA%*}pN2*(wuZ?0FHoIDkqRvMQ1I@?Wx}SQxh~n9pSH8(-Fxm~KF7&h z>WF*5x*IYx#3PFYY3y)Hie%S4Iz&Bt^<3q!3`Xs1cW4m%}~naifD9fk4=N^CPTOAELb6?{W( zd49=3wSs?be?|C((_Sh7!R+YX^Szd@#=GSK#N725eqEN5QChqB!H@5{uSLD|nSCj? z8Jz6U(?XC{ZV_}>ac+o$$D*u{Frwy@!J$4{^UC^h!``P6AIiVg>!xi__E_omEUv33 z9Z8={O-S-1lM`JTOd35aKHHNM4sW0s?J$4}^Dne|Obu9Fdkzq0qt@%tZezW(-_jVX2?HaiJPtn5D`n71Q;c5L}Me8=e;}10Mo;u}!cimz0kyjXoQ;ojZ z)ARuSMP!h9a`pW+?K)aOCBQtOsv1a`luw(zkm$B;KCj#BZqBM)auvUQ7M~HWK*dor z!QO77vff-K*H?QXFs3V`Cv@PMBn&{~h>Yo4pa^YN99SQS*00BSK*sR7-U zeL_5TkURKKAH&#RUDwPmEvqYwn|^s&JzHK@rD=t8!dGho%r%dZa%`qnjvf0ZX)im| zzEdrA1K@qqL8HCx1CL>pdi-N^qnz+hBA)U*;|HffTY5%j>-$s^HRecsB8|jgvRGSE zayS}Xs&^r2w=F1+(_=~V=Hm*KEgbygCMMyV~-o`FKCR5t;ML{=q}X4nq> J0592H{{e(|D?9)I literal 3667 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 E05p>+R{#J2 literal 780 zcmZ?wbhEHbRA5kG*vtR{|A7F?Bt$9x=k{|A33hf2a5d61U}glWSNzGs$opWXdmftBH^#55+&W%piqG3;LTF8W$U9JkH-F01f-k1vr;hZcQe zzoJ=fsC?{a%Ph0qR}8q`rmT+TyFOjpX!(w(?`#Zv4@O@Sb!)SCzvLjozqaqEeRWlt zOHpNvXG>>ennz}dp_#?X{fT5ZkUiea6gYlQ~)iv-&LN&0p%eeEz~k zt83O~O;{;Yvp8u^SxMCNU0XNoowh1X1mbA4@STbX-v=z<@bzTOG~cJSx+|CA{G+w+ z7eBbJ9rxZ{hpE_U@u!X}y1hFleg0{jn_w5VRpRWP6*1>FSgq{}j(Bm_TdKJ;ch0rH zYU!C7KZ0k^eSEvLz^q)TCcd%Vp(e%2Jh7rNqcgU2%DKkr7Zibh^qS@7Y z%R^$tx_i9WX!JJ+tX%4tjV*YYS>`~3_jRQ{D^psh^z}+ckD|oPc?HXst>C%;L-ozq z?)L{4Y)IYB+ixSz(-|Y`sHnF7dk)uJX^nv6M`o$4Iu}xN)xq$Np5)$3SxXNF3+?GW z{QC2hzyHeWALZ9Xi-p@e*BRBgRd$xU$JO`6Oi(T`)YH#WpJC@aeNIvT{22=u$<9g0 goHs?eF?Pi|#ic!w{W_^j+9wunSiEw!q#%Pe0Qd4Xs{jB1 diff --git a/smiley_pack/icons/animals/crab.gif b/smiley_pack/icons/animals/crab.gif index db5b8ce3151dc7adb83db0bb514010c668ae8e9d..5d930b93ffe774c43aab22457c497995dff954d8 100644 GIT binary patch delta 2074 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 R6Yd$#gEpJLWsyn1_YbzZH8=nO delta 2107 zcmZY8iBnT|0tfKld&vuVIV6OHB*^hX0*M?N0$MA&CILAtVuY+|S*$KH-P%boMXt4hML~DB;)T=`kRlZ-3!QCucJ})Rd}qGjnU8^8 z%ce!eL@xg@O$z+M+fEZLne>!N9(Hv$WlAvfRZi$KrUOTET@iIW(Z^o7O* zRFi|x99_bBD?uhD)VHD3cT&=HC~SHsB)nPaW%h#N2-C4X<{XGinAx(ztcSz`&AOSq z_0xM2W_Bybi+4}#*UXfp|7^&dI`qjqefEq#Yq}!ad;<~^rcacZpF#>k!m};rG`PV` zC-AhLAP~%Dei1eLMQN|GX(3CP9RCJ0zwp)7AA-REuShFyp zH-tp4XlyMz#+4Q=TT263-+9US0n$JjLPYM{_BgZf1` zb#7se&60X(!=aV*FP=%Xy zTNi5)$;c1M$jO%i1M&RmnI5aRkJ|x`V@IV0#DAVA*!|>l?N1}X@UBDs#Xv-k4zA?S z3S>C52OSK!s2cq`mu zhmVK~2f@%;Sa0g^tFz>Z!Fda_ORR0I^r3)b4dWHQ1?93ogp=}T$1oljs$%T)K4U7qjT4AGOh+YdFBh7 z2M9&JSeeTjqRR~@w;GKfEqsEZAdZe*z3J?kwGn5jLQSQd?e?$R-M3cq4P3>9L_y|6 zD0LZ7go6z~O!qCjxCJ%Z`(jlP;`Vzr^sQ^0*mQ&HpU<$tjI8D)K$q2}xC<&bTItad zCZcOpV6V1?9&n*ffw+ZQWdvaWNe8c?wkap&;xn>vy59BH+z-cP3WO@D0|S0Fd++`c z;Wg_ni}@lM>U#;_hl;X{auOr-7I>_Fv*U%X_|1uSUIpr~64@%uMr5pPmOXM_jzdm@ zm!-DkQ>Qm8p=_3%wJqh!6YHz%v$YvPkqpLWWv_lr&H^dn2HVKFT^L~-UAbWLB8ew) zDsZZHo*1Vmopm7%ew1N1_mCEAQD^Y~XqP*18%&%-Yw4+j^fUnl5Tj-GBNS?R7Uc5C z3L7ZMXmos?ZuP3jDwg#ogMY+#6-AdPaC$+ftX`NJPb6Pv06v`g`mnSDoLgc}}- zgWz-K%QU-6y%IpD8f~FQ0V%4Wu-Z{46M1YqYbx`t3xDwnyofsP&%KZD8 zLhT7X11EAKhEK_2R=}&;EKcNBZxZ4qz2YLexNwGD}xj1Q;nxnYJnwvt@xZ#dRPp=;V#k1fASS4 zIXtZc@jRmJLq#=2jjZI77sKj%T0I+&3U{$iiA~G1ZSC0Mz`k<9F`^?m;5s7d6jntv zIC+Gr{VXYQY@^QfUz-T+AIXqzDlN)mCxBoy(H|tnFqzU5rudZJQr?apxsxX<{81K< zcBDnP$nBs65fO1MC-rt3k%?tWHvKA6^*iTEoCA{5nm2FZg+;Uu_z*gteK>UYD{?=p%0Z^qk8DohP4-dLa#pvFY7>d_O~@TUc}sy(EwjB9&}8;{2VZq3o6A>ACq zl)C%hurJJ(0<#T0R+;4Rf6&yLq6=_2J$eTv$Yvf!bRD!zUc0}-n49-qu?wK6USC&e ScKz+%Pqk|%4#YqZ2>Uk@!6@7S diff --git a/smiley_pack/icons/animals/dog.gif b/smiley_pack/icons/animals/dog.gif index 7b28477b58e5785cb943968a6f0198359936ec8e..ac02eabf138b1dc8745bb8dd3aaa5988eb47223b 100644 GIT binary patch literal 5252 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 Pv(*@s27ks0Ftv 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 H2=(}1oFISy diff --git a/smiley_pack/icons/animals/dolphin.gif b/smiley_pack/icons/animals/dolphin.gif index 672ebd72c66066e1a1d9422e7636a88c3e033429..7419f7640fdc855a2e4068602e45ad76da070388 100644 GIT binary patch literal 1544 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 ZRnEt~OZK-YIHXs_p5C@Lnh%(=tpQSDpTPhC diff --git a/smiley_pack/icons/animals/dragonfly.gif b/smiley_pack/icons/animals/dragonfly.gif index 566e95c2795fae51dd377d1a05844100c2756571..4d3b1f6b26b4bf0a21d33ece63d13b622ab19389 100644 GIT binary patch literal 2481 zcmeIzZBP?;0>|-9vTT->P4+1m(P9!38m>&lz*s!%NN5y-fK=1`Jp~L7dUbTL>+0a+R_pXMYg0mkskYYXbOHd7nVEU_?%l-1 zM5R($e(2ET*cZ#7K1({e7ZDBlc~tn>=C4w2;%e7i?cNad4lM)qN2P44Iq31dLsY@1iRno{z|}W zK_D^j(wxeE?_v-JcP#3cDn@*Ej(zX#f)yf0#KY1~piP<-%=~0=pBRqtTFr3$aU%*z zwaxz&)P305lf9SEkFTjNGlwskR@b&)2nmaYwYoqQLUQs-p*ka4A@*M6<0Ubd*PBY& zY`hM^FcEk(Q`FXkpFANlldF1G!5~2-4_q1`%~Di12*zg)>W;jEwzc&QB#&UjYj;#r z`CJ%dRhO)-V{!2IzZO#%&dEJ5b#cmPDWCbj8}HP8gx)O2KmCUoZAI>U__)}QzZYbL zQOnS?yn*Rn@~Sx*JkCYbw$cMsW|i5 zLZo{kCa@gvcP}(6Hs1z8X35!%H5{>`d%dtneBZA+cfzyKtWvK}J9p2-thA|nVg4H< z`t%!eA85uTQ1e3gOmKBZLfPd`qvL2Q@}NHI>BNK86e=SNaw#p$HPym;N?oZFp;#kc z4L3LI@kUI0RD{K0M$*08VJsPI6Wb6B2hSaBLHc?`@{i^2y)=$thhzr}g3uEa;MRi^ zC(vu7EZ+1Nx$J(sLxZo)z46uPo_o}5jqizSxb}&#+=eiXDoL1Rp-cJF52-vp{VDfi)Gh-NfVMN3mmxg8o z@5%kYlvz7pS_T*T`?*~EcQlUW%@nPzpwky#mz zEM8Ugc+!gzz}vraJSjim>h{I!{?sD<+;G*RizIDSQ9*|HaoNU!`k?f{>!rNcpBv%< z!R}u91Iyfo)DrWH3}Gq3M!R4m1`9wRBk-B>CZs>99y?HUX`AmpIzGuY)uo5CmyF!$ zb4;p*4-Ra*(k58?v=Tv!e-@-Ktjux?s_+Oh?hqZX#~ZRldXjyHZ1f1)($d+XFV#2D zf;MbF|K|pMRXBPa1>Zftg|K6TF}x(|iiW$NppwQ!6)X<>3UB{Sg3ZZndv%&qh`D_B zzyww{U(t7?5HJ4vKEXpR$b4_R*c%)<4Akyxf4qbrZd+{MxM!+7U@qZ?+%zTk8*jz~ zq9p$7=BK4{_?qR_NW_-fULY~8nu>frk0(F?&B!y)|HkP2@Vse_KQ(Gi3$e$8S|HM{ zhOxOu#n5%DAHv=o)D`Og;|CwyO$bXR_vTPBFt@q}CLwD3p-Q?x$M6ccsacC3!zvm? zSS&_Wxcj4}us5;O;&yj{&X$~{10-qjFv_ACRi?W8W1$&sE}H^ZWGa>s!DpBMzpfFiNvD$D@~{Swv&!H^}{?tWHhn_q8S+?nL*$- zkm{ZLWD~J&&>{UUal}#?Pug-61)b{yWU4L?qe||-8PQjn`*-_2MgN^5F9h%ya;NB5 eFR|Z9ig=zBnXIy?u6h+SFz#fSY6HRm*8B@^&R~uJ literal 2545 zcmd_rX;71Q0>|+ukmHF756?w{C~gu0f=~rHCag%Hk@j~x}9|^D5VZM)>T~HE_PCy$cox6{OaQR4u`xDAG8iaoHK?txzkS;}Dmq$KQDHKfZvsh4Ne>=8IDGi9 zKp-e6EL>Pv@b>n;v$&XK5}c56kl`ZwZh#SS(Fq zicWN?Cxt~f&;~>?GZ6{bUTj@d6$c@qYkAImJul9aIK}MufdeTc{E6R&BVcFoFoCVU z(q>f3Slc71$`5rs$J=q^EuZsv2dTw!7l=YTCC;O$%b+6e7P<}DSyND{$^$`6O+!%* zsV0e|Z@`)xIU0ta(T_^P@uP!7gA9!;Bp)M1CXLCf+#$WbfAHuGIvH@H9LRvFD6u>@ zKuxs8T5e?nC}x}fvFoC3!7^a8@?F`gdK6kJz~-NFq4TuWE9=<~_7VZX2iR`&yJ}Z1O;0(rc;)_kg{NttXRKK~ZKJN9biqK42 z?{Zw<2FnVwf^BJ#TW&U@q{3CzQ~*Mf%iSTg2|Gj8>FTg1ROx{pLMs7FygCGpM}0UQ zG!!Fs%Ufx~pYSGlmS~dcxoMXqB8387xJ5c9zjXon((j}l@$TJhaAa~?f(2(U-)*?!Yw2NVD-q6YQ)+gH4NCoQwawvdv$NMia&-W$M?OuVB-Av0sU_MXB;cJgy+m!%UO{|=M&2Rv9j#x{FBVW z=nrW*6jcdS@QP7oenokXnUQLfQB@*Gr^Ol@IF$^rn{ghsG>L8Nxm@X52{kepKH-V@ z7mcF=NJlCf_@oHeorwmB*FF$iFj4W-(W-0M1)#`)EvfdYzNS*{12$O(%F?MWZY9xn z<*R4UFD=C61O^@%ivVpju5o0*sf6OPo;8!&3g+(Ib#$>f!vQbb(ITb0C2(hPR+Qb8 zXV+I|NIPREwzIR^L789HBRb)Kmg)+t4teIV|6jGh=K}Ns4bR+axV?4 z#gx>>Mh&J#6?Fg_g_dt((jX{ELtC6K_F|;Yg7dWAey)yb375)5r`+N#m>}&G)AvXL zepCD9oOhfZacM~ck{TyWjkxgcqooM(6XY%JcN`Ub2B6|Sl(qL0fa~W1)V^Yqi{i&O z{Sz1$mzCsy!arCouf+>gSOhMs@xo1-{x{|41~cw+Yg}Ts>JN6+I9)^CPiS1-u+_;X zK)5oh8t9mXUssC@gVwq2C%>-<>2ugWI<{^<)7koXXnQ0a>t%1!FZjYBs@R`UE$NpK zCsN1L0!J59-P}1WkaEOoB7Ns^$^b*c+XHESFPsq_WS!!r*Jeern`)7G`jBqJ;>f?g9s+`J}I8`K2#Bl?GyxG4)g856bFu5k*)Z` z1rZ(n7O!hg^Jmx^G6ThdkEPj9`y>wmF^!14O@+&qRDgoKUr@w>&^oM;+VGJKt3wN` zIcNlm6j}yKwrT1Dx1|RowdXX`dU~DDZJJ7EqNbwb7E`s8lY8II!A+*~(2VCXJK~)? zau6kbaWxqakS{IHs$*kImeH=2GPnUh7gqAO_vWtO@T%BN2n~!kaf{~uNPsDN{vSa8k!<=TLoT9cp3hnAIovpWjZ`|W*X1lV>hr0000g04)Fj1phF}Nvpj$>&?6WU?`5BL5@axifWj? zrUcJ&3#LbYz(Vi)w3|V=E=b6 z-0OZn2JSxa@v-y+(4xt}H)tO}0KI&u^JZ&|J^{-j{#cl34#5HMA_kLi0YU?kfB}=W z0VIC|J@87&%lGV!B1OOf78o~f1OOrV1O-q43jizt00aOk04M+e1pjc!Nvpls;LZCo zpeK&uIDx1prR-XopK;7bD%?2U!XRCPxnNLb>djaNp;AEfAd$-2*tCi$)ck%ScrTAw700K!@I13zScl;<+@ys01h# zD8T9wBrl~InQp+EVCxEI*v>E!n6XnIhO$JrZcPA541pw8W9s0Lv#j4uX3#MG_|IC= ztYqih1#&SjzoZ@f>O2D_h+}q!B{+RLF>F+g12XdnZ~$Lv$E5`v2+g<1j~_8!zoQTV F06Rs%T&(~A literal 951 zcmZ?wbhEHb)MC(O*v!E2|Ns9<+yAd!yLRc)r8B{xr>7^W;eSg@OLcX1adB}P7%;$q z;(u;G*N|Xm#{gF&Jp*P&pt#~c0bgGQx6Go{^8BLgVg*Az0|v#PESv#AIUSHbkW~yU z{{>EXuHI|$`t0ui2^xL#ocg?~y0T{MTgGy}hG7U+@3YyOnp-qE zG9rtusxz}%`de~p%!K_KIQrcuWK9k>P4DgFT^!gyr*IyF@pLv`CZ;7zo3d-_svFmC zSi-!Ac`>hT^YVn1J$+647w_G-e#xQbQ>GTg9bbF$^t$~AH@6>Ix$5#&mi>Fy@4Cfu ze#L#iCi|z)P9Au9=XISu*E_opA2)tsyRhiw0rL!bd&a#rD?X=X_t-I=R{9q)BZJS8 z`Mna~j1z04k8&jyS1qaFD3sh+!?0UWTR13XpSDsg+m$AkR9`v0-x-;jtpWlw1ooSj zM0BK|mG(5?HJa7JYG7^vNu}@-*A(|N*MvOx9Gj{2P3^`8 zZMLL|r_A0>X0`p`b@KH0H@!-(2N=a9%=1`AMm#V(AjQLV=YtDs|FC@dwD8<*+a}E~ zf)Q>X-4DAIb9ha(n7HUz{g$mVb~+gs4(v{~S7LhO#^b;cEw3D>_)}?tSe&NiC7+Ak zJuTDqwLe^m2znIIZ>uTuW9CGSC5t`SYoev5G%?MQR*vmGr5)NZot>{nw9Egg&IiDwf#FCO?*=a3CiS3=%dRkdS@$p?=T6Dds(`hpk5@B4`I)^W zIiaap=Kme-g}qair*D_M;Imb$ZSDJj|Cjfq9B3+8ufJbyLxRaeRoAYD)4Bz%`3!;# G4AuZwWU?m! diff --git a/smiley_pack/icons/animals/fish.gif b/smiley_pack/icons/animals/fish.gif index 3a7a584b36089868fa46d8a2699193e86be3297e..3cccc0be902274e3a905af5474a4ced9a7d0c2b3 100644 GIT binary patch literal 3891 zcmZ?wbhEHb)L>9x`1qdz2>!i`0@DBg|5yCa?dKX2?CcoeYNTht%m|cI{K>*8!ob3y z15yam!ob|%vFpx1gHxWX_gcI@yZiqPg}w(S^HNI|Wp19d_BWTI@#U{ZOg8hinc@;G zzFcKEl48hQtT6TH)2CM}wC1~=_D$T&#?Z{DQ1V)6anV&eE06dYif8S+S8` zy5Oh0>g>Au-0&1%?pXEsNRgIMfAyML5t~kX2c?-tbM)pZa3UPV$iU7Z%ODPPRDs8? zJ)bt5yt!a$#H|^>>*jvvOf;J&!Lml%iZff`^xEAF#eUW@t*^JtePsOeWu56EjwJ?i z%nb(_4n!Yn2)H#RO4c&nLv#D?pKO^YAD*lcn>3TP*e=V!9tS|7Rj2`pHZzLd@2 zjGhA9ksUtvWpei!54^j?@T|f3P`kT^+qp4BKMx!6y$bY{EzBt-=d%9 zTXgnhn_d4K_ITN1rE@}aE~@K`d4`yZFlg#(wDKU?KPUo$1sDiY3=)t)(E6w2_4C!9 zjZrnGPv)vOOtzRbg?WwkthJ6Z+w~Yv{Mb`-Y3_NeCiO?Be`ct;UX)C@I%QFc~FD_m5; z)l4&_n(>t0W13y`Sna^_lJnwi@{xHfR&*JBXE5>IYUs{xlW)9y4$}qgUs4t~U!}bf zWcCzjHmQ`Fzu&cBiBQIDyB7%)e99EBDNVc6RkS;EdH$Pea~>zgn_XsYT$rU9;+#-e z8Z7Hj-ze4GWh)*~E!=7DpV2NRCuw5rWZ*qt(-O&DEDTJ*0G0(7y8WO!nU}$1^=y{g ze>XgvQc|0+e8RK^>!yZlWy>sz(b>OpZJyGK_X{V#zb?ebIw_^w&5?;IAcOyUXVlV( z?5nG$CbeqBE|IR7X1`_r0~fvN?96J;y(+UA3x77{?YsA|${?#Ytk%oaOft8nvB|tE zwk6fFe?o4&XlHVuVS3|K!8F6(J{yMUkdEw?9c%1DklYArM5r*x0o~XQbmKdRqwcR~ zU(VwG^e;if>)wt;wT?We*Q-*Wo?B_QKlIE!C%+eBai`OTuBEK)`}9Mg1n9>0lMF8F zFDdjT9rfDmA$3Ihh2P;luGh0!dDt9U3%2c>^|0{g9nXD-%biLCv%SsSnwrZRlI&|E zDp@kKQu^C^CI=d)ri++c#_G+9a+Z?y4DndusD$Lcfy=3ocGbY=)PXItxj>CeE(SIR zVQ}jq(PP)8-yclHSI@fUH}Ua1xo4sAFBmnl^fDgo(sE|Z=k?~zWzY5T*(H@=Ai<<^ z@cM)kHgS_SBwha5{Aq@7+tle^u`IXeUKV`zao-%H+%tg;YDqJF5*l>dW$XWP>%D2 zw4RZy0yR`aJa*~)xo~i$O0W3y^zyG<3SBcL=BRTr0t<$mQ?uR+F&}PtZCd#Jz#ZKw zmlzA3;|(>|9A#Rp!R1gAxzOzT=H+voqC<|Aoe{jSjG@srw_ESV++GDnaKVXW5vUzT zM?Zyn?Ar8iJ~E4DwTg_!HgE6%$RkN+aiAUBUgJ qW9c;AJad^oj*P&D1Dm#aO7`-&PrwL0I(up~q6TS1vC_ZDum%8IwGu!8 literal 4499 zcmZ?wbhEHb)L>9xSj58c?_Jb?1`zlU24E(LQ2fvB=Nc01>=@u`q-Vg)2on0q!YRVQ z!k`0^2We+uZt&Q3=bynT&((V^UZ36lKSH7Jfyunol0})DC$0U>W@vo*s}YyYd~HU# z1dA_MS&pO_G8ZdMJ^J+N)e5coZl`?{_cF0GH!7687TWme;})L3Vu!PIrL*2t{6HSg&KTZV0%snzPMg5v!=BTIZ=#uOIqYbx)D>3ET>DRKiNp()RF= zGuGHT?|*3e`{}<$8!tuQ?K^g7hks3NadbnYM^U6UAJAD9YCa);R-KitzD#L$W+rpY z<}aLs)me?G&WcuGQ!wpYTGFMtWzyTv$IkiaFJAC^yU>eZ(Wb6tDl*I%i9e49nh7UoUQ%B{{zD^d&Lt_d&J-~~BL zSY6OTeL|(LyQMA9jM?+%FW|!JszDl9qX}y?VbLTPjwY<3matgS>YPDUVlgtXGpI0# z1FJ#}g@ax(WW zUEAw)-+xyuzk|v@1A~~t%oLVbosNdcIZP!xPo7Fljp}bv|8nhX9DDQf8y_D9u0K{{ zAf4HL>T1QU%&f<~q3+p6xrzA&p&sUKAr;NZ8r=20;@y+H)x#5N1NoiRXNyg=urX{| zwqoTfNvyTRBvkjotJJ9i>m0pzNa&n;Kg(|MgWm#C>JOMDdL7!lcL>VNKfyM+vCCrN zi4{|p7so8T{v_$;hPxv11`Y-iKFhg_`FFeRYW>hQ$Af?SXRWkM_jr3#GvkudmiE}r zh~|cv(2OqsNvVCw{_5FD!n1k5v2BKxtgiwWW>Ux2R}3q8U-xWn!p&b)-v9?;BC_O z$q%koKV@>5^^nOzZT4p0&PlGv=CL!Ix_GYL|GA34CM~YMQo6Y=wLmPVr8Ty($%eZ> zwN-D*)Y2IL^Mo>(O`7a2EV(Rd%|;Qo&57G~aAS4t1dwZ;j=HZ_Exxz6 z^;v>OU$6VTo0iLx9_(9Sxo->CrGl>$cdSm{Hm`rvA#rVX-7MzO5Rpe@JneH7f^Ovy$rCl-Z9zS*KzqiZBZ{-c9?s$zr0=(;=rU@UcuEGmmzD(qEyu4 z&|@{JW2!Izbi>(mpa~z%MY$+0YCqWCy2y3fl}@i$T)Tp~^_^nRZ((@zoA>n|1&0Sr ze5Iyxf~+DuY;!OpA8buDot~}tzE_yb}PqgZGo>Idv9)e{tvx3 zr6IvH%YSLd%QaRrRkglIvT|&)%NDhMd-q)0hl01Ue7%|5Z)*Qp_uz|#mVn1B)|zVd z^fH!4d1HOc?w(#ETrluqP=0VaBnKqbiAYm}q z^WrAYTs`m0%Z0fF5~@RAg`V0x^K|^eU8_aJF1{@?e-XR)c|nLmgAVt%D)qEdmIiqP e!48XVqGDm-!(cQWoZUS#(g7=4c`(3bq%{C}&N!|B diff --git a/smiley_pack/icons/animals/frog.gif b/smiley_pack/icons/animals/frog.gif index 85e4b56e783edb4a72975a7976f5d412ce073004..5e503258550295b920b4847931f96cdf06fe48b4 100644 GIT binary patch delta 372 zcmZ3(vyZjj-P6s&GEtsEj^X2f1|azV|9=CJYG6?O&+X?L671|4;A*62z|8o9nL+U< z3#%>z3xf_wAxH}YbBV{UJO2z$d9L1T5zHWSokg4_o}=e!Y2T7fi*9J2+jQzuO78u` zAGT=)u2X+fqSY`@f2E31?d)YGt8ConU0L(>W4%bq?6^l;pYx`lPV)G^+9Y2(;@cPA z{9|vga(;_D`}$*XowSUfTZ^}3TUVPxZ(sj}iIXOabAnyM%)rQ?!^ObH0KyDRTr5qQ zC*Shl&sxTSkmh7yXW#+47%1H$DB1psU%q$^k~9ZH1_uKl0~1i5rKNvmG*lx4gANA+ qOoF3_v2oTj?r05!B$BB;%$&%kvH}AJ*-btTFgI=HVF_nsv<3jt3~WmP literal 1580 zcmZ?wbhEHblxL7*Xy#)8f(9^d08UIPdmIB?)UQ2al`e=r54fh-_U{Lk&@8WQa6 z7~pE8XTZ$(f|)__Ckv-8122OPP(1_4SZ0=r4JSQU@3nY+cK82;6O0Y6UA#YS(z({W z{l0FE$>9fU-|h1Gyk_2eb%8rsMxh&4s7$qLSY)V`8q~XZRhf2e+PXU%z8CSftWJBj zJ;Sg4c9zdiozi~ogkRtK)<63jE1ggu+t}1l-KMM(=GPOf*f*(9W9qc&GiJ`3EiVXm z3^S@@N--R>a@xyNbqAE~b8Pm{^*#Qi?y&j15A1t5S*)Z^xLO$%N*xf?oNKlE#Kh9m zbDezeZZNmv?Kqw6b2Ue7^IXZC-!}jKHauVVH}7cv#_F25q=u;Gm{v>Q5WR3ke;z&ML+-qYF z-pV(hwQSniW?Tx96@1Nx4sBUf9tkK@l+11_CD~r|o!4eDum@rsTljs2E zmw)jg8JWcj?w)Q6X_+~x3gwB#3W>$VskuoxsVNFcl?u)oiFqX%iDmhDsS3fFMVUZG zx}Ji9MzW@YbACZ(QD%BZiGrb}r5RArF(*eM2qaLf5R_V+T2z*rqQ{{4?>#;%$}>wc zz}7qG=M|R}l_r;D=I1E{r!9sL|#9Dy2mxxg+- z&d<$F%_~tz%E?d8Rw&N|x;ihvL?N-DAT_Z_Au|sg62%J1MX8A;z(4@IFj1i>H9fPq zB((@AQkGg&402_D8djGx082?=fI9p84@v$GC94W0(*2!WsKWAwK2M1dvS2JgQ5mTd%g)duK6B`>> z>%>M5=7~MB6WO@uOlE6jn8U_1Yc@AG1NXFvs|%MdD-mH^y{dWZw#7WlmWwamw*BB@ z&b|9g*R48qYWK0@i`Q+PbD(*Tv)hFwmACI4y}tj}-AA1FC6}~4zTL6UcFxO6p7v}J zt2rMZ?P;HRo@vSVJ3l=>t`>M%FK@%PeOc*>30w^8>-UsQyyT!5dbs_&Qk2gRwsYOQ z@~qBnH3E##u;B%T4FfQ26hL9K!ISgV9+3xk8ziKjb1J&C##eGWE$DJ&2rId|>ly2g z9RE!_?xZ}?-V`Uj=wine-TA&={SF#I-4_M7Ca4xvM~ZEICH?zQ{UcRL9Vrps_GZRg zZeN5tE$(q-@e6RURd6+N7Be+4=Xo%&)i(mere$ISFly3=$sWSuTt5baJ_6SX+% z=t)){2j@EeM%k8P2WQ@XVAym`frJe!+3BVpE#Wkku2}l1Z`aClbvYyBl&2Llr38Rs z^RRLmkHBshrFH(>Zk2PeRRI%DF%t&|DB(1+O$4T!uI`Dwpky<9GFunJY&M>mvmnW4 zRnd~ArHfXrYz79+BA%to#5b?lx@9Zpp1r1PR~|gM>*%rgMQgXu-rT%9ZQtUFRlvZx zCb{^|!`k@!4<6m_*lRocc@km7yr_7dG)-{Q8!b>CF8`_ f)%W$H&PN?R2n?IURp78mINaT$&+60$3L9$xT7%ab literal 1246 zcmZ?wbhEHbRA5kGXl4L{{~&zf!i0E+dFi|N9I7 z`}_YNSpWY*zv6#xKi808XU70nBRvCVMxbWJpDdgrKw1ZgfrctDIJ5j0IN`Z^Z$#Un z^A8uW7de`-dJ0)&TrxSiY0JytDUx%IYTke56wp%_xZ|ec7ieI@%5$Q{Nzi4I&#Wm~ zvz@lenJxVM?Qdgbl&D#NjEQ!m@5i~DZ>^8;bvOA`b0nLM&4|;+z(K~S$-FX-ub+`e zyFVkLLc+@0-Y#*vm^5n?|7@NFo~U^ulP4rBTgtyWLo=AGM5?fNN3Uy2;l6!d#g$TS z<;vSik9nM!U(MkmcfKK8v8?{GWwU}!uuT}-8FkKP?kN2zBW^a$o@}iNFZc0QiLVWm8aVc~_M3CCAxy%kv|nfgpoEA3OnmRF2vllbE2bJa2a zaNVSGl2Z^%@GwJzr=o4{LB3c~4ra!}rFF0EhYf5%)T4!>|@!|iy(c0#}B>P(z zYIo#lS)Y0Ku`^MQ@A&H}FLobmcTp+s4| zhq1R2H#cWJZzoR$YrBzWAtzfq=XBog>FwNX(F6 zEML8*N{VyihR)r4R`Rb|E4gyd-s3BI4j<9jvf;#qgJ;evEjo66cjuw3qpPOZKYVoh zZs@AVFPaL@J%9PA@2ZsDqIdQDy{~gVPyhbnQ1ARlCxfs0-?0y6Dpm2^nl)!b-1P-H z6`~Fij)@0CY7;(pEjn5!!DsEXCfVJSm)|sKRgNGdW(ooak!JJKACKmCbIJ&auu2p) zKA0(?xj}s@*ZkDz)(^*Cc>hxs?=hET?BB0=9vDRapdk7s3ko6)rC7n6%oZn2<2D{J zo^b1<*~KSI!9f&Mc5wqFh~!-u*=j&x)CCM9ZtiwfZ_W|L}&WtY+(z7vb~?&Dc=Wa{yar#9?6T&TEe z&#f)D&YnAeWAWnpCr{622RwTAy6L*~%^7c=^{;)e^7zx)zIVB+-|XnKySiEZ-9f8{ zM{H#q8crry#_V%zyfERQlTi%cURGi81Lr2BZV)uEI>Kr+`*^vz%bkdmm)Kf4aD);t zpOKf4oHKgkbbtw|s~(b&YO}o#6!>U}aAw9NNBoiCDQ|$Lqy}IpRkC&%c`7n;)^>7o z^7hQ^;AWdSIbbFy-;&v!9aER^FIo&rN%LlIs^H{bTW!U;X=B&keN%T9c<~l?J$U*0N&mVWyGI|+^u7JU zy5{xHzJ<>&a({QYyT5?RRV6ZXLd?4OB@P7%n;F9zVt99Ra*IFc6H47EU|@EJRcN+* Pm%PoDh?A3?SQxAU))E=% diff --git a/smiley_pack/icons/animals/horse.gif b/smiley_pack/icons/animals/horse.gif index 9103abfa6a9bf519db3c1a67ded7332c665071ba..f85cabc4e71f12e9dd40f13fa92f8942b2238dbf 100644 GIT binary patch delta 1575 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 XRKcBS&`LdnAr*Q2E0q7!P`dsL3R~hx literal 4901 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 X4PmC%``rS^Ki+&U2l@XX$bJ6>qCXuZ diff --git a/smiley_pack/icons/animals/pig.gif b/smiley_pack/icons/animals/pig.gif index bdc68e836a90875509f920d89ab2e23c64ae703f..973f5b1e131d691cb2c9f2c9020555d03a323727 100644 GIT binary patch delta 667 zcmbQsev`G{-P6s&GEsp+f#DM~0}%Z0`TyVH|Nn&ld-m)B@xegxKewN2NU*bGfUA+7 z0W%{|Q1K@Vs~iI}gAPc69D^hS19O+fstx}pI5IhP&$tu3rn=iAn`lJbM%Q4foIr-@c&nGJe z#;^lx1D7PsoDpQSzh~8wj|;-~PJCBx`oV8aH!C=hxENRd(zain68?)TdhxB483%OQ`(J%m(yQk=yT|>wOi97)O7nWFN=~TFz))lZ zh9EOAv>2F}S(*Z%fxrNBkswf9yagJ%TW)oK=9=}9ukDdX{j_DlkT~W7#W5(tWf(+( zic{wFv!6W8-_-m`v7vb1!t>pwz!38UhS)FHSK2Elb67a--Lq!F5NS3h96CH)oAnko;go+*&6dr;=8t$ zSj~4!y|(9R(cT5xZ9;6F)=}y!V+?w?-VnaE%cp(u>oh5)iv2CorsAx#_j*g*eELi5 zOuotQ>3NGEzWeE(Ui|o}oqDNQdV!g}t6FTjd6#OtS)_HJLzTOkL|4+pDKjTeGH{Vp zvQ?5?JV`~86XZNjE>!2qXY9K3&)}5j>b(}P&sxi~2J^&a&dXS}F6Z^W0-f{GOxW~v zg1vN9DQeFeJ1rCK1P-e?(@RA=*3I1!wfxk%6**ENp6^3@=eMudg0)R@m`XM|X$ z!Sl(f6S-W&dPQ7bRB@VV@%_>*pSr$q^;6v`cb{+NKWn%Dc9H+OYx|B@tCfhR<(t~M zsK%t3b*i+PMp*UQSGt*scP37lJY&*CeP;f`lu#j*O{vy4zBE)a5*We z`~N)Up6JiL8CplL0kw7;;2O;?%K@;w{&-lEZ7zsFER6h$+Q=pUNPBen_pZg znzu6i-R_lf9M6?+_1HgnbJ5dEo%K+Hm&-qu7LBh@=eTZd&MN;gwQc8Pjvqa8&a>a@ z@n`Dl^_2eJJB`oGrnb(!u}MV7-$tfg-$2=1PEH!h6>JO~49pBnz;wtGu`LX1c*!EC XfZw8VENv<96mUirTl^1f2wMXHCJAZH diff --git a/smiley_pack/icons/animals/sheep.gif b/smiley_pack/icons/animals/sheep.gif index 8fafc11d244b9e38a17b7ae741741752a154fec9..3f7ec99c2af59b0717edbfac057ea48f3b862ff2 100644 GIT binary patch delta 2106 zcmd^ATToM16g~IeTmk_El8^)f3dkd1R73|*R03)Ol;DG>6f`_Vhyx=p1tbYXv?2t& z1R5sthA4ERs6dO9L8YT$ETSSEY%ACb2!a*0r7fNGf}Q%;55~XlpYyS2oilswv(_5$ zm|IEV`EuPiM>zr~@RkPf(rOi@l(n{6O}tj4&}!qgT8$PzfIl} zX{?Pa4X_tci+F%)YwU_+4_75LtA*3uDeQXAk*7V%$HBY);t2Q-o$thw1{W*k>nxsM zX_w_r{~PK@-^YPp;*E6-5Hv41J;Nz6(wCeKi{soRh%1wMYEy*J?;uP71o%7*Y5|!{ zEzjhc79PoMC`ORRCY3%DvxJx=%2{P=JK43@+!XVMT#zn6!7`z>i6%eayK0j9P?OI} z4XSOjo#+R)+3O?%(xgA?Et`7n{_ci^I3Mp9b{RCIfEW>({*IFWt4KGLAzA9?5!tPDsy7(d7V+c zYHnpVjSi}A4Gs#+xs5R03?{VsJdu*W&EvMhW(<}2tvY$fz;AD%O8RX0t%1pxMV-=` zK2OOs0ad~r2`mbneBn1dK4gQnB9;&t8$g^_8jm?VXx?OKWq626TDmlu^68yJ`BQCYQ~ZpJz%#?s^&EJ9&;wYt$qN|x89 zt4eaKO4Rw+3-%Q#N~#=SMrl2Er9beBri4W+xs>`8>cSMr2%y71oJ^~e4+Y6!ffmEzM>3kHKU497r=PW4C_5JR`$g>GYL2|g*Y<~3%HV4=ZA|KMhdW<|puDKE3VKI87jTJUgk~w;xWcQ^B zrTWZ_Yo6E$0@lA1^r-kw*sH*5pa+Nmz$62yqUoODSm7h;hqg7a!<#7H)|D2M%R3AQ zojx@G3oF9!UN(67SQp&MmOiy;X?L)_RCe+1j8VPv+DPHmAG`iEDtP8oKK@zLRDb)d z{_Q#c;a`g;{@4$eW?BtCq98=eQN%|S1nuJ~g8qMV#@r347rjzVUJ;|x? zu}H_`2#d)S?F#bs3SEjrISdqwaaf$Z%``tQLs@_z=c}smINWMsPNGQ5E~?3_>v$Xr zES!;bJyHy_SPw%sSg*xuZ##Ba3bh9c4B&4In@U?FMZksew<@cfc@%yJ{30uTM%JFh kG(c72W@+bW2uKjuI2sdE5JJY(wO7L`z1asvn4@LG-&i&WM*si- literal 7631 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 K9KSRQA8P>27WKgZ literal 645 zcmZ?wbhEHblw%NNSj52a|NsB*_m}pZo5KKR14#%_{Lk&@8WQa67~pE8XTZz|6jl7m z!fC|7!k`0EAqv#a!0hX>>+)WMRbpASLVTz5=fzs2%zip$UdtjzYri8}vkG$V>HfVX zzRzmGyaH8?zL+U@j%GYL8+CNWgA=Aer;mqhzRWAfA(5jHT>+y+*f R+rUn98#rlh1IkIAW(v{j0t5t4vpAOdA* z#48|Gk);SSltL1Q1c^)nAtV8jK|qKgkVvE0Dr#FwFVuFmKW*Rnch)}Z?C(2!pS@r; zXX5(b0Dmv<10G;K_>ly#wYUhV9$@j=nqMCS-950F-&L5M2iyk0= z4PXrb@S>Y6pgaeRDtr_c#f-Hii}3VZm-x&1)wNG((l;Xe7-o|`W=3w#^PvP^#s8vz z3J=)3Kk!?;e^HUz?gI7N`0ToG$kB@M6(GCfZ6b+awexBb1hTcSZHJ`Na!LD%8s)80 zg-qO`s_PS$;;)YN4vh>?OvuKZMjzbk8Jrap12k&I)a+-EC&kDQ;{ouUQTHx${vOfs zUn8}`6V$zD66axb7tZ|?m;!?}FJKY^mih4*zx}K5b6bL9wTErs>ug$}Vdgf~HB&dm zw(kl`)FBf|ijjwo=gH_L11}>?A*`%4qzo5a9T^PJ*CD$geA!^nu)MFUzZM#Fx-~i~ z>lmB7H`J!pRLhg~IRTYm3lAB-@4nlm z?l}3~R?U&J#DPN{IRf?R7D-8DoS)l_9E}fSBpxRmqa~cQiQ}LNutPA3U>Pl_rq)CO zfuv5@SX(VkufHLZ;su>I<;}INQbqgqPW$$zw%)3tk$&iQm!xM@IWX0TM2$zmlhdlf z2@9=Etdl>QzVo1a{v;9A!5dkQY&{QN_cvb0dfV3P{k=i;Fh|FKTu|>ly_vfs8b1++ z%+=D!qL$mDnh!UZj33?+c9bsd&x`Y;%&0bfjus(@ABxus38sp>)o5Lg9PVu6)BeyLoy;>rclaE7qcu8M0f+JdL5wnEe8alFT7I~ zGr@??88qrU`?6U6u^8MzZ`ZnwIKc*ycDIJWZv%v~=iY)WS z6%KV}y!Ei%F@8#ZSuN z@UKAUzy;o)m z4D%#rYz#Xk2Erf7;BXQ$Tu;$cva+*S93(a`7Cy^M&rD7|^3}z!(~1&OE}wzUgG-gh Gz~?s`R((nU literal 3453 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 literal 1507 zcmd_oT})eL7zgn8Jw5ab3THsefmLWJb-=KcvV}qo;X@ciLne&I=``RlgRvzTf-|B? zp{E&N7TG%3m}o)7!IU8@7!Z&aDQlMvO_8BpyJ3xOMoej!h-F!hr`v@$-h1JD`zHV2 z^Uw1fDlL|0SK}ZZ{H_FzFEarEbJ26UI*d#r$%la40JoO_=><-{!;|1~-vR3@pzAG6 z-2i+-zb)3b;|A6kOJgOo`6w0;1xS+AoyKlm15O*59|xXzkJ}EKk1~nZG4nL=x`2si zvc=i_LZ6XmG;vK+q(kxU|` zL249X01c4=B}fa76+MAO<^-6ES=wO{qr>)hbikY8RR+KlfA`kz%(u1;(h3(N>T!s4)lz0~r8tE|^ z_8Ymf*HZro!%t^Lj|#FLq!|zdmtuJ^0{KAk-j{nfV0EhKuQz{MmaAN*h#G<9#myMih#T&;Tvkz`^CQn>`r{>#<&Yv&WGt5Bo&AfxijoNoC zMDEYGG8odbM+Q|alvXjf^Ul;S=G2B&YzvB;Hj}F4rB$NFZEs!a-CFw_mWPMx3QI5_ zaz^)P?(HHPT5@VzRda8qcfB?A*^&|vcCkUHt{fByHQne(Mh%{OF&~R6$3b*4;n7#- zG_?)2D^cX1eX~Fu2n8%^-=(S~7*2;0F4~R=Bh{LA2vK=fwzh|^DUVD{*Iv?yKV~T) zu7_P%1$*SuIe8?O{?!-VnV+#EMsSGa9LQ$PX7nJ+mM7_=;5D%T4}<{@m0m}s)9LVe z6j634b6~he#BJ{sYBdqEwoY*`Ea0O3$|UK4ez08_i46=wh)_0bK>fsK_YxZMEK4DR z_;+xO(ksoxg#7B<@`?t@G_fO4GY-2B80;C2`~R+=Pz7=JQyqpAM}qo?1e?-zTFq1Z z0+f8Jr}SYxgl!Z)+)5z9;uqA@;+bIad58q* diff --git a/smiley_pack/icons/babies/stork.gif b/smiley_pack/icons/babies/stork.gif index de2371d6611eb24b71918fb1efa73d48f724f3d8..916339071f437a85a1b6b3933ee5a1ec4b641828 100644 GIT binary patch literal 18807 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

>-Mp(8&H*2Ug+cq9)>qo0L)BmWe_a+(c8N&{i0Z9ok!)NyK8Zg7x;D*f#-R^)}k$l1m=g+!2INb;u&x?sW zB+VaXeiZ~Q^Fx`>4IjleZ26c|E#>*=u8;>=CoSY4o$lRE<78uW@o+PtU z0Yp1j$~!a)96^)}NQIRil&TU!6<8PxO^@}-V}rz07iW~P`3mMI!%9jrI$-t{RBgqj zfz{nwj{*luV`G{d1)4Jo$E$7+D>S#qVx(hiDKE=Rm27Ps9!~X$94oyBZS6`oZ)1LX z1Nwyd=G{y1kn|oX)dK^hj9z69DCM#`ZY&+S(q&J~Quj>Nm`+fLnvmnk)P+(oLG?4z zyVt}c8vopxSpFqcuHi11NnFRZump8Cv3)2YRE3TUVZ`$Ju%j1tskV(w&sX-ktf;4i z?CCi+FB&qvP-6F`Nni@yAm<7Fm~0}?#-6(ZXX}d z_9IVJ-+*=xl-l+%zrF{3#a$lG565j6!8pYfLGC9-af4sTnh5xhg+6=5-DY24oh{`= zOzvnP5^v5R%}&FUCXvW(I6(bYt;|6+N-q450+!=na<$Sa-1M8qM}?X|&2|~wMUUES zS=0BW!LsMGp=Z2v$I`5y9+0HiJ(ReTsAO~*8LI739DX`9W6HC{UK4u>WMF8ge3pfp zJfwc`a<#k^W^z*qup55^z;urX1d*6%_{+w5TZeqvRMhMvZSoDAPUHk?hb&DE)D;8p_H z*OC`o^ndhLcz#pu#!uC@F|qgf1MjZ`sy*j&%tK~fOw>voN)AH92ksvlDF{UmZ`xyr zg3G2~M817!(JsP1bSbaN0gS3mndz{keMcbSAHFk?Y%$fl=_bMSjQJsliIa;Bg)fD_ zDJ3-%(2f$fK%=7Zc#sgu4ui#LSi~nXC5w?^K{H~CGv&br@iZ}Ynb4Ao&}vRdMn^+w zBWIXFO%<%Mv2+yX(06}exS=VgW4yH%GTW4yF)*P$P+GUzF1V09HH%S#aiV$XvC(+) z^8NdbMW#<0-$3i5-QKL!Ufy6Zr39`mT$CRsO-0&!f}*hN*99#<;KE_10be@{9Py8Y z4@Q2vg@#3DLpU7uMk&aLOm$ZxR_5DiPT^#3I?bOwSN`9W)AVWVk4T1?n8^BR`-T}@ zD94-RMHunoVix)NyCE!K7Wp_!UMRgK7f;S{2sB^BH;8tl-oQZP498oq83b47Q|0HB zD>zo)w0`RNH4q!GRqL6UB)^9Rhl3ZE8@UhLBg#NWDwxhB`b4y+Hkn6VWUfExn_0&qZH#z>$q^c`Rw(lPunZ*UxD5L=X3ph(>J(G446n- zG%wiIE?JpFP@zA@dW`C>QAU4=3&Q;)e4w16Jv2yWl4s$r32rR0Y@vj6gsE)O4J&Pj zK#6t56gpEF8vd^<^Pl}w;osD2@Viit!Ne@hoT*@)H%gTCe3JV{ZWYJD`6Rc1$sp6s ztjB{273_m~4u>NWh4ZF39iuL}pq01sFh9YqDt;LH_~hY%Ssp=ed#0-!w4Fqd4dtrm zt{~0g$p*IOa`P2t@rMTshuKllL_#1^)@amlUyqDPAi>wQPRjvjiQO#)Qhcnc6!J3B zGvYCXx=#?+VRWV8S7? zC>Vo#x8xbIapqt|@MUa6fr_1uNMFsD_OeRX@Diz22YnFO*A>J0Vn0|8^2Cc}Nzxqp z5d0zI?cZb+@c+38A8Kbtcuir#0Q&+msx_g>{uqe=Qffq~Z#QW9Nu4CuUhalj&diG# z*uF)(8VTklc7k5!DrcM{D2V6nr{>5V348ko9(VT+C|Nxp>U-z_lc^869{Y(3G0RZe z2!)0L0&+kg(zb~-%<&RbnVc|Kik@wHQdYK@5|FkPq|_8vRfwg-Q`!rmwT+Z<@wQx$ zg5l1(F7Cdt)@oQ+SKU19*@WNJY-e}M@KUqrRLVwoVZqe0$5dVW;gHDo&h6C=j9QGZ z`tRPm)DXi1sYM`hFaelQTx z9ej-=r;lOW=b&+gPAn1gewtvzQ0DDaVY^cZxf+vV%q?f?nT6_zh(C@G@!yr4;`~U8 ze;us-FfER$U_-+1$AbLO;z$U;{`02=;&CPZmO|-Lvrtf}cBIO#<1lm^-euz{=hU3nHZkpS+XU};~LP|jOa(J``U zG@KBKTv7&0svN+;1~^^`#y%Y0Kh?71MN<9$v2 z4jocmcCh~brWKgSaP9n3-$2&*`mE%9*6u)A>HJ2)d{fV>=V}Ls;#<2IjaM))SBKxn zb?%3tsTC-tiPFxKdqrX*4Lbetu7Z#qm79HG7$WROJv_LgbfE?ceuQr-?q3e#6sNOr z4$V|dKI7yrak7UiGKgR>VkcFbj;G!7K$A>TLyTvOr52GjvHo$gNdB{+3Fm@Z|AU~C zKLnMz5H$5%P@;1|8!iNWbS|hrSNSWFN9_|S5Lssw?{GDyEo^3^2LNcw&r5*?@+DbLrd+tvZ9c10UQ@L~ z)kw8c(@9hHB8^P1&q2JFidAaGO_ae;;B%FKo=1|PpQZo#Z)5(ofdAAR`NsnOck~7p z@ZGq8+O-FFa2T7m8tLSOJ>5O-F?)&l82b4Gf(Kc0`-Vyeu<*J9ipRzQiYMw*IHuCj zW=Lnz+KECS28Jo6EX7hP<%*D|2FcVSB(xGD)tc5WVb3K7OnX#{LZ>rhhQvFYyT>P= zuONNq#TF}iArsT<8)jRgJ6QYUXOOkG)6mVASSMJp5AT{rvuCYoL|hME3?{!1AHC)7 zIkxbbxKyXaFNGSWLt08I>Ck6~!e!boBM?HZToDoOP$3ugCl@3Hp`pm-WBF~;CeCCR zDBXoRA<&Mfpj3aU0BR5_1EHLEC!WqKE9Rgi*8o=}HAn)XUapb*STU*Eav@E(mHkGs z{R_O>Y9C_9&vD0EO^(Mwy~%1;$~CSJ`=FG6Y{-(JpN*^kxfGOs5YXXCFYaviH|rB0 z69c#?PfUtVi=IicGUx}+bs|uKL52QJ+?o05tLnjM zNaVZ2`6^v4_fqCNtX^8Woh^#;kF7K-wO(5ve;T%4%15Q2_P%|q?p11pE`BfBf@HJ7 zwwKN-M3HN~6Q2g7uZ64JV2t%2o%Hjj?SBa=rJck27bzQJ_Cs&q$pF|sKfosC#AT83 z^ahn;GJLS1?ew|xrI*ghcKvpM4Cdu!nTbtNAJWud(hm(v^qrw_aq<$G3_9^J^h=;G zw3RvH(ch%TzHq`(vccc1Z$Td0-3O(CrQB678&tr-f%yzAbup#RD5J-@=4_{~^doY{DicZAf1U2JBsS2G>1a*iNt95#r zKC#*r0U3AZNIpZAa8;Mj18yTZUT(7b-brNc__CzV0C#?-IM(KVt^W=_3{RuPxZm32 z_?S8Fc&p_bqpE%|sr_!3A4hmDrh>!$NhzUx$xxHo62`wLa=YTG;{@6u0M$-+! zsIF)laUs`vjxB$4nED;w#uJ8NH+FtLh%AUfG6wt7$uL>|mO?P^r9R3eX3%H^G*TZz zhi^WWz#>j9N!+2xqc4)%Kg#F=3k%%Jkez`xcyrljaW8!)Fs{W&V6=-!N{HvUj_))$pUX-ut z=jAKadHJgO1?UItUzD%WV8f2<@;!^Mc=PK5Lr-1UL`3N9QAW&i!oCJh{+jMA!akPV zVd2t&EJ9Rqf$<6YXf!|-CHLf3Hk>6>hPs4H3<3#Nv#+2nOXR!@QORqTC~8t_r^@JZ zsM6pWZ0_m27t$p;p))-rJ~wK%xa2#(x+c1;zOaq8JGFIiq_n^NO7r;TvrWGPF^Bn& zp8ywPQ!?d%*w7%2gq#K_^$0Xv0wJw=T-shg{7}lA8C*JXA8?}wE^SAJNq;yl{o$n( zLliG9OhtuZp(01_G3)IXNL1C9LK5SpoZ*AV1AU1k52-^0YjSxrh#p?+#e^{2$>%h6 z7pXWwY53F1$`TY^$ z7~l9mu&p$NpUvXTINe_yj=yePq|0ulKN74FRJ*$nw^#vxQiPsLR;$xhBF;l?1$lhn znNqqiITH6o%B4_obpFpeK<1xm=AP5k{})ZAU&ZmyX2jhKn#Jcd6(`TTJ1I`S1>0|C zTEvRidJ;I-qpulRHzcVp^+>rqJICqZX$;`>GjI-2l4lY2wc-wskO=~C#s?)N+5tGh z_7qQV<-l386sb!e0|j!JnnNXRc@k0n9f(SMi)3-LQYTerk13B1&u~v)x2E|>uix|8 zIq|7QtL2pijnECT)$OI-(SG%vqZefd>nHm!508qcBj21L9iLzMNFh^^(dmuZNLU~V z-#B;YG~muGaR%ILd?QQ~G&l^GJ08iFkXB~)Uqye1MT=XxGZ00@mUIcFl8cMZ#ZwhC zufoWmL}Q5-D5$b`Cmz}bR@7q1xf3Q#wyCBaJ)j&~oACr6$q3Q0lh{o1YQ>{ zP|(iH(yFpqliGr+QR9IgcW(DSGbk%)68i|8j-;>FyWBRwd~~Fq*=+`t*Y)cg=2wTK z&D~8Y>+Q|k6PedShv)3giY&ro{JzYy?vE!6CNrkamhCL$-^iEBdVhA*UYWd%tvZf= z9X{6Z=S`yAKSRwwhidjOsJ4GV9fusD1!$L#BM63%@gJcoo+`Ne7H#v+okQ(Ahbnt; zA`)={)duK!cw2kwG5d)483kwpOhc@={lo8^GmQ(1Px#4H<-($g#kqh(4UHVAOY+KO zRGSnbt<5q;w8|ZTMMWJS10Eg1>SjaK;6l< zc|7h$h$OK-6{9dnt`orc$BHGVTG0o({!ui1t_ynPUDRBfkb3j@;DVjcgHB zG@L=gtf{OVBW^3K$RZgyd!<*v0Z(BsI^orV)(?+MBGI_U_!aKA zVZ1aN8dgox24Ui#NtOuMiga~fp)Vj37%}PJgunVaOlCh;5_uF<#_}Q3j2?A0yzVop z!+v+IN<81O%bCTb)!R1xo5^)L*WD$B$ptN@sD~^^Q^c~`uGDSXRu89JWFlju}kO;)CYNX^!v2M&MT6|(=P-B;Fmv`1d-~p z?@jY5pgnUnqm%Pzwefkx5&(ep4%YSzqh)=<9Tj~yRGtUr5}KT10JzmbmBRT}KAbsM znY!Y9^NmzbET^qfQY*Rx>1@AS)~4J;mD4Bsv`&*}bPRi-OC@4PdQJZqTYb2W zg|%tEJ-O?=f4DWM{Stg~xN;oy>fpnRH=j=pisPf*_s(#uC-o_9XR1Eh5s?uLCKwKr3wgGgbIHl8ua z*>T_g!eG?FG@QZUOI;cl!$_Ddm@Y=8ZJ;xgi?qJwhBafXT3*m$Z50^II#MAsMfWf$ zb{iataT@mm3(ZpF(e<-cBGv@$!ko$!5EHB4>rHgO>$I?Ej2s|H0?GZc%Yv)h#&LKO zUaV3M=8ow^!uoDP*7wJKj0wV8m~KS%$C;A6V z_sG$@ecc2Hc_sOImj-6Awa1J?-81))du|;GDR%(MT=cH4bn<=*kG!qf{8@ZWo&{+u z28b}bJAoskR6-PlsJL%YC8x+x!_)6kU?&yO=Bbqz0gNN=mZ8y9RHm}3K-9r)KzFz^ zB)3;Qu_rofM5+I|Zs4TMv`)Af?>zQm^c?UGATavO$i}Rl==RRu+ELZk&Mw-i@6y}% z2fb&i4UNf>SIJtRtc8V~zL!_+VsNSxbp1tnnW+%PhDJHn4II54aS>=tEH1;`RSW}h z*AQu+J8%c3b*?E#K@ex?O$dk#K$*aF$cD$`4wpfV>3Eb_xSYK9RKP^ao%Abgs8EZT zgv6viU^XbM>$n362j2qi)^hQAp;ql&qp9 zzoJLs*tOh5Q~&O(&fCLP|IcHoUCr;0=lc@*&8;TT*}QP=VuSv0^S|Nz*9BFY#`!&8 zmI3_YjZJq7StGW7afUvU0yCrooClf&^5Who3UvnTst77K4H5r4`6TazFIg>beo_opsV`XL^aJhv#HCEul@VF9ZN z%Vko-b5!%V#32x46PGHM3YB|>N|3e|<;-%G&a7^w#CDyGp}W1Km4V|jliI%7&Q2}! zT8okwn5UB0bY|4HchI{Jr)@W1QoQzEcpOA`$64*Z%sfMMPg~5!FO(FON<_+G&p$o>hQ8aU z0gU(1J-|IBNti3yNiT_T2DS?BrcL)>73)8k z`R8S>iOIvCkkv0BHz)#-zjOOuyp~Ib{wHMK!E?wZ>Y7%7ne#8q+)c6{1eh5ZlnJ|h z1-&g%j4^+TUx<>M&fWbS^CMqtkwD5IJJS$Dg-Estl(SRJ{V-2BfY~io=^V3!{IhIo zc%EiKrUV3HV(L`GQl)yYSQ*j*n7LB5JEvDUxl@ZbcSN%Pd3ErV?2L~8WC?HTlJ<(x zxtnL*H^=84clXdY{Fh%!gHI^V29E7^_F9=Ln|JSC7Vv!2w=isG5+j62A{86#4vp?P z-?EnnDzp2;pmWxEA0FfZ?TC6mLe0cVKjLU6=`M*tyi|XGS&3D##?$SAB z&tqB1772xVK`IFlSA0bwE5sPRjI&s%_Vh!(;w}lX)WLf>b43+pS2hk+Stkl^6ZM#y z@fhIeYbjH6I%n9(WzbAxBjAvZp|)pu^zU|y%hq{=2PI(R@s)`FK4$uP1+oq^NGgYs zb)Mjyr*6jG;5*5URVH&W_v9&WDpy)9#R*Ti<2Rok_ZFkyJ#Z7!c(vT5RsRh~q(N_T z#8lWrA++I9D3zMsME6od{jc)&A6Wl2_5iRhxOW)v^WvT>w+IdO{l-t$w0D0Pns>1I zf^}k}b-Tfjja!^#AlTYwhWvcv#zViANXMA}od1T9;LUT^LM(Q^*1`a5r*qap@W7v} zDY?&C1C}NSKNb4P8eR-|`W!Yn0J}~JIG)d8_vG{`CwEn6jVcX{cRZT93$V^L;&BI9 zcU-W3u&K4J0{#Je{?%)WH-pFTl~49uCk*+A*KXUQABFNHj1Dk4ekZ;$ZDvlHANY%P zIDE#JutO4Vk^p4c>*OjKxl-iXN=2*)RZ}SkYB(KjpuFjD%rzSqnS9n<<#eP@lVw2k zJ|ViCDL%-;;h-i@D3s|f!tqeKV4*^415ul&5oJ)`HN@P*q7-FjRcG2nj6Ge-d^JO) z<7w{rRZAj5T(pd9_gnq1KKtye3ct~70!LqOo>$xI@Ilbei(Ihg(!Z6bH3!xMSeG3s zR6Uv@kgmU@AZ)jDr;3K9tkmhoIwJa-bl#V_O6%2DH;UV1pX*F#JG_^kSZjd{bTFg$ zCw&=yUEux$>0hHkCJ&P`BHW{$+AJ*;W;>{bA80?-5o{^c; z@t;<{VYQ;YwtCKb-fVlpZVyPs{8twz_YctC483yQIW@_&^Y2aJC;tNZgkG-*Mm(wc zc4M2kG^6KVq{-(lZPS6c6~O4Q$2f=%?(7EE>#9*9iTK$~S8&rqMq;C`$wl!Am+1Ia zJ$RlDydbGr&>_e(hYRZqYtb~>REkX0yAbA?{V5BLz|au6>Z5^j^?QcBrVi!{Nn)tH zw-rwYR7(+8Q$#v6OqH6Hura|MQRVvGeq?D)g(q039uxTOTNw%XTTQbc(2yM;U+<2^ zT-T4|c0OYtGQo8sE{&_%p39^Nlk#hLay%4bc3WIz;mM2KQa$;wl8-jV{cScB{kl2z zHp_9|cWK8cns(Ic->HdIJtB$vcU=9~@Z7^B1NGd^gR+ZsEdNj%{Pfk_k7L?fVBzHe zF#VteeR*C=X>K?GNq6E!(tSxMy~z1k()>K>=Dd7jqSEYIK03}Mhi2>g2ri2fbn!7m z_)`P|Nw=nFm=O7S(ybKg&Vx$2NV=(L9NZ{WMDnT0a+N77&QI#ddx_;VRjDjW5Y?h~ zMIhAAr3%`^sh)fcoFpU#`yj^6jp8^keGSdtJuCy%MnX_}2{mPoJwvbtH0w#xO-xdoKH)dOnZ56O85N@@8=| z+PMCS%%{MIy$vMI#Fjd*kC)>}W?tUZdc4ySPP^AfrTgKCsok^P^~%kr!%)gE@J@RL zjp|>lFa3Cl!EY(qUvs4<57pBnTvVOfjL&^NmmmeO{$72tg9jJ?U_HKdc)|LhAnDj8 zlkdF1qR^u*b5@iB3akcIsmmu`+zqbn1M{5Ra939vSwUYHZxe){P=IkzuqU%%m<>;0 zq;d$e0C_@4Vv-^SRjMPYn+Py*nyryb4F)`IWc;L(xm;bf`XVJOE>rI$&+3+V>Y&9t zG%VKJt{E_SXIgL0?uORl^M@-JnYa4-?4~6c$jR1xmtH)2iG@ve+IM8Lg8lJ{p)y8s z+D-D$kayMIY{@h(mnnoK=2)`+by|lj&tOl}fuhcRZE@ji{$IWpyh4~7Qu4#sf+@m3 zea+V*IQ`4lYUEQX3O{_UYN_G*%hx)FxxajU{BM1I7hA!2P{U@UYeH&8Edi&Jv>)_= zF|4M6oo5h}TN)NY*0~!T8)(?(xE{ARnK2U-_a(v6WEx*w+}W*xZ*v-DPLpT#tcq@- ziMHO4O6RS`QuB9i_pau8`K^Pb_;;lby9;lLR;_rM{I!Gso%F9!>o5~77qmsijDxm^ z=cH8&u;+mhMb8V;Bt>LUTfo)h`^rQ{a^>?SkxfAIt#Xlkhn9xD9bwN`1(I(BJ?sh3 zw%ZtxUXXFqxVcfw3Lq?e9t#GL1=^Yfo61G7gnKwWi`EZCQSk_q*`+9xQ*u2KkjbK; z%GJ!z07x5~Jgq`hXsC%Q1If2aR=GxJcDHg;yB2TG&;!5Jpou#`3O?h@+cTx@H*R@h z>4mwqu_b$;$Xe}tVe9h>oAk7K{Wt{s`{xXUZ1wQ*c9G%Phb;4Z>BPzhU7VI5pm*~X zXSsjmW#RBe@hdD!!KeWq;JTsUMh_$xv@SCn(xv)Jx2?v#`S-E&-#m!~Z%Y>oq z+ulvCiCpFrEU>sS2HZDHQxEPurPlgn&wMXOxzrS@{W3J=CT!v}53Q-fP ztSSYZEV0vciX1{mXIAUv+5 zI@9l&rr|9QiAXs<49$n?r+sZgERBWQ^Uvxszatn)a}?%tqp080>2Q9}9;W@_Wv8>L za5+x0AlG{AO$(Xa{4tyDaQcf{3yKZ;JMJI9K`>wnV+eGdM!1?DowuxOQp^aIfLY$D zV4$WZEQ0Xe1%?3u+`V`ZU=yF;;f+6b$-dacNwngNob{yWXI^~Z;k&$lzKP%MnO5P# zw{^90- zKj$#dCt&DPld_&MVKj=avV)NJwg&xSxkP7zz{x#e#CiV~e1T%k%o_|Rb<^T~I0i@1 z6IW?DFpL@D#@zY3P_?^MaI=UH*7)?**tUi60_EaUlSO|vu`x+Xr<3iLP!4`wvYI!` z1I7IGVU0O3ZBa8#v$4M%4g#^tfGB`h&=LT39lnxm2C8(EW{?BbE_`zQ6n-jAl-JxFX8f~8aD*SMBn8;TA{ueW&#!z@ZThXZ^r^r z1OM$Nr;KDS&f7b=Py2P_A8y^#&Y#2kKkc38Ta!x~#uKDy;sFJugIMTAYEaRmfddHA zdK7Sz)6qRh?!o{@YP1D7xoU9Hg zB^if^{&^e#@SXyR1Daxh;)w%*fwLuS$H1AN6A$bZzZp31-dCM6dYEjT`}OXD+GA{N zC^(P4*0(z&->8&8A|M&iVL+oxWyb^>J_l$NbK)t^#3k2cIcDP$l(6x6ECl{a@Ml5J zJ!TfNA7kLao~fQA#M~)kGXG$l&GmYlAkO{Mi&jam|3;0cBlDFQ#V?gY#DXj9*Q9dl zj&|HL;o^DNrLbcH4IvFpag!#-gv(gcowM_g z5AM9c|K2ZkpkJIoztnd6Rk6C9b}e`^(=eHu?-{}7w$_SY!jZjLkhMB~knzv>I%}uJ zkX{zjw!a2hwY$83mr(;`xBwZA9hpGQixrrUj(d%Suw+3{l8=I^oVmru^6atJsxvB+ zcb@WCehR{iKm3JV<7iQ?r1Eb4|6NEF5ZVbE%yhX#MAqXUX7?6 z0Clh-DKdCB#uE;O0eTjg4}FO?fJ~3FKF=bm>xs&VJ$5qldnbM zh!#cy$%R>9vv7-)qNK7sIwd^HGD*79JF~2^3i3lt+Aiku@~&4o=S5f{5tne0ncT14 zST#KY6M9ipznL%chgZ495o6UHh6hS6!md_oDR>?fc9?+k^BE+@5)%avd@!0otI&;E zWEs%5CAc^1io2_s_BpR8V~5M2tL|uXPhMsI^@`i_7ocwQF%9N_0NxFW!X*JgtGuR|2wBW;gRociN!#cY$7h@=k~&zF0(%_cdz_AvM&? z9%t)x1dB@}Q}PnYIcG6p;SO0OpGfbDoc!>p+R`K{{c1!mBjYBiI6=PLPEWb9uEG90 zHZZ;H1N`AHemhk@0AO>x-WhXCV0xLvxmU$4Ew@`ihpLQO*UIM4$V|0KN=qvyD4#D= zrSq%hotfc-=$gKRjdf3hv-!ku?|G2qxp z6O2fBpdJLm4<-d>?*2@dvKf|Q%$z{S0K zUXE5qgIE)j9n{IJxhr_<0kicEd;4$v>~|gyJZx6*H*_z!@sC4HG(9z9bzs!oH%FAD{44J=v40thGX4;?}P`ODTEzzlw5M9xz8E85+)(++6bNiio zjLh!He%){8?&_Zh`+xle=D*2xFTrh73Iwj$zoe%bxbqCFA60Cg z9oLQMDhDFxbW!I~8o0);)jX9^5KK~T{%5Sxh916IYae>T&aUA z4no3g;ri;b2J$GEI9^?8y$qG>DOZK~eu3qRraQ%w&9d+yjm*4E0dQ1Rv7351>~vC$ zTy;$eLZ1zzPmnD?*&?FSRIZE{jof_VGuy%wa+6CxS)Ozw`>+ zn6Ob_SS)Ytyl-Ey8m=nB+E^h?Yad!lS6o*Rkc6{ojfr&s8j77|#Bm;Ur%{hSZACXp zO5_Lm4C|m(zCKZsr%76IgbBRIDq5>0=97L>owab}*^6@AUsKL&i+e77cE#sbwe^t9 zC4@df;9?bn{z%if$U&|n74=vTs8k)L%TeRB)c|B)^O*c(jp+?>s5QCca;@Dylu{+k zgRjYMlUK53+#6gGTr0HJuZ3`^HCU0i8Mx!`a@TMB*`W5s`mB4sidqXqmjQ!JH75?_;!}BzgpEZ5Z<0N>&oR;3o7G%_n`Q#P5(!(p=(Cu&u)w zPPJ?azYYJBqssb?*c1DW7yGn_Ap%x~cC1*!T4e8_8$9 zBd*)I*);f8!>1jWgv*kF;tKVQ2u5E<*yaZSkbIZZBRthv%zJK!kc7tNdDJa zKQEXtv_T17?MD~*ux;hbwaYUzUu2|-Oh6XZY`GU z&w4(9PMFs*10C;Y%;U)%VPV__%}kqi@1EO~KrM?gNx8T9AcQ`bjbW3` zZguQj=+E4j;wJV^4Lp#ou1__dRP*HU8!Wu+nETF)qja6z?$i9vd%RX@C1EDH)b$D3 zwuw6?;^g&lGNw1dUsNk#pvzY`wC(eI#ApxvV&&Pqh&Lm{nYFW5r%oYP$FMAE{FgBQ z&6ms@LxX3-0;ZnLC-&ABv`0Sr$gC`sjh=YfGaCeok(r8FAbS)dxp{vRm2KDbmL!*8^gM=k~hBv&%WK@Q376c$bfzVN?}LyK0_&R_R?TOO)(?s&_QAuv1+-#*+src zQ5=H^yBo~Y%QQ?k5Pq24K)xX7!<|v@aT{wd5!m5?&1oevI_1d0qHi9!Qcu@#KD>8L zJYQReFdrHvCY|5qYj-8=68u{+^GBodK%?A1qy9iK^TJMZWe{we08e#21%r;%TtCQb ztf<~~zSxHPDr)FN%cx{y-54iCa=6#{BV~}bLASRH&GOuY3?hnbd^eT{B0A5#Woo^q zcKOlxA`9=$J8tL4-1^$=9ur~j=j?LD7ZYg_>tuz)M0g7B)<#1sPc_2&8~?JN7yT zj@3CI=_YoM1=?04YDX@;voxg)4NV06+zw;)S|Wn|qR^31zBsIVs$bak_?UE;@L&QG zf%3$JAPWnyo(5{g&OfBe{AVf&>P^ba%i_HQ8tVJ+-{_h+Kd&{7FsO6#G?-g!P~m0U z4?c!;QVh5_{%q^mh3FovAzV3cC|UT!C}U>$MYqn8%AuFY&9m(%#@`2q273lz!!X#m zuoQG0IuRKglNREdkVy%_T3_JC%@_M$VyR zkeV>r*2#r6ud(qdBBS^t-uEE{igF6IwcXxNU04WN0x55f{f;$Or!QF!g2oNL$qD&?4-gElQ z>AhF4b$YFt>E3sBRaejF_m$`QD=5he30oNh$r?PZ*b9BUh0Kfdvxp7V8kAK3UQ>vEZTj}DlmY8x{NQO}uBm&~`%Zp2cEW*A^H)D2$6tQ~ z@h~6&8N$Q07@}f8Ms|sz5mE4|VY>dIunjY(EY}2 z+ry)Svy-cj7RSw=$2SId50B?ppWpw0R6gDzG!;pP&Z7O&>GGr|wiLo3&lQTN5jDlZ zp@uRKgT`r-pRn~ua=i}20Z4rA?wU5IydBsVwaTlNQ zlA%NbkGr*w6{zL-DJp3A9MvktW1^i{Je)zfFI<3b&goV9R9YX^MvVnrXR>%)qZe$L z0aPIhGx|HZ)OO&v&H%y!!bbg0!R61ZXUNWj|)pq_beSLfEpg< zX8_;Xge$wmnvJtz*4IDYbfaG%*EGZma@fC z4r)qEuIojlbK$TVu=iB}$*xP$a|iiDMT{lj`#ti`EAI&=WR&;;#0^R zsZoh7W9cH9_sA#r2li~rE~O`=#uF_|LW#f~(3jK{j7O>PvVRR4+W#_W*s*^NnrMzW zb8IU+)Xp%B1;Y5O+tlC5~bv%~a5 zW9B<>cNkhn-Ite~pa_0u1R%2zAktfxIaUZhA<@RvQ7ASe(TW;?h8@ zqsRINWJ|IWfB)d9+7_v2)nM>+xM|5zQE) zu&B^f0vStlBM24r_|{Xc*^{ZB?#WFj#8iM5a9bDmo@_My1Pgu@G!<(5BU z#K0k-c&~CvF6*mCkFfv32&Nubgev$?nZ~s`YnDpp%ZnSgFebxG4x7&?w>k1Ox?F#5 z3x{54H%Sdc7$Q2-3(4(Xzlma79l)+Z__SFaymzV7rT=r$Z9~x$@J7{(GTK;%El(m2 z*mOuwT)$P18pcS>;j1F2v1eaxzHi74C@qs2Pj2|+%`R*9rhRO zFqX2$89@5jX&)H!gk^u)S+zew;K+m}*$cd?+)s==oXP)uW?n1UN2&fb;1D(aRm$6_ zQL>w(Iku21lfdr>o zL$DX^H|d&FwReLkTmwyFC}*>`K?sD3s&ad(O~okaMTfbVRMEtTM)alr6x>3)QfO(r zVh5TjIHUyhQO9Y}@;LvdPWZ%81}Q|3E(Sg6EYhpo;e;`c=FL3EQf#%u?yEpBI5LbwJuU@~Tg)#u)sroh zO&kcXo0V;D$yOj<$X*OJaPkvp4Xduv$}NDe2&r#&D2?v0>gq0eQ!YjuHc-;a-jO-( z_}uT61V_`%3)o{>YUL9;JTkqaytcmSveW*qaQ|R^qrk0hS2X6M(qXjU(COLo{oUMH zefZtDEIM{D!X340pcAzWZ}c~D_G3NJpc~c;(N9E6F07=XR_pU5E~u_u+|PX=NE6%m~H!G z<`~x@(9Sg`X{WPRsqN8|cW?mEWq-b~Pu!v{nRdn;78U>cO5%vQDkJEF?!YSzKw++$ z`tm|PUYc32fa<1G&?ijE@SmUVKV=|?sfTt30KAuW%LG2TjgK+2CK(hn9ch&S!Up=O zRVm=qxu_|=wyl|g5B$0;q?T8xx1xxNPZ#Y)53@#XmjnEBISbXl>@)=XFj z-6cv*a00L%!{hRxxz@==)e|-;g!ZKx8Bb}JP%3%G@q=WSBwU-smOKzNMT>MO;hBha z-f@ZqFmNd6xpo{i_I`t66uzZt6=f8&X3b!d4t;ky-zXyMDFEl+e@;`eX^;r^&j08( zm@q2|_MDnKVf~)l-_Pk1DfW-Q>$Yvvp^ixL{Aub^rtxb-ON@b;;J3pY={(iox%F^a zp5Dv_&$?hWO%s&ukdRM(Dif}x9wCwPVeYnI`>4bh0bl}KEUW}WmhkcP;4tkPZ*IQpUg^>pZZiOjf+YB9 z=-Lzh+H#25n)KUCLr2Qdc&z7*km|JTo@DALnRs%gmhwsW73qas{;K5K>>r#BEX;S$ zW+0q;jd3i_C+`XcU$%U8%COTaR7ks}N8oiFEzgFKGRS4JE>zSV;Bb3F*`8PPcVlvc z0O4y?NQ;$lY`PcgE#{L${o3!G^ue+{=luEpoMs&wH)z6|9b6V&PAk#~)4JF=2yw@_ z0w#vsLStkkXiC!tx3BrgvTLdkRbp@vE-=}-(oQIHAW$-1>a}viO zs0z{fAXo6A!}0oOJNKA70SJ5~7J&Nl=3wnLo$hTl0fnT`k9iV}s^h>7J~+n@E#{%% z%Zu!MD&ivG*V`lctcTG#aR4Hq_Q9eN^ob=0MKw+~eJ+&u*uk9QM@7K)tDwH|C?If3 zDuN4{abiy$J}ssQ`^w1BIto#lyBMqQW^9iIBbit>ZevBL#GA`@aSMs61KY+)a$eCU z>3UK}AwYrk(Hi9$Cy`m|#_`~85>k(0xbPRR*rAA6v9H6a0+rR)>HU{o8fd~T-uCoP zxN!EFF2{<>=`AH^X342-XN$UKBJcEwI&Ri~x@$PsA9(x9a20w;f4 z&t%)UpuDC$*wbqUsg?PgBlzBIjEv3v+j_zrfk-j^fsb;7aTagN=c&u!6k*V#3MZY{ zB!Rt)djK*ax(KwWY3GqeOdX_yB4-V@35rsGMM&%o4CfArPL+=(C&5q3Oi4?9#f^t6 z2M-V^&4UCLWD3F=kyli@iCWT@yiVgM;#X`1w?~KJ!#hxyl=WA|;q@4eU;K;fr;1LE=R)ixNvw-%FLx5cOA@P0ExHhrL#PLiM$D%w2(}+k_U7V9=o$;Ya_glQ;nZP?L%a^zAZ4Yh;DP%i_%gk>jSi$2 z7j%s>@5lOkI?e{rx?W-BW~F?PQ2Va}tKx-rE(v<-QcHUxiSTnBL$gah~yw?G|%`Z*@*B?@bc zCKWDmAhl#CIWeXPHV`@xixIDA9eG(uO~9W8Dk~u;r;RPaMz3WmrN)Ubk&N>=0wu;T z_YqTrkXU08B86$==;BRvABO{^ORr1Q6sWu3X9;vL$qHTtVjpwququp)>6^1yDTjKN zsv$kkrY?K=nL_D=`bSna4JUAiL>-++oAxBv5Ml(uzVhv6Lg%XtV&)oP)~bX?)aF$x zJg4ueDCXnbhvqrN`wkig4efp4dZjO{SS2}GbzUp*56mxY)T^jvwNY#TjJlJ1c8tIM z$2Uy^P$v$6&)-tkbII~!F+k~`QJ=5&RYqs1TCey2SWnx%*VHu$pF4i)Ye{71)Oh~r z4;pOByFxXcO?TD^ytI z4b2x(H7Bo*mr0;4Xe#!_gV$*Ei0$wKXg)H&JtaJ=!i7SXWZCcif=xN<*yV}b_Aq7Pzc0|TIXELMVha2m%H=#lIU5iKupd!_J=~V5cS2@KfMPaVJTh>UtCuu zXkbuFa^=N_&)KkwGS=ta!A;}~C*W{AE*eiZ3BTG63HCc&6^kQREc_ifa%$JT@zYm$DQ4H}AR@8d7q|!vZb=pISjf z9gN6khrJm~>QLeEr`eAf+3zmor195fe1{ML0}j7#)+{4*x_xI5Kti`M3?N$+MMDzO zaO6mP5DMrOPC5;BOtLP1ECQ)}ZYn?7iS}wNDgZi=M7J4hlLTiiy(&P)y;w@|+`G$~ zTXn&)jD{alBAI-5(Uh99h4EECo;0`%AxX`9l0Idagm45=+8Jdg)tGhgIKnlZ*pi#a zR3|E{4N9^j{;YA*KCS_Qr?{8}BS<+W4<|dz)!>xJc%wZF}#!Q)-mZ&JUYR` zl*dJV_MwcB`Yf{OWi%3Vnc~=Wicm?c2y4xo&yI#=waRGHkk^!@(cyhxdSnp(U7M{r zAzV!@tB+dwHvoXOYK3QSu0^NY;%g-ve%owG3rj_eb$d!luitMy41gLmmfrw~)-(PF zpbiFrV<@Xj6>OuK@$VOWd0-y{X8D1-_LwJ*LAtoS;XOkEWcr>aAfI=|~Q~ z@cfkJ@A)SpDIw2hS#kyqttWO@>WptJm1-JQJED5LE+fy@ZG)jQW3Z^5^);c)Jrh9GL;Xrxo>c}$~^a+NpAA zqzvnIes^M)@FI-HU}pU@ORPikPap6sDgp}W1wZI`ND~|7OPPhE41n4g^dyC1#nWnd zh-=RIwRwVy{FfGC%qk*Z2?-q#n>uO)|Ivz$2#!`NhLTk`DW;p=-WmvChL*(%U&Yde zvq9UXnaPHTXXSXu^ynl7PYh9#?U@JY_(fCkj#A~V1Fd3cM05{wUVxW~u2O7rIvuJ-1&!o1x*O9K|m5`KNtm zKrplg4TOWviGL{2BS!_-6AOf(Tu2MW%RG6{2WlUZ^Txo-g!V(J!>> z7$hEceIaTMt}qfDjFZXkY^`A=%*kL>6Z*KeRK;m17fWDEemUc6AWGpp=zefosdPGo z#gH%Q@Rb=)SdGE=+1pGGgi`aS0=G+(g@?4s`oYe7$e=lW_e~JtX8FQ_o zh3;)t&|dK!jMKi#d_*>7ST#TZkV6(|6HtBE$0L{paB-+{a|3Cm+6x}1&A4EuD3u*e z$u<$Iv1tvBwY$uQLaa2F4)+P6Mv{gb;>D2ed|{cIt}5Y_lf+nSxRBuJ{na#93c!4V ztle=;kw~^WSrV}+`B;YR5sh6%M^H3bQW#(y5y`O@d3%H^GBiw7Xk^_DP2@d^JryNO zM2*Ni5>s|8%+yY+=9ncX9Zq@MS4Js&GaL4y6?DhdBC5#=$hMIZwBu9n_D5|)AbA(%+KHT;dqgmL(r8QO(K zoiNf(y7Ud__IJ}7=Jh>$zcDyESEQchUEhGk+VJGWQFTG8+3`iK?wDtqg`rpRhG?T! zR?^{LuDS3t?MS$3J@__*ur2UN%ILhO(ncG;jMtkJTyj}(;LgiB9D~E zdDsf(5WPZJghd1>p2cj!JTDNTB!<|K!`|e`N+_RLh$2|vlBYXBYinAYQzyKTPeD1Sc0vsj4so%^zkr~?M=0P&P)_>@D=g016})t%hLSP9+A*^Pu?n9gu~{ycV=$QGl9dGR#yOTM zu9vFTaO-Zot9%pN9$6C8QCZCq5AgxUzKlLQuWNGts*D7t$vl5SJHH{z=_Ffy(IWDX zV#5DUm-HV-!nJ$CDg4ct`&HD5=k&TmS#LPbf*rnSt;k2U`W!$-RGEA{J} zJJ9|4mwmR16lJlX++R58j>%?SBu5=LcPozjy(;zYvh`zhi*g{PC-x1tE{&D(D1L9# zCPmy$0Dq*2+`3#IwY9PIlK17xD2y;&CzrqO<1lZvQV(sUJY=HFM zqw8^DH`S#G96drB9GskYYe_KYbd;#X8Alg|exs<$d{&QdOCj?HB{t1pF4vYu2vP#b zz`xR*L(?-3Vn8$)6Ut8Vln5%ckRlE|&Ln6*WyBGTKm8D^NgJLlNVUxZ&h{Q$%Z?5G zm1jfMPfV=F?2-+tjw73zsHOo)qn2|}8<9k0I$TYDC{AXLi4=@HI0ND??42d>sq#T; zYl~HMeBqM_B7t&^Uxk<62vR}=S_S0|QBX6z%j&aeK1n*RR|vH17M=x*5hEfdq) zf$4|de`&6WqcDyw#g|TS~E=*|`690{^+W40p z?*4&k@I9?E&#%5e5FV$A@<`496#BBW(cfE6X&jPvH9u3l28$MtD_8lVg0IMbx^En9 zjGI3>U(GxeyZ*Ea0N|i+1`P7ph8#iy*Ru>vf!z#H8V>=d4%HV@k%m}^vdcsOz#FI7 zl6ck@-z*N69}BTm2|uh3soXXkhj9UIj?pRNjC%*-lqc&G5+FrSy5#F+Fr9k76HGvK zzX;i7N&9yJO^FH*m(uv< zU_YBR!p{vT9X%+C!7|c(UK4m14y8$SG6-X8$z>{yPam%4NOT9BpsEbnE?1Pd2^FRn z{EB4d=1TmEoPzvwPSiWob&s*fvHr$M=Y=9VcngD8b>Z1mwy@ymw+zpyNj9A99ZAW4j%VZnwPD5k+qq4lhU*76)-`*JwppSsj zvc5{OWL2to?GVTFI*Vk=I1RLk9GyrDFL%k`oM)B@G)KSr1%@blt08B=lCW$^lC0`xtlMOYBLv2K;& zQ`ov4QL*nG$=cRSxLt>MOxedOOAnOf0Le%Zvw;j8kK>iyz-y@-fEQ|JAUSa>$C3s% zdp68>0j9D{1mw1d>73;0+BDKu0K z4rxxh&2#|s-f@~)*d%?t(j`n@-bTHBmC`Cxk0WMJHN^

XyPEw8D zIF_eJ?$+$uOFEu9=r|K9jid|62h-)T)>Ky@Cqx6P^T86%bmi#+HKe#5pK;?MOuBIk zF3@xymOR~TWBX$6+?uMgB4yH=>asBHglvbYJ(cH!-)J%MpwT_#HR9^JY!tW)eD^2J zlZ!CVm4B~O*9O6jWoMahW4`M8C&VZaL@Khu{rtU!a5CQ-N8LSp<0&-ltJc6~@@D}| z{alir)Q1mkVB)W4YHB(vd%52K9fNV!PE+8;4&3ZfoBz0*ThqCaZ|Y=ImHQxo^ApjT zAA&C-g04f1V_1A737J1IS}-KuE0LKnjUXe_DN-;PH##=1Ad6U#KhLAWTf!~9zQH#b z-mI*=**1c({WYZ98AR66G|v%#q zis(AY8z3&B$CIZp`>>lbt|pcEV?MWsEg?CY7Th(_%rT)#8<1K!60bxpgP8BAk018f zTfJDT26XZ{5tb?Dnft^ut*DT4)bNC#^Oh9V8z*?`edDjsY<^xP(QV@zyY6Mn+t{$w zjt_N{pZ90aPi}1My^cLaoC-*`um?S0X0xtM?(`Jkeu&ENxHc7i^$~&a2fLficoMZv zdLRFWUehaS2mStFAI`;Cqs|rf;5JuFfvuFL%{NRUu%(@p2Q5;1%GaIEcASH; zX9ytokj=}rp}gx|cd;O^v(=k1!t*=Ho4cL2Oa`-2!UtsP*!3~)yN^L%TpGuv7i~iW zzTKBN3_PiQYaX(|*`ko7^1JsEv2e#sK)2IZJr!>{|Ku60g-81{hAInl210>jLmAy^y1gftV zY_*$ZKWa4dis79XL`cbK&~`TMwF&vg6O_n$@Qp@9peN_*q?NXvbGc-KhFi?;&Jozf z>TD)?xY1XfHZ!(qcdf|mO;shq<@-?z2KDcR{WiTfx9Xm6zSX!!tCTf#Ssy0PXI?dl z`P9|pk%CaU9ZSAGDodwwH64_nmg6UvB0$m1b1GMEGM*huXlOIr?n4s->$^N&44FS{ zT#f*M2yf$v4J80V$S$sa9@l9iUSa@6pGwXv4jdeu*|Ed zjki9xtkB+;7+3_N66XxWO|GnvaC}4AFI7m9LmBX9$~Lq~GMs5slgrXWK%omqAVD#g z`W8T%>_Ck=5GTyoL7SGmM;D7AjkPh0A-9;mmHvDGk)slfYM;Ye*+e9Nh_6>cVSp=K zp^WNvc1&YdR3e#Mb9tSdN8GSMmm*DSgplKhtIU+Qfgp{JUG-Qq1Oe0f9hPSZ)THua z`aOo1@km0Tmrsn3?UyU{q59s!?K-o3}3?s!|K|nNB#$R{6*M?|(gJ z)F%}H{2{+)cq`p0o?|S3(JN_(Cm6u`j7GU!=Aj<1!OYku6vJtXm_YQz3)a3xG8oa- zNKeFf8Xcx2g+Ht4+tVT+$XT!j4@1LOhYH|k4Z&5s6dGQt?l*%*&D9HJR`txj5d3js za_*X6hyJee`c+TSXFc*ON`|FN6WI-{UurjBFrz|9*3KGoM0AYcHvI)YWqaLy`F7l9 zpz*#Z`s;p{J~7i~wLd(Hz3DjDPIFwos{N|aX=^h%zaXhGAZr?14TAts>@n%&Y zf3+r_bGf!~hQBf6{%@EG;}76G7)^N+;0%S_t*hld?k0x>`F-3nAC~a!3kf)Tm*;~z zOYDq?a8{F{U~c{s@-cXaOzFMZuaG;WA5j)hEQ-X22AM1a3(g*>BHpkl z?!w7gKCZF+9BGezc{Ivo1{`CswD#6Y`Xe)jcv^5s?SEwE(16fQM#~QWFPUi}N<}1v z88e4J#*DS{F!c{JQfM${WEXGO|EDptjc394Ul0=0a~jW*Q5PQ0W`xO1#&4O?73Zdla(TQRHnuTww z*O;tggpC@Ah%x?M7jn#8dbXn;i~NzQcEpP(%X#Rs;@bp`GLdFr7MekW8kcqfA*L%% z;&$>(?gt#=XU*5DjbhqWE-aE;dz)sw4;p4pfk9YHD{Jp8?86hVveBDScl$GOKVIq* z?^)TTk88P`R^S}T`5}xmyvw^17$_k~!QxGBa9Dml8rEpI`T5*1F5j3hNd3TN1gj8s z8MvL&v=NFX@!O+$(IS=R|40(P85T`>Q~2F!Pq&29aW+is%jse_ zIdaG_D)4c0P1J$vmD+=;A|KrQr@*ggYejGzKVwWnvWG!eLGY#LLxq;zFYzFi%Z^(+qnDKJ`Jr=~-shHAO)JNcwWNtlOk0DDhd#l<@yn z9D11IC=~?~raDNXf)b=e80j+p(4))=qepGAWi#`);^gT-;_UOdE3t{ynf%TeBrG{u zDy3{8L5g_}%&CknVtt2<>fVG(<>~4I49BIe_IN0YFAB7)(YzUJ4^wijjqMx+<64sl zGNv@0qT_*iEUDbPZArXP)rxXd)k=Bi8eLkjbG{CaQZFHs458m={+_lXgO1iO6pX0?U!P0%=jh37X6Q%WtI{OTIsBL8~ zi?_UVjv!M!84C|&?gcU5e64ok1c}OZQE(hGC$5X4W(9OG04|v^7scf2hfmERAylwtd;QYu7?d3CfR)Iolvhwp!^Tbs<$#D3!X;9edE5p~N3$Uzb}e+tD}mA`nD0*MyZ` zv`mkkvuA0Qu&xksf!Ho>?rF@!C*j1Z!{!a=7R`<^ za%9~D*3RQi^Yg6E*{Dbq8(NfY6^$3BKfjlu%5~^JS*Uh>*a`d5;2`PVx1d0cvrPfJ zmivhrU=oIr&a@JNY8*%wbw;5X8QWc$jv<-kCT|)1O)5vy6Lmzfz~T=*Lh8#KU^^0` z!-N;VaER*mwxM3ALD89j5uqb;evv=)4A^E|PG8%aAnD}+0BGe# z3=rocB^xwXhODI=%L6+53|k&6Mo3ISP&Clx+vu>UC!^elGSFX;S7h3DV!Q@~!T8suF;mCiX%FA9Vr6+=*M^kMlZYX(b) z2S|3yG|B|?bFKwCP`gD@;e?< zZ0z%NDDt`IZfznDMa(kZ2^mPu9KpVV>$fvKn;SE)Vuanm05|(EiE~?fymaTkS(2Uo z{4NPNdCNff5F!?EyVKhGM0mB;?HjA6N;i()xe53Fv@?K+Q|yQD^R5`>%_NZc-QC-T z&KI|omLY3*n8UkI{tx>(yPnz{cBU>GI|D?|H+GOI!ZvA65d-&su2IW9!vdN6BdZcq z;Ozb^*;7x=;>Kf8Of`HDddo0x0^|b{MccKV(v2kJxqTtW0iY<9CCXss>4;QaN<9$V(Vav@{sx~)Dmmuy2M5lr)lGv3Nl&d;d& zcrD4S7lH*HCyoYHOxPVNRefT^^{w(#zUK|AW7O(0k)hU?c!OigE;&JA!dYDwHG6e< zG?OET{g3}->-jI1U|RJ5uw)UP$b!t6lQ`UStivC$&W$#y$#Dqr}-zE`+ zn12Laep*WSxSC}4)nn1*yVtWt(r;sjDLd`-GD^F?Mq-GP(yMA;WB(#%E+Lp~pT?}mz2_V1phN~*u zWJifGM_I&(BrEkzo?4o8L1{HwfQa!(o`nB5x&r8=AtNG8i<}%&ex06GWl*kS7h8ax zz(w5JBM4RDK<8sV2uYr?$KyIyRAs>-tQUv&mRuDYChcQ8$ZM#`^mx z>TEOwSgfIH)X=`R$x>y?4NcGw&rilxO}ZZYSBLOdhwzW=+&@J~Nh_}*dC*WQMWlIS ziFsZ`x{S;0Fw<(?bhxhnp+-?QYP?lsb7^Hb!ox;R_Raa+ zj;D!$L5EU6XDwxP7T5VovJ_Bxu?CG+jfXTc4444v!C%Ouzu#!5VzaAv ztaAal6iQ=xXV(qEwr)$B-xV{X8XgEWwBwmE-*{K zT8SDXo#$A~pKN`|SGQB~tfa2rli6CK;hd#haI|Npx@y33ot<+Ke0!liel_*6PMimS zxV1Tq=TdtNm|gGOR7oOZ5we5ENjunfde!@{BH=$DAnmxLFUtc!OS-Yzu||P?yE0%B zA!;3;wz2X>8ouXY$2G+LQm5DBkT#F&0b8igs^m%q$m(uIh%&dj>wd!n)qHJF8Dk zr5X*BOIiF0gnrmUL(I~Q* ziWWYor`ZFsed6QqUvAAW=3%qn?(LIJClQw>@~C^4$dU*k==}*mDdCTw%R=DXHGl6% zxoD{bOHtzgDy}7wVAY$_QT6s@xS;G{} z0aguAf8gL8koY>SJUn~4xzkgHN5!B)%LeJ9;{BT%@xo7V7&G=%WH3m6X^$_5(i=6FX;BLv* zwbz}B&ti@V7jW4f6cE6PBeqC(IPRs1O0TaMq|TN7Q%<@6pMhcw*p_P|z&KHJz_m{9f% zs!wMh(SJ{$`KUNam-QWAP%;gT-20fsD|k}Hnqc)>9nGWApD|CoQ7H{)8Pln{5T|3! z5WDI}%}^dO?ze;Tj02-6UIJ>HsNd^SYCPE?MV3TCE7%PId4ZEO)G8G1JfSSrxHh9I z{>%X*ycDoiS2kp_7@uvWMM}L)%I4b$ z6pWI_Dmul@lUT8_p?lpX*pELaYhmmFm4Ho@*(&UAqC$6kDSWaDCQc^)t1Tl za$gl44mcgtmX4$rn7=&>&_m#|B)z*>(l>k=m$*!mHbcgR{=y9;aOD_eW^zvf+k);D%IC+UF?XO1p)bI?9aM;uTn$VR_49?IlS?&Et)Jo9Sh*Guw~FJl_{C+6l~ z&A-hg>Eu6oewFG(2r2qqvTc_mQU~l6W&_+%bz_mhli@rO64JgxIIcek4E7`Gk|(I- z(f+P62{4VJ4Ze4?JRlJSYSKiX6;zZ;d_|#!OXTiowMuM587+)LB; z#)}h?$qasbL9Ufc0V!XYJkg>sN*6WS)Bf+%jUm$U?mJTr-t6 zY-;8ZM~?$5oydiX&xSDlNJoEF)|0i$ey6c-^Ut+nFk0zap_>y4@h%c(kroZ$ z2{m_?MYcjaCvp<5dLWh<$W;m?cAi)lXv1I}Nf1*M+6T~5rVr3CGY-7-1bD4u8~%wn zvPcJbX%{3VTT!a#T?-LV@;?=|W_jA>G>D!9;bd$t$Kp1S)LgP7YbeX`psXUzR3OSK z!crg*@7brlECPrf2{c??+Aef{~T+`SyKL#T}4&Amu4k;a4CokpI7`mF58s#3sATBl=PU_!jF_* zhWq;48B?D%FS;S(C=`r_5-);u*tYyH=k*`OBjSG3hS8qMm{+2CB0GK~mGMy9RGGOM z7XCpUaQ)>z&p18hD;T04n3$^TSR7}mgXwGMM0DZIo3z61`KtZP!3+*@tKsm9fHv`S zdX^n+oek@GNpv`HXUw!n0qq56Ro^RJ1g^b@%Y(Q27y)|U+Hr)t33i=-xq!HjTF=<) z2-IXbli!3_ay&Q5 zc4;4etUbR;avT<+BHs(PnOW9)ZlvBNtbMiS^Q1N)6#kO$s8z*0@=bul!^O?v+pFHD zWwPO<*7r{&@W4IukP{xmz{rdht9SMLWKqat%%4^|6%TU>A@S2q7Zp*_-wWx?aC-jZ zXmx55T3Qtz)bgx9rv$qCusmb1Si0k>{3RFDLj8@8o~9in?ioa{)+skz>{}qhGjA~N zvbo>wie{dn#C~a*M#D`xb`^fDbYYw{jy7>`W_uDr`jn(o@}RIxSvC2x6FAEyyoVwW zmQ!j=IHB?2G>hZ5GuTCE>Jn$u?QNoQhd`SP#sLahUeWq=OLpDJY%LhIRuPBgvh82V z{-4tknhu9xiDbw28w$@27Q|{5R3~sRJ&c7yo%C&4aH{+)T}>|LSD!)oC~=|W;J+4} zs`r>eo&Z!84AQ;uGSFc`Si_ zu45a)dpiRND)19kG?8RA4?E$60^IL|=!=;4sgR5b4x$*dV=0O1v)XABZbv)K1gfet zGhKK|xl0qC53Q4M7^7OzKNJ6ka+D?x5fLYW%}yB(`oa6bbF~i`2+xR-Fe~s_DGqoS-|CrNVe8J#|`gi zjkzwGJunoIR14JXH>;bF$2FklT#it`JwSSzatsY3Q5GQ(LG2kqgR`bJtG!J6E{f%z zvrda)gRdV@F}1DZ8YsCl-^QsAZ?_~5Z{WZ&A>yU5DCF6GZPps-LXNopz+vg_<3cl# zuvTw}a7fsB{|=S&$Sd>HiJP$y@7S0n6;a%_udjK%0iBEcNM8DfmBZ=PP_@9gGnOIe z=h|xY-gfnCq)9v?0GaXL}kuVh#?yplCJ8Cy0C7S@K?Oz8p4B4;)8U~JM(z!rW{t7O}yvN)) z2FMV{(6FdW$LGpSE%WY*@DxO^sUp_CuS}653~`KzkyDn;X|cgA2`V0t)MJ}e=PrD= zZ?SPz=sBf(<>Ab35wIl+wC$a?i^QQ}jSdffMD1*~B$Gg^*s2o-OSorsv?>zYKl?cU zzt!fksd9~y7pH2wWQYwF_O;GaRRzEg)pmkINIrQx;-hT`3EK;^0;|P}5p)4o(?omT z1O{VdENZyxCCfQq*wvUci2Ago5G%!77iR#l1l7wo=4M?%T|ko>7T~wkW1DN#j9nBO zXuDjmvvpZU$c^8?rnRV}p;q})Yk_ch0>q_v{*wj$GMot?zZvvRX}ndrZ3$Z zS!A&m7U;{R?|2f?xM*Vs_~Q(msloh@uLY;|gF0(AKQ+NJ+j!RybWO3Q9rL{uyoTxy#^*abY)=4xNVx4euQbr&(zSPwP=wCo0{BGo;)!BNRnLEs4Y8r>Z} z0;f8lO#kmv9bRyXgT`UzmDTTzpp3{xl*DyCs6_SKDyax9jmN1@JEuD+s@!2J?9iqZ zlfM@8qEklW8th3Ii*=<>l;a~d_Z)!IpUs@@#gNVs8N7q!JG@y64)m@?Q?Sg0>^nuY zm(Duf8=)Ma*c6D<+H!0Ol&L?jK0+@O6NA$)Re;i87PM`~Y->SLu8v;k-(6@RxnE)X z|Eo7FM{Pb9m#VW>JE1|)Kd3$@Lej%ksU$@2OJbCqBDWeH@o5e3iw>|l1rGqBCpM6i`51vjrDc`Yd%lkDlo7XJmCw4t zu*E*ACi13I5m<(bywwYIK6LXz!>E%D%{z;TDiEF^OP+)-l~fBa24jGZsEc;hJrDj! zvQi4YT+_-u;{;i`9;gdJ?#le;0XejBE@Z@3?AV^ z^0*%Nx<@5wt_2*sdAU|Y=IQAdCi@IDRYwEt{OtFAD8=lGU$~F^tZ8L9t)P7+TEz0> z5C3-+2AV@KJ{Eueid6foz?ijd_~*CCLncVt$u``#Gm!iDgY3;}%XiN{xc^v(KEP)) zN+Cvg5tNlMq1zqm4H$1WDuiva`uf;@-c*CV83=8D0;;8-n3* zsE+_tl3{#HH1l0Xhfx`m=6N>j=wqW~ir*JG1(wVezsQ&mB*7n^vO!MgdQcz;68vD0 z<4aEEZmp55JyBwBin+H^!fX9OMtEUxIZxqS+W^@3F16m&mi{aQ!kO6}cAjm%?CG>O z?9*Co!WS~AKWZrsXN68|KptKLuxGgtgaIH_%XP%&KrXXqrZpSU9bE%W5yIc(!5F@N zw(+h>aA9f8C+zT`{^q@cgOi}mdRm?3i(lbF9BT`5rt`5G(bdProiDJz5vh572T!`F ze@y*(ZFlbS`o?C%DgFEX-U0ry4@8B=$c==fbe?hSeaRcp#hAyYhoEQ~Gy@pJK|%>l z1dQ3`t!|BNXb~2-eChOwwt!6fu2KA1YB&XvN9nY^U>YsRRx~kN8a8xv0W_nkKoKmA z5{12lPRh|0%tW|}6hG5&tjCI?I$;-8d2+G23! z46UoU!NmcJMdi*!RH(-2%n?)v9s&(tZ2k|9_Igij_nWqQYd(=ZF$11fCtJ(&URZSD zCgD*NU`h+$Ruv^(+gXPYj&X1G|NbF(xlQHJPSff-I)~8j2mI3c0%kDcZ_{FAoz>-g z?`e!>aURj*f&7RiEg~JCFJVD^;Pg{R23odK)3oDRhtdgq;6q-$$EqonhvTp&5JBNc z87D!KWPTvVwF3J{V{}OY@T^8Fky|9d%;u%J6)%EiH7imoi9W&sqcE7cXqT%j@*v=) zB>QPP^PPqx3oSF)bQIXap-P>R*N~t`dexr|X9S;OCZrLu(yL8H*5Fwdm5Dno5R%#6 zo(?O0&xa2eXV^q&jA^!%ig`uG(R}?y)b`6_3_@8p?r?PQa|b_Z{)Tn(XaFH=HfP#; zs~&Y6g^{3*^mra=xB)}+#eP>LVWZ1u;j1s32;tc7xzm@7i9OLDr^_CI-#ulID&FP> z1bmy`y2+dK^M6l^>GKFf1bMeADs2?>Ys*wU7}Xj2-{ioWqftmFRSk9UtyKiI9WYT> z^|@@bPC>}t?mDz_6xTX$u}VYAB~#3u7j}gi{2?XicCZ;rJbTCm z3DB<7W?{Tw3WJ2-FZ3^aC}IU1g;}}rg?m!Zd79CR-d@xiCwVE7^ax9}E5sFpGIb71 zqAH9S-f@;x{GUR)9=9RDqQ(aLx4T9=6zkU4fux<#VBOoN$xYIzCNMngQ#9THYMBa`046gp_QTd`S-4hx7?w#{}g9l zQ^h*rG*1JTeVdtJ6b|~uXbbi=c5A)UF=0=~ccHeEQrnv{uz;mA7u?lb|-)rT9#BO{CcL^uaamd54JC z{%+ed`)`=P{2qR69mGtjJV1A;h+bZ8Z3O+~NH?OB6HKQJtYH<{#6UpRMaLmlFCz=P z6CFg0=*j_NIDShIF!K7OOxqhRTGo^wDXV6Q_h%A4ax`ch!K*5rNQHAUXevE zOii>)$3*0{E3W`-EQ;HFgJxVXxf$i&&}1eWa$k#42=NRyXYgESvPK82El#B%OuLjO zrIS>^=HPc*eJTI{pnY+HgA$$XoQu! zsDYbXJpmlpvpD6^Wwo?2K z7J!O_B>P^V%c$F4zh2An@Qipk)=6St7_QoKz=y9AC8m+bu%ZAXhcAcUjcnQ;yWU+i z)6IJJ)A^zUsVw^^Y765Z_;B)*ZQF+hR3!7QvD2AuiMA}iKHFS=ng2@GVHkgZExY(~ z5A7w2;N8V$$IX{qu^g}K<29E@cE2LkyYteGg}lcb|Hp@=H2faFgS&*6ey~7YEj@UO z0V;pgs2i#PY-fFN)dJ@039DMHZ(rImOd1nR`WPjwm5p%R83p*(+qa|D}ojJ%90>|e0B zPso6^yw4C)%fAO!@9!){b)* zR0NnZEmQN~6yo!0ahJ(^M{-xb*Aq)5OeXaaXlmAg0{%JH8xBfvBoT>sk3n$K;1oA9 z@@PfpBLw_s^UGKADLQk?DXpj`v=)dzFP`PxNoqwE$3VaghfD< z@E)wy5c1(fW9RgmMjOutot&9X*KRk!AL7W%NPRj~$xh+`=nwIjij}|W0u}4cTB(Z0 zRZFaLTr0l@s8{OmIl(E8l%rmBBgE^#ylFO%>x{av0~l(dXx^!Clv@}vH>@jKd_HiZ zY%<}FcC*t%+b_=?aKHX8SW_{PEoaF@E>vSPT~*p{xXZ_#xs;~5(LYAI#~C0+0`2X5 zj{UUl9#6U=uxik>H4wDmB!(e$^<^eSE}-$MMP+Bb<9XUCqe$iH@>sa!OMj8OuZwfQ z@E3M04^T6{LD&)SpniJSwvg8za4M>^;QNKsdD92wJ_z0g#<>v^(jU*gNcRj_HYyr(#6pB8wvC5-4zbp2;W?#r#DxCTbWxf|~ESZ18*>!!+_Mb$-<} z(_qYtcxBXFahjqymTg^_kWGZ3pd_XWDzj+7@P$$+r3jN`vaG6JHfulNvM`=Lo~a;X zdMuqjPPHG44)u+jpdzQ>{UL~T?p9Did^%qc2;nT#1f$AH>X!Pw?Zi5Y^AbDQDo+2$ zNGlvvgRs2l%6>233CoFhp7CgRw8L<}seQ%mpfvtKn!AYy-l}2W!6alJuo{GX zf)p{fu|&*?YUFvTKIvfMRPx*`MMvvGgJ3~EEgsfvq6psTswA6HYXZxC#jQZI2>M(SXkTj>tN_+g4OeEMh=M;18> zdJAX0b58I%&G=K80@_v;xn>=5*<2`g^tflIa#WzdYByh6&d-R~fmBvda{Z;lmYr@+ zC;F>f-Ck_33Eyf8Plq6>=l;AU-|y{vur~A+INKPn5iVsX_qw#6>6p3n&k^=4nj6E- z`rzMo_4Vt3?MuoIEzd2c#^}aJ?Z?SqO>N<%9|MoR@<-tqrvP8RMZ#HJlN|`;?hO$W zK+Xj*17L?JV*%ULRPA07RQ}0U>04UlzQ{mTk|0lIKO_?u6Q26Og6$}|`lgj=M2f{= zF4jQUF)&ZqVFAJd27@${w6@W1to#=~G!9a|DOyziSkF~f(g%$ZFue$haq@ry2bq8c z>>Vf}YnPBJ4ZB@_CzH;`3|0JfySfS+*J$lQ4u^?JjEB`Q7Ams-w(M3x%?oR6jASXF?u|ns?Ox4SGRMw2~NM@oBZWp%L_gS|m%?n9CoAN#sFK3|H2FY1*vz zw0hd@Z^1@xWl()`YgDHfzNY9&CR&QSPx6|}Oqj>p$B2ZK&<)l=QHd!$A}*SVNRKg7 zz$^I;i2$P}OO~LQWo{uX88MHBQZYGPXkGb7$qYdr=DMP!1{;_7l=oanND6J0eVuB7 zL~y-?aLC957Q(_Kgk!J#R-2(Ad2V25UVCaym5VG`Z<%o5`#j?AA#umCS-_Nd#guV}m|hR%P}? zMLOqsAo1|7I8=YP7?<wXM;PHCrR}$9&(#1k;q*h<3sNfH(poxC~eX_;XcIuN^32a)#F>1{MkSMpApynIA zX(HIxv~E`1_rB%K98_WOs7FVyGqOu(d1AP36Us2Z%-YF&GtKv}g9*q<>&X)v6{d|N z5@NO5{C)v$##%jcwxXlp*1)Ue+nd8d2#+~uuU%iyd^CNzp55YbFc)S{M zwcIne6OZfZHPY}7g9op#xfRBdv59N{)Q8ygWn*_gvh7FLfE4QvtErsM>s zLoiYY6JcX{Pn)uWj_8o!gP{x;MKK)FORP0}L2yolIx)M%M`sVk7%X`-ukO)ue$ zmP1^GCY-6h?`$BcPRGJ2KJzR`L*=ND?5%e>1A3Kfx@z1`Rg*DlV9OD0qMhF1VIlWF zTpg%TNsfyPtbx~lT7;IF8}E+m+3qMf3cV;~+XCzPXGK5s5@67346OL?75!0fLNlQp zXVr5-SM+;&KCS34V6%61tF}9ba$LH`?3pe6#IZA+nFz19k0uEzxf`r85icG^c!XLM zF{=?pR^q#qNLaFT3g2|*952hfS0stNuX$KY3q#?OD{Tbg3TucPgc_R^T$qD1^9#6< zkOV~r$-A`z;#;Hpkda3$M8@a)r)2yl2NGcr7f1G&v^O@*dby3q$w#i15D$)tyP5)L zjp`A}I%Ur&gnYwRL%-9%(*VHVp5*IwL21~Jjho=B! zJSS~PCLBO#dMAAt5P1G|;aL!zjoB!R1a(ukY@a7?ZwQ@v z{AnCTaR0>RN8GxFJVN0>G`6)SniWVX$!NYq?I&d4Z-Gg>x6vLNGi2GkUzJ|_BT8Hys z8j)IkgSMxB414}qU;==AZpIa)CsEQ1NO~f`3H*QpQQzT5MD5SXg=qp@WGO+tX&9t( z(I(JPjCDBG4bB;#GG*czkr#u8Vt7{#^nr*aoOGp5ys-&k3F~3teGK_<)XncuyeE@i ztBuFITz>o~6h{TW`CN+vU`)@_W?zH1b!uywu@l!oSlP~ni6PYNwhEtQ?zcTWYkxvG z^eFw=ZV41&RZl&~&5|rZ%UESWo{cGpip%Nhr%yIAD-CVA_U7M=$+8{*74KK_OxLvE z&78A+#{9O`75(iOScE@k_lLJs+`830|Iv6j`N!NG0k_kYw#FWcb?;A(+XKPR{S%wr zZ@w;N4e(z3+<(8C>*)AO@aw11!_dI%>Ohpx@01GgvX15 zi)Ab!GKpN#V(0})mju!zj$SP)$>Q^PbwvOrJq=#;T-E`j>5cSqQn`haw&NuV0_o_^ z@dxR+G{xYg;(|scPM` zV4#>mw>rX^%zH=3&-*FW=nbgQ%2{<6g(_@p0mKmYwA;`O#HHl4t3TK3i;w1* zKfZO^9Zb@~o`=4n+8xdoHbn$$x*m)fsbtN^$kyA^x>2uSeZ_cnu>9)XghDA1|F`v4 zx99gcO?>Ad7w5Np?AhdBx5iTB_&itjF22m?Jn#7R=7;NPcQG7N%UbKnhrK>RxyQAi zx4}m>m8JpfeomjZ_JTD!*2RqI*UojY%KS&_O{Q4Ju@=`+k2z?1gZUX5vx45x4W#f# z-R9?0)>|VR`Qxj8$3-S}zEuxyMWLZ`Zqa2#qo>O}#Ek-rOJ!m79fF`61*32Z!f|5x z-(Xc;4ob#QI;2U-<7*l1B9J>1?RpDV!wqV4mb}_#I`d=ba-8wapg~p3oZj=&LY*m! zGm~_t%ZfiKe4TmkNF1D{6bn3X7twB_LC?{R-*v?zuwneivlJ-2ZvO^e#g6f$2WICC*x z9}oUeY57&ex;c&glF?^Lp6svOeHOgPI3yFyZ1UzMynwhEs2W`e0v zrAZ&fNSjQ#DY#psDW5`cXGTa(VB$bJ1q;*=k5o3yQG#6NCrgB35SK>wmvwfWdKX$d zDMv1sp&p`ZbDHIx7ikH0S<2(vq?psMcIqaNXE{>vxgnwXYNJH7UT{RqJ&mkJy~g~H ziGHnz*2HqY%eBVIjOOA&urA%y$8r~NLf(upVs`@PbjsoZSo3eDUcCmnpd=P-E%ogw zDWrFUl|Nk=P8aHY{D8NE_a({_MaN2%n?PK>L`BMB5g$;fj^H>38(7)Ny3FIg*pPDR zt_9L^!<9EF=a0>=jX(x?Ey0=;{;7#x0;VmO2FBT&f9&&5`u-Dc4PN{6&9}`~Zo)4=y?>M+Pf@Zw`uhUum%j$HSmyFS-ZwwUk(SV( zF-pSm+D3YeaZB<<1P8`|fsvHpK}|3v(Y+IC*ez3&F^xF%uum9CKP^W1!XW=!w&CJw z*ho59nV2x9FG%AU8M6f_F>L-aCgEQd2;qZ7EC4j|qhn`^GWd92U12=*huMjJXK=7F zO!4y3QL|v(VgW;aIJo3e`HZ3vmm)@bRK@;ei{~@6a(g=V{b#5-C$pZbp<)FlrFoD} z!u;S6f`5FW2a2w4OfyPC7Q7iW?v~-(%n6lL|3=rdy_O2$u+!*I+$~CMD!fbmZ5~d4 zn}-y`ytV2kAE^I*Me6+%)_h?oXrM4mXCvon6*TT@lcaBst`+HlG6^@C<&K92}ZO0Yz7tN`_6~QQWRu;2YoxT~0iUVsRL8 z@Mm&U&sd7#Ks_;a;?0XaN+B)}&X6*;pk{daiNoyf8M=DQO+3^q*JtHwmD)NW*I^oF zVO{jPOl&m3k$MTgP*-##Q#q*79Okput82RtI<`yD=Ss{$%q=KoHKQXIh)X>|8rTF; z^-eoo(F@6AUj%G-Gjz4UD&E8{d!sp`0bykN7rUcHN4MJZPOzIFY~+0tIKgbUSwp zBZ*3w$ib|d^qOeAn>kA~S)36(2SPj`OLNY*^9mMducKx*AtC>)1JTwL`)|laWf1^d zqhtQQ1-mi34BHBs{B3)SoHOj^7y%_v$Dp59rSx=2vsCZULz!X+aOj*==73}bsS@Tm z^K|(BJe%&_Qx}cgOB-r@#rgcqpzwOYhG>%Vi30s$W7$~~5|ybTslGPksnof;WLa4e z))pC}c4cxevm4lcvJ1k9C`~%9#+Yq97IMQw-TRP zo-qudT9DTpLR=k(Ii4V~7zjI%?V%dKTSGiv6YJBes426Y=!bDYzNy(M9gN`t$(+(j zb;eP)Mk9;Ez)S5&VMO3OvYZ|tpy&4o3RtAmFisH<`L8u8tXi2tqc4a`)C?ucKr9`p zFdNl%fVf55R3sbD|N>VRzhV$y*y7^?i@PV5_t3K2%Tm6;MR1w0N=9k%I zGAdc=EI=Tr)$Z%I%4TXBYjY2xxYk(}J4v^%+z?%|Rh4Ob1VN$6kNOLp%*2sbVK&5e z`+8Xzgkkr@t_Q>EN=Yd8g7shK-eYvMUw>UW(ep&!j{m`c)w{0ew!-OyA#lFk6R?6} z`0>W+ZNC=-;pw5^<(J_aOUu|d!fvO-1@9VT6@PkM|)2T?C3+D~KbH=4}xhZ{{m=H{AYG6}Rc^LmE`A3g_Y^JzxYCE2o(rI3|0L z$sh|j%oMB$n_&WWUh>r3&$X$*vT(wtuPFPcwm~57KM>6HC-#15v_(4+H+bryK~KSQ zb!MpnMxHz`=4-+-w~?>FnwK9vKes_`g9Y0dd$;)VdFM_|{m?t@)u-MAxyKuBofo`5 z=CH0*ZqV3E%8N%Gp+!!~&Keu1L7kiAXh063&Q=%A$bhpk-R63MjkuD0V_<)1~r8Fw2Zy0@FxxhL-JXePg_ool6yPw(@vLoL` z^;aKwTJ`io)&WBRQbpD7dWRVrjmQBh1t4GSDam06l^Vab@P$lGf*B%jA1^ssJQLC} z?9hb~A^c~7@_s9yYRLGYePD4gBuJxq8amqGK#^p+>)RiD;pY15c+mN8qm4^>m8=B3 zD}|v;li#C_oQz!?Z30CvOk=^nMjLIM(38q9HSiBZ(ZoN(HaQ#g)vhGT7;2;FKB!=! z&}=b>K}Q=g$DE{pMjKv#MjP$l1vx9Bqm9>pA8io)9&N-yM;mPYn4P5LKYm&>`X0O! zQmVv%`GHLETxK*5C63+J%kf|!U+v?E2QQCr{R4VP9XT_%CtFzoa&Lc4&0l`m`sTf{ z{@{IXJrtbw0%{n{`DSL{(zaDg9hmYbXVHN=wy3JG& z={QVvCCBBTe25gm;7s(E)}I4tf=r(qktEA>?~;SoH&>t#!v&O~ac&1#p<)VcrK7|} zH(3Fnq1hmXgv+P)&?HR=24RHYOMAgYi3@pV(pLt zA)%kvx(*60R@PW=wZ#|)McvJ~b;NnSH7O{mU15Vv$aqCz!__0jSi!MxfZ2&~$;uR> zz)YVs)pu4YuvFx{#ab`Z>)7*nAo7CMCH1w`4dhKK&a7~)=I^VX0*DbWC;Rh1YCIyc9_pF7+-BZD}2|lUa=eUA$J50 z`BQwad|e5p5VW#Kr&fD1!UYAy-o=cx+P<%t>2Pr0&X&II=;z_8+kgN5v4Oye@d;$L za>M2tiLclV&{o7En$GhLc;}?qnpT2DO@!5pTnTi6XU1Hi>xzh@-_A*zjJd-l}8IWI2v7t!+9(}g&nm+cSi_cLF6 zy5lH*{VKY<(}`-ry+SEN34+1Y(E+uyEka}kulOLrClVLASVY_6)GqIhaI(4N?h=$K zX|K=oBT2{Q$kF^*aSD*>GOcFNY4yuC0_qtLy7g%K1;*5P3J&9fkk-#s*o5!PXreiR zRupa$u4QI|VnP|&FFM3^yOIgBJq@B(?+T}Q>Taz-X(U0!dGNDaz55A_*`ATw^O1Tn zsa0iwp}4|VJJ~q_Z}5Abvzi?B#BYKJcVmOc^VJ54Vih6hrqPTMV~tNRXU}8@hH5~0&e38~EqQ09T$~bK7M+>}$s!BoiINwrD;MJ@ zZLRpM;+)ix4htSaM4BXx5Fe#t{pjC3Tr@`w4admHla>HP#Fn)MC12{5X#5T7tsSJz z?H%2Vw}ZjolxJ5F0%aXn1)Y#C+&E+zS6TuT(eIQZo>8~K9gNQz=@zX?MaVzGo=U}^ z10{VA*Q>K&Bnbv-fCuEgo(VuPHE%~x+}r60c@PoXcA-4hK?*FwFA(mF}A);~2#%@Fo5pX(gWrLJV7K|p@B5(FH+x%cU`jdv(k83@GXGXkdujg&sp#Epv)IAT zi?8n*t#5u|irmO<^-U-|+KT+RKAvbCjWrbWy815BQkqA({pZp z*?hT$Oc`^TZ%Vm*BmfLzT_oDo_J3Mep;*(qLrWcHr2-zi-0Mz|cPQTVRwl68#8BJ5 zKuK8>bl#1_DIk=NH0qb4%OIGa1}5PZc}c`64KG?S1ypN|#nMkk=0@R>Ea7N?^b0|; zjaElRbZl2}(Wtz&W>I{roFqkbM%jVoQb~NoC|qmJ_`wJn%iT!<9RKuT9JKcPUlX?f zr;;wC`d>Mpp@x%1Lb9}KS($?}z7&nWrjDe00>%4CdHPTqaRW*5l)OJ=VR%Zz#EL=; z9=RQ#v-50;-F9{pL)zq}2>=cm-(=Kt58O;l^=PIdqFxix{tkuM`6PXSx>%n;4v~>~ z6VRQ-#LZ>Kh&m2^V*v%6z=d`Ufb8z@DdUV@DlQ@r@k%PZOgXXOtXu@bMXiyIs4t6< z8NDPJq+=N+)a+`i@sY15mgIG6=-eln6Ti@rtCBH4X-sh$+V^mVG}GIsqv-%s&;Y95 zxQhA#2evgLJGbv@I=5w>37ZQi&-d@dGXM%(1zK;FFYo}oK~-`ezLWVN!vRdBA2G1Y zP2V6C{=!YR6N3ql-0geyUv~2{DCPY0>o1Qc3*QcC!a2Dgn>q~c?t~Y)%-9YV7R$9; zH95M^5^Bx+7yUeU*`H{6_afj?_Wmo<=5YY^md>X1Pig@O2#u@BkPijZRW&dtTgEsP zqt+uWm=MtR+%JQRMxNFcECEHNf!eHeFNs6W7K(Fqx`kGM4yu zXJN?b=5#oXFURyiqF;RDZVYXh*#cSYtG#e|Wj-c6c@@>ff+%bi1u$EIauOZ+Yay>< zI?iEFDeinwQhhe z7fDG5X9UVY9u{KA4#c#ebDuYVAEXixz1(L}vRZZ@n`U2vB$+E+vmBfsnMt(!;q!lj zZTZjPU-LKndzXq~`zcH2V3N-P@+ahPQU_Miv1+j>)U0|t8{s~#i{SDdTKE5ZLoGzvm;(Vcsr?tD?n8@hz#cr_HoZaH! zCkh7E1z@OB-o8MZ2^I5YT0_Bbwn8#8s7jzJ^>dUn9Wa)n6bGdl-&((37lT7ZUCsg9 z8ZM@!ueo7Y4X*H~Hwj);q5pXeGMx(SGLxTNZ}>%9c%@T72sb$#QoB611gPo$^z`Up(p0Yb zJRvTxW1)wMa>syK^xIjroMo;>?49eO#0NQ*lApTf=MohjGV2cyZ|_uSbC2E2Zx;+` z9`j8$g0K`mL4uJbiSk3fZCO%J7?U79)DGTJcUrc5XZX=Re z5Gh16N0m{ept+3Ee{eZ(fucxQXllAm*ET{x{aEBSJQx*18HM&cSu!QEDRWrRTzK1hk7;POO z*o|YCg{F$n#vxm0#xqLG{wgajG%XF~& z>mXK%;;kH}b^A<^(0?jE)o5Btuaaq-r_US~MV0O|S2fk>`gMJe%fs$%ha(2MA#TIB zxenPrWmPYwNVN8P0@_zLoS;nUG7h30rzNd3|r!<9U$UYZ$-}W&33mlaX8y zX&`9hlONnfo3IuJunj+C#7|c6oX7g;{5<$)!_|S){?BBwaPrfIO=Gla3ausAZy!6t z7Ywkr`@h@Hg#Q?Cf4Fu%s|-hayFqq$112k4zw$Oy_IS&8z-mSs@UWz_{v3s#GmpiV z=ysD88)!xycxsKDBu)Ga4nG`8@-{!5Jj$~mipkj$E0WM179#=%)C3d5=PqL!eY<8w zBYi>^o*&1!4V!``Z&Fkk_V-MX?5E7X7bCNOL5ueMjv6LKEB5kLN>Z|w3FGpU2#ltw zOHvH=aSCJjpG06^GDMfITT5hwrLy0wn&s!LGeRq_O?8Oi=q^_j^;-n?nUjptan3iz zMTqu_U{sBDE=$^geQMKCkXF40{|2}0mykCVcu=&bLRQr0x?NKT zin|ni;8*SrKZYh1n{m}OmqipL2&DPl{&+YVm!am8!(K&3IH|vE*Y_iE#be95aFf@O zb=f=Gjk*S(n_j~5G*8UduQv@{Qg0~5Y`;2on)CNxIt&zRyv7f@ncUy!d{-gw5piXpxxjIw{+KJ6(see;KS!x^*sst<5LV8p% zR0#}!l#pwrP@V@>LTG|ev(1wdVzYmGwd^r`TA!9GL8NCoss2B``28O)3I02l=zoR~ z@(QW_x^wRP4*-73coGmG!6mkQ`!^H0Kj z3jBU*zS8iG1U_WzmkL@_wejm~-y+6Mun1 zdY+n*(sd%ElvH`ASw}1ALDcFMNEkyG5-@8(ln>IfwxS3p7rV*~K?&U%CXqJ2HDs9d z9n9k5+zvMhByAEfj1`vbRkb=hhvtQ(WZK>YBF;G)c0Yk`=wwNHX~0Tto(ST@%9By7 zpu4p#GH7?St zxVM%q`hZ*NmW#t{`;0I`ktVSd@gFak`@gI({?Ac?QBM@PQo{*0+y-X)m<0d^^iBqS z(15h;>+5>=jcK~1>y_8d4s)k;T7`o!jS-KCslxoKIRU;ui6lA~Pq!K)NWW#&B^jD| z#ysk`XD^D&jOzsWVNNbMua8(W@_F%p zl?cY>lnHt$V6d8Ve>YSLj&!Lsq9J><{LI1V?1q?o-RWj6X8UB#MyBh(rI2lJ;Z>4E zJxvf2@B0DnAQgK)kv0<#&pRm3l>`Mshjm2*n@uksMGFy)(kqw9RWAgkG|q+%L!}T> zQpTtYVy<*6Dc66I(n2Cd_m-I?DhFHj`w>Iq`ZQeWIH&bV&A)QO|2%W_-^dAn)bM_( z&gv`Ctvl6MRybrVUltR{hu7-7@tr9v?jKh<`JwTC2mBSL*=?r*K?EA_yUs8Na(s>6 z?X@6I^R(Zi)ndb^v$5pbHEvsUxojHC+UZ@GO_q>4e6!~R7N+xdg|`yQ_ETfAQzx4F=C zk^a_D%B#onb5F z*!T+KGuIWq?uCz9+ZA+XCvO~_$Pv0F!E7Us$n#vasDLFf=a3ZYi?CD$+$WL$2qA%} znUNyyFCkEyQwA$A(MCvXA4Ncgz(JQnBPzW|8(Rz&0{E#+csq@4kz%0FMaulUR)&@d zl36-p`$bqH`^}hnLXx^l31&~`$gxD5G2(CLh%rGCbof`9p#GOR!uore0Cr0_{Zl4j zW)#YTMlF7q34WQ8|0)yy9~I31y)xmSD4_~kK?qciLT|rqL=mNr%*VcNvi;Uw6r zQ@^n}?$^qv@{|t9pbx`qjJjQpPM^|&NfI(}!yLV_W>+)$opg4m%W9Lwg&Lz z`L40c&^=k5zCIEWy;C}DA0eV%fUo$U<7UX6oPfKyozF@iV|*VjiIdmwRPU~Ir~&}m z@EWc+SIKL^&oV8?LF>G_5PvKi!cC1--os7L?UbABK=g`6!>}azq3=Z(C}bc4+BP@@Zwc5mB(w{#YcrU7_tn zN*rCUJ^5z_f(qazs$ewpya+CEx@&wSU3%(n7%JwIMas65WGYD|5BrlB7$8SK^P@y` z@w~gTU8piGUi_68?#+^}L;vIj$&|*$rN{zFF;{3_nDxS_Y&PnF(51{1OVPcW$BB85 z-+pxPCoiP3{VOm0?@_}E&VR=xxe3(&-6d%~$%653E-5J!DvRBMKQ0MC|KyUyrvHsg zvgwI@O(VuCApT9JjDMY8Qt)yG-X51R{55A&uM3jOO>!lf*VPw&G)X*FVd`t{4H(9W zUwwj-hwD!+$?(Y~-K2-F`fYpuaY-Gcz7tnYc31yv({@Xt_B*)rO_46QjCw7Me1PGAs1H?B#H3Iv)#L7m%QEm8B#f z3lY7_#7G*XxBX{N*#B=Dr~PME4eys~{@d9ht4Q^)?BH$$2K)YG{abcOe3HR-r8Jgw z`v{SP>5wjyX|9`>f>~F#urOb>JkPeE42;YCieA{k-&p>pP)wuv7x)CvD^#F0I{E% z$84k?afT8Cx0bgaln?YAYK?Ct_vr*S%@E0T^t4uGh>X2e@QBufaGh>)L(sObll=$5 zmWE!33JZ`R>WhK=FeblrRUhC7dE@7#0%fF;B;)cl8jNCxh5{cZdrdt@1zd=%d9Tya z)FgQ#r{YiWGn6P}&${F(b*~eMQYRUQU{l_8oxRat&@uE-@4+YtWNh zItZ4~wYY(vrfXaWS;iJid!YpgYP)&Iqk@b+4~}ry1QCWt40Z~JRw&XB5ger`Ns^jO zg=Qu;ugYf20{7UwWH02Ho|Wq{qk0;C|B`6?tF|IJqyN=VT0ML)ILJBdF7iX;C7{?` zmA>+y>{I+#9sM5%4F50uQk_*D@xQAaR!lWAepe1}l-+)vpU=epsT}%vo+<~OXtG$P zyH3LqHw;!AGA{x%CS_%qaj?PFcO$m+cP z{*e0Pc|u=X(4%Y)t*b>J$|ilfSXzy962;7 zaD@!fWuzVwq5L*YIgU}~#c3qkOd;`sAEX%a&*r*!Gx2D>yK-DOgbIEa(>e67P_bk8 zQZmXV3e*cFQyUM72cgCEr;>8UT`!FH%|;p&B}V&D)70EvS5o0l)uX4-`XM-|_>*Y) zN$tOi>Hkf|^wEEigeC9$Ka$Y*qPsW`j{74CgFljp`@1CYLYlC-@ZmF_vy|A~DD4c^ zi6{-l++LUsLsa-B!HQQnJ!ucB7No*MMgvFV`Tk=!S*IP+1V6;qy!db@-|x`}WJ&6vu6>#53SJm~_v6KuIw0mnouMD>g-*Kd0a>3Y0O59SW8#s5W%RC-PIK+i zZ|k#180`I>Zm55HYo>@5e}zG*%m%;i*9HX)#;#VG&xikMo?X#O5q~%uRwJ{O(!dzYxy@_ zxI%SdAh`oX(@T8Ph36eq7k+|6;J@o4)3q9fJ~Q?6U%JS3%{(ejC%0e5Wj;;v!3y$|Xvmx=3rh{jH13k_yI4FN`YaK0)$Qvumg> z+SZ^Iv9yno6S8lhkLpSnzaLceoG z0$GF-am{v%dk0Uf2%0lKeEN-Qs*<3~$1zgTmt8TsmxsfMiRkXxs=T;81rMD? zwG|1TJ|B1s`E}5k%=TvRX}uhkHmU2N5e`*U(>4p6_93+n*OPnVYe#++1K)q63_gT5 zUJb88cB1%13I5BK9}B;0utDO=$|30yA`-b@OdjQXEd>J)puU4gK?T47 zSOL&aA0P_=z(2kkd~#6#Ykm>X=9Ynb!DHj21^veb`jdbrDL)<$@J$REdxAQ(ND8Z? zIV@!+b+(cyq{PuGu_(p1?5%2k=KC<7C`IU7)DpfL?iXaO3fz<-?E^){!#XL-ydcIEZSU^v$bYe3uGeO>7xX*pUm-tylA2 z?~;<{2<-Cvh(pl@)2$&DPJm64sS5!>Ln2Lod%9%oUO9Eo-`(qDm|e4dx+L+_YcdA{3O?Rrg0}Q_4YHVeM(4Qn%l5aeyWVzcD@;~$2eoo z_9WhBMh3nh7+w5IIP86-DT_mVw$m5G9pJ#@J-^53Pq|{CtbHXt32)m#0m}T)xa8qQ z*)#UiBYCuVj$S+qa;M+@UWy?axMaMtKT>1LuN`qKvZD^Ld%g;YI^V1JP;&wkfQWn5}HT{0VyKAh)NZt6HoyK=_P~`2tBkAS_r)(NL3LL zX;P#}5yj960tz<3!u-HEkCjB8ntMhbF?+gXci82F;4q3VFcB?yII0dYCTM94QuGAxVHLq^T5X;n!*#>|S= zZ+>?nI8z2yRwQF|hpsx^LEE7UKE$G}b4hBjtY+`Y{z^eB7Hd+T^{-AM{%I>;SLAd- z8uET|p1*d!%sG|R)Q zV4TX;bUpjVztHg1NuF^VZskS6$Vchk1D|WU;c2J;U`pamv%?3aAIy;Jv!EMqs^n>U zlZWqy7D}q`cvn@vyqx&|}G{7pvN~V=ElW;QREN&K-yTM9v!&c0pnu&8!~fE2_-% zl`L^Ug-tb%_P?@d8d%3hF$j5)5!9Dsn;fryw_w>PNgUTtbi-Kt2Nii~=@H8*?oe0p zipWZ*A9b8^L^9}|x{c1O4*(sfAv0=$oa~FB4JdSS0F~SV6BO3Y8uW2LUn17Niq~@D z=%uQc5gV+b?`3xrmm#U9Ne)p4`mYLqbGqiAwYqBox(H|ku&Hq4*Y>U+APy#E3C>Ae zYUmg>fQDEf?kv>;qavJIv0KiyGA{YbY~%6_WQmh@WmT<0mfU%+1{+{~x3emlBRVuI zzGryU5uWipo^0|Zz(T!sY%T|Oa@O*VA()80Gcw!52Png;?8@_wjmz@ASHo6`oUG63 z&bW;1ZKahVP)Wp3Tc& zLkKIw7U;N`+gNf^!jxlvRoKrL%poLOubP~>NB9rq&RiA@8x>P$%-*p98H0JVT-vA+ zeMzL^Zk)QiF9$F4e7lurwX-skEJ8y@7vt^R5&x{9V0qTF>uKpqc$8hXp2Mrk^I+s1 zYq?kCZp;u<@jxZ}H3L2{NrQzl@N386PUR2PSr(Gn;b?H7Mu@=n74Ha3dX31C4_j}u zO`~MgJ_#?+Jr?u6NE&*;%b1n17i^x|R~Y$i__Q^=YD?3Bg~CacA8=LjgfN2(K#+Bn zD3llQE=iOp#^ZuBXDqvkQc=(=pASXwy-G~}X%T<0U^wUQv}qFY7RXc}PUGYVJKK(x zmFI{L@N0+WoAm@}#@>z|Z_<%A1X<7aBwV5|d!m1=4P5+Dr5EU4?aN#7HV18JMpgLj?&_*uRF&v^y^F@Qk`8bfurG1r z?^{j(q!SDmWuw#q7D7UgZ!jQS#Z@?E`P1Uak|f1b5qw7H@`Ka3@O*`w_$r(`%B3t5 z8DLzTC&>Yd?YOUmQB9XWC#TL??#jFw{HL9vdZ#BclY&rfaRC2F=Gt$)@f0Jqq%Ym>R_+ zqZDJ-q)Q{<^@QWnpZ?i5~(&$cNeV{cd;PNEaa;li%3 zL&D|f-WZ+wxY1o35t;SND8lNew4Ubniuh&`p1z`$~OPvx}bUc*eLO`$XqJ3 z1ng1Uo9JySrHQM3m-vgKnacurBln4|+)7m4ne=h=C|&-TH?A@);n1o!rx=mWI43XN zjA_RN^h`yz$cGw7zWDR|as04!GXMsqyuD(XbF3}Qy2F1MrJmq?7h=CY{KzPA+7+(| zowbk$OPME=8Du(R+b?A~E;_%a%O!N{=iM6D@5|bY1YRc84S<2%rZGv2^(eBD!shWZ zPs5yAD-W9JVTd)Wtu&6xUX3TquhOepmCvm6h?kWnIIlvDg*{QFXRpWzpMx###e>@} zUA{rV##ePZz30^5rkDOnr*vd4g4AV6Wr9PZ$$WupI{q9AD#~gJdR#obdAIqDRK$ZY ziMe@vH_sJu;$vVXT$xB0V|-psdTdOCBDzh!G3Feq0Jx{q$<5oZV-%;Jlsl9Vraa++ zeSW;t(>=!9Fv#Aias_NTjqZ)Q{bKPdk+Y`~p6=iA?uy*!ndNUiT{MuD^v7pqRfh~@ z&4xK|W+Xpz-WyneM4zC(5=H*OPDhI3(8G0-ay>;Zh535In0^ z1uvodQJ^~x3Z+=FOn=iIx(C}9cy>RIU*0g+ApftrU@1n?#=VC<(uLP3Hb58n=%jw> z!j^4~G^xkQ=X6K9K%*isBX?#&5IiFGg(gtaRyZigUcTl;3Da$XzR*c(4rFWDS&!xOf-} zk*1Ts`Vn4z@)A!3c>61_%V%pHzQ9=>wuK-%i_e7MS#AjM_t>l@E|NVs-9dBhbs0}A zlZoCU1@Vn&Of09#LSnpBC#7J-g?n+9f_)ha^eh6M=wi6}$v|2SEukRo`1Bp6c;1w* zl6c-L2Wh7>WrH!K8MayEapYHR+S6#Q3_ca{jr(~FisnT_-Sk~-JXYNmQhf&{y;OGf zFxD!Rr9fU|0FfJJ6F5q-b&Y@hgymqRpr10t4?^ix##kmPPv1u6MH1;DN}bfWTTz(C z15JbC)b-sUQ?!ZEzT{I7%R#2CBjSang zd>GABTv3)cB*B6#SyDXBiPz{HE*ler#WNMER!bJcO3S!86z<67wdS+O%9miyqiZvo z?BqoRfG!WgM>0az`6xb)*R^r32|M&(^PQ_D)U1 zXPuGH?H}$9nx%uQo8|8K3!JyMDZjI3njS+jxFKZAzvdq?zSLK zg-84pZTwmK0Wumt50zHLTZ1!_x>9ko9y$h@EZ>&7;z8ORsY;*uN}iQrv@aTfvQ%8m z(kB1KAJqf7C0FOJxyXCgbbK0w;kd|FSkX)+K5J{X<7O#gW&@mhs%d_v(=No~Og`4; zoBGu|4z+9N<)#0l*^#-V#v7fT#W3|@g~(UrFXlK*!gCIor$|X2#%$-E`|2E%EZQ=^ z3gnhZa8aYW_8ZFcvoFOlg*;uMCq5Uyh#p;2%lt$&12#E?yAw|1!q3~Syk#L_njyf! zgPFLHE$A37fUOG2r`!+ySQv2HsjWbRD|u}Jxt?EM6n-%WmczpD##VGq(jq_r1$2~( zRTMh=9TMx;uL@dl_N4b~okB1RT~TFfpA(v+1-^tb77Ij4MW`<73P$+t>t45$8FQ4f zKJa7W16r-Zx&xug@hL1Vci2R6iN$W*Hxcn=lHYZrpNiD_+*!+W13F6a52$Vr;-IgC zV0T-Tip_wI63+dmwphhzW^VXVM@cN*BX0=j=n2g-h*VI!h?S7bM@3y z#EsLUFF2qKp#tvZm1+YG8}wH@6jvID{_beXKk3}11JF)VmD7(2u{l0?87ij0BFBrm zlE^M$%cGnj=ACWMQOJ{kt&qrf3&vk8VVAcv#8u+hV&rP;T$IwP((lQtvOjnz%M}G& z3`9p~==ThR9_qr|(k3P^fWbA!?L%B*FY6~BvtI^V%&j~c*s|{7wtn|)+cRRuHg+(f zW3NANX_{y$5GqFieopaT$hcbP;|HlIEz)#`9i3)fAJYh8IW%24S$f;K?>uj%)is4( z^MMm>n9oI)XI-+*q)xBb$ft8@Vg(rN$JuFN#>E&PdOHn03pOWu-DZ|&lbQVLTA)As zNyo|7nn*A3AO*1cps6T8u~>E2NtDL6)#H6f(w(Rqh37xN;PK&Xy=Bws7wY+glXZa5 zlFINplWV#w{V@t8GlIbFx;#x?vCx0L$Cf{SQH;6ZJKLSLu_Uu}RY{!>E{{^iI$JKj z^4^5h?)X1_6wvQD|G0G|VV^#~Z$*w@ZZX`~eNj&GLwqaeEFnC*^oqR zRKnRMT7jP*_J)mR?6VVvUXd>>(`k5$2uX!2jRVDn3$gFI^=iX{7_sL%#xwon$EpeN!rghVoyUb~jLtCP~ zF{<3#m4bS$t|ioo7;XBm%&7lKhm5UdbU^21uf~Kp9-lJ4!loc5!xW4{kR?IcE<^Nj z2HqGutP;dryhypwExW{&BLit>Sj~-&jc;hyDyWffim9r9coDc!{5W^eMeOQ1ESEv= zy$E#L_-W8l;b8Uj)#OXhq1jP$u*K^Y-F|~D^Rd&`@7SMh!)Gpc>>^}$Gv8gVe=90g z`IJ2$*JN69Ef+YkRj}sr+qC?XL05|`#jGBq z?lSq;SPQt0R@sFpNX{uyJme1icI2PtlDzPo_SDdH9;_#e^!yiE*nI(B z)a-%_F@AxZM-nwF7Bmjj797L)Vu79#b0$n6m=FlN&Ps%@ErvkDl>{MM`oN%?Z$!`8 ze4kq{CRBx5c{xrv2XA!c+p~41bV(6r23buP{gY_~WvWRRjn7ZwcwG+C*m6`)K?ie^ zOFkjVU9rTIGH$(31w2lMD-W9%>M^@>`xflG39D~Ec`DLY@<9|6jJGb|<06g7w`@lXf@W4!C+h*W~q9Oop%pPj9=k1ngmVah?Rh=N5+zMXItMg>4CJpTneb z*8`wbhv3dQboz4&7DZj=<*qUo`^X(ea@(VeqDG!&n!`jYnB0*=G?q~AH8|LJNhbEhnL2p|~H>uyNGAd@wJp3jylZ$)!7LwMU z{pqLBUCyqRzP=O&4O#ZJ9^`1TckFriF4>#DfH+hK4nUuGo+k7rLs9$+HiULQWJQNHzpDMXdE@O7N-cR3SfIRw{zKRUmlj zYc}h7T4-!yW&M|pb@`a7ft2dTO=t1bw0#zL1{=+G#oX!(V@V`jT>Rfj{@p>Z->m#c zuo4Dn$t<8H1;*9>5_2sm+Q4%!mL*>+0TYW47kl8>9|ROBl%NC7yy*@hO~1F)Jjxs5 z%dq*m`YYT?#?NP?Si3pidEx&WeAGtHU4Cb@vTm43@Hf?$sLCw<7OL9WY$3ar_mIW`%cVReAoC#Zm zi>5W1;1VGlX?lxfE0{t@waB034~6t*FT}N~?eze^0#@MTgiXl#qCZ6X;zLP?zM80f zY2U*qLU!3`Qc36I1k;$Zz|_I=Dn-}RtQ=OBQuM=w6J#!FRumgbWJTMk4v{;G=vXVb zp@e>UuO1@O`L=rH3dTK1?s=Ovviu!3$ zPAOwq(mk|tMTOLbV7f;12j}bD_r87qRNYukrd{F7CEYhv&l`~3h=TITs5_PZ ztz>sS?y+t~dEzmHPe^@-91@~xs<$Us+thAhWP6+OA7bIqz zbPDh~H~hC|TfEM)fAGgqy>1Jk1-e~HagmP$c9>9AI%nQ?#O_nX8teg;{g-tf!nc6; zk?y~i4zKR;d7Wfpdy5oz(tLaNOqLuj@%z@=byG!wv}E|% z-L}O+?w2x@Zj%CQ$z5X z7(jS(323siAQO)DRIgJU(a;i$1`qd&I~GU6GbTn^uWnurKNcQL0dC!tb1|!;9&Jw@ zRhdDJvW3?Bs2fz$E3Vr_|_FTQE+ia_*OQVAsJbbpPrkY>Lc06yh<#$c<@2&Yw zIf%3^i4Y&tf7CRXDOL=m>DfZXr80WZl8Xa6zPq`KKKl{s<;V{XJv0w4GCA}UcY21F?0COZ0wxk&kjy8O3Qwn%OVt2f8kwHRv=pN{qjDM%!(@<@aN%`=|(c#xH{n;nS|E?iY%J?|vSsY38b zgoR5yV58TU;^z4qF8W_Cii6Z}1F|T70YC@R3 z6AbYRGR8i|6Npr)Km8UjOqBEv$rP7&FnZEInYSFMdw?Z-S}_f)f}EckY)omKGmzPY z62@mM3!z=`sQT8djJ1cKev8m=jQ$B2?eTypysX~FGnXpygXjS50x2nUb%lO9iO$e^ z@p*YU{UdR@D?@`U2cAZ!zApqJLW_hm=q|)BrIC=cm$6^>YIljYFPmjX)3h;N&bbsz zbThh!5Kf>C9Px3_)1x>LEw~X3p_Y-RD1zv))4Kmz8(rDxbIx2tRS)PL~C7KxgjT0Dq8wlzct)~dHnv0c58$rXx z6L`V~75-<>k|)5HQAKNq*-iQ}0IkO709rNEMo~29SGTPtY1uWf64Di4AjUFp#}lHO z`b_Sxcacy0_ILlzuJmt(I#MVM35d354IlaGBv}#C;FHTz63zPbV#HGOx?qAEA#gGg zA|hClN+SJ&Bvro=(}i}EmM%=il~^vNDQ%s%%2?(`HQI~^>cxK~t4p~g+hE|m_L>$_*BP2*eTWv2(C-q%I{JHuBT3o-O zyhPli5?Mw9qVIcUgT{UT^4s(MM~T%a8JIrx#SGIeSQY+aQSaGkGxwv4a~!m4>+m zx3)jNo4+Jg?thKr%uYaubGiV;PRZGO2=sNx_I0z>#wE8y`aFU+;^Vx^n!?ZgAIwv? zC=1V=k5GqWY6BSj7*4>$WDobVyAH$l^^sJ8AM*g?M|;rf5Cz&j@kWk941v?8qpg68 zgRu7;qnVhPSiA>5xh%%JN#pq7Vs~b`!bGuFmt#WAP79*Wh;+eGDjPFh$>$J(#YTeL zmiYLPVOC~1LFmI$!WptIlEkxHCtlji@&pK3TUg98Cw`3t{`FMTEEUSqH~wOsX@S+B zLOYwVJLme^5k(+2Vhg1?{v!J;dDmVMU5x@;T31pPcW2jdUObs)>Sg^J>$Gtep3tHc z4k)z@3&jFdhyCFxs9DExp;ZE4TX~A()ZG%9VnD?zI;wQ@P^VJDg)gz)pg&*a`A#0X za-b(HH|TgYJd(cYPrp>O>NwcM+R(9azvy^+4<%0FFbJV<3xk#%)x~D zx0l$u`f(#>?W(TsIq{Ai_zh~>ex?xW^YvA^QjNg$D82*qk;CRuNm;5-=j@&5&&%1| zul*h#{rhBWh72r|eV+y8bEUbM=3k&oJA$r!tQde!c|)VdTJ$f_bthH#!&^bd!Q;ZN zB&1~C7icMCJEr6FCBhCDjlWw~FFd9G_WfSK*RJbN!Wq`(jlkvVDi*m`Uknd4oF))- zRySC%*~?S9j3w&%Irkk#YKA+@&xL91VZ48pi^ffAk>r{9F62zEBYf@(J@y{N#q!DWOd{)ig*#g{vpi5#egEMwizhWYIiCu$K}uukA#oJ7U|v4a$pl5`>R!`RDJV4PLf*i z22iElI`LY)(KGzmN-iPH>gw0fHb~SMy0;;8O3Jz z{b`5<)%jhZNb8iA&XbbvHR*ZcJJjV6c^bNDYhERkZST9bj5tq@aInm-!5}hQBm=NoMt7z8B%# z+sNDkOs9ewD5bdeG)!+K)tHnB9>lG7RWQg|*v*iv10VQgt0QoqH%2OG&fQDA%LS3!bd3PVgM3TE7&uU9p^HL#9%Z;)#uOr?>~W%@|oe zPh#oEW~iIYjx=*mIg2JoL5YSj_-GbfRK=TBS>+L$*RpXm3vLjr=HY+psXCb{mn2m7 z6PN|JPNm(bZni)#@*K^AU8tW?BuIF~*syajmR+!Yaz7=GMq`UUK(M?`d*Y`W}oTAf+yI_nIzm|07C^bkzOOc9DJZ@y?DI!+ZPBukh8 zvz3e7B=|NqW$N>4cG<|UO++&TF(hv})+y}OTy^6)F4#D%Lzf5u685)^!wpdkTyg&DG+5^OJWIeymcO!Yvb6>vu)NH3uj**$fQFcq1r0XyQ zMCOwZ`lye*CZonbgL9;zg*Zfz$&idhG4hlWtX?Xw7lr>|XXB41v7*FVOuxKRDDc(e zvtukBcF!RkEU=D4(TF(;2Cpf@FmVg}O2vVipR*DZ*g8H7_$!RZEhp(@_3@?fY-5CC zjdvlJGlX->h0~?Gtz4tj5$NK(VEg^jbc3u+C-aOT==BtvRo$gj*KUszCSNp_Tkg#f z4-sTpKi@pwHVHE1>aW5aRm|YeSvj@i(({Dr9HD7_lT?TV(F#``Ob^Aj(7=r8; z(L^AhRP4!JgFtx-i~q_e`Mj&?NG>bSzyS`kftBT(-sMs*`}8MV_2yj?lp}cR+Tw8$ zK}qV?0^EkFVPja#phNfe+;Z|OzkoK*I(hoaE<=Q?xm3;Iql?GHlUV!(`YjMJA zJ=(V6t5Q!_*p&W9>Vo9I+mSw+A-gv?0AILUJ8{QQ7ZN+)178QLRkO3sgaTi<^BjGn z7BBu}*!Sk~7w*)02r}Rc_v+@2HsA|)7!9Ux-A$4XX4kN}2Ylg6t)*x+R7pP9Jcrq#_}2K2(?(oRk_tJ zpqqcW1DJ)mL|Qh&65@=XPf6Ie(ARawxB|&<5tB8v44fnqNV$@&y{x9FI@KBeUf_%P zbbQiLl&>kI%bU;%rpUb^cUK^PL|5$VQ9_9bB$RH)epjX;n=Ctpot!liS^jY!B#LF`oV8H0FM#K$uJk{o4No4)X z?6vv?HkJCF)mkX=%qvA>Bq|iPoTS_vR~-M0zce*{W~+ZGZm?NT7y|wB)d4Npi4pR4 z7>Du1k`zFlB0a)^=Hs*BuGM^!-XLN3BjGA!aV5!tqJJ$}7gg}4L90Yl@p8X}3sMXS z7fiJ;^L~kGZk&K8KHEMWT~>H|aG6Inn!|&-^pye;pCS;z%UIT9qgk9wZQy*YTXlRN zuvPVU?6oTzAsNBls-<|bn7mRzxVGfZLa?C55DS5thO#cR0ri=SgQku12Xa!h>@3t0 z()qz6#?6I|3EKB8HbCp0-~Z9q{|(gNMq>ZRK=sO6#Y!-oOs;BiaMTtXLzHnCTuI}P zR<0I%tx^h|t~Y&%;I=&)kHJQ<#>d6l&32AoNx#79Uf~PQ&tG@=98M)UEgen8=6Na- zvbRYe^{v02)YbJ&f95C4yZ3UH}9;w zx}9yyyYUjeuiLelCWj&Kpszn~DaqXe)8Hni?5_E~nN2DDmPO0O{DiczRG0UB{>Kj= z$4X__4%AflKP`?iWYfQi4Bj42FP+}zQTy?A^v!9T!*Bx<%Il$PFWn3MKi^U`4nT#L z6QUR5zrGEj`69w&%(%_J5K1}X#vjDr*~cGANK+~ZqZG4R2p4Zunv365ww#L*_!2-! z`aafnHALX2B0g2Dd#xat_#Gyg$i5m#h&J2kzl^3PrE-X+8SEEG{_zYnF_7?l#Y^<`^8OW+(N>F2M$aW}<*mSQ0P%;9fcIig{T%Z}O*jEgT{^nzks@ z57HNOwDQIUC-`RmMsgJ5xH2 z{Pj`+>Z;4p?$OF0^W;|8Tlts2c8`i@x?ZiNs5OEA*geWUSl7746j-|iy37Aq-l2BP z$v*51ucoxJjANhAu=Q$nU?g#(;*#kpuJ(J*BbCNqbyOStHYeeNOSf*G^52}r>YwCt zc=d#Aso(U$$PY~I?i>v~-NgT4+uhe`MK{h%hHZRU>b-Q1^0Au2{_<-EaNnmlp+P$f zqt~-*!#mI$(_`tQDf0(=J4EBAf?E8VyIuS7$k9k6pW|e ztw>D~4_A5{GqBR1pT;%+bw1;?7&~_cC`TabrmPupCH>+6#^_fP(D6$}sVQ=Q5(s4U z5OuHLM%)p|J#Nn58397(zP;ME`echa+NM5Vf{YE|Vj_^}J2OXVCdez1g1b)o6~P)9 zCyx_;6xh|Yqvkx0C6rpLA~_jrB|MOULf}O|%}&HN@37w}I%*Tw%(T|mhp(i==4O7pdrL;6-rHv=v2{OKKy z=Z_=6*E>mM95-mn-1|Cl?OsL?OKA%0^1u0SKbZ&^{b4iULm)PT`lQYu`0qV=)cXEb zXL!*5%A;29L*utlrund?{Bj4xr+7tzX}oX~S2$f2k`Vp*WZQLr($24MgSanR7Q|lW zhP@447gpkpSsK<|G#6>vD}vL#3gCfojzi{A0==j4F-lpK`AAi~9#5?9oj_+5X?lZwuhHl_G-oNb%tEMn|UGstP_?rL^Ot}s8b~KV#U$Xmv-L6dVM8T)Gz!QCp(oPna4luiv)+?!VnW`;{KJ%zwB!tsG!~ z=qDFcP8oPerB@L6^BLFyequwH7yjX;WkDEA=bCNwW&Vl0SraUIRc;0cJSIO(Rz5)1&5itTtV6%_+d3z*$i&>GvEy) z8WwUlr=AL@55^^v;==4 z8PR=v7`8WDZXY1`s1@n`b5@ZM$v8jl0H@kjgh$YYD-xne)L{;RtR~MK!YHz=7Gnvn znCo$d&rUDIb9CA}#Q^U)ZE67*smBiL?ON_}KvW65E1)VN=P6 zgv*O(Qh@!1NTVj2|3Gey)EW*1de_jp`CD z1c4V%6A+Xm(>VBf;Vh$228%!ff}UcJ0AHeOAVDyUmlKez$$JYid$-se?=Xw8EylAH zz!qWzlKU5~P#`dbWa+YX!6Z5bN&_T&uU=8SP8q~Gb(anxgO)75C{cQ9ZP}c{#QJT5 zoKxTmQ2#UX(%GP_+|r2-9@cAo3`E#B+NJ28GY*^6IqecQ|WfBIaPcO1{Kw%$M9SVMid>{ zw4w(p1^_(EIiR|D;@~O--`|l+lph1&0hR%oC1@wQscDN<{>7$s(|=m+*!*qN{*CjW z|Eq0U1t;9It817Zni%rw%KQ~R=J2kE`%!c~wt_q`)pl#LVJa>h^AD@->4`$FK(Cgd zpsh?h-g>ELr2BUn$W_@0Tai)Q(cvN%=bt@^-30d|xetTrl{7DVqdv5BA!rrW31mZb z>q#M_w>~&Tff0&bWb{g1z^AHG>kBco$?Fbr^lokTGW=Lde4L2F%t9hpIHe#;OzPQO zg8WpRQ-ZoZrBEUb9PgMQIBw;H=EXytQu%^m%P50>*ixqItNvoNY_d{mau!uiX{M=& zhg;TlF`)!nnsJTAT%R%wJ!YWiIA!iKdAsb-RVN%^-C)>n@&9$oJX&!~F5GJz2r&GS zGN(d>e85%Wp@G3{#nA!=c3!_y=3)xvSfDweTgoy-tyP<{N#!Oyu#7^Ki)y^OY#6U* zBOzNhV#53sr%ah3e$U@Rtd^$Oz6sdYpnXtwPkMdhvT%8H!i{ouO^uNMUUGn!1Fc}Z+hl`zep7(5&-|QQ?783e%U0L%;g!rg3!?Vd?KjjVe?8jzF073eGv%)C_@TN=@rKd zbyhgX(R`tFRx#YMa7q?Lw-J(*d5D53Mp7iGM7_np%w1l~+nG@#n+_ zgwkv%JW#aKBMnQ~n;lkVzp5WUa{wXtU)7J(LZKMxfgAE@z601ek_smt{w1W)cXDOp zqTEk_jY|LqI>o4G%siLmuZRtnVx+K7@KFXZ_M_@Y^ZKbWn{i+(eF1u+4ngv+SfgA2 zhRl7ugBaBVo2eU4D6(@NjT1c%juP|%20%Ed#e^oR{F~f4&yr4?2d1Xe7Q0)}*8;hm zveTU$h#K4!ar=SHA4|5s0s0Nl{{Wz%C5?y|v!~}TZ0g)D;9YGNCYbK2^;-pXsqy7S zk#9Q^B6)h<7Xx{w&?Dv#B?*fOG)jzuiD%Gj_(b|dU6LeK1lc@^;-FG7=)x&|p+qeT zcEMz$&h@3>ffsR0NtzrDupCn)sb@KP&<1e~i+WaEWO9>C#TdvIT!wKYxA&2F{y*ZY9=POP zD$%>`K(?Tq)d~y2hFcunKEY8Vs!|$Wt;pY5M0J;lvb>rIn>>l7mF-sFK$I%a0R8HQ zZcl0<+RRO7pf7!YqqI)iMY_DYOQM4l+IaNn1zBEJa z7?+G$P||@Jal%pk=v0sofJ>f39c&hRJjJ;^NF2kUo~0L=xExJ!ypN|i>gH5&e@t-( zMGE}z`bS0$nBw>jR(k0FV~P{G3v>U+6en!*k0}o5Xo@3NbG%`ZA{7jTy$2gdIcob2 z%r_dNwtF?bekDyQ4Kw~S#p(Y&#rgYFTK^9gJpVgzS^1jn`|55vMG_zwPswOrG{8Yd z3IjrDdI=J)3_U5LOC}C3Isn)7(?6La&haNCFaQ#)^%uw>_V}KbM-?#Y^y~#7nb6a6 zJJJ+)?tnUFcVWIiG-bUoR_vnCv8EKWUO1q{$REYkg3aMjO6m}Xts<06iV_Mj%kJ#PH-td53xT;cWHR|eEcEkL=;u#ro{U0)fq_4Ne}|k4DL;X74Gb=@ z*#r>D8bx$b=ZQ3F|2&RfCrxV_y?ZG%nB_z@k&+s z*q1-?4Vncw!&gXg4({W7D;4H%YfX<5umm_$>df@z>T{eqK0ezq zF<+;?>)i1&{OPV-R&Bq}?P?7df_oK_zKY?!KW%#Z<0zLiE|xYgbCS-{UO?YqJz%|H z_)iZeMHk_4hGX7B4%XIUojabx9Ru-0ijWZCeu>MS`bp$>&)xEso_*~P(+HN)F^npT z>|g_#0lj#Dba-TIb>BZ!lUa80+Y^4~o|Ao$LcCZ=elT&lP+NT4eHMv_#~eTUJmIv< z*OQSU<2T`%!&buOgq?AQp~}YI$+oC}Iv&jo3NdmpRxR8LBgHYLNO`t>^{%@5MpOqK zXmz7{bS7zNk{Vk3%i2afq}4Pqygof?_@SU+dPoh^)2aS~xmDKr;JFJ)%kG+5!&9R;x1K(|_lhXQmG)QkuKjTf=j^-%So57*y1JtK`l4s1?l@# z4nueNlRK0zZw?gEH#qWamT;N11kCpzmayKT?OHO46s)7-(s3?i&j`VPzBaAjTGg|j zr^n^o^E|zZsYt26TxC_Rp;2vEY6FVu^Z^Ou zYTC+bPs=SOSDF&UVYm0A zvo}AKx+%WMv%&5c2739O3hHUL$Sv8ZC|C(*o}7klGig|SD8cJhT{j_V?#VSiURL?C z=aoJhv#l{KKiHVBVu$<;?jav0|CSN+i;iO}RicFY?_W~AY`tX>{S+gN|E|DHCYtDt zNAshcSk5M8`;dyNYNWQ%sL{pLm)VNyqNANY)C0Y6^I+#lP1ocBX|+9MBnLkpMPoSi zogQFb#1WDVB+M-@s9svxhnoo1`{0598R>gWtRtLkws!Gj%H_)g67M8<{hb8u4pzJ+ zn8hKe7lcDb6IPt_Px*fNNj5xm@mW;3D>-kLt#kIr^omQKqc4r~`SN!|(n^Oz!Vld1 zsf_n|bOJTPE)q~o^;g~%l7-?!Pe9cq;0}k&$bt6-=ZmsTQd(Hfjcj+6HtSsVf}X&+gBf z(&|RWCW@#f(plMLAY=EOR&ZYnT~b1uU_W=wA~?>Kw#UazM?M(m#F$0GBgaiW3 z+FHoh?~bMai5mVQkY0LcApL7k#J}4UjRwE{{x6i;BVKot9$B7Oy|YK(Jhpkw2VY^g zZA~iNE&}*rQgTWv93+K?=W-$q>tJ9h6)BI9tF9@mcWrC}>h-nzQj-HxGs&Dl8bv!G z&E_~^4t}ZtIAOP%htxS+heeJPvUh7b;fB|paOuQ`4?aB?ySjWf_W!64UU{bv{?BTe zUAUsnwTueCk62>z(Yndc;-3%`>&{vPfK-?e!l`HW2Ir&x*?2TJsKCL|BmvYjCdNt$o{PweFn&P%^QvENI;eTj3^9zpuX%(sVFAMH>CyM`>k-p!8+lkzY zysoz=Cf^j>i#{X?ErM0nLNJE+LapiI^|;psoARu59JIP#kFH&y*j~I^ulepk^PVU& z-s~x?B<^I-J~WaownkoWDpJ6vA_I?Rt#2xdfD>|S?i^5a*Eci)9~^801$P(R)7v&s z-aZP-Z6_+dF&#e~6g<~iXL_~)Hv&jzFWK?VO)w=saEGxr>oxc6S@8zwsU|Fc@4-!q ztq<+fH;(v=RI&2TRPlFJ9$2l^R0I&XZ{Af^c9}seR-Y3}HD*LJ(Z{HMC z;?8y39rArgJIK`_Hv|Nq`UG>m@YJibpS%t|wX6{l#?AOL6`;cgGCs!@moEE)KywikHJ58mmu|gg=tSbg8ITNN z?30I#FWyl6RW^Kgi{>AVGdyqO%s*7n02LcSs2M2F^6BH0G%jwzZOG6_HZ@mz%Cry2 z2t9kYu@XF7CSDs%RWqkXF=$o*k0CD>I8_D1MyXQWcps(*K zwyCeLw7IWe{foZ7vTuIyt0hife^3sC$%j^3o_B%1{s&$m!>b?!)~M5p_6Jy zj{4N6;#=HsJrco@-ln~U!hmHaR>6+9E}yxAdBD=0u7egjY}Y=xA^$>?@q+r|SLMw* z!}G7D{0A9wO7I7j+!DO#%9zKao;~6wUdynru?e=r*)Je5==fYbMmZ+oFsQ&&@Mv0K zrl*%T6)D(XjEI$HNlWLEwA`veQ0-|CKg2UQnBXKVqkv3ymyGvk!b2mYV_+eY@snON)-7&6YM9l&7h6M~S z-J7|1rEppI*hOfz&G!DS0r@9Ov?tUj8+t*IniwPqZGkYrBBcZ|kb75R<9s#Gg{dI> zLwrlHxYaaO*!mcG;Lyes+)b7sqyS;T6IPr}R_($_?n##tf2BR)0S|7dkJz|piFq^B z#Uu5vlC{37$=pJ=QHmmzExH*qA-+{PD32;|<5I2C>@8-tW}<^e^TNifL6ZRiP~;&T zc=dsaV}d=k-@dpKO)-bqAB(zs`KjTas$2>nUvhS)GhQ7p>l@CCWV9%!8)vyJzZ?iL z7rPSjgCI65*pGERUIDSP_wVr?$&|XgvWy|I_q_UJa}@te2czf~_9y9Sp^p1tYzRy% zEQsI7j5o^JT-za_f|Z9*03mx~+3Lc`j+a+-m2TcG4Wzd)ppnmL!V4m5w%LznrpT9s zn)_=7SCh}{z`Vr%>tczg5t`+wxWV%Ir+tsVE_12zGZxr8>BM{YAulfuo;m@kijnos zA1Nic?2DI!aRh@@WifS)xWa5)4%X2*2k%F6tCPo?R9VB#jdJp)rS)3t#>WjDZ()_u z1ZAutT{fxdXGRq*AiKpbIgZ44=-zPjb|sl-MdFtp9IZj2?)z~OXU;nou+$PwRuAFH z9^p%wj6wTdog=n>4hj;L(ys!dy)w34Z1{S$w-{BEviWuONcO}MP zEOOXkRDx28X=0$egk)tN)v=Cx$TK*v&s4=4#-{g=RR!u!ZiojgNeV(BUWf!ieA_5A z*ilZGJ~S5f@}#}E93xYbF2(cu_z(P29Q+dD{?Z8iQtrBi%YBD%!4{Vax&9W~ca9G) zn|x1{;1Tt>EXc?a`V6ZiTH5D-(oe0$U6iiiikXJbePn;5%Ixj?$lz^Tx$nyb?*r$< zL0fHu1v^4_OlovJDkvEOFUCG}tSqri#UV6(wYuFVYnn>CPqo>6HuVCdGj(SFH!mz@ zYIZkg+5DGAU-^N{S6C79IDi@eGIK5UA0lC9=6eUjH-7%y6D~a z8rZ|vz%G<6f9NuRtq`|a)3i|!$aoNb^G80F6MDRrk{(eX6z4sVpdCN4^M{tt2Q)<( z8Od&Y(vX6z93}u2ABr!ClrM8PAvjcPn&g_8S+?i`Ozsej?dX%!P|#clh2H=r$OVdMjS!hr3XjdtK@S+|*|zvNpIdppa<;kzmmKb8=rQ^r~oKKxy9?`8V;^)+`0 z=Fxsax~d{!2j=II8A9}A;AsyiWp|hxF(nbn!0LxX099=8Zn%W4>11C6WxDNRSf~}b zHSO$DFp$$we7#Dq0bxK85(b8ou>q)6?Y=`~N}rbCqwhx^z+FETwAgR6krO=KE~Bre zK(_9wYE&^RUFwm6!t}*v2J}AF6`8po-qG?Y-_88B2a~k#drI{0`w#SQOG<`OLK2GF z6l8fr=uV`fsKg-@Mpz~lF>(j|2`KQ0hkIllxvLw zm{$5Gqi*O8H8DPXIVo+%F#gHrI9(=-OxkAEGgR+KYrYnCwsW^qy<@*<1)joQ8NPS? zJI{rC0UgBY`~oD*Z^1)t)gO;0S)sd-jI3-VceigL>X@FB1VbTKY^16tS`SPzadkT+4=gpCA-1B5w61YZh;QWoUb)T7^Dai zkrQkQ4M$!8Je6fdi)HJ0x*#6%Ee@V&cjFg{yP5|CD}=W)gM{@vm=0F0?#nL_nW{%$ zVAI6XgAXQu9i=LAP~(^oj{GT$mY5U`r-o+$Tx{gv&fPLZf%LMHoI|cV3(}+TWsM9u zB2m%9wo}DY&q!xbW&Jf*5*uQ($s&k=dAR*X4_eGP*5t zg~qBUs$L1-(@LD%H^EB8ZN2Do?GqJZlhVfmwxdLzyL*IAwyN-6`KtPG%O%462Xu8W zo5#g`kBlxB6B0s_kQC*(3>4i}lzd3jUx-A?$So<2mUn=O0selqHi z_&gCnjqzuxWuT@gJI7rnfK*joQ^iJiGA*|XwFn6bbaV&^5E?XKCmIoyNh53nJuB5f zy7|##`k^Q1^iOQ|4$hLU!>j>{_mEpc4f@uA;tNfTE=*7>*86J#H{zo1U9h3LvZ)ctoP`m7VUPeIr7V&UWGLjk_V5XW0 zBrnZ%_X;Fc*VI;*qRLFOtwOB;XJ;qC*{BEe6+*}ZE9z;YnJP=-zYoF~MAoLg@N)clbMKX4&N24l~;BZB(r0S8{4naD` z(g+#<-lz^a_eiOl7&FBnY}-te!w^FFYOap=T!+=DyVm z)VON=;H_fZx5iNzm~26)$3S@D8;tGZIb1foC;B;K{^Z1i%lTMAWLM_Y;m=`Ft*%$+ zT)YOa*28wYl@7V9-nh$iKy>>2q7D7K-IO~zXrzn0q96fQ z`KHjh-G316$mtSYIL{-Vw(q}!3`IqdyrdMC#f}n~&rpDnoZyH@l(aH3;)!S|YZqg? zlDk2+lC(WGQiCO{JhClEe50;>0}<4fm~jBnyu-t*`LNBU+Fc@DEp8COJX2EUkMf0s z4lo0Xln~Z(lv(Jwtz+0$*u>9uN@n3Q_Cca^ zkLY(ui_irK)%q5?JN4mgM@b?oGGeADCGAArrpPb5qCwM^T#>ylyUu~D_xdt}5(hK$ zFXpgEe}h7w6JZ^{hyYP`JAl812uMi*24aBFu(sr~HihxQZ4KJ(`^Ro?(t{V6j1;F_ z!z`|w%!kddnD{$Bg#i&@HW7{~bgPiF89ax92clT>bz(X0-56}Ml;1Zy6!MQeeI_%| z$KwVo{;5T1yF|}?hfmqDGfq2;^{39cANkJO&$8f{US`=TrJcN{DKHw9@JVk`zUX*`=zEB2^r5tPJccn&_1X(%$K6;Ncn8?204;X-xP|nocnRF|Bb=QNT;5 zR!M@xYeY+dUrLIIiq5RuUZOtwP+Wt)y6XLC6D=MbPvn90+ViAsdCs&?Qop=bGb)b4e! z&Aw-)KfLCp+&y10TD9_#$SqW7iO8h(DDYp-UecgRYu#PA{GTt=?+*3v68e63sNXZx?-}Yn))K!v)b9@UyF>l% zP=B-J`@J^$y*B!Nv+;fc1dG#9TX!hVo^WIL{^!KUj4nTsB&wabAn$#?`Rg(Tv(x_B z9UrqAFg%p}Kim49vB>UxI9HZ?MQ}pvw3$P1b&OD=KRiBv(>bL1(ZD>dZ|vfoM@c9# zrR;Wbc?!5m?)rLY3U*iGgou%Tx%phO*w;ITJA1Yg&LvgcE)asc2hHgv~^@8 z1i*ZK&8cAb?mTgP93~En*c;)+G>=b+5(UtpVByzXOZUVd zZ`-sjd`s!$bDC}l;&`5&U$r=sJ$P_U!bTCpakO8A28H!~Fl~t;R z*7e-JM2m!IJG~A;dit^q61@337+~B7G+U;p4-m!8L0jVV89d2auxd#P|o_YTTH-++6ApjVs>AF{Ab z?SRSj5e>z!j%f@BUzWEUq28O@8#5#J(^qB*y2=^c-chfij2hF51F8U^z5G4U(w=N;QafcHMSP%2GX?9Lu8)nwSbGoA$-wk=n=!zEdVJ zu}72`%3(Jx{J+gQ#sT+9)@Z>e)81yueIWknggVUN2vv>@#*cgRJ)|$ zd77|gg_6XY0(P(v1NTH^N=`C4y;mCMiohx^8}wckC<91?8{<=)l(b?N==Ghi;#K$G zgBS6hyrU!PJVFgJSYsY3<`eNvIK1D$-d-h53du}R$TiG2E-D5p)!G<3s;C1!C`ea5 zN=Z-hjBXVWBf=c5{CWGs)YQTx#xTd)Ep%y6OyBVnj6K6+u!6VLpqJ~Gb`2W8WS{sw zDbuSDKkOrIl8Mt3ljfd&UtX03cgd?5;w@cGQ~NWOzHQ_=%M$+b=AVl&0ev(+EC$k; zv6mMfrdLoU>&jH*>F3QQyKoWLi}Bd2S+6`-dGd4IgcqXxhF`+Ik$A$|x=6R)#NyLr<{tFzFp`8qMd)(2MAgj0fKbqMf51C zn4V3QRB^DbC3U=9^#jJCaa}sv(zZu zM}mqQSK>*#cZ1%!I~Q8V-eGBRqX0Z#(xM~)pIjw#O#hnccx z!9nm0e%4Z}HfPtvEB9-!6HsMKWeo3=hs^uWYZsros2Zebg@>p^-`v~x%JiNJOX0tY zULO_VIhpM()0>-^R#o3ZIO7`P5U|-3Ru&>QaxT-}%5(|@PO<57HNxdMKJ_A*fi`Gc zg`op2Oy9z>bL;WL@XV^4?)LBq?-f^1)K7X!16 zPabf2BI{jUzFV((9vX`hld~I|ih0ntB&75s8_8VgU`;gomevF;#|mLHJ1RciI!7uk z#ANw(VW*Vn?iTXo`|5{(*m^t*o|*sC@h+(sV*$co5G6J+BQ`i57aG1dIW_%Y_QAY8 zSYl!^9%1__2WXq`fYE{?AGE>Ui51{%*5;0M){yLb`{DGs=z@r58Oq`Ily#j-JKPe)Nb+zvGy0f zsI9ovm&kP1SqNKNbl26U2tMOMjJ%|xtmXUzVuE;(!|`y676VHZ$UKCo+XNZdg%-mo zgP3s$t;(_Wv@>c%n#)K!9i3V=J-rU$S_4Dqab#@VR->pm;^fRIJ}@r6(9vpufZ|W$ z`L)8W;azv{+&bE%tqY9yL7$PP^+)P1@CQtTz3LiD&=*=*J-sh!3Z^%AZXCIS^K3jg z+S~@>5QNz-xMcg%V(G;t(i147#BY>xO65NjRVUV@kxGP_W%$0Z6I`h4>6cZL4k(ca=l_}Biwz1`_%uh$M7@`HR>dww> zg>XqlxlX)<*8akr`Mq*__;c`G#pR2&&0KD_BH7sX`4T5G&uJ=kIgS*rcSa zJBb9V9zEi&z7=ku$`z$5^Gd^*1<^)$vRJAZijL`p^-L(E;vySMEwGu!%ymE`{-2@| z#HBHl>=V*@ZbDRzhFPlJqxPw=SVYrj5=@+0Q#>9$%%zcrWQ2heHNYYjln>fsIfr*~ zNDw=*nydSIl0Usz*xU>T+SL=20zK^^@Xh&QV$eShU(RK8NMXX+-W<>)E1%=YGrcgkLmsO~mP&_CUYnM4PBZx+{lQyfd+jq+ zu3w*7_nA+Izdt4hd`6KER6Th=@Y!Y;cDpb!6+=;9`D^7zxzFmx+4#P!6}%9lleZ=3 zMzH%${D_!@)j=Lug+jwjbohySeJgejnj(*;;X7q=uGBMpKNE&gr$juOywk?k*b`i8 z&56oK3QdX)RWh?G&>d)djSDGSimh3Lv=!7U`j5f8Ov?}BJFUoSCnj7q6lnyDl-=Y; z6%L_Nnv1qvDy~av1+p*0%EQ+b@0ChEIlFtsWW#}e!D;rlaY6tm!9d1>#?enz%lY!> zJ^w6hW{EUw=A62!3@9B2BZ(W7vLo}50+S*`m5j`CK&h?Tg#<~(G&WVY=GQ0&j{-_% z3HS~`>G-&-MyaDk@@{eiml0c$rn8gQ*^>#`dtrgaVW%~hOQka3&FA!Q%ZX>^$tFve}fN4qPK)N5~bj{j7ot-R~7HFB_A*DzVwmpKec%Po>Olsas6nSLugJttn}4$sa~+<%k%-`HqIR$V4B)fCDaB|eTfW$@s8Ow z+Nqu|x7iay!Pqd_^=lpV2+QX!LcP`{^bS0m*R%Y(gl>c?kNJH%^I+#$rRB_&k`c%w zK?Y?d0(IU{z9a9H?7oI&68FMc7Gj3sSOxjudMCmaQ{KL4(aMiBdIt{ z2cCpYXVNEWAZ( z=$kz1ExYyG#hchQARKn#Rg|E?7G(y9U27&truPrkaxUP^1z3oUaz3mDD`;MyQYe^` z*{1BQam3sGE^nQ<Co-P%ALqaRo7%b&)gggzDB|M^3I@8$obrc zO?jcW@qQ;NQW;l+)TM_THMOMMwu75E4xB@q@*e3oDUh~KfnL%+Jo2E!vR51zTqGOxO)QT@pwha zbO)^i=lg_Ff*()w&rj+M%&NbnAo^1mdI11`;fzEV(H@7Kg& zusxhNz4~{&|6c2B3?@anMuy`WnWV?I>zxd&NT|+GL!-o!pHjYWwGg98K#F$Cj(ej8 zSS7si057mg)MmoCJL<%Qk`$FY@5yJ(+1zlf00(ZzK)eL3(Dh-n3Bh{W&83a44EItM z0nDC(9TTs((#c2C=Z=v)YG0{nfBUgL#A={a`41*~KHRV>e$Ln?0fcCd7w9L7S_n~2 zJ7;^TV`1HXk>^;e(A3(+pbB9^$4M(4Xv>y-Bd4FW^=*QW-v0?2yxyDWtlK=-FT(|g z;|}%mgUMb2ZcEGv4D~*fZ3z02KKxmqqQnf%@T~6Gm#JU=49$npGGQM0BQ2H#pLJ%R zt5WeIr9#-fWTooVqbkR5C-OFS@(5?Rl?P0RbM8)Lc6?oE72fvg5A>G}r^A}dH1^&J zS$S~k^7m(4{qzZVUe1PI3E>6(_`x6~o%LCq*Zx0Dc^~*LqFP|ae68vy847Ikj6&0h zJp1C9I+T?Qr`a(zV=eO2SiE|UFi%-o>J}Tmlr2@|a9w1Se2)B~@O?OZNevCg^0!!- zjhJpUj0hW`wgFJp6xp(8XB&cs%C_9>{^7A#*Usz%psMn@pnl|GLs^iG zO5=483bogL_-R2j+Qk8QXiBU_sY{A-EilfmE?CVb zAOeB6Z0YP7$@c;v?FUScO*5^WV^6(vE#HG-+IQ_}^4rRD5K0#eyR#MV8R_a95(ZFa zb5=A2DsyDT0+gwOF&0gjRFyi%CZ3)ixCsIuXsVYk^5ouHhJGSJy#+5twFY&k(cK85m}tX|$c)xK-od z!1(X7mcP--|91@Y|Av$Q?*z>EV3_|a*{ABaIXTxbLH5~*n78LZxJ+M|;?? z;F6M#fKUmt-QF0TOBYbJDGihpsnZD)MD zm5cv!(Tn=&Ln8@C*$C%Y?z1jX2K9eDsbA!LXi4pldRaa4_xuwQtnJM%b>K0_=XYlE z?N{_QzXxf^o?w{8C&qV+d?g<{aHO1ox+bTjIZ+ThvlNT`f}$9mAS+WjI62SBL`1ZX zw9Khct&@x2k?se6o>b;}uhq$FS1J`jBQ3M6bMqXFvTW=`kg`O56Bl(6(S1cZ zw#{)Z7~YnY2FAW#d%RI&vpy9X2UT33GJ`D2#meUeN?w2!3$O|Ttf>{t%h|_tA|n>a zmRb8<=Y=qgh@0j@F2*F@oBRECw|1R~s-9`G#%t9RzaIPXFveZIv|G zed6fq)v%#**Dw!@Yhm$q>h_&`Vt;&?0R9ndcee;$NT=GPeM3mN@C0?Xsi literal 26130 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 diff --git a/smiley_pack/icons/fight/bfg.gif b/smiley_pack/icons/fight/bfg.gif index c2ba9d067b0a7ae81e3ea9e6e8a198a5d7ae7457..8532df8e8a12816074df844fe72193aed642ed30 100644 GIT binary patch literal 1033 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 diff --git a/smiley_pack/icons/fight/bowman.gif b/smiley_pack/icons/fight/bowman.gif index 2f1f8f055456e5448bc6184b263cb96f434728db..cbcd5278a789980bc6cbd3b1425055f17175cd7e 100644 GIT binary patch delta 855 zcmdnVwS|+%-P6s&GBJQboZ%DuL>?n)b_N{=AOHz4FdwSeb?2YKDNp_t7O(dnm~6EObNT~bV}3KN%UFtSfP?@+J!lZDfW0jSd$s8bfKa}G%7gOfWQmQ=9LPX95# zw3Nq#rAcB!Q~}q!w6zi(hgv3_S2q*cw!qiDnuo)_wcw|rkVtErt3xZR^l?VzRSY4^ zLj}I=d|S8j-uoK|eVbQjtax(R;H#I}g7S7zG0qO>Vf{Z_78-Om>pBRXZ7-4@YV+u1o8KrZ$Mx!4rw zVrj68rvhDk@4?ARhb2E)X2*kE%!TA)VTg-aZ#c~EdnO^k)*4oD(|}LpWGm3c^^B6o z+(ZKAhB-7Z(eA{iBd^!aTG;&Dc}mt|?$#Z3_7CR0El=XBOH0qwp$~aIe<+S^Waxp5$e%3Z5)Yk_+za;5zu~kf7(KmJ8`y#n%}sh?IED^|!DQ zVQ+6z@{~30=GIhJesO7n^BSk!3>7=$f+Vc&&D;H~c*X&R39jJNV15eIJd(=bTG<~0XG*wQJBhg@5dcv|x-#OPg zENED5#vFLUVP@{~7rcC|t_3eOg~UAFTpgA&^4q$FFs|@hE&oQ4>toRFxHrMk$3pK5 z9-2|Z@$f=Hsq!t?`uiHp#auNS=@kV<)iDivaTN@aIi-Dy9fA{EVrtpuuuYrZ99=he b8h6*s++GcvuIQcyX@1*vv!*Hmla@6AkiJB! delta 814 zcmdnOxs!{>-P6s&GBJQboM92eL>?n)1_m7lAOHz4FdydFb?2YKDbIr|Ene?EH`$+A zePRO#6XSx3T~bU(6(=s!U}Tth-a&~$@h1zX5l|PB)`RF;RqAv2xQ=KDp3Hf~*0S8` zRA^*kgzLhGf-|ZwzUQ<~=n-u%{<$Y;_MyBTcVwpDcCDxstEo+|sh7@gv22izn#K7wt}Jo;!EtD&c91*O~UO*d!UryJRWb0k+od zyCiaYWY@QCJi2)iLw=R0iN)Pf9RW&{ULN7) zXl7D46&f0Uz0v8mCC5427vD>AC!9^^xAKiGzLm!<#n*q^xq`3Aw6<8UUXqnLiC?#+ zwXUPHt9$CSv>KqJMY~u8W)#jcog>-EySRAvQsM3e)qShl*9b-Q&S2Zg)~dQibU8y* z&93Gp`y>*%^H;SUmrhLK(w?>VoQCdon0vWU-FpPxz54Zx3l_|%3cY^4_+V-U%Zqs? zHB#EA=63s4*7nFgyCvCWN_ka{nl+F&8rr$9cEkGwohtBN-O)3V|z~s z_nvOua#1F7-qoTD+Sj)S@aaCn;ohSd?ggf&$qmfXjE^SIVGdwqpZu0t3Y?-?PoVmA z4>p~^l$dr@vG3mT*GhSnVzqUdwGE0a6_vWCMeTZ>QcYZ`)pZjlPL?j`oo?FNUOz{& zdw$j8!nR3Eg{MZZY}IWuT_-tp`V6)`Y+F^gi_UAFxp)7;Wj(2zR&6`6WBKVbtIx~$ NU#i-2fD4#ZtO0FEK@I=_ diff --git a/smiley_pack/icons/fight/chainsaw.gif b/smiley_pack/icons/fight/chainsaw.gif index 71f757c3abcf08cae02f3bf5be09b9c7156e97a4..c328a1b0aa5380be2cdd1988bbd4b2a83beaa1b3 100644 GIT binary patch literal 11524 zcmeHtXH-+$*7izIsG%3z20{cy3{}p@$xdNKs5e@1b`Ly<SwPyoWb>&%JlN?|8@e{rG-oxqzdu~W$ z%u|Qr%Uw60*q^PPbtrvtY;k*g<5^%k|Kjln=Lhu|a`6iP-W4ZOoeb}3^*iAQLqJ%I zl}U?l|H0Y4Z&3Db1ap^H_urJxxaDjrRQ>F;zM5Y@&KVze3EVBKP1;Q{l@3&k)z)2h zZof30cqf$Xng|<63lyWCP#fM^tV4C_ttNHMz142M61nD1&+AF{eMVWZOTjop?^>Yb zZBLSMz#(@t)}_sEpB}F!BouY(sK>u)itXMq*O{zrBkgr=pniDxtN#gLL{Pv-zBWuf6m(n@bi^HzQD$Xw5ywM=%d z;Gl|YN;)e`ia9i$p-QiCFd0n%51Cf^hEw=}oK6iB-~D=1kXsStj|eC*yzZryV=~qL zAWjB(&%4M>HW_s3N&hdOzgu8ahOPc>%VQVz|<9?B(tQSU$5Dkbd|Y-vkTxl-vD zXZ__xlX6ts(?^j}6|J@HcDX z&l#%-5J1lnKmY~g0YFMf6?R@_h&XjcNZMmd^jLwtU$4SyCo% z?0Nrb@1M~}{IHNfPZnqZ8$kLIePH(A(MLW<0bL=EKI#Isz8jqhl7s4i4*JG7)Q&x& z%y5m*HV1U?aY@xeVTY>LAGz@=!Dg2y@MJk9rp95j*cjhX&!p_+&|JS1wpC(!hLwlY zA-{@vOpW!S{Ekw)ri_+m6HFv~S9njijY~%5;a%;PX$=Q>M}9wSGSKc@aK@`|EaFN{ zfPb4Krey47jG%*y#I!xVTg%Vg7cuuZ*_R%Gcz(g^MQZ-F_M*?l{ZDtfCZag*t`N4JNxbfu-8=-yG zKmA%f7f?Uuf(l3m8v(#AvrzwSMZqiK6$;DBD=MqX6u4wU1G%)iskx;^K}o5BpxC2G zXyqU4&#CY2ZBROX=4@;CNdo!wxr-w?wH=L}NARQ9u5;QO`goJ5#v3zdZ=UZtn#*mN zxc97L@WOBweqNFM{B8c?`Kx!+>mK$ky!)1>@QR@H5pQ#RZt={B+Pq`;cwTv75x#C9skV=jN{J zb2JBa;qm7e?9DNjOG&Z|e3z+I%&i#*(zYPev!>G?Ze2M?AFA&0zEVb~md>zNsvZxp zJCS%{**yqzM>qVWtNoGQ-El$|OAd)X6^Y%_ckg(@JFFF?`%-@pIigx61z2pkfNbgf z6xZq7rxVpml^mt;`%r!$efOcH{HoPyHi#U02Y7bTTJw!g6fPe z$IP|g_IE&MV~;6bl?nKQVS#W`(;a-lYi&Uw(w*FxZXpz0+L$$~Krm8>XI#sgq|e>U zEDY+mMW=3M2oNed@(990>lT5G+-vY8-Nezv5>NvfiV0dxnzu={QoEk&tX(~6wM@5| zSPP?70Q<5GGH`RYcL17_nQNLrfKl3e7oJsFs6U@jmz97y0K4bTU3Ha_Y9S=~mTwC} z%o+C%Dzwed#e_Vxo96}J{Pe(cRe6�dQ##b8%miK%EN70Z%kBf`E(`MHHfX>1%a> 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 T#>EH4iqR(o#s08`J}~<)a8>Za literal 20364 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 oK zx-a|G8Oah?>7^n4C*8CG#WHG-mmUOMDg}@!MEe9h3SP9|vn><0PFD?idJD)=4l=qSMen4U`BEh#na0gqQ| zpdX{U1PrCjdZi-ello=t$gusKZrj>Mxu+ihI-(jKvql0|CmyYphW$|L6d?8Z$F#*F z1Nu4xT{kiTw-hyak&i0(yC4-s&6f`Wf#rSy*o-z!#z!i@6LqP71q_H&DeU+ z+(8i|hoi+^8!?*+fD{A5!|%bzC2XFP(8m9$vaZccirb#Wds65ATbR8 zEM05_huo1X;W+(;FVauwW7raNKi3g-ICbUB9^DL(YlH6@2NcVIi4-)+>&->lOJejx zO1ebbHlnaM^Y^$LbxTZaM00BnYRomV3Qwz#}JghwZ(DQ3E8FOj9Th;w9CH@o5yz>pdYG}75D>cVGH`~+B=6vzi z?Mf4IaeOUWvrtU(OKsAV=1!bS$L2)L(HhOdtH$PBxMYHsG2WH4nidw*=0nj-Gt^UXvT}+RR{&a{ zXs|nm-7*#89mpP5fwqrYi;}}f$8#lV6=n00zIFX>RENvs3yj-%lTta~`^_Z<`hxX@ zJ4$VsF>C+9W2Lx5Zn5t&U&I!)I>i{;XIv;RITyEFaLa-?QO_(q%eD;nNHE^*&LdeZ>mngz%%c=Necrc?Q0d`ES+zB>Wx})sTQfoP z69?&1#{F~EQuSLF%TCRLDK#;#_Cjj(H!j=Vy+3V&=}TaZ+P>G8mdzf84LhVzx&r#^ zI$@F6fO4}G!8leJ($k{0OVV#vRBrE~mxVeJX5*`m5SLaz_Nkc%1$5!&bAIdG(AxQf zr6=a|dD!TGnDA}>Z=MSEFSz`!h3{JUu7&UV@LeCi>%(_h$}UU!pRtr5Sq8?Y`k=9% z{y7U{3mZO!ZUBiGL~;fF0ze->R}VK2cG@|V4`Jd*_67Ake0@E9-T4qkem*2V#DCLv z4h6NnUC1P#Q1GmWuj?hh0I$IPdM9Q2c9?5HrKaeZ$BTc z9T-URarR~x?~+Fl8T?m|()x$qujK-beO*-f5ITM#;1MjAogk5d{Ct(c-_P+OOtFTb znl>BM)jp@Kr_EOTUzYIaWec)LAjmGQ56L%(T@-I`(AO^rBvL3OVgTsj3%YrDlh_LX z^|k(^tVA$? z1JHk-voHNagX33#^H+fDR{-`a!2K%#{}tf*6+rw7@cs(y`4!;%72y9B5cm~9{tBRe S1q6Qugnk8t|2qIU{$Bthb+YLI diff --git a/smiley_pack/icons/fight/crossbow.gif b/smiley_pack/icons/fight/crossbow.gif index 20874f3c773d98da667993fb8a41fa141ccb05d8..38b184fe416c7a99900c40b74864a2c6218cad03 100644 GIT binary patch delta 841 zcmV-P1GfD82H6HTM@dFFIbkgTCIIsX00000oG}2##>W4gG5`Mn|Ns90ga80z005i- zV=(|@V*vkSG5=#@|D0oyHy?io04x9i001ojCIA2f^LV=4{t&=Ps{_*Ny)fqBZr7Iu zQ<=v!S=`C0k2skMdVR-39(Vz>_d;1mW`E1w+$ z!O$g=B5))D*a0-c(ZK-Oza*8@+2yJp<=Uv$m+9%~?q`=@GwMh0Q0{#Bq;h0GB zC*TDeRQ==~oUyQ>!-szd5&!@p`2-0b00sao1poj5CIBD+00imK$Vma9I9JVquou^b zq5%Rypjah#YG4wa)=G+?bX)Rl4TDgP)zRf9s00zfVC+!D%`pev4Hh@!%Y+a{O<5B# zYasv#Xv+a{VC_~Jz`|Kcqwi*RmmD@Nf=Fg(cx3j&^BXFns_GSdC{O zf`euwlT?FcX`FpvUnX~&c&n+UNK}rhth1*ht(=dztF>{NMrj2W!L5WXn2o>%%A}~N z#-X|=&d8n5kC239X~xZ=rbjN*C868g%q_UCapL3b=;hB_@$lUBzx4Lzr0V(W#r^aC z0cQWkeQT4V1`5X)KzS0gMD9ha58^wd1PZHWfn6`P(XG$MU}whwS0g%)p}O1KrTJZ}*l%XNCb!(5) z_xVm!GD;6DD;AleY&I(@$igN&Q`TNBdSZf%!(y{_Gvw!UsqIiT-Rk7DLt)o$x$u~J zg98kQN;l+g6W??}E7y3rD%Z&yy0f$@bl4uS*_^t0lHuWTow>IkzTKqu_R)rW^FMz4 z@GXCSy7l+>&p&0E6qhepaIpC0iVUNQ2W+wttY2;K7;ap2w3|-}5*Tu*f$g;Ss>IP&zsEm&TLk0RuIZhWcWqm@)5U{3&0O!Daj;+#>YV(F&xL4Ke2B^uiR0YeY}@Wtv<77Qrn^ZDl4zg?bvj<{jA4)5&-omkqp6qA^8La001ZeEC2ui0I2{H000L6K$LJu zEE@2gZbV-U3<-#ecW-5Tj%G`cMF10Ybak3`Mqd!08XAp9UjzgRr=x~_et#bU0vsHF zVr^-Oh`5SsTC@NLzreu;v_oG4$H%IM0LaP2T5$*w($WzQbiJPt6dK&2&swJ9rl`*V zeII{<0s*qKg}jTm@&F;F9Zt^AlSqZA1H3#LW!z$YMi)o zhSCLsH7MNxSm3zSvq!R|NqmpK0PBT+jKDFM$XFH}_^+6pI+-G5$my_~ME?zff>uIh zkpP2K89%Z^_aP6wktU<60x+Vg)vEc174z3JnW2I(T^8J836rLj#Xd#U&;Ue(0d4VF zEFf+VfI))(lt>x!3IG#;0|QoMVq`B807xJXvr@>H5zIyyY(}6FRjd8F8iaO#>C%@F zphJfsyX|KH5U5XskXy7eWU6HK{`s=tvF$>C{}vXUKzBWSBS-`nj@fDC%adVx<%M;G zz?lNcPV-M227u274UPkVj#~{tzyLrBP$3xkxu?J_2@IwNVEo+Y zB!>DCVAV@q^%n+B%AsV59mN%?#dZ>T2c94eG;m{%b+zYMkUpwc;R3aP!E-=ve;s*b zl7*S`+Jz_@vfnW$T+j=803P!|FBxR;AdH5T7D@vL9Pk#TW)`yn1sI@NS0xr)&?b-+ z!r7N!ydfeOIDFnGfdnj3c0!=9%0!c)4|u>&qKPtE33rf6DkeW0U?4088Vrl71<0ls zWSsCgb|(XXRUmC&sgAH;Dyy9Ydcg&-Zfnj19e@iib+(cMKnJ)g8bi_--jr$HGQkSF zfilY=djYca;s!tk5kxTUsJvXeYQDU@y6p)BfAK)A;S%iFyOB7&jGA~*+-xxrD?v%b K0G~&15CA&^g>=;b delta 980 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 L0094YzU%%EP?Ku$ literal 16839 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 delta 1311 zcmey%H%)-s-P6s&GSQPkf?@MSZUyH5|Nl?ayU5J|1Rya6mMIfcH0zy(7f4)rTgC1> zMTmoeqd|w!yx1O5Ic>IP7RDI~VtY9vZYZdUzj(ZA*4uA&@u?Dx!c0so?d|z> zeuW7^5*^VFu?3z=R+Bi`X0vtmPE(lSGiTlc#g4+frOVWOt>>>9yzY}SkQ9>Ll99GZD!+DfL zQk-W_x<8-0Du{_G-{0Q1v`sr(w5O&nmu1rA&cv?n;F+S6S^SKrCV47Yv6#oRtzhdc zU$oeAsqf0wYZaylb!^_E=2x;ybN-rrhYlY(Dun754rqYPM+AruyU!P+vn)&uObOlx z&d%|_v@l?9&*@2<(+oTW8aUGgdn9^!Q%>3D>pi$A5}sF3l#r;DCE8h4BLNJWi4%+4 z{7RF8X39>Ab%-wkhRs|KwqA^E~DUYdJlh?B))l1|j%9XN*hTAzX zGc&L>PYvLl**;4_BWS*MZ(o=fBO@nET+6KZia8uYeG&7vIE(bNF)^)d&uU%2FK^+z zE~n(>ET>K%oO38o`dF02X_mHtvvV(7#j$Yh_c*xm_MO;!t+tPzSe+3%@apyLwsjvr z-gx}==da&?{))jOiw`9wUj#+gWamvqE5g`e33>gKfC=B$Ty2Vyg$K`xHls7U!leII zLPMvOD@-*57*`G1VYw_*r*$NDcBe`A)lO)bnAIyb4H#)Nl2WTe`ckqNE}Y*d14`Qq zJ2-?Er}oa@RA0M3RB8LpUG;l}Di0k#KWT|p{dA%Bv*!-aUwkFluSDd)vF>2Wm3u?F z<~-A`I{sEW<;_P8nA=gDemdZ!=jy!{ug~uOpP8(P`ZeF~j8a?T;&fyEsU%!!j`%Ve$Lsqn6<{~h?oZ@`@@zduoQGyKC0N#=LKL7v# diff --git a/smiley_pack/icons/fight/machinegun.gif b/smiley_pack/icons/fight/machinegun.gif index 1cff5cc58b4bbaa09250dd2069585c4626d631ed..79c02ccf4186d67de5c0951e9ecd071ac1ae30f2 100644 GIT binary patch delta 1541 zcmY+EX;4#F6vuDgdr=aI1W-U06$HT=5iB?Xu?Do501;)86r=_dAz=xTAVvtyOQ4WI zK#1&wod_5<1uEhea06Lfpe@!7t#)+Wu%*^k#x$|*hn_k2-24A>?tgyw&gmeWHi_Lq z3m|*P@_-GPUkvo2(fv4khKzVzjx0Lsl{3QLewErQ(f+4dP@zg`n<4 zB7!|!17^~#_5H-$g%Hyc`oheB?sG5NPR=QZ} zn4!ohFv@H_CZ|?bMS!MUfG3=d2tVInT0}F6%@TI^lva&Vkrb#tE_|>#QcPWvFw{;h zV0Mj?24FaGXH)n&f+jFVaZU4pIWk)cJ!zW&w+0q~X-DQT#psgkfqDGi`F{DOHI0KC zL`q}<`o-D<*=gxJI~89ywEdm=694bVj01ouDr1>I-KvySxLO@iO{XZ<9*XJN{?h8L zTD|4r7e!Ph24IaX+``2TyB-ZwmolmweD6>dH&wPuhK%npjI>ZaXIiGgv@$@rFuovT zZ@WdZ&d;?#r@oxltOJ}GVkEri0xRsvXFZlFg{?u)EH?%BV(hOfYAJQ&s}bPvCxXKR zBS3P{^L7Vj03Zj6qcqKVYqozYN5#3xAA^*xlgOr*$_Gu z9iEg$p;9CAytdME6%-}A#N6y(8>WC{thW*H$%byuV1xXEp#8{n4b+Mc3Rx%epPsoe z7twT(Fcm%bY~l4E+WJ?^Nch6R@OU}w4Bu=^3oQF90PI+Oi|=0H&GBQ*cP}3oM zd~i-?&T#@>$y`ysRgBd4_csR}*$X<0gYbl*z0tVk6$vNgahWhA;z?4S)YJCTNzGoI zw(D#0X3RuFmS|!uF@BPlO1oeW!x_Py(Zd9~Wktk?4+0Co-lYf5FFR}cvdGo*@tgYP z681=^nb33yT4YRgyT@qRjYZ!Y9jB*ycED0210J#dne==hJ)fBW@tN>`ALCloVq`~Y z@9N0=jz3=4p7ii;WcSdN?!qd*>*eKMm)X1TtbU%hqs58R8P&~5AJM_A0Ky*d=Ol6wfjpHX;7QWyrYv!3**9ftj#b-k)l+I{ zY-(<402rUPjFtEhIV$fU;44% z+{5N8EBeLqA5JoHBYpdGZph@h-2B9ZLcwAB)s-+T4(Z)@ov?X#?J1+BvUmvf^hzU= ztu-qgJ`WN*Zmddu6g`}tJD2=h9ut#|H8pe2XFIkJ`xPEjBuBr)_{lzj!r}q(pYg#p zaKh?VITf+Fb(|AjNn;R?bR%sGq{ZA7y*Yg*`}GdeM=7~E)jP-%CboG7)<$W@Nw2P7 zNpGa9tlPXK@Uy;*i9KNl3_nWDm%R~En2{^g#t@7ks8ovNNug{M%SmwqI9w_Y$O<5| z63Gx{h1MXF=IoYgs35nhh)F!sBP>5D%yh1I8CV~xhj&psG<@k|9XV4;#vfM0Ro4ml z-k$C?gHAuL+k;%be}DhTXd1ZHryobp(*!SmK4TJmE>CqroLxCtRZw%(k=#2~5umnl z<}UH!rt`@?^KJ#cq0O7HQS1<6gXE~T($;6CMett4Ic ze12R-2d3BA^TWMkW477so%g0sJ{(b+1V5%|QNK|v%?wc6e+>%R(8as*(n|AiP#xOp QM$z^;Ee>;W^#@?{-`E0m)Bpeg literal 1708 zcmZ9Mc~H}58pmHk4gz7vg83!ExEraWNQ9(=9YE|NH4q33SVBoShDcDZ7y^k9u57po zB!V&Ef)PUG4n!6Yw2b!-)shExPB9R%r?OccG$p(kw0Dt35vBX`3*rV}x#&%sQ*jV{np#qcRS#&g$l5{i?2t#PFr_72D$ zR$&MrzQ&`HGIv?7WZ1^ZO+1=tmc}jMBo}fr_5vxUT#3P+{HuIF*cDK7nu!Wd6$qg^ z9ICj0tai*+W>+9`S}!P=f2$1#`VxS`4TiIa`!weQFeme*SGzT}^GsqY)Nq^mmtl$}EsW%9Olwdu32xkb4QBE5k@n%dKXua(=xO-y@Sa#-2AgykeJ+e!Pe%+_I z>C`yjma9f?A)XWI7Qr~2>0Uzp`0=-PfAGCOZ{r7Yb0YEL=GHGtE*>CcX_r%#&Szt~ zkAF+pY;HdK_@i@7M~krnj5WoBV*(S*ot!$I_bOAlq}{3Z_5l|8h$g1fO4B4*R{Ke} z7PiWYeD6}0d4~9)xj}DP?=E^5hmRGf3i%VpC zj9#v^l{$vH(q|R*H>PU zcnNfXL?$Cajtn9l3=(HZh%!x{SeB*C=aN$!bP8R4)A1lYw5!9=*=6hi_^8i{522zp z6`Id+D80zFC4_kO)~%i>g#ZleqENWIf)u24YxY2GMg;*<%FY+K_pKjNKN=Jumqvt@ zEc{xwO1bthC-af4fV+5zK-ih~b)TO@p{rAHHTQ;S$qGnBf^m>`ag?xSOzeH~L*s6R zDQbnAuE9ssr$c5bI9(Xy@ut5E8?p8+QU$n$FyCYeq^6cBf!BsX%H%_5B zJRj=+%;hU28Y53QoI-*KL}IBzK|H5`%1cSfX|6D42@+JQq0$B-$aMnfLV&=a(TOMY z#Im09-bP5R(pB@w*<)Fk$Fo}Ywsp2)00xU0jXD8SzyJ3KE35aL<8o^~P^bF{Iuj0c zb8JaAYiKV(v_u zAAE@QX1ZGU#~qKE)!AR8^}FMk)&H5skI6F;9IW*ZxNitg|`8L|27#ldMF8T)Sa;X%R8j7=k*g-3uR{{^giys!WO diff --git a/smiley_pack/icons/fight/marine.gif b/smiley_pack/icons/fight/marine.gif index 88fd2e09d301fa72e0a5edcc6bc391d79fe2ebbf..5f62f33e97c896fea684c016af694b3a0320b949 100644 GIT binary patch literal 5473 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 gRDnu$qMMO#n0Rn-9Y9OT0q$Ge;>6irp4MGH@ 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 diff --git a/smiley_pack/icons/fight/sabre.gif b/smiley_pack/icons/fight/sabre.gif index e62396829fdd34850816c70f27cb2c54c8acc2b9..a970e8137a3b5c8bc39b9054fa7ef563763d3df9 100644 GIT binary patch delta 383 zcmV-_0f7FP1?vP1M@dFFIbml2J^=Cukqj~q2LLPp0001I06qW!1OIrDO&=OSuHUy# z2s_?PCm;lcvYeoJM8cHDoO1|Z0+EI%3;+cM00T{eBZP#82a&mL0RWRH0V97=0!RV? zA^8La3IGQHECv7x07d{S000C3c)Hwv;K@m=t?}y3CCFVUV&G_=P>HVFr?M~w5N~WZ zGkxz)Uh}XIK?mgJh{fCSmpm<-yC*azowANdD+k(ri`c})PBl#>M!00M%Z zMVgwUq?V^(sc(0rq^zSErm!@OO0)rz0idm}mb$x($;o~xy*&lM(8H}NE&|uPj%do< z+?36W#Nt1T*yiWg+S(rjppgLW?e3W_#Btrq==uWe^S1Hs+!+{XU|J)wEBLzAvgM5w dL4&e_3=8Oi(yfR=z>%PaF$QCYWegGk06Wr~rt|;+ delta 404 zcmV;F0c-y21egU3M@dFFIbml2J^-Qskqj~q001li0001I06qW!1O5n+O&=OZuHUy# z2s_?PCm;lcvYeoJM8cHDoO5_!9+8G83h8u)| zii?1ajv0iBk{FbhAefmRo1BZDKuJbyh(!klsi{dTjFoAsKB@(;nvk_#v8%JV9e)P` zrZ}>+sI#lBz-_&Y6{ya`#>*VP$xfsrxTpcC0mac?)YYTo=VQP#S_Ta|iv4<0bUGtmIMhchBZ yq_xW4s*WE&4SNQmSi@MKgq*vUju{=Xm@+4g!pXCz&!0ep3LQ$cs8LG^0027~d98y0 diff --git a/smiley_pack/icons/fight/samurai.gif b/smiley_pack/icons/fight/samurai.gif index 8b24385b45ea26d68d1f6c4e9cb92accbb1106e6..e711651fc8e7cfdff2e1fa59b6d542abb8d4e9dc 100644 GIT binary patch literal 3011 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 literal 3286 zcmd6pXHe5y8pi)5p#)G$C>BJ55Q88BA_Oc1DWYHi14tD^6{L%y2pSMVOF}P!P$YnX z1c;y!q=f*|q#Hp%ih%73DtfV8udI4!XLjz+?46z2ow;YuoG6jsVcO;@_DVr*lkqp1ZJ_+Ey8 zhCs~$D4_A<>W^mu$TzM2lgu{MFGDSx=aCdIzmf|zbpgM$hiHt1i_S*W(myW#)?6$J z`LsQ*Yq=`&$Oqa0L-6Aj<;p1!f(;~qdY087#v%5YgiMH_(4IkDTdH?+bMm){vWNbIB}2unyE zl&|)zaPWS0Y6aCTMmNWNJ@T~10<>uCsAk^~UG-F`Gdsv*!1*%|A#bV;7yW(e()qg@ z`r;PO{uVE7cN#qh95=%EHQv-?uW^m-!3Tm7EWDr#c-!N~3llYNgPhu#yCF*h#g=#L z+_p;n0bcZP0bcJr_mUsnRda8omB6m$RaO-yme<5K*1>OP<`RkWH!C=%Er3vW&;5?5 zR_=CQK6)rC7V6N!4GD1@iJT$#O$1B?CRL6;j&Yk^A=>v#w**a2da<5Bgf>2X1R$>V zuEejPeK5La5o~W>nCxq*{oB!TV;P8K?G)YQX|qTMok%_WY;?K;PA)>4yc^*zVsUJ@=RDjkCZc<_U z_<9S`&z6%1P4|g3l-Q}*GOH2(4+G_YgI|i*L>zLuFkWK@CM1sK1v=5f)K)b_D|Jt5 z8?WacaIy^UTL&vgtntqqsoBhM&Jrfe?0dKdB#h=0b9`goMc!j|D+S!F;_qGd_0LJ$ zjl@2~qrP{g`*Z{Y10T)NF)TG+$WpUAR5wTrr9=DJ+OFCdJPoAAY-I)Vc${iN7 ze(PR>C-;>iTQeGmO)*hZYHq~Uy_(v~w1UI-Vv6JbR@8mu0@9Ys`a|e7JoSOcF-Q(iQGkOz3=Frd1ci=e@!v|G3iA#Lx06QiM~G{q*8uk zEqP&w`lk4Ab9~$x41Hta&EB)%s69!Y7?<9ewW`h2rI)^f2?fR@gRj?$+g?`p$T=9r z#8yS|)@``*=<6Nyb#L9{6^hZHrL-Ztm9(?4)`Is&hoI+dY>jQV$i3^`VpV1f*DzwN z3ncEO*h&P+5Vk!{K~^!IrfP6rJWbQOk6a?{G5xEd@;^6GzduY=`-g{;DP&Y~iVr3| zFCzVjL+jnF#{+^$+mGgJ6} zZ#xyjchgngQQ zy+GZAG1+{2@u8)9WZI$;Lif;cYxDc(qjbwsOxwL*f0?p0`~S#nrPLJO`G`Gbdg1Qg zW$`9I2+Pb{A8t$h2n&)9y%dhYM<`v3NllIS0tH{Nvj-<7@4OOoHJw&07w9HqrJtLx zK#eV~sY#>Zd~;F8RWb|~vx!ytFTy9tV}Bt^Kw!A5)!7ja6i)A0^j-45uoFqtI9z@L@ysHODA~>JwR|YFx zX8|+ylBJP1=K?ep1ci?`F-}jo!KvZWfUuMYVV8>@iC-VwjX#>9BR1UZdwdvhb zU$(mYzsUTBBJxvX!M{f=`!Dh^7xg_43;i<>hlF<4j(Cr6bK?hkjgglkn->D6U(U{X zT^w2I>-!mp=jPwFLWI74`yCJospj=$aIbHG?%eV@y}RD?!|g?s<69fKB<_G;jNn#R zCIuHOt{jd(kkwBvvLH(O*)EaG9YI8Z?S9;4gwDU1A?FY!vFvP diff --git a/smiley_pack/icons/fight/tank.gif b/smiley_pack/icons/fight/tank.gif index f1d969dda319a5096bd9b2c0609b38d881db2874..24af1682fa62875b7a26c73d84cb77edf873cfc4 100644 GIT binary patch literal 11444 zcmeI%dr%YS-Usk!Hz8~S!Q~bRxEN-IsP27*c(k3~}z8-)#7 zZW1-vsGJ&WL}{r7jZ`f4nxG(FYQfs-sW+rnk$NhqRa6RR?K_?Kyzf8nO#gUi&J4*f zzx?Le&E$_fnfc83NuBvxTzu9WU@Ulc7rc6)0096&m_iVgc><=Pf4oo(#Snm@Od%MG zVidhFe!#g38pY9K}e;TR7%JRL{4CGf{;s5xfGK#D^jUkPQ**G zcqtLj4036Fyp)t8q#PsV1R0N!@l2PJ@p6)sD&?qBjw$1%N@gbI>Ucs;G9_0lNHBdQmR+W_3C)NhAC37QR{U|y-uyy zs|{+xpq3ld@dl0DpkX>`(8U{cOjjCoYJ*;BVD2$!j2fv?6K~XzMxETKi#O_+L21;f zje63kR~q%qpfNJH8I80~PV3@n9ZBnyv`$CsNm{R@^=ewLp$$sfpr#GXpregCi;lGD zlomZ{(JL(m(qdq`+G5aH3_6QZX)&rTMvaBJ&8WBONt=NwrOlwW88kMd(q>fKjLe|3 zF;{7|jn>#`osHJpEC#zlX*X!>My1`Twi}s2XE*BYwAxN+Keu-NJOE-Da#Y zDr=1D8l$F$R@cx>*VWMa8jGgJqN}kmgQ3R8l(EKUsj(Yt>~y_RQ%|ewX{PJyX??v# zQ*Y7LTbRLEZ`0S?4D~i+y`3q#(V}a#=o@WJ85-^SMmy7ujm&xtecYx$ZfDAH+-^Kx zV>n*JbozLW<#?mL)oyI9p<8P#t@U(kz2#z!{$h>sVm*Da(Q@&){oY09r%>7~x{LJ| zW~ZVELNNObMF@=9rp!JB1hd&NM9pjojarH!QVcU1)PL;k|GN=GUg;?ruO}s{QpUx| zSP=6GVleh|JbNv!%KBhz@?yigOPAvk{O!af)$0o~R;^t5t}bgiF6HyqtXUJ2rOPwK z2RBoZ=lRJRMA|DMkww1P6Y+u-kakcw47+! zj3rWbU$2@Mb>&MqL^+ECVA?aI zI)8X@y?&LDY}?wuVvpGwF~N3AAH(!bNj&s2Q7^WPs=Xsp8D=#Jh6K5tWQSI z4fQP!*4M5mGx&~WEAh>aN8Bh!n=d!+V5ToJ(%#?o&BSlntQ4QEuC7_p)ywXlkLfLM zI2HJyy!1j$(S$lZ4u&Wb*y{ztHgvlnoqj2nbrRn^^En2Xsk zZ`qY&m2<|=vU^&p>i;?9#}jWv$NhqD22)UQ{LZCWGPL0yFTCPVM=HLve_XdH&I)-; z>K>4#UeR~Zb5TF-M!0LMot-2y{m><4?9saB;Hb6>M7I8cyO|e#lWHxS|B`Ubna8CYtKtp+~4eL4+VsXNV*p}Szx2Q@P(i$>5L)|uJ zC%uJ@jid5dKG7_KMq_5l*%zWuJ-AL@?iYO$bG)voBBu38bp@8?>?-m5*!#!x5f*k= zDq+dUo-HYO(0oqxr83A%;%btYp!-+BO7X`Od|LiFzj9%;DERT1$gOO3+tnwNvbQbi zIeR7Q+Z~xh^6MZwwWN}b8f(9* zh_RpzGe-%x)y@{Xnwk+w@lz4q(){|k)(|_@a5iE`Mx`=*Rw+DNcILsQirALgGd$^e zGr3kg_QuhLGIPUM8$u?#TE|cjU)$E>OKCSgBB8QmOoSf8e2-e(ygB{K>0jiYmT&?$ zjAxVFBkk zq&PUb?^q1V8z}xBbaQmm+w1^Ad^j<_&`_^gaN(9BlZ_w%f$0?67>5X1}?4*R7 z5GQJzE9~I(YP2r1O|JFd82@WC)s?04J?!RAtQQM*T>8h?Z{GIYvXPsjRC|nR_^cuq zN#s=br^tFvao@btTu}KT{qaC|h4Sn@?2OCJdn*f>`8=Cwc5ROxXcs;0CWHP4N&@#f zru@*B`sUaVHpi$Ekp($@$zo+r%yRe1soCdIchzgL`y3UicSM1^+FQmVl`Vli)f<*R zDMr^)7HyShKs_iPY&Cnlxo^3Dj!MwAdS3OMhI`xVtX(ncjtUWfLm~Og*4RzAhr*t+ z%^^uwlfsivPg#VuQ#;zKU*=De^j&xGa*)pMDP+|B ziuv8y{!~>+(ys2qy1FIB`!9QlH@W%CCFVlj%f+(qPkoXrF;DjhC>d94;*0D({+22i z8Ma&g>A}s|gKS4Q>F!8V75RVBN%s!SY<|r4FV;=5&DglxYhKPg;VO1X4Da^$zkTp1 zBE|?VxKtDqScsgK&Yo17vpaXX$S);2(o~i>7 zgsis|?A^RE`N`otH#c+uud#fYG`h}OPWIpS&T(E0Y;T8xad*jy?quSQ0C^3oMlC-j z6M}hVB@;LK+G}$p`;m#IP}jSaFHRQ?=E>9BO$$r3En-JGZ}h&W{$D7HPgeDp&Y7LP zy2~S3g7uY*?}vDqjwH#iRPjI~8Q?6V32ffDG}%`F1|vP1e$ezrPQCv}fIUjGMvkng z)=}+M_?=!vm0YyX-rgb>_#&z7Y~L=g@x;+}6Z!9F4+U;k^@iN+ERF9s`IubIh2NHwkz8Zl%~lyn{>ZSo&t66BhOZ z

e{kZe=D$|Z1o1mfSK3!s&Smk4aXDh2Mr{CrLm zOtAy+sdfbfbc3O!1PU*iKmkxo1u5{N%#7yX(GnMVc@gY;C_A)wu4~}Rt%89wg+mX5 zyaqojynm(;t}1*vztE}W_Fh5#At1AYXdDP}cs0=ScPO5xK%v3*@A%W9r_)jXpKO{_If>ozMS z^vp~eml(eY~`Q&_bNId;Po#SlA2AUIPnV zkiZII4oHH-s0<2q!Gd0BV=gS9%7t23mv!z`nUIP?Yeb zI(#IoTsoy=<3b3D)7~d{z4$IfOZgx>1JVzCc=_bQC&e;~Ri2dw3xJ6?0f)HlurxZ$ zyjbB1B{~&wD8A;%wco+oTgF?z_&}~-c0M$Sr``N5Y)xh+%;}&2l#IhodUv0-6#N?> z!6DVg%w?ufB+W%8&;9VbJtx2y;p^|u-3+dlE_}Lw?)nFB-zxsw1lQBL*!2&6+pXmQ zaJX6%&;qlvjKWUIprmcL2JWR6zPPX^;YrO&v`0Vm;>NcpF8=oQ2=H+8F5=sn6o_f3 z-m@vt1ZvhZdHdkAGlegnteG+J^P<6lYrBS6u7Ve93LnoeeEC_%%u1hhC+l#h2PTG+ zRct{!@JjRYi32DGr}Tore3PFQN_Ij*mFZD06|aEBF5q>Q8d3F!5Zg^ysSoE*8U|}2 zab6z7KCH7y)NTlN!3_HdD-@US6JUj==fiXQA%P2;Az`G*T%t9(j0mAXS8-w*Jfo^O z&=DnHA4H3;gmD%)r~jIS!#7`s^*3KR{ zDF}6^KX$Qu7I2> z{uUMgunR>crhqE`A>CuI<_)Zqq z4UcqsXtXSE${bN^p1|al2!L^VdcQfo$;Jl>x2{$nv1{|H>;JfMW%) zwfOB!IKdf|l?Eh^VobqAmL=I~CGoOgZ&0eMEf!L+7X?w<6d2d( zp?Toq{>%iDe`J%PU4EbSH;0@si%}Qb|3FjFvcBGx)U?|nLnrf3XK4W!b9GJae@LQQ z>L>)Dz&yahWsv6t04Jcy+`}D|7n4o;rzu$Lv}Jx7d%9Up7aQ#apH3awBcK#+bHS=T z^Bu5fKDbg|V5*&ayoVIOBr%uiv@8a`>{5pXlpJp3H| zOY@ULS+dfel!qT)JsXX*HGYUhiufo4U+V$N_3t!$ibK)OQg?@t%Kf3k&=ELTvyFQ|}MVJD9Z~%m(DBvEO zG5Gkv(Ckp`%mk``B$QY$<=Y1H z6zo@r*_{-FQj~&{U68O7@|6{Zwy`4fU~jyLF>1&kJ{)%y3e5$vZj?EX4!1&rJlIoA z3sq)OCkS*v(abq@CzM_V-NR|I7Mha_g{kQDTu5StguUh&-NpVYNZ^1lEA&P!L}o%q U{QS4~mE>WiEA!F6c6dGYU%4hAdH?_b literal 11457 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 diff --git a/smiley_pack/icons/fight/viking.gif b/smiley_pack/icons/fight/viking.gif index 4908eddb881a5c08d4f5658e0076d5ce955df637..96502afa2800a8c075971243d20101b421a3991e 100644 GIT binary patch literal 8347 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 Y4w;^XQEpB14O0$h>@jb6%mgg>2iIWlX#fBK literal 9650 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 delta 1342 zcmdnW-N~cs?&)S>nW)I1%&>@!0SF9}8RpDkICqZWKLf-6|3Cx+6IIn1=T7vQThE~Q zlZBIufsH{2q!y%$fq8z$t~>t>PI<20yMt-M*JpECIG7}yk~hxHc(^WydB;(Pr0@N9+JBlYmt8@sv}f99<5oxkP$R~8ikhUj(QyTAP1cS*&32X}XyebjA^ z^oF)wKmYc1xqbF^tK+W@Eb=I^6qK)LWMpHkv@z@LpHM2$n=?tfx6dWlEK6}($0FI8 z4pS}W@vV_v$+tn=)4W0=tEo)VVaFyuPM|w69lajtXto0X@kS^Zl$D|N<1r>6Dq4Ltu;)Wl1-Rn+7(l}Y^&-!eS7TsCQR(? zo;pomdxp^@t=V(bN57>oGH48Jc1W0x+t!S zUw4KV>WO-^pkDzEdQk>beFc_lqR$(zsPf25GCBvwXq9ZulQLcteg9nPUW0k6t|C$i zGoAzr9}(5{yPekI{I|w0;2DIqWtpP zvOM)wKd(_9xV zPLQ9&S6?pXRXEvD!mUBace&wC0qp5w5j-(RFim)U?=CPgi#tUJ&hw8FQQMt!nEN!3 z!IgZS%X|Cvm#jW&aoFc$n!vxZGs~tdWoEJ8u}a%ZmVtvMz3e-ydgldSiRBS-);G+q z9LsGA$Q7>dy?*-T$6VuLN8?uAO5?oRj$mDBV0xb5TEj4La=FNaiPbj!6YZyT=g6l_ z%b8FnztU&{-#V{C-Xw9mnKOIkHn;5&b8_AAfbM3{J$14{U_w^b$A5jMDGD4s zt{eVgUGw0dVDJy$nuX1QaLqc_u^p(&2P^7IRn${L2!dKZ1`gnD&-(=MZ)Os%%?-mEF2 z($87nG&-&*)!k-PFEn a!v+Pr4HZ%;dz`n6B_-}o3pfHwJJta95*pV4 diff --git a/smiley_pack/icons/food/broccoli.gif b/smiley_pack/icons/food/broccoli.gif index f379889c1e5c3a9a596dda000389f4463eaa983c..87867f4a7c9b21c02ecd7231c2dfbc8f9d91e3d9 100644 GIT binary patch literal 2678 zcmZ9OX*iqN0>|IHN#2l9`!=d}C9#x_rKKH>(&(bK)NM0EQPb9_JFQYxS~ZNSrIe|C zOOPT7ksy%;MF?WwTT2zKrDD3eoldzr^Yoef-1FglIOja)!|(b3f9D)=b+Oy$j{~fL zwf?MfBct@iTP9p$kB(m&v><4uE;&b{S^G}7Rx z0an-gH$>`(r;}Jx(O|_Z_r!LicgC+>=?=wZOP_qsKKR+s#>Yd8T#^3guQx`|+)#X@ zg`I^(_*{mD8;|`Q8Yu_<7=87k41fy?4ZgM4|M-oEc>T->3qwQz!B7uw2-%w!y85c8 z>?kV-5D+FMLz`aCxRkRC;`7t~Mmh*kBLo4Sm)h-b2YxWd{@W)NX@9Y1cVf*rsb%8 zmAYhFbsmLcfJ{1<9yC}arVsVVtj})P;EesaJ=TjEW8raq>6U{v(<(sEAcXt>TIMBEyczsrw!ciPBV(hbzM} zGBe`#>s#kwAjQHAzjU0LVL>5)aK2h^)r6P^%!2wF_4+zRmKp@MG`GN@#&Tg} zp-85=7i@0t;@9$p$5E~QE#P2NXC1erfr;qJpQ8!#DT<5Y6~@F$eLYh0=EdumLI}CJ z2~BlzDgF7hn1b%dI1bgD7yVl5kAMiYp3_ehsVSZ)=|~~|ekt()Lc?m_B|}}Cc(}6U zVaG$$+MsCZ%tfIb~U9DU5RJu`*rRjv_c|575FJF#K9{tTv@u8CC;3D2!OPy zhn?eCbz1bOdI7R7>63K?)aG11x`rDAn$;&N_v=*AtN z_Hl-0Y~+%sod-2x@S*5I;V$kscA+kfk-NXoh~KAME)LdSo>qRnI^UUN8)Y@MEYUud zyO5~5c>OmbkHSxIGv*9Cf=EC)C6n>$r!hL=UvA2pBTLpS2feSHx5WwD=B)pPGknXK z{Z*XD%GIT2*>_4_#0MsVan_9ETuLBPY?~U_VzAzrk5w7e_>R9o8%Z}w>+=)E?FYjv zgyEXeZnfS1;hJ{oynrhbc}BwYMQaM=+%yD6eNFqYe7YoL zc4!o*SEVq#&mr`VeYhDK?nLl6b-!gR0~+Z$B2rBu-90+Ss<5o=T$55+s04s2E6Zq< z9FPHlWSUNOMQv5R37c8V;x!VNelP2K`8?ZTrn z38a`a@UZ!d9*z~!hFw?B-RSENj7V=`*!Hp?q{O@E-Q3yqd^N(Mz|Yb1O+_HS*yfSt zN*=a(9NYa=>HPOEe}8>(b7sf$D-p^XrlTPzvmAD+slX2g!{UFHyB>c?&*-|WQW#7& z6?@`-nm&ZhvkD8#&6kD9>hfd=py*a&9#s_EL*OK@6*DDo6)SU+yosTT_xT%zQ-6>U z&)uaAfXLmjD*Q;u*j6OWcAeR{^ z3Tc;`Ax@w(MgRWn+v~6-S*%V&DgISa`hrt?@$!YY+EZ3rjA&}mhOmVPm< zCx4{1tgv`&Ty3ncm0pFcS?JYSL-=mx$`f6FMKlpsA)tz@KJ=+XD2De2GPT0 zqg~K*tw^+|^=}*LbCft`+)+N~{n_KB9I9o{>fCD@B^7R(=_H^Rfty5T3)#=2BtXjgd(*ATq=TZeT0|2o9FE(Jjx&QzG literal 4025 zcmeHJS5T9Sy8ROZ(xsXh0trC@MS2w#LJ1%$(iEik-XU}$p@a@9Dn&XNiqgRV7J`f< zfJzkz(tA}v1ynF+?}vNu)7dlU_0IVozqhs4tfGHaPwk?k6rcbcZ~(9|7%M9)gTXk6 z(iZ3t004ji0BIX(CUYh%$}FaHrhk3@d;ewN|0@Hc3=Si#xtWfZF;+oFjtTS^PSKwb zHg1DQV2Ac$u@8BCcOLsh1e5xSr@eoDKi49zQ*=2EeOx_AGObkd zJ-_AoZN=;XTRn?qdx)f2JUn}2DN?ZXR-^F{3pN~AIoJ$(|Kihzpp~D_p>zqH5z?1PaijI|+EkB2O&UbU{?QvC9p1twOoNZ;`VQ_O zZOB{@i5FGi3!JG!`9eBYP>F(0l1Kt~s2b9Dm&;-*QDEVOZJ^{Sa$(AlrzA2C-l1w6 z#H?Ylm?D{(1J`&PX*a;Wkr+`T3A_t#pGxzt+?S zuZc=`0=gw%v5F43(%rTraogslZX<6q(!#z>)Vb=!-H>|hXZT!a_Iyu-iKA&1l+ES1 zmv<4!WH_ZhnS-n0J%1e3y*tMN*2FyS9$YG z#WhX;D~;`kL-n(=aEvh>oARemfrGqwBk8=g7nawcYch zqzjEkt%f-7!A!LeUas`rlIsPU-$=FXp(L9|4&KPAYW`Ym4hKveF(*KB&W+It(k%$z zqr?)lA_d#-%PuG9D)LWUZ&+Q;EM>~l;QBSInOY}Lwd0b1(LY${%`tK8PsRiF936Hr z1a592hxxnRAE9>2=tpn7ucaQgp)m%_E9SAWQwjtQ#dMJ{?xKf7K%G> z(RE2QMU2=j3|$D3blZ1M)HOY2?|n`0pLF`ayqebrKqze+6v|0A2?jN2kqi{Wr?Z>@ zU~>1$^)pXtaYF(gob7wes~M-nHgdK<6QTHKicOw0kPSVZf7BaXbtC1Z>fZC8LFL*c zV_!b3p)uxamReTXg^iXC!#cBWx58vO%5brAp7>I}inmFEbSZqEFsdu^`CWpGs@I=V$HUZz5lW)Vd~_0}obS|5n@ke1hl9q4bXZ7QLxj z_Am$N0&R0L8gq_fqLndCW#D zGJJEag7RHB7w&+k^E%8#0`RbVKKwK8^I8w2!$;zUxLu|bP{g*vB)FlQQ^d+64>Xal z=S7(|?6z9D*0(ER&Oy}e zCyM?t5R5#@s6fT6>|t(m6}8a7^??gav3iJv(UO6{DQg1-5`uQqhOL{!@s`=_SAHr< zy{$E(65r)DYFJwZ$^EFsF~n4kp-)z*#n${Kwzkyw5#$ z?e_AmL?$#6Clpd~jci}}(T6h|WBi1{xmRG2J=YD8ZdS@v@7VhQjG$Fg#-NH9h{9mY z{qUs3f2s=yl?}HE-!6n+`X#PZzPFDFwd`fzvn#;QivpVIBm zedSUEcZFK@rV-Mn)WTn{xBmRbsSd@oxvnC^=%V2!_-0`bd%u0hGeral}aVOjK6vR)Q^kGc=K{yoyjx#_tyIxoV(DFODfMz65P8)3OiKlZnaq7 z8T&N($UkYNaJz2YzL z0*bZL#OXWsUI4?1>h^jN=K*SCuvy;tUE({@?s}kiXdU)ty8ABwA=FCc>k`Dazvn07 z7iOJ>Q;qC5xZk-o*&gP1Q~1)W!?k+H0i!oj$KdgGN2q|z{q{&gc_|fL94w$Ya9yXPSZ9Jt|A_(n;U@TV(v!T`{>#Yw_EsX1MT$RSSr({aoke%Q4bRLEK>dqb4mRh0tWL&0VPh2r zK{njx^bQHc>9`MPVWfd7|J1AQj8g(nT4WxD?`AVh zRiKiW_PxOa)%san!a@7YpOr__Nnc*S#H}`QrJv|Lj>6Js8K-kKV?(3qt(Bc5r0{Rb zdMnp~O~@zE95Sk>v=R=Q=-s!DV@@Q)@jNm+sBn%B3(MhkNjnYNS3#HNzXE7%~dLW|Zf3d=ShF$fSB6tjG!V&pw>-p)tec_JU Je~scx{{jhS(G~yz diff --git a/smiley_pack/icons/food/carrot.gif b/smiley_pack/icons/food/carrot.gif index 387b94c18381569a3f04179541092d00f912eb7a..25130d4625c6114c85bdad7f13e18b42eac4099e 100644 GIT binary patch delta 456 zcmV;(0XP1~1hoVWM@dFFIbkCJBLMRa0Fe+U1ONa3kvBen4FD_v0000Z03!eZ1kkX_ zNhb(Y;L3X!!X<&CXL4kqrt0aAEEu-0J8ySgYuTo|g`mN3C{hN4Uj=~(7KX)x1W6z$ zCk3VxDy3Sl4Q5kFj3&+sa3iZFn-hvOSiCJ42XOV8?l$Jtd{1@esdKNcVd$J|2dni`2VNUpU3d#w3sQX)ZVC!% zhn!~g&PC-SOKG`Fi~V9;Rz0+2WZ%LRcGp6LQ54^CCf zA69K#lwP!C!LnB``*b9>t+&oEkIlZhYXTw7QoH8j-OmI-Su zjatu;7VOcZb&lIWVYTXP(QcE7J-XtY1z%^qGkbQm#=ndsBa17CCz>a)u*j<*sk5ou zt*y{KC%GwbT4rO+)bPsC99~`?p46%Wmc_}-%i0RK!`LHB7kKsdZLQ6U6LEH)m9Srg z>tH~i)zM>tsi&+$WeWmZE>sCs)?L5BFxi?>rk+y{=o2LG+y#0k8>@FjJ}$a$mMuU5Q$B wJuN!_&h@G_U3Z0>0-rv6_3HJEw|Cz>Trpc@*0Z!7-@gC&`|rQG5(9%Z017?A)c^nh diff --git a/smiley_pack/icons/food/cooking.gif b/smiley_pack/icons/food/cooking.gif index e62fea067867e94925c529ce0c8a30d2484dc833..eca2bac873e1478d59b4f78abfe9e3360cb762c3 100644 GIT binary patch literal 3103 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 Vg#Ql`#{IYd)^88-|NcYF_&4*V1~~u# diff --git a/smiley_pack/icons/food/fryegg.gif b/smiley_pack/icons/food/fryegg.gif index bd1b4ff04393b42486e06ce9cba5a7561d2c6cce..3cfd06ec7f8f2648f75b0988e37f2368efc7eb97 100644 GIT binary patch literal 6113 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 VG%g>v#8VG5L|=93Dgh2``X?HN0p0)r literal 6492 zcmeI02~bm6*2iBKNC1(9T?9>70wP{gkV{`^{^^a3~kFo{HX0CdLpfq`hE1;qv) zd~hEPpozd|iNN*30&PJA;A!A;0RX^V#YMw|4qzzI@`Zt2Q1f#S3~+U!xZB& zvPujafI)}rI-B8rO30f6&KM`ZS_!V)!@DYlaiY0@cK6)C7{XFs?Bwniz|r zl_u}WMaj^qbmxO2q9by#K0TF{)m>$y71*e=XxS;GmDn;Vl}zog&=HwU1`8h!!8N9H z%?4Vm`kPg{@-9IlT%c_bd4_lm*AsHel1+Ol@79V(i3*Hn}`8VdOl!J^K;879X>GKR!&;fQ`;2cDA7 zGK+;dugoW78OcA@`^#1(;-v3bgK=?xH--vT(`pk=wmhGij^4G)xBC^B-v1Lia`*Y( z#@F5i+xYO(LN-um{Z07xp>MWj!4~sTJlKu-SN)9FyAehXIA6V`gyj~~k|1kQd-J%y zw@-;i>b;ZzIKxL!5P^)_K7CMAqcumI7O3NLiE%Wnx@5n)WlFT*%x$_`+FVvaq@UVO zq>0(1#wjFQk5o%BIkhV58Z9A7Q)Mk>ifbg~VlXj=VNt_nCB@_DP+@B!a_ROR7s<<6 zoNC(D1Jj$*jKsymO9UoFQeh=yVs;hWVK8ZrdQH^|(&3tnYqDVmj${D;oK?Fou}Yz5 zePs2>|AW=g^eX5Cds|Oi8 z#H&)Y+-t6W7#<;-1e!1|qX4tht7xs8)s~YQPMqf^5iF9OikA7Z2$Qa@9n^0*Deg!6 zCFf=ETi8BPQ@5(dOPn1>Ug>ZxK-l#A9Wq)tEQj-6x=?MNcKPlbx-G+KK6o%s zR-8;!`YF~b%y+^G5@tg_m@_3qwetu{WHSftLkJ{x@3S{Yy z@nNaa0U7r22o{i+-aSNpztgH7EEcvhAEfpF!qw}8wEDLG7vZ`xHqonDf$P1TQBwu3rV)>= zsm;q!>uUYus@Z_M+F~M#gk0SIv%2GzqmCgaYEfF1c3g`FHxhs( zRtKFkoK|;07uncP?j1uy!Wnhy`n)ZAf+(5x8xCaDF+;+4jnp~_lDfh`b|_xvS-=;N zV(ygT1*hekkk)R^Q`(|qH>VD3;p$Db$W5-du+fzILun5;KI~rIifQ7PXzn-`#>{{> zA7Bg(Pu9~q-{EL>z`%US`Ufg;2H_p~rNP_tPOmlyC#5%RWhP!pLqME0pDd%jGxDIL zKFTWepE*77Z{*Yy`mqFX{cq*;N}ICN{0kEmgHrxJb9B>d-Dg`h;7`-ESdWlqSGFrN z=JrHnslz~7&8)b3W3{m=f*aCV*P>}DzI(*IJ4rP&y@j-UYv*s}Ov}-PN8dlMZkPAe zbu>Ypm-s!ob}sC~Q@8mR@!G#T}c}yU;Wzo5hma?V?nE{SEu-B;VXXTbOSYJkM>KO8QBPX<)dd={AoeS#|9_>_@AJ(6DWas0i2j-QTZvuON>#!WN|(DYNEJoubr@8pC{kMouMZ7huwWsXD zerT420q|ueegc!{;$9)5OU27MDyFo+JX*Ou^>H8%j_jE|rT?<-eR)Q=rjvf$%0Du{ zsbPCW^z|Yz^ZVa^8q6>B72&kP;m~b+xYXEEd1}2jkC$T#V0G0aQ4p* zw)u?|H*O{=9owSM4~0l>Q?A?}Y+S1{w|8rAU7G14r&LOfYeS+?)hK4~o73`J-)~f- zC3U|(J4_9RSkTMz+HT9Gu1uTK!V>9d3jJwUjP|^#w`{Pt!&A~M9cPu!HIIxT5LkFB zgg};bQ)!h*wt?aJG2LrQSYWyc_B08fZJbr(D2dQ3vcz6Y&*LjQtEuoKHY3lyZJl(w zo77&eSJz@;4B#r;_h*mKr_>nBAcTvA>3IiLzN0&_dfjL+aX2v2O_TgL<;Oo$3dnwY zflvyOyJ6qt_G1SlUN*I1X#=@K2FZm<_Ua`|cLt4@Unl3>!HqXPUYbsO_%P>Cg1_`Z zB=t#gJ=MQ&Xer~Y(q4^X{_)c2y*{WlZl7@aRZ9QT3KdNGU#0XfmeQ|P>0gcL*Q)g2 zQI&!j|DU?24J@Rd+|6(%A2XhZ<49?9=p_x_w}?KVct~Is>UF*`2{r-Pm5X-F*Fp-RwOF zB3!Z&Jr_DPGk0bJ&rFS&lLr%b&A@C zv0bO?6t&Ke$%&7Sb+V0Gw+4gRlpGUFi%*V?!Nh~JRM6rX7)S~CclU7jclQU481RHG zotYGCOXqM{F}6GCOg4vY%S}q7+e9;y{>RFUX4^(ZCdY8&V>omh7M-Ptj$tNa62Z`l M2o81%%ZLB)50(t&cmMzZ diff --git a/smiley_pack/icons/food/popcorn.gif b/smiley_pack/icons/food/popcorn.gif index b0ea69767feea192e6aa64f821e92ef5d75181cb..95e098d537a3affaa4b975eed23db05459a67278 100644 GIT binary patch literal 348 zcmV-i0i*s$Nk%w1VJHA30P+U_0000G2mmo55Z(X)|K|Yz{{a90{{a60A^8La000L7 zEC2ui04M+?000C3c)HvS3djSUy%-Qlx|S0rMv>N?=vj@{XR2?yh3pcmo{U0Zee1KI zX>|eZgg711!Px;*Lz7_nko`7KsOW0tYBOGA)$xWl=EY=Z`Xv&pbaw#3Ah$C$>`u*`$P1roU2+oZ?6kk#2X z-Ot^6S9jmBHrn(RA(D_n`6gp~JM!-8EB8^lj@#r<$*K%<2pz#IT{m uRhe2S%*Cl8Q>jGgpz*MHDI=I@E7sgA3CD*kCb}*KI8_5Cp)wZ|0029`7N?2; literal 1155 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 E17Dc+fB*mh delta 1011 zcmV50RImS{~iYaEeZcF9L+gE|62?HdJ)KbLdbtc%zZ=5eMbLYN20V6 zzl2-2;d0Z3Jl2>u+MYDUq7Ut`9`Cas@3$ZIw+Q*Y2l%=R>Z>y9tTgGbIq9)E|EVR% zgF?rFM#q9k&xJtDiAKPOU(kPrK+uLj(1}OTj6&9mLC}jy(2PpZk4eyzLerse)~I&> zn?nD(QvbVj_rnSJ#tZ-41OMIv|K0=t-wFTT3jW*-|J@A#$RhvFDgVnb|IRc2&p!Xt zHviK(|KI@r;sgKS3jg2?|KJV(;SK-g3IFB_|K<$;=>Y%i1OMy=|L6@0|L6?==??$x z5A)?1lOO^be;WVv9slMb|Lh|F?jir;Gymf=|L!yY^&|iFCI9s(|Me;V^(_DOFaP#7 z|Mocl_B#LeJOB1R|Mox5;YInzPWZ=D`NviG$yEQ=MgP%b|IuXs*KP0gME~SM|K>vf z=UxBlUH|q(|L{=%_g4S+SO4)_|M6b`_g(+^V*mJL4FC9O|M+VE`E>vJf057|D#@FJ z#qE^C^tsISxbOFh|L=(Z`GWuYj`#VW|N55y`kDXxp#S@&|NE_z0|6?NfdY(^kOBvj z4Fef}&j2g{0000G01yBG2;=~t34BJ0Qz%cOG=&++unn(a000pC<%^V?NDMFSYSthk zvWT}vIodH$4J-^5A}l)wAOI^`pVBya21b!93ldf(D;BI)D+VqaRe2Uj7c*58j3FZy z%$BnZ3m&Z*A_y3W4_LF3P$uj_0y#g{^jeXBHLHhLu^=d5@xo84C}p!!xZnW6fhATL zof;7rtAGIpWEkO+hY*y$A509oLIB9KH*5|)i7TQ{95*QhPO>9rQI8N>j2e$B`gh-GdwF3eGA^8La3INXlEC2w1 z000mG5C8xO;sBoseD-D2z)W5SDy)QSk*Qp$N`W#&Mv_8HZFmh6NbHv{Ql0+j7^r1e zvjzYFAbSSj)+k3wN$K diff --git a/smiley_pack/icons/laugh/loltv.gif b/smiley_pack/icons/laugh/loltv.gif index 3de6f778fff71bede893fe95a8824949d24d43a5..4b7c5736eb0b09585a96e6f05801bfd51a19eb28 100644 GIT binary patch delta 2014 zcmZwHXH=6}0><$d2nnQ!g_?vCsVXQi;(~&N0HN1e>L@i*6d1bV=m`O`0s#y?^lF4q z3{8p5&|v^25-B5y1Rb0;0t<-DD&oAGxSrM7GxyW|cJF!4@BFI{emFq3u_GFr1R4Tp zUi z!K2__B)A<3zIWIJWp+V*a4$(;U!TDSdL{w>zk$)GKvg#Y?l^x04Oqg<9%>szf$u!P z9lXreAHd2c0PY5V1l5HnH^-X{19XMY0-`?wP_RFBN=^45&2}Y#9&x&AbY+V}BHVc* znBfc`_E=_nIjqYgsM?AU_iRV?*(*<)5A$4SL;Ww(oMU`o-w{FxSCUjUbTm}ejvU5{ zV`E*dpbSRhjc~8PK-KHHSWID2s-y(e6PE5*#l|XQa7^ctMzT$-AAud%j#Iho)XnPo z(YjZw1BV{6EMaiQF19HTa7&21$E+FWIgAQ=9s;phe3r&%D|h_LP5teaV46Q(wK2I8 z3*DYtTzj_K6=-=n3WUynJ4=-_(pN#!<3c9*oJii9M@+gSRm{Lv_c0=@d76@q%@FfW z(x2|r6By^Oh@B-%&Y4MH+Q}%&U4+^X#M6$qHN{>(n2CV^xc3lgS>ZBYCXxiJwa`I! zMLMUE;j6tNS9^~k`0q@6j^%{(SG(A(7Q(3tY#!Z8KILKb46BCDMg}1Y@DN^kh_+!S z+h;iV4gRE|3tN_G_+))9?%?f;039hgGHSmoJT5+1IL;|_*fn1n*+`T^nlv1C%ZZh(KD91PWa(wCd)>7A$Jw{wo&6Aq_RuhC zlr7EZ>w-=`n&OO_Tg<|doqg`}T=m6~C384@YG^?)RB4tyt%QWa_V8M7w#l9q4KXfW zPzi!-`BUP}Srrrn!4k(GSW-?pQ!Q|_*py5L)XFljN7|kH18sZ>307MMz<4pY(#`Ev zt(=woDc?a2J5m->(N<-lJv}eeTJ@CAAh3DJYfAjFpT^F60&J*uO?E+PLJ;a1IM4}2 zhk@r{vi;}NH`$A9f$U-P}=-q>+fj@7#yl{jIBk=#}$Uw(TzInN^csK0# zh5`%bAYM^JP9S;mA2#VkFDTGpnl7j+iZ8b>H5EYc$z}PC5R|xSKz=twON^4whp3YO zN?e$4eZ*?1;Jy6nC4T$b+&#v}e!r;EX=F}|e;qDE7ozmM!P-(8)`|@JkdKGBmJ_{> z`uQ*Xyg~^hl`p@dks5w6^5D%gKZ!%_cY(*oiNKlKnwd+<$VPkyrs?XpmR3qp)0v8C`UOstN~u8t48=!W zQ)S*;<7-l6o=9AUP+XofK1lO-ivo_= zK{u;S{DF5Rv;a!@ar$n2ZZK{lQF=p)Y7c$g+BB3#1^x`~|Gd@5jz_3uJCShq34}&! zxW@>2-LuMtSu`O@`MdhG?T+%Pj@i`LmM1E#ZyOaV7Uj?+D0XpQtVMW2b91f91d4?H z`SYrYG%V&OT~fj-+P2uKlqKq1jYD1?w6KB1I@gR-VcWOY-)6)Ry0uzx=$|a}ayyC! zhlZP!d&cvK4=3wWc(&6RcNO%Uuyykb*PpSJTb_@@pew)qlMC}Mqk`z znC{PZGEMBJCa{s!%S&|FgL@n-}=|RUPEVHnm5J) Hz?uI5Gudo? literal 2335 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 diff --git a/smiley_pack/icons/laugh/rofl.gif b/smiley_pack/icons/laugh/rofl.gif index a3bb03d6525870aca7d516040912c89027c3c8f2..3e5ac047566a24c2efd7f07bcb671911b6929181 100644 GIT binary patch literal 849 zcmZ?wbhEHb)Mb!k_{72h1pk5PKM?&l2C`s4@jthpYe=xOV}PrXo&hr>P+ajR3#SMJ z3xf_w4M;l!bFas)JO2z$d9L1T@%rrU{|Op>Dr^j?rHjt*>eD;T;FLQ*YRzNr*!AX@ z6Fi;>#vPx3T5ZD04(I2Ek{y3%NjelRW8h*6UGML8kuT-M6Z4u~Nt>UqTOG};KQrZI zUVM6gy?9!HTX|VhLt{Xpu|r*brEt@PtT0E*z$)|H4(X`LB|g6MwX_U1m#YHo=V?uaxGZgMh|^G0PUXN$?f;6fInE?eUDG8`5tX2l6pbFwM}t?mR=~o0vvekmXfJ_Jw_0 zPMw{%@6Lxw*OkK#-IYCG?zY|J=<}A&ZzrGUo%iEkxc{f5v}zO&QV_5*a4{${@B=N5 z_Sm)Og0>Bl+MZQW%U7?ExRQI|I_HaNy*d$#p3OEokZ}LOs)IJ`uWdhg{<3zRl!KyM zTFXj}ZRyKyR&QBny~?=ru+Ucbbr*i;MokJ*nIXb^amD$lsE{+AcNPUIGa?5$-95?* KPK^T|*VX_*uT56~ literal 1010 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

`+0?VMMQd`&j-7Q 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 VxHC7FEU&4LEGH^nU=V=A{|CktV*>yH literal 15681 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 XFl#p{_@GDYEm!(hbL|2a3s(JqG&fSB diff --git a/smiley_pack/icons/love/inlove.gif b/smiley_pack/icons/love/inlove.gif index 30357af282cbf688453b636b63cf09517573b773..2108e935157c9d09d66d5fcd0723d069c3aec067 100644 GIT binary patch literal 216 zcmZ?wbhEHbRA3Nh`1GFv1ZJLLnEBt>m?16Ac;-xoGYkwsVa1;;tPBhs3_2hMAhirE za|KRX@^3PEy|({(LPV;V+Po?0i-aEX9oZ(d;k01ug4eEl9%}jPJKvBjwc}De;Um_6 zTqWsbj#rU2gTr!BkLgkV5ur2Wb~A11w~|{ObK%D>ujNMBx zL$08Si7`&M-lwD9kfkpsvNt|Si=nPdmvPaesOUwrlkyfUT)dVsNVk@KgWftb`;hz% O!ukg4CZ>{t4AuY^oJ>Xl literal 1005 zcmchW&r8%{5XMK@B5%sl2GxdPQCMq-Ib=VGFk63M5K&ppm0}Q#Z4UckOwgF z8galsAm9+x5Cb$QaTOdG3~fk5%OkmHqsB2+k09X>V^Nu@IdX+vP@t)9>c|mEBLHyW zI)a8-ht{{$_2MOVvK*Y)kDtmN#<5+jY@m3C>L01-YMaRB8jGXnhUZ@%n5gU7`E-2AK=#vI>9@DzGk5DJ3u}H> O%gYHNf$#=^NhGqYt^EL)2LRvNT4-&}adL8} zP*@a-4~^!*WO7(6A&2AP2%b@%4@5 z^TR_!*DP8T866$JW=*_YUIain0J{O$55OS+z6PKHfF=N10B8rG3xMkY^Z{@WfDr)x z0N@1x?*RD6^gRC>vi#gW;Fg6&t&oJs!hASf1Z+BVdyBNPf`TEo`33W5Lg)|TqnQzG z%C4S<>|bUcin#VzM)~|u8NH^gf*KJBQX=y1d~;)fs|!JU6pQSx9i@I4S=KN$R}d z%lMUVN~Yt4x&w3r_o5o_29`?}zySjmcGoth7t+4mOqxs>8|5L`uVV^zB@ zV{An^=f%3^1C<-g3#z#5HDTrOt(=oaRWAl(Lys*OZA?N}`mvlUaE;+3Rd#`)KP3z= zJc37hXX|f9LOMx$%w4LPtPN%(o^h!y0Zi2HQ zSdE^gt?lV9?#9_5k~0+J>cS>UPz+mlv$Gp)5-F4?UlX)w`Zo@8`OnP~9W9WLH;Q|T z%gele;4x+;6=FXmrKjcO)so`7k2bbf4Hyj?oXvYh0c4OYz#;D&#|K~z&T1t;=Df3P zX^A!ASwZI5n4!BQLAYTk;h4OTm6WmUopW6p8n^s$GDA_VsU%W3v8ouxj|T}h2GxC4 zGqZ6=a%>#8O$Hg%1Z+ajsLlg}x1p$tWA!CytR3BtE8rqg$CtLOx}I0JvK{necJJyFyLzG;I@^O%j}$MY_%+P`>jreMj#!!K%2 z_O|ZpNV)darpYPW6cuiXJeYAoQz-dy}Vf;ejIf-&p0sTjm8p!qa62Yb=0{QSVLEeaiw10^2Xeg3QK9- zW>+ZG)ekeQTuQO~i@J)5wAj411rHHens5!HCng>-sw%-rZ9g=^K-2JsS~HPTiDa%p3+?>gZNwp1`H)igk5C>FUo7L!mGd z$7iVAj&;^hgG7os$FmHs6o$0Gs2@_<9sM@?d_3=Ak-r@#8ULsmQ7k)>k~#8_htOis zpg=5$oLN%#O=EW3=rBm~eu9zTDZBa5GnL1rj=3|LC7A!VCgjA4v#(Uxq8)4xyMw|X zK09jl*JxGgzDmVCL$)e7A204g+&1HC*m@^4l({6Ke{1U~goyjgcwqrKIHq<<98cI) zC1Zp`lDh;ZmkVQ<1tUn3qsmr72pAAcW_me?8|__GDh)Ak$QFTk*qqgcwZ(JwFvh(K zOCq_8#mL#zVH9aqxZSh~GXwMb1k9aS9^UYL)VF%C@uXjxkLP?J#}hqAwp2G9$aoZC zClTF$*7~>8ENbr_m)}HlPUmDaDjwgOTCc3=IE%2){#{Fj$^>kCsu@_s$5^IL2NqE8 zpBiKm7EwDPta}=;n<^79ODw}YeJ%$~7bXfC8c(C+QzvUlayZ{-uBF&gOU0|QZZJa_ z%Qo)cq_Na8Qmx+Ik=-sN8plk)c9?)crsXPKvqdNpD0Y9<_2IDU+sWm6Gqqg2iraS$ zKUv$68kIT)k8z0TNa=k$G&HO!w`tG0uCEL423e~3Qilgg(o-&MQPG~l+OSH2P|=nN z%R|nr;fosZ=%k|4Opns#(}772QMn?8{;KA(TI44#eN$U#fOqfZT$}hmu(`u#U;3y~*??0G;AXGNV4u(V|Lx3n8QAzN4?Qg}TnPRRU!cePJ z%(i3rbyPXigJ22_40m8B$ZRlay%x6?B9`0FETe$IdvrqVzW(+R8A@r`I~m^V!&~K zWsu=KENz%zc5xcBJ4GzaDN7?wce0{;6u8Z_V<-4eERoEhJL{$*$qp$zLntTH&|P

*8;MnackFDPWg!?VdG--7Wkz(n$1wI<${6 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%0DcO|qm2`~m>|splJ|;X+b&;Vqk%dJRAQS9V z%FwvKCC+KW)lnIE1~uA>$f*v^ha^QLS|07dFIc ziHkXE6vv7z5&Zkz4cC4xwdAj;i`!VLdgrt_r&H#^aET<&PNUt*{G^(nb;+&!uul(HwmB>mrXMXP0;*bmFI+C>BmijbJc%<0Jz``QC%1P_wgk(+FvPjrH~ zuSVJitE>U#9ewAFzT3x^?$nK;W&2yqmWQTOGVBJ5buq(Va_|Jc)+C|n+XnL4zZ`PR?!ebm_^QJa6eLol=1cSGE0b#S751p2_NiIgPn5yYFab?$oLnNIgI zFQFY%UVb1kg~qi)kFMfbsNblD+{sfms8O}9oU4pB2Y+Wr6tOZWG{lXhm*(= z9A!7-@H8xrqsxa5DxBEy|J_34Cm$A?pr%PIyGpl8bq;;7rHejS^W$&=sljZ6j>5%t zMpv!VByM2{iqIjZui-H(=P5ELvoaccn(ggk=jdNlFK~Sje*skp;MBUE=kFP85}d55 zLh2@@;0<>jlekOO?z6D-wh5Tc{r&DzJaJoX#c)s$4`dA>_~h9gaha_|^7zf$HJSKi z0&X5VBr8xhuJkRmBcpNN3P@S)wR>8WU%Nt9+Ah=7Wy*Djvk#6MHnJriWw62A-_Ycv zUd@=RwY%F-F_IC>%ll7UKqMV9*PMWFyGwxGh+4$a#g3>BpJ_LDCkE#9K+e4j&Fb^o zsE)*zM&h-O@Z`^GeGXQYA0G||)q3#j)&Ar{n-m<9Hxly1p5x58vpCC-zMP((u3)OkK!K9mPiAw*Y`rDZjHj>?_$QnNG8!9?}Cxfag4VQ{lb1w$x71E3m78er*Pek&180X zdoB_XwbqcVetu7vmznAOsCWt=aiK|gxAjRLbf}-`bPE*wn^NWq+^JY0P^GX-a@vo56YJ}LpgQw7b148N?T0xU93M|mK|6f#oz8tw^}ILBQz`=l z5Spg23WYbpSbor_*k$|3P?R(nheWgat%5kw+OJ>U2F7-l`9|KrCs6TxZ-<))Zv5rY z_;?I(P+uL;PYj$(9G8Kc)NoY@3c8xcuS{Rx02VtrV^sIR?gxWideX}fk!LW zXt=FhPUdF~r>!*Wae~WVWlyw`XcC<>vjO#(bC^^NszfU|4zjSU7uOzHq*|vrwsYjo z;pEPnR`-9bg%dcxV7e1+ESq?m8HOYkSqlpg;_$ZfdRC*C<%Dac6pZ&2GorU~P8?3RC&y|$X(E=*ZQK4hOrd;cR`&<5{2{Pc zlEybhrz*mDLWY2Tjb20Br{P}xMYo2AXayTcv(64fBhh@-X0qcrcHnIACcX2k?5ax> z_=j z;sDr+JQwLp1mTv&g~zeXDARG}4_xY)or|w5ySf2oQTc2562**Qzx*Z1YDnjD9RiyK z90U8D9n+8|IV@MdfENxH=bkvR4(ZwyFTFb_LxCdJE-0bq%&k4K7X@OUID z>5)LGf?{?N?1u;=hj{=s);H}h*%$LKejn>&M@F;YR*d^U9%W77}-oQ|*V}?2c+?{M*_tHsG|BYr=2oSeWC^ME! zuw!mEcK&72sGuP|OL}FQtjCPr%Kf<(h-3W~FYpw;igZknQ3k~dIjvWEcZDv9tSts& zrl~23+Sb%#4VAG_sn7?Dbfs|ljfU(tgJZ>cy)8_lD`S^b0ydXYo>6d#8DwB9;LlS9 z1W}ts9I>cKOQ zYAzwu24w}euEP`< z)T#5ev{!u)dWahApi6bKKgVrZODK2N33}c>)7AbwdbmTNmdk@yLx1LQYGJIf3AaimAw zYs6Zn%yq*hS+|Zi%dVY%gStK`yz@xNVU}b8zhvP~qU-w?&mTGF;3aTLpE5pmQ%0L5?RgZQgs*3Ig+Qn3L2u$hwctcH!-6Gs+A&-=UrA84uO;1 zx8~paHObOck47Rkpb*l>t)xAxZ`MMJGV@AA4(i3W;T^C-MLp7@g&`Uu4S!Q z#hTG;tc-D?(0gTYDhaseNf}S*PUze5;9Qepd-oUmHy-+&LY|1+T`g+rhw+`^)_&7r zV*j1>(jY~okqjpII@v0QW@Xo2<48@SJVy(pyh)gt%P zXU=n5`F)B;&XH}ZN8&9Jp`J43Fqs6v#VoA+PF<7Glbar#E++@N4?a4>5vzZf>u(Lg zlYKLdp-xi6qfI~hrn?g_imlg?XC0gTxGS(&L3LJ}NAsGj}G3g=yB zvPgzhyq#|vnroBxycMG3^6=Hvbn18pQ`|OYPD`oq?Rt`%VALS!w<0slRHwsqAtDhU z%}D}~5eY^wo!W8{gWZ>nn(a2^2&+f#*(PRY$inupXMca{!Ym!;UJyw%C@|x5k_un= zy~*7UJPwcmqx1dE!>6h#D02P-EYXBlIaZQLkSHU*15g2Q7QkVHlx|`vRD*pYDj|}e zorL=%>St)3QjX)|~|bC&E77ulicm6P+V z?=hUw<_iOZkGTn2?$$S`4Q3gF-PLG#@R28)Ns|9nRgz{Q7{)jbGzY}44mzs^=UV4C zV#aC-hz14x5zx3YSpugZQ+MRsxtu=O!(B7|W}X%T? zI{i&C+hdb>4)@Ctsf#5mv$iM9O^It=m#R{kP56Z^)@2&7EL)dtf4*hFbaf{g_?Mx2 zN%U+ga=Y_@&$ixIW=pWF%%T(L7X%O;g79W}Qo_vlkU{ zOz>qW5_MTZIxgAq2wvI8EX6=nffQlV108S$pUy{ttCOVm*%0wK+~2_GV|J5%Pg_XJ z@^&fZIZ?Df^#i}pJp3Kd4y;pvStQAPgJ#zJH!+nRE5|vHN3z+iWVME*H-@*TKvhCv z=by__oW$*T#^;kL-#F-8SyHO(=C?W6p_*!2%8L{9!G2>EGXFM3bg>L z4M7iEqV!vy|MD!xq2Tu6CAFMHv62Cu+=~q@Yo#@*-PX%|3yX;~R_Lt$@f1{%)geTW zQ&5I8$s)SS?y*YRgZIa?9V8|RX2Ut1O26b#t@Y%`Q5848nE1z%AGP>)rU94&{sFW< zW;qoNUotN<0+W(_9oAWS8CQfo?q8IJT0kuBoJRdp=OE#(WP-$*pb$FFlqPs7&`)(u zseQYH9 z%0$`o%uTlJfEw&G+amtZnt9BRaRr&k4sfY(2#cm@Emtceha~#ZKX~xRBWE_t1~weD z7MZB!8A5#&w;!Et6e9w9Fa29oGC#{sKR$=ys77daMyPhprry%q?Z(gqf8CyU^V4~L z27mQT#PUoeikb;?W9jzBem76@h4!6+3X%y9eXmYIh!dW5D3MN> zwY#v+s(c_D;fYb&ux;zktM&I#d#!@CJWN%_-y<1<4x{o5bUh1a(?9f#b%oCIJ;aT=o9kLv+`N936CwmCoG#&l zls+~eE+SG%FxPj{wbWD;Z?1HN8CYueCZIya7LxWM*O=Lf20|W|4ljJy5~eBnu}JLd zM)lpWni9{VYT~+2iF3l`1-4PT(Tu_ePQ+iI{FXw&TeCoAotOehc#x6ZnAsejmK0UK zu5?&qR)>0W5jDH*kbPahn z;+h%5ky?8>bdKxd4~#SYfg9)=<${i(d7lTfm5>AW8cwJCDbv;VI?phe<`iwj1z+eF zsBDEeDuj(&tn+&&9-MUdnM{Cd5b?o(k%k|7oZqR{gLZfnaX*e%}y3 zsS}{`7A>Fx4joZn-c|&0u%mzes!Hl~{pb;JPN2FSDNQqYrF$y@W++g>Bsf}eSB3k7 zW~;(7J*kv$vu84A$SK*I&L6^>zVb zF8tHhMgosm;KCatmG+GY<91oePO!D8pS{$8a5FPucnYe4&3)a7wB2UV2BtRgyXUG z&xcb9#{04XNLbdHWBaBO~?VQpjzj{M)YHx20JV>}ehp`qk?!eRDf;j}*5ojQ&a0M?% zjwn}AnCFn~p2pX02GrG7tvs+OonBxRxWLTz4QHGk_#nA@L&_jC!NCYPca-jpWtZdF z<-01(wZ8n_%z8kT<^fJ!EHwo{%&QIL<4AmJGGm6$P(y#v;?zrAQZx5J_mxO7HZZX zpY_Rrb)a!>Dx0{a4Ctp0C#N&1Bcv!Q1QZ>tRQhV@JGNE>dQ+cEIrypD1~4Jc7Gdg# z#Iy}WbKPd`==KaU&kjzWcpbP@9hfOnx+w9`{MCQUc!Ij>eQyd zLqMFvD`jP?n9ILgM~b@#T8Ol(4B7A3oOY|+ zi{#EEcu~B^rMK?v`A6W4^;aScDonpsK>e#j%lgm+F{vRhqf7%~X69ELs)`0*UtV!` z3Yx;wW`Aoia33Kjjx;n ziULMAq+zK<%t8Jiz*ttbJYAx+i!l)`@NFUNYJ~uqOR>Lb_T-F)dn%5JD!E&#<}>tE zH4eullunJlF2jkWf@xXK$1nb+LnXu5%APRgEZs?k_F@W+1BbfXOfw#Ltzbl|zvOPD zpHTjRk5 z*KEmlAKmblDxzTVJfl;H2_j_jcGrF=f9LZHb;2bMq?H4ROyAEB>6ooGLTMyG_wnCAFd`%pE6HWZ zFm{6O28!^;^x~Rm0ZgcptY?~=23kh*+;At6O5_^!M(U2gdQ9fQ7f9|eQyR3YOg!6} zHING`^t=cCpWKz#m|0c?;0H_X;aXP7oq}(E{bWHcE65GQ8F?x27_e!Vjhf{2?6E%q zf$@3K#R*hSp0sjrOU!RuxY8l!l*w|kM0T1OP}sOWjicQJbNNf(7|5kDX4~RKuxA0N z#pyzws^{pR24i+4Z>WcAkPD6PA7B@4$?bg;fD*21dpPn4EIIz%>`>i8l*tu=_!y>R zcr9beA`Bd>7jJz~L5)DQ7E~^BcMpOb$RZ2@W4&nO#r>Jh_;gQohbE7{#L*ga?;F_k zJtKMC%+tG05m`qbWt{rq$<>(tu9bg)4iS8b-okG_8j=$M!0Z3{a*Em_h~5@n07qqHE4)vI9@~RrE_ZTL1n0)-v1_d~W#qoS~ zLYOSi%C3ihrw1y?7j|40_9#5z^H>5Z$cHzlMAr?077p~7Q8gGKiz&^`HdDPlZ9H*C z!1ryFm!Rq<$B#@tVxQtQTiLO{d1#mfD{7j_&=iH0YLG`C*|i)TV}#*3uP-_lBAGOF zs{*`Jy1tsk*U$D3AHqli1zT5e2mQ4CO>BpHD3BH)-=z!hp1d(W#?1*WKd%(n0ZEMH z$QA%hGcC!;2oGjR|Rj zT^G8MGLWw4t~%OYi;~5*WmwOpE344J|Ffp<%Go#tuqYi!^fzS@xg2^d%$A$fFZHGG z1eFlyGU674+&xj)iXYQW!)eqkBd`W^&ZPVj!rJ^6y0Jv=FHcr<+tz3-OSg-3-0GNX zPm}`6SmMa!u$s?s0av%1K9$xKdwVIp*z&#I_(HH^=}a2|sGz1BL%g+=6>o)j#|0Mk z>t+--dj$Di7TFi2 z5ooTadFi){6HWkEOf0v5hSpinVo72Ybuyptn=B8lDfiSCoPrH%s^MUpCfxI&7}F9{ep-3YX9MJH|T5WQtXwC+h3uOz}Xz)=Hwc4~D) zLS(3Wl|j|V;kxF=;OxXx$o@PNV#%PM@%@9GjWLgS!#aQN)1(WvHgQz(p;JELGc&^w#bfvqQ z-;?k%BxO93QKx;;IN>z4EFy#?<;RFO`G0@0S$|gcv!@|^6!G<1`$*NIJAX!3$sajt)(n#wtKfyN zooH()%`(5L=zwZ@uX1W^3Q(1N^gh#6B93(i$htG{5ZtVuOs9w0YNzQv>de_xTt52z zh#~>3d5LK{S=FWPuZl>$G4I`Pi%K`hH-FJ33U8atrX}51@?SXH!DQP5cpHD&9_8Zr zG|t9hRl=7(>GB3;apt#T9@oSpiMz>1dsK*m3acqC)Oo9T0ezE6tx3TnlBJHiL8w0x zG3n!u_r+k8aN`dpD2jN(3Mab{j%<4SR9OP{^xi_EVdA;MM;TOX>A?UpPU49oPa`?( z^=Cxbj;_MN9TL1lRz*HP%j4c;knD$MDe**EQr&i`%Epo*#~+ z*$^JF^a(-5o|DmgR{;Q(6T0{yj2_rta##xE#wOA?P4_Bn%N8{cMBo| zq7uBXhtJ(geo-uUO;IJ{s`}>8Q{Af;L^@w=!@Cy&@g-G52yt(OmePYBQ2Ii;ew-vX za}r-cZNZu;O&rlZR?<9?fQwghINy?pZkY67HTD6^=n+dQs_t5L-#(y21aW%?N%IO)56>|ke#vrtu>{#@Jvttwwf zEKGw!J(LU1E%!l{Qb|JuXx+L>fYWp^A8+p>|XyUQ(k4J?ciCBP`t++ zHTL<&^|;iCD3w}H44Tnj6vvgaKHR)2l0~4<(9fDlOzaP%tk)IHWB&mVbhE!z#HfCf z{14#;Rxw5x+kX^ybDGSQeC}q=&@mGg*)&X~p?H4rrsu8cy0Wj8zH5L9~ zbiJ;tP!`gVhs%Wn&$I(FYz}|@rkf>&9H>N5e;U_srsJBdsiAo#SK0SE8b& zv#PkN=9Jg?nweNiQ-m=-Q7IFLbhEfss3CGe45TkCbdQ41ZxyXPAQo=16`HR^d$WR} z{ftI{iP9F9U;Z;=Kew#JrUJ*jn&wGW{H|HbuZHZUR26d8Xq-$cPOtAmGZV!e{&<4> z6fFKs;Uck}0_{u|s#pK83SZyMH5uy^#@F=8o*y2_@;To=P&H9!mXcacGlnENoCrSl z*DIMOG^^ZqWJ47XFQz{JLs5ulb#fNARSzGkS%oAxN{oG8&o>9V47#_ggqL$d*)GsQ zL~{-Ix^@LwKm`nJxo_eAopeu>0!(7656v9IiST*$u^w>;);gYutVVRm@uypg(AT^vYE-l*?$0W8sM{E>b07d3E6k>`)-%-)0%Mq z>wqnROaf~ljI4$nH?yFRDK6azM>iLo&fM)bQ(sA4f+axRKRq7+SKjG$p$y6;1IwG=s;m__M52&ZQ3eaS<&Q)l^0Uz8XD&p15+YN3mu%sEU*b_JXaGHPxyfw)5{czb z5B3#-pQQ&#xi)xU?3`7O^5Er!ScF_k`8ZB5UU1XNR#0$fyqUXnzTj-Rk>ikSyZxbD zy38phXk)0%hvZ;@+R&$W7 zF1fGBsxTREG(N`n^;c?j@_h&1q^~cro(|4(xO*t&oxF64Xm@ZQBW4 zf}MJ~n~p%Dq3rRA>#Z-3rLrx!c0X*0Ol+?t1=uPr*4b(k7+r|M#VddU=RVvVVwtwgB~p1^nA zC+jVmowdhFqcV&1qNfpsf_u6li_m8&9R!BO-fm`jBSq!%!y#%)U()UJ58Dp+FE5 z_TKG*`=*k;c9$k~~{rS>2Mlea$Jj*8!!(^GQjD4n= zX>Xu!n{}?BE;j<=EGECN=2kc@9Ewuh-SCP$iG9aYN?t6=hVuh4VFm<(Fg$ITUpO#$ zV#fTQ#w@mQBjk8`-+q}-P}@4)?wLI#+4;q$-thRHI&ajvuP+;k5p*q~T|*tB5MTVI zrE!y^^(MDIG7#2s@vo*3;~zFv&Eem9Gub2M9_sono#}~-3jFi9a=hr1y>A3;fAXRy ziA7dc>4x)5No?h%H#vpcJ%duils~GgQ$OlqofoVoPTNK8;k1Qa(;U81{sHz&T`mpv?Xcf|EX?;I@=ri;IF1wd z%hTA3ecOuUpTJF)Rn#wh{@InB4r44Ze=hL7<5xSg#;ak!?@RDRY(RTjl_D_%f6J;WTnOS-df`9DFoh*H_)z@aIjD{M z91|SNVmH>Dp*(r^b{T)Kt>PkcxIv=OpZW}$rcTK~x>;c6{-w{~rT+m+GY_(_^yS~x z{s(B4W?+eYTcdco7nJ$*PK9M%jaziPx-OpVIVi_ScPf4T8usS*H1!_J_Ym%w#zVeFN#ou@Yjl_SJWdt!-E^7xmcpUm-MNL9l?;?l6)IY8*7Sj_ zgG;Kv^Y3+N3B<^--!D&>o+e)~Jl~)2BQep)p>Gpuxc+i;iEVAx>Ad)Y-U_eU86g$A zi(UU^Y}z15kIr*j9`Q%z7rD}0;ZL@eD$_qeXvE2Qb+4w(vJOa#+X5#pu{;>M{s`!C-O;Mgf!qiu#~T+54h4;+>& z3oVY}8>6q3JN_ZfmuZ-eijRWk2MEes<3~JKq569W_R~PVUZsdOGYMYL_&~O) z^3Kok?{;;$cvQXVUsdXW>rF|aI1Xd%G;JZ}x#8bRDMI&h*e9natVgdMfZ8p8kkWM8 z*v_5je_ap@EPK2=2ByR98ZU-~*Bg~?J-nn>QW+=qc(ao<#f0nm15fasp8U+Wpeqqt z=rEx48>q=S%{aR^8f5+fq;?)m67My00!l7_15b?o$!oTp^s4*^poJf%WKzl&A~w0c z%eD(36g*D$tTWr51Jy%%mXIqW|CQ#dXpSPSEam`g1VAF^scx*;%SxYli{As0?l3OR z+TK$+O2kem0S9-1$?X04!ha?~7t&j<^lRqBWXaL%3mS!w-u`kXoh|kR2(_@>CF-{d z?etCiN$m4~tKt?r;Mb-wLvZ4W))X~w{EKkk%Fi(UsuqS;HQ^YOXjCHIi}9Okt?C?P z{N+{GT3@$LG5YC4PX@pGbF;SF5wNfR0mdoJC}smG9OJ>f@mAv0=;nlkIm9k}?fFTU zvk%_4JE`1pQnq~sW)xY^$|QA3>~Y!L4WI{XQ-ldzW?Cv-V+##~X&=vMI~0>Tts>;E z&M0ET4#4U1f6@n93voRMr#d>GYs0&zptvz1m`PfV-lM;7Y07s%H9SuNMgT@8_JPj_ zC4@h2%CKT(NAFMl*lD5BSNYnqKlLEM$z9XGm_VM3{{UYf?VF~m*!#A24H^g2;6126 z(2Ivz-NBNp{Hv=&_7RsM3H_aMZE){1;+)6xu`yRnH->S4hxmv>JK+zFx>xodk*VfN zoWzpzRGbhp9)CS@E1JoO^WvR39%MwYXyg;AS1jG7uT2)8@PGHl*1`Ay2*E#e?cJR> Kn(MfKi~j>QBS^jg From 990312fafb6216e0c58dd2708131b72353bfd312 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Mon, 13 Jun 2022 09:49:29 +0200 Subject: [PATCH 041/677] statusnet addon AR translation THX ButterflyOfFire --- statusnet/lang/ar/messages.po | 245 +++++++++++++++++----------------- statusnet/lang/ar/strings.php | 1 + 2 files changed, 126 insertions(+), 120 deletions(-) diff --git a/statusnet/lang/ar/messages.po b/statusnet/lang/ar/messages.po index 2a8862b8..96722c86 100644 --- a/statusnet/lang/ar/messages.po +++ b/statusnet/lang/ar/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# ButterflyOfFire, 2022 # Farida Khalaf , 2021 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-21 18:46+0000\n" -"Last-Translator: Farida Khalaf \n" +"POT-Creation-Date: 2021-11-21 19:17-0500\n" +"PO-Revision-Date: 2014-06-23 12:54+0000\n" +"Last-Translator: ButterflyOfFire, 2022\n" "Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,105 +20,30 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: statusnet.php:95 +#: statusnet.php:97 msgid "Post to GNU Social" msgstr "" -#: statusnet.php:146 +#: statusnet.php:148 msgid "" "Please contact your site administrator.
The provided API URL is not " "valid." msgstr "" -#: statusnet.php:175 +#: statusnet.php:176 msgid "We could not contact the GNU Social API with the Path you entered." msgstr "" -#: statusnet.php:248 statusnet.php:252 -msgid "GNU Social Import/Export/Mirror" -msgstr "" - -#: statusnet.php:267 -msgid "Globally Available GNU Social OAuthKeys" -msgstr "" - -#: statusnet.php:268 -msgid "" -"There are preconfigured OAuth key pairs for some GNU Social servers " -"available. If you are using one of them, please use these credentials. If " -"not feel free to connect to any other GNU Social instance (see below)." -msgstr "" - -#: statusnet.php:274 statusnet.php:291 statusnet.php:318 statusnet.php:325 -#: statusnet.php:372 statusnet.php:698 +#: statusnet.php:243 statusnet.php:656 msgid "Save Settings" msgstr "حفظ الإعدادات" -#: statusnet.php:276 -msgid "Provide your own OAuth Credentials" +#: statusnet.php:255 +#, php-format +msgid "Currently connected to:
%s" msgstr "" -#: statusnet.php:277 -msgid "" -"No consumer key pair for GNU Social found. Register your Friendica Account " -"as an desktop client on your GNU Social account, copy the consumer key pair " -"here and enter the API base root.
Before you register your own OAuth " -"key pair ask the administrator if there is already a key pair for this " -"Friendica installation at your favorited GNU Social installation." -msgstr "" - -#: statusnet.php:279 -msgid "OAuth Consumer Key" -msgstr "" - -#: statusnet.php:282 -msgid "OAuth Consumer Secret" -msgstr "" - -#: statusnet.php:285 statusnet.php:678 statusnet.php:690 -msgid "Base API Path (remember the trailing /)" -msgstr "" - -#: statusnet.php:310 -msgid "" -"To connect to your GNU Social account click the button below to get a " -"security code from GNU Social which you have to copy into the input box " -"below and submit the form. Only your public posts will be " -"posted to GNU Social." -msgstr "" - -#: statusnet.php:311 -msgid "Log in with GNU Social" -msgstr "" - -#: statusnet.php:313 -msgid "Copy the security code from GNU Social here" -msgstr "" - -#: statusnet.php:319 -msgid "Cancel Connection Process" -msgstr "" - -#: statusnet.php:321 -msgid "Current GNU Social API is" -msgstr "" - -#: statusnet.php:322 -msgid "Cancel GNU Social Connection" -msgstr "" - -#: statusnet.php:334 -msgid "Currently connected to: " -msgstr "" - -#: statusnet.php:336 -msgid "" -"If enabled all your public postings can be posted to the " -"associated GNU Social account. You can choose to do so by default (here) or " -"for every posting separately in the posting options when writing the entry." -msgstr "" - -#: statusnet.php:338 +#: statusnet.php:260 msgid "" "Note: Due your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " @@ -125,47 +51,126 @@ msgid "" "informing the visitor that the access to your profile has been restricted." msgstr "" -#: statusnet.php:341 -msgid "Allow posting to GNU Social" -msgstr "" - -#: statusnet.php:344 -msgid "Send public postings to GNU Social by default" -msgstr "" - -#: statusnet.php:348 -msgid "" -"Mirror all posts from GNU Social that are no replies or repeated messages" -msgstr "" - -#: statusnet.php:354 -msgid "Import the remote timeline" -msgstr "" - -#: statusnet.php:358 -msgid "Disabled" -msgstr "معطل" - -#: statusnet.php:359 -msgid "Full Timeline" -msgstr "" - -#: statusnet.php:360 -msgid "Only Mentions" -msgstr "" - -#: statusnet.php:369 +#: statusnet.php:263 msgid "Clear OAuth configuration" msgstr "" -#: statusnet.php:689 -msgid "Site name" +#: statusnet.php:275 +msgid "Cancel GNU Social Connection" msgstr "" -#: statusnet.php:691 +#: statusnet.php:283 +msgid "Globally Available GNU Social OAuthKeys" +msgstr "" + +#: statusnet.php:284 +msgid "" +"There are preconfigured OAuth key pairs for some GNU Social servers " +"available. If you are using one of them, please use these credentials. If " +"not feel free to connect to any other GNU Social instance (see below)." +msgstr "" + +#: statusnet.php:285 +msgid "Provide your own OAuth Credentials" +msgstr "" + +#: statusnet.php:286 +msgid "" +"No consumer key pair for GNU Social found. Register your Friendica Account " +"as a desktop application on your GNU Social account, copy the consumer key " +"pair here and enter the API base root.
Before you register your own " +"OAuth key pair ask the administrator if there is already a key pair for this" +" Friendica installation at your favorite GNU Social installation." +msgstr "" + +#: statusnet.php:287 +msgid "" +"To connect to your GNU Social account click the button below to get a " +"security code from GNU Social which you have to copy into the input box " +"below and submit the form. Only your public posts will be " +"posted to GNU Social." +msgstr "" + +#: statusnet.php:288 +msgid "Log in with GNU Social" +msgstr "" + +#: statusnet.php:289 +msgid "Cancel Connection Process" +msgstr "" + +#: statusnet.php:290 +#, php-format +msgid "Current GNU Social API is: %s" +msgstr "" + +#: statusnet.php:307 +msgid "OAuth Consumer Key" +msgstr "" + +#: statusnet.php:308 +msgid "OAuth Consumer Secret" +msgstr "" + +#: statusnet.php:310 statusnet.php:636 statusnet.php:648 +msgid "Base API Path (remember the trailing /)" +msgstr "" + +#: statusnet.php:311 +msgid "Copy the security code from GNU Social here" +msgstr "" + +#: statusnet.php:313 +msgid "Allow posting to GNU Social" +msgstr "" + +#: statusnet.php:313 +msgid "" +"If enabled all your public postings can be posted to the " +"associated GNU Social account. You can choose to do so by default (here) or " +"for every posting separately in the posting options when writing the entry." +msgstr "" + +#: statusnet.php:314 +msgid "Post to GNU Social by default" +msgstr "" + +#: statusnet.php:315 +msgid "Mirror all public posts" +msgstr "" + +#: statusnet.php:316 +msgid "Automatically create contacts" +msgstr "" + +#: statusnet.php:317 +msgid "Import the remote timeline" +msgstr "" + +#: statusnet.php:318 +msgid "Disabled" +msgstr "معطل" + +#: statusnet.php:319 +msgid "Full Timeline" +msgstr "" + +#: statusnet.php:320 +msgid "Only Mentions" +msgstr "" + +#: statusnet.php:326 +msgid "GNU Social Import/Export/Mirror" +msgstr "" + +#: statusnet.php:647 +msgid "Site name" +msgstr "اسم الموقع" + +#: statusnet.php:649 msgid "Consumer Secret" msgstr "" -#: statusnet.php:692 +#: statusnet.php:650 msgid "Consumer Key" msgstr "" diff --git a/statusnet/lang/ar/strings.php b/statusnet/lang/ar/strings.php index d9d2f7af..1cd72f3c 100644 --- a/statusnet/lang/ar/strings.php +++ b/statusnet/lang/ar/strings.php @@ -7,3 +7,4 @@ function string_plural_select_ar($n){ }} $a->strings['Save Settings'] = 'حفظ الإعدادات'; $a->strings['Disabled'] = 'معطل'; +$a->strings['Site name'] = 'اسم الموقع'; From b00459d0772d9cecbae3d91111b90c80abd745d7 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Mon, 13 Jun 2022 09:49:30 +0200 Subject: [PATCH 042/677] mailstream addon AR translation THX ButterflyOfFire --- mailstream/lang/ar/messages.po | 47 +++++++++++++++++----------------- mailstream/lang/ar/strings.php | 1 + 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/mailstream/lang/ar/messages.po b/mailstream/lang/ar/messages.po index 29a79f1c..31816d54 100644 --- a/mailstream/lang/ar/messages.po +++ b/mailstream/lang/ar/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# ButterflyOfFire, 2022 # Farida Khalaf , 2021 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-21 18:37+0000\n" -"Last-Translator: Farida Khalaf \n" +"POT-Creation-Date: 2021-11-21 19:15-0500\n" +"PO-Revision-Date: 2014-06-23 09:54+0000\n" +"Last-Translator: ButterflyOfFire, 2022\n" "Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,80 +20,80 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: mailstream.php:66 +#: mailstream.php:77 msgid "From Address" msgstr "" -#: mailstream.php:68 +#: mailstream.php:79 msgid "Email address that stream items will appear to be from." msgstr "" -#: mailstream.php:71 mailstream.php:382 +#: mailstream.php:82 msgid "Save Settings" msgstr "حفظ الإعدادات" -#: mailstream.php:225 +#: mailstream.php:301 msgid "Re:" msgstr "" -#: mailstream.php:233 +#: mailstream.php:314 mailstream.php:317 msgid "Friendica post" msgstr "" -#: mailstream.php:236 +#: mailstream.php:320 msgid "Diaspora post" msgstr "" -#: mailstream.php:246 +#: mailstream.php:330 msgid "Feed item" msgstr "" -#: mailstream.php:249 +#: mailstream.php:333 msgid "Email" -msgstr "" +msgstr "البريد الإلكتروني" -#: mailstream.php:251 +#: mailstream.php:335 msgid "Friendica Item" msgstr "" -#: mailstream.php:296 +#: mailstream.php:404 msgid "Upstream" msgstr "" -#: mailstream.php:297 +#: mailstream.php:405 msgid "Local" msgstr "" -#: mailstream.php:364 +#: mailstream.php:481 msgid "Enabled" msgstr "مفعل" -#: mailstream.php:368 +#: mailstream.php:486 msgid "Email Address" msgstr "البريد الالكتروني" -#: mailstream.php:370 +#: mailstream.php:488 msgid "Leave blank to use your account email address" msgstr "" -#: mailstream.php:373 +#: mailstream.php:492 msgid "Exclude Likes" msgstr "" -#: mailstream.php:375 +#: mailstream.php:494 msgid "Check this to omit mailing \"Like\" notifications" msgstr "" -#: mailstream.php:378 +#: mailstream.php:498 msgid "Attach Images" msgstr "" -#: mailstream.php:380 +#: mailstream.php:500 msgid "" "Download images in posts and attach them to the email. Useful for reading " "email while offline." msgstr "" -#: mailstream.php:381 +#: mailstream.php:507 msgid "Mail Stream Settings" msgstr "" diff --git a/mailstream/lang/ar/strings.php b/mailstream/lang/ar/strings.php index 748e3188..81248593 100644 --- a/mailstream/lang/ar/strings.php +++ b/mailstream/lang/ar/strings.php @@ -6,5 +6,6 @@ function string_plural_select_ar($n){ if ($n==0) { return 0; } else if ($n==1) { return 1; } else if ($n==2) { return 2; } else if ($n%100>=3 && $n%100<=10) { return 3; } else if ($n%100>=11 && $n%100<=99) { return 4; } else { return 5; } }} $a->strings['Save Settings'] = 'حفظ الإعدادات'; +$a->strings['Email'] = 'البريد الإلكتروني'; $a->strings['Enabled'] = 'مفعل'; $a->strings['Email Address'] = 'البريد الالكتروني'; From 85220c4bf6ad195b7989c9cc04cae6a3e4e55622 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Mon, 13 Jun 2022 09:49:30 +0200 Subject: [PATCH 043/677] nitter addon AR translation THX ButterflyOfFire --- nitter/lang/ar/messages.po | 45 ++++++++++++++++++++++++++++++++++++++ nitter/lang/ar/strings.php | 9 ++++++++ 2 files changed, 54 insertions(+) create mode 100644 nitter/lang/ar/messages.po create mode 100644 nitter/lang/ar/strings.php diff --git a/nitter/lang/ar/messages.po b/nitter/lang/ar/messages.po new file mode 100644 index 00000000..83bd4c11 --- /dev/null +++ b/nitter/lang/ar/messages.po @@ -0,0 +1,45 @@ +# ADDON nitter +# Copyright (C) +# This file is distributed under the same license as the Friendica nitter addon package. +# +# +# Translators: +# ButterflyOfFire, 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-10-01 16:10+0200\n" +"PO-Revision-Date: 2021-05-21 12:58+0000\n" +"Last-Translator: ButterflyOfFire, 2022\n" +"Language-Team: Arabic (https://www.transifex.com/Friendica/teams/12172/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#: nitter.php:52 +#, php-format +msgid "" +"Which nitter server shall be used for the replacements in the post bodies? " +"Use the URL with servername and protocol. See %s for a list of available " +"public Nitter servers." +msgstr "" + +#: nitter.php:53 +msgid "Nitter server" +msgstr "خادم Nitter" + +#: nitter.php:54 +msgid "Save Settings" +msgstr "احفظ الإعدادات" + +#: nitter.php:99 +#, php-format +msgid "" +"In an attempt to protect your privacy, links to Twitter in this posting were" +" replaced by links to the Nitter instance at %s" +msgstr "" diff --git a/nitter/lang/ar/strings.php b/nitter/lang/ar/strings.php new file mode 100644 index 00000000..850cee90 --- /dev/null +++ b/nitter/lang/ar/strings.php @@ -0,0 +1,9 @@ +=3 && $n%100<=10) { return 3; } else if ($n%100>=11 && $n%100<=99) { return 4; } else { return 5; } +}} +$a->strings['Nitter server'] = 'خادم Nitter'; +$a->strings['Save Settings'] = 'احفظ الإعدادات'; From b6342eca0a1e4c13c47bd03fd62e5cdc773f7113 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Mon, 13 Jun 2022 09:49:30 +0200 Subject: [PATCH 044/677] rendertime addon AR translation THX ButterflyOfFire --- rendertime/lang/ar/messages.po | 33 ++++++++++++++++++++++++++++----- rendertime/lang/ar/strings.php | 1 + 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/rendertime/lang/ar/messages.po b/rendertime/lang/ar/messages.po index 7bcbd866..4533380c 100644 --- a/rendertime/lang/ar/messages.po +++ b/rendertime/lang/ar/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# ButterflyOfFire, 2022 # Farida Khalaf , 2021 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-22 02:53+0000\n" -"Last-Translator: Farida Khalaf \n" +"POT-Creation-Date: 2021-12-12 22:09+0000\n" +"PO-Revision-Date: 2014-06-23 12:36+0000\n" +"Last-Translator: ButterflyOfFire, 2022\n" "Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,14 +20,36 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: rendertime.php:36 +#: rendertime.php:30 +msgid "Save Settings" +msgstr "احفظ الإعدادات" + +#: rendertime.php:31 +msgid "Show callstack" +msgstr "" + +#: rendertime.php:31 +msgid "" +"Show detailed performance measures in the callstack. When deactivated, only " +"the summary will be displayed." +msgstr "" + +#: rendertime.php:32 +msgid "Minimal time" +msgstr "" + +#: rendertime.php:32 +msgid "Minimal time that an activity needs to be listed in the callstack." +msgstr "" + +#: rendertime.php:57 #, php-format msgid "" "Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: " "%s, Total: %s" msgstr "قاعدة البيانات: %s/ %s، الشبكة:%s ، التقديم: %s، الجلسة:%s ، الإدخال / الإخراج: %s، أخرى: %s، المجموع:%s" -#: rendertime.php:53 +#: rendertime.php:74 #, php-format msgid "Class-Init: %s, Boot: %s, Init: %s, Content: %s, Other: %s, Total: %s" msgstr "تهيئة النوع:%s ، التمهيد: %s، التهيئة: %s، المحتوى: %s، أخرى:%s ، الإجمالي:%s" diff --git a/rendertime/lang/ar/strings.php b/rendertime/lang/ar/strings.php index ab8b6ec8..b5b885f9 100644 --- a/rendertime/lang/ar/strings.php +++ b/rendertime/lang/ar/strings.php @@ -5,5 +5,6 @@ function string_plural_select_ar($n){ $n = intval($n); if ($n==0) { return 0; } else if ($n==1) { return 1; } else if ($n==2) { return 2; } else if ($n%100>=3 && $n%100<=10) { return 3; } else if ($n%100>=11 && $n%100<=99) { return 4; } else { return 5; } }} +$a->strings['Save Settings'] = 'احفظ الإعدادات'; $a->strings['Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: %s, Total: %s'] = 'قاعدة البيانات: %s/ %s، الشبكة:%s ، التقديم: %s، الجلسة:%s ، الإدخال / الإخراج: %s، أخرى: %s، المجموع:%s'; $a->strings['Class-Init: %s, Boot: %s, Init: %s, Content: %s, Other: %s, Total: %s'] = 'تهيئة النوع:%s ، التمهيد: %s، التهيئة: %s، المحتوى: %s، أخرى:%s ، الإجمالي:%s'; From 716efd23fef04cf2e0c40db85845c57b1e71e086 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Mon, 13 Jun 2022 09:49:30 +0200 Subject: [PATCH 045/677] showmore addon AR translation THX ButterflyOfFire --- showmore/lang/ar/messages.po | 27 ++++++++++++--------------- showmore/lang/ar/strings.php | 2 +- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/showmore/lang/ar/messages.po b/showmore/lang/ar/messages.po index ee835aab..0d6f0851 100644 --- a/showmore/lang/ar/messages.po +++ b/showmore/lang/ar/messages.po @@ -4,14 +4,15 @@ # # # Translators: +# ButterflyOfFire, 2022 # Farida Khalaf , 2021 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-02-01 18:15+0100\n" -"PO-Revision-Date: 2021-02-21 18:45+0000\n" -"Last-Translator: Farida Khalaf \n" +"POT-Creation-Date: 2021-11-21 19:16-0500\n" +"PO-Revision-Date: 2014-06-23 12:37+0000\n" +"Last-Translator: ButterflyOfFire, 2022\n" "Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,22 +20,18 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: showmore.php:35 showmore.php:39 -msgid "\"Show more\" Settings" -msgstr "" - -#: showmore.php:44 +#: showmore.php:37 msgid "Enable Show More" msgstr "" -#: showmore.php:47 -msgid "Cutting posts after how much characters" +#: showmore.php:38 +msgid "Cutting posts after how many characters" msgstr "" -#: showmore.php:51 -msgid "Save Settings" -msgstr "حفظ الإعدادات" +#: showmore.php:43 +msgid "\"Show more\" Settings" +msgstr "" -#: showmore.php:129 +#: showmore.php:119 msgid "show more" -msgstr "" +msgstr "اعرض المزيد" diff --git a/showmore/lang/ar/strings.php b/showmore/lang/ar/strings.php index 285ad303..665294c1 100644 --- a/showmore/lang/ar/strings.php +++ b/showmore/lang/ar/strings.php @@ -5,4 +5,4 @@ function string_plural_select_ar($n){ $n = intval($n); if ($n==0) { return 0; } else if ($n==1) { return 1; } else if ($n==2) { return 2; } else if ($n%100>=3 && $n%100<=10) { return 3; } else if ($n%100>=11 && $n%100<=99) { return 4; } else { return 5; } }} -$a->strings['Save Settings'] = 'حفظ الإعدادات'; +$a->strings['show more'] = 'اعرض المزيد'; From 6ba6f78c3e5f04c5085f0ed7df0b1ceca598bcd9 Mon Sep 17 00:00:00 2001 From: loma-one <44441246+loma-one@users.noreply.github.com> Date: Tue, 14 Jun 2022 13:33:36 +0200 Subject: [PATCH 046/677] Duplicates merged Duplicates merged & emoji enabled/disabled --- unicode_smilies/unicode_smilies.php | 342 ++++++++-------------------- 1 file changed, 89 insertions(+), 253 deletions(-) diff --git a/unicode_smilies/unicode_smilies.php b/unicode_smilies/unicode_smilies.php index 77bdfcdb..e2f81058 100644 --- a/unicode_smilies/unicode_smilies.php +++ b/unicode_smilies/unicode_smilies.php @@ -2,7 +2,7 @@ /* * Name: Unicode Smilies * Description: Smilies based on the unicode emojis - On Linux use https://github.com/eosrei/emojione-color-font to see them in color and http://www.unicode.org/emoji/charts/full-emoji-list.html - * Version: 1.1.1 + * Version: 1.1.2 * Author: Michael Vogel * Author: Matthias Ebers */ @@ -22,12 +22,13 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':-D', '😁'); Smilies::add($b, ':D', '😁'); Smilies::add($b, ';-)', '😉'); - // Smilies::add($b, ';)', '😉'); // Deactivated since this leads to disturbed html entities + // Smilies::add($b, ';)', '😉'); // Deactivated since this leads to disturbed html entities Smilies::add($b, ':-P', '😛'); Smilies::add($b, ':-p', '😛'); Smilies::add($b, ':P', '😛'); Smilies::add($b, ':p', '😛'); Smilies::add($b, ':-O', '😮'); + Smilies::add($b, ':-o', '😮'); Smilies::add($b, ':O', '😮'); Smilies::add($b, ':-X', '🤐'); Smilies::add($b, ':-x', '🤐'); @@ -43,223 +44,12 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, '<\\3', '💔'); Smilies::add($b, '8-|', '😲'); Smilies::add($b, '8-O', '😲'); - Smilies::add($b, '\\o/', '👍'); Smilies::add($b, ":'(", '😢'); - Smilies::add($b, ':coffee:', '☕'); - Smilies::add($b, ':beer:', '🍺'); - Smilies::add($b, ':homebrew:', '🍺'); - Smilies::add($b, ':like:', '👍'); - Smilies::add($b, ':dislike:', '👎'); // Smilies::add($b, 'o.O', '&#x;'); // Smilies::add($b, 'O.o', '&#x;'); // Smilies::add($b, 'o_O', '&#x;'); // Smilies::add($b, 'O_o', '&#x;'); -// Smilies::add($b, ':facepalm:', '🤦'); // Bad client support - -// Animal smileys. - -// Smilies::add($b, ':bunnyflowers:', '&#x;'); - Smilies::add($b, ':chick:', '🐤'); - Smilies::add($b, ':bumblebee:', '🐝'); - Smilies::add($b, ':ladybird:', '🐞'); - Smilies::add($b, ':bigspider:', '🕷'); - Smilies::add($b, ':cat:', '🐈'); - Smilies::add($b, ':bunny:', '🐰'); - Smilies::add($b, ':cow:', '🐮'); - Smilies::add($b, ':crab:', '🦀'); - Smilies::add($b, ':dolphin:', '🐬'); -// Smilies::add($b, ':dragonfly:', '&#x;'); - Smilies::add($b, ':frog:', '🐸'); - Smilies::add($b, ':hamster:', '🐹'); - Smilies::add($b, ':monkey:', '🐒'); - Smilies::add($b, ':horse:', '🐴'); -// Smilies::add($b, ':parrot:', '&#x;'); - Smilies::add($b, ':tux:', '🐧'); - Smilies::add($b, ':snail:', '🐌'); - Smilies::add($b, ':sheep:', '🐑'); - Smilies::add($b, ':dog:', '🐶'); - Smilies::add($b, ':elephant:', '🐘'); - Smilies::add($b, ':fish:', '🐟'); -// Smilies::add($b, ':giraffe:', '🦒'); // Bad client support - Smilies::add($b, ':pig:', '🐖'); - -// Baby Smileys - - Smilies::add($b, ':baby:', '👶'); -// Smilies::add($b, ':babycot:', '&#x;'); -// Smilies::add($b, ':pregnant:', '🤰'); // Bad client support -// Smilies::add($b, ':stork:', '&#x;'); - -// Confused Smileys - - Smilies::add($b, ':confused:', '😕'); - Smilies::add($b, ':shrug:', '🤷'); -// Smilies::add($b, ':stupid:', '&#x;'); -// Smilies::add($b, ':dazed:', '&#x;'); - -// Cool Smileys - -// Smilies::add($b, ':affro:', '&#x;'); - -// Devil/Angel Smileys - - Smilies::add($b, ':angel:', '👼'); - Smilies::add($b, ':cherub:', '👼'); -// Smilies::add($b, ':devilangel:', '&#x;'); -// Smilies::add($b, ':catdevil:', '&#x;'); -// Smilies::add($b, ':devillish:', '&#x;'); -// Smilies::add($b, ':daseesaw:', '&#x;'); -// Smilies::add($b, ':turnevil:', '&#x;'); -// Smilies::add($b, ':saint:', '&#x;'); -// Smilies::add($b, ':graveside:', '&#x;'); - -// Unpleasent smileys. - - Smilies::add($b, ':toilet:', '🚽'); -// Smilies::add($b, ':fartinbed:', '&#x;'); -// Smilies::add($b, ':fartblush:', '&#x;'); - -// Sad smileys - - Smilies::add($b, ':crying:', '😢'); -// Smilies::add($b, ':prisoner:', '&#x;'); -// Smilies::add($b, ':sigh:', '&#x;'); - -// Sport smileys - - Smilies::add($b, ':basketball:', '🏀'); - Smilies::add($b, ':bowling:', '🎳'); - Smilies::add($b, ':cycling:', '🚴'); - Smilies::add($b, ':darts:', '🎯'); - Smilies::add($b, ':fencing:', '🤺'); - Smilies::add($b, ':juggling:', '🤹'); -// Smilies::add($b, ':skipping:', '&#x;'); -// Smilies::add($b, ':archery:', '&#x;'); - Smilies::add($b, ':surfing:', '🏄'); - Smilies::add($b, ':snooker:', '🎱'); - Smilies::add($b, ':horseriding:', '🏇'); - -// Love smileys - -// Smilies::add($b, ':iloveyou:', '&#x;'); -// Smilies::add($b, ':inlove:', '&#x;'); -// Smilies::add($b, '~love:', '&#x;'); -// Smilies::add($b, ':lovebear:', '&#x;'); -// Smilies::add($b, ':lovebed:', '&#x;'); - Smilies::add($b, ':loveheart:', '💖'); - -// Tired/Sleep smileys - -// Smilies::add($b, ':countsheep:', '&#x;'); -// Smilies::add($b, ':hammock:', '&#x;'); -// Smilies::add($b, ':pillow:', '&#x;'); -// Smilies::add($b, ':yawn:', '&#x;'); - -// Fight/Flame/Violent smileys - -// Smilies::add($b, ':2guns:', '&#x;'); -// Smilies::add($b, ':alienfight:', '&#x;'); -// Smilies::add($b, ':army:', '&#x;'); -// Smilies::add($b, ':arrowhead:', '&#x;'); -// Smilies::add($b, ':bfg:', '&#x;'); -// Smilies::add($b, ':bowman:', '&#x;'); -// Smilies::add($b, ':chainsaw:', '&#x;'); -// Smilies::add($b, ':crossbow:', '&#x;'); -// Smilies::add($b, ':crusader:', '&#x;'); -// Smilies::add($b, ':dead:', '&#x;'); -// Smilies::add($b, ':hammersplat:', '&#x;'); -// Smilies::add($b, ':lasergun:', '&#x;'); -// Smilies::add($b, ':machinegun:', '&#x;'); -// Smilies::add($b, ':acid:', '&#x;'); - -// Fantasy smileys - monsters and dragons fantasy. The other type of fantasy belongs in adult smileys - - Smilies::add($b, ':alienmonster:', '👾'); -// Smilies::add($b, ':barbarian:', '&#x;'); -// Smilies::add($b, ':dinosaur:', '&#x;'); - Smilies::add($b, ':dragon:', '🐉'); - Smilies::add($b, ':draco:', '🐉'); - Smilies::add($b, ':ghost:', '👻'); -// Smilies::add($b, ':mummy:', '&#x;'); - -// Food smileys - - Smilies::add($b, ':apple:', '🍎'); -// Smilies::add($b, ':broccoli:', '&#x;'); - Smilies::add($b, ':cake:', '🍰'); -// Smilies::add($b, ':carrot:', '🥕'); // Bad client support - Smilies::add($b, ':popcorn:', '🍿'); - Smilies::add($b, ':tomato:', '🍅'); - Smilies::add($b, ':banana:', '🍌'); - Smilies::add($b, ':cooking:', '🍳'); - Smilies::add($b, ':fryegg:', '🍳'); - Smilies::add($b, ':birthday cake:', '🎂'); - -// Happy smileys - -// Smilies::add($b, ':cloud9:', '&#x;'); - Smilies::add($b, ':tearsofjoy:', '😂'); - -// Respect smileys - - Smilies::add($b, ':bow:', '🙇'); -// Smilies::add($b, ':bravo:', '&#x;'); -// Smilies::add($b, ':hailking:', '&#x;'); -// Smilies::add($b, ':number1:', '&#x;'); - -// Laugh smileys - -// Smilies::add($b, ':hahaha:', '&#x;'); -// Smilies::add($b, ':loltv:', '&#x;'); -// Smilies::add($b, ':rofl:', '🤣'); // Bad client support -// Music smileys - -// Smilies::add($b, ':drums:', '🥁'); // Bad client support - Smilies::add($b, ':guitar:', '🎸'); - Smilies::add($b, ':trumpet:', '🎺'); - -// Smileys that used to be in core - -// Smilies::add($b, ':headbang:', '&#x;'); -// Smilies::add($b, ':beard:', '🧔'); // Bad client support -// Smilies::add($b, ':whitebeard:', '&#x;'); -// Smilies::add($b, ':shaka:', '&#x;'); -// Smilies::add($b, ':\\.../:', '&#x;'); -// Smilies::add($b, ':\\ooo/:', '&#x;'); -// Smilies::add($b, ':headdesk:', '&#x;'); - -// These two are still in core, so oldcore isn't strictly right, but we don't want too many directories - -// Smilies::add($b, ':-d', '&#x;'); - Smilies::add($b, ':-o', '😮'); - -// Regex killers - stick these at the bottom so they appear at the end of the English and -// at the start of $OtherLanguage. - -// Drinks - - Smilies::add($b, ':tea:', '☕'); - Smilies::add($b, ':tee:', '☕'); -// Smilies::add($b, ':drool:', '🤤'); // Bad client support - - Smilies::add($b, ':cool:', '🆒'); -// Smilies::add($b, ':vomit:', '🤮'); // Bad client support - Smilies::add($b, ':golf:', '🏌'); - Smilies::add($b, ':football:', '🏈'); - Smilies::add($b, ':tennis:', '🎾'); -// Smilies::add($b, ':alpha:', '&#x;'); -// Smilies::add($b, ':marine:', '&#x;'); - Smilies::add($b, ':sabre:', '🗡'); -// Smilies::add($b, ':tank:', '&#x;'); -// Smilies::add($b, ':viking:', '&#x;'); -// Smilies::add($b, ':gangs:', '&#x;'); -// Smilies::add($b, ':dj:', '&#x;'); -// Smilies::add($b, ':elvis:', '&#x;'); - Smilies::add($b, ':violin:', '🎻'); - - -// Neu hinzugefügte Unicode Emoji von Matthias Ebers // face-smiling Smilies::add($b, ':grinning face:', '😀'); Smilies::add($b, ':grinning face with big eyes:', '😃'); @@ -269,7 +59,9 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':laughing:', '😆'); Smilies::add($b, ':grinning face with sweat:', '😅'); Smilies::add($b, ':rolling on the floor laughing:', '🤣'); + Smilies::add($b, ':rofl:', '🤣'); Smilies::add($b, ':face with tears of joy:', '😂'); + Smilies::add($b, ':tearsofjoy:', '😂'); Smilies::add($b, ':slightly smiling face:', '🙂'); Smilies::add($b, ':upside-down face:', '🙃'); Smilies::add($b, ':winking face:', '😉'); @@ -317,6 +109,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':pensive face:', '😔'); Smilies::add($b, ':sleepy face:', '😪'); Smilies::add($b, ':drooling face:', '🤤'); + Smilies::add($b, ':drool:', '🤤'); Smilies::add($b, ':sleeping face:', '😴'); // face-unwell @@ -325,11 +118,13 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':face with head-bandage:', '🤕'); Smilies::add($b, ':nauseated face:', '🤢'); Smilies::add($b, ':face vomiting:', '🤮'); + Smilies::add($b, ':vomit:', '🤮'); Smilies::add($b, ':sneezing face:', '🤧'); Smilies::add($b, ':hot face:', '🥵'); Smilies::add($b, ':cold face:', '🥶'); Smilies::add($b, ':woozy face:', '🥴'); Smilies::add($b, ':dizzy face:', '😵'); + Smilies::add($b, ':dead:', '😵'); Smilies::add($b, ':exploding head:', '🤯'); // face-hat @@ -350,6 +145,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':hushed face:', '😯'); Smilies::add($b, ':astonished face:', '😲'); Smilies::add($b, ':flushed face:', '😳'); + Smilies::add($b, ':dazed:', '😳'); Smilies::add($b, ':pleading face:', '🥺'); Smilies::add($b, ':frowning face with open mouth:', '😦'); Smilies::add($b, ':anguished face:', '😧'); @@ -405,6 +201,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':heart with arrow:', '💘'); Smilies::add($b, ':heart with ribbon:', '💝'); Smilies::add($b, ':sparkling heart:', '💖'); + Smilies::add($b, ':loveheart:', '💖'); Smilies::add($b, ':growing heart:', '💗'); Smilies::add($b, ':beating heart:', '💓'); Smilies::add($b, ':revolving hearts:', '💞'); @@ -418,9 +215,9 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':green heart:', '💚'); Smilies::add($b, ':blue heart:', '💙'); Smilies::add($b, ':purple heart:', '💜'); -// Smilies::add($b, ':brown heart:', '🤎'); + Smilies::add($b, ':brown heart:', '🤎'); Smilies::add($b, ':black heart:', '🖤'); -// Smilies::add($b, ':white heart:', '🤍'); + Smilies::add($b, ':white heart:', '🤍'); Smilies::add($b, ':hundred points:', '💯'); Smilies::add($b, ':anger symbol:', '💢'); Smilies::add($b, ':collision:', '💥'); @@ -462,7 +259,10 @@ function unicode_smilies_smilies(&$a,&$b) { // hand-fingers-closed Smilies::add($b, ':thumbs up:', '👍'); + Smilies::add($b, ':like:', '👍'); + Smilies::add($b, '\\o/', '👍'); Smilies::add($b, ':thumbs down:', '👎'); + Smilies::add($b, ':dislike:', '👎'); Smilies::add($b, ':raised fist:', '✊'); Smilies::add($b, ':oncoming fist:', '👊'); Smilies::add($b, ':left-facing fist:', '🤛'); @@ -483,12 +283,12 @@ function unicode_smilies_smilies(&$a,&$b) { // body-parts Smilies::add($b, ':flexed biceps:', '💪'); -// Smilies::add($b, ':mechanical arm:', '🦾'); -// Smilies::add($b, ':mechanical leg:', '🦿'); + Smilies::add($b, ':mechanical arm:', '🦾'); + Smilies::add($b, ':mechanical leg:', '🦿'); Smilies::add($b, ':leg:', '🦵'); Smilies::add($b, ':foot:', '🦶'); Smilies::add($b, ':ear:', '👂'); -// Smilies::add($b, ':ear with hearing aid:', '🦻'); +// Smilies::add($b, ':ear with hearing aid:', '🦻'); Smilies::add($b, ':nose:', '👃'); Smilies::add($b, ':brain:', '🧠'); Smilies::add($b, ':tooth:', '🦷'); @@ -507,17 +307,18 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':person: blond hair:', '👱'); Smilies::add($b, ':man:', '👨'); Smilies::add($b, ':man: beard:', '🧔'); + Smilies::add($b, ':beard:', '🧔'); Smilies::add($b, ':man: red hair:', '👨‍🦰'); Smilies::add($b, ':man: curly hair:', '👨‍🦱'); Smilies::add($b, ':man: white hair:', '👨‍🦳'); Smilies::add($b, ':man: bald:', '👨‍🦲'); Smilies::add($b, ':woman:', '👩'); Smilies::add($b, ':woman: red hair:', '👩‍🦰'); - Smilies::add($b, ':⊛ person: red hair:', '🧑‍🦰'); + Smilies::add($b, ':person: red hair:', '🧑‍🦰'); Smilies::add($b, ':woman: curly hair:', '👩‍🦱'); - Smilies::add($b, ':⊛ person: curly hair:', '🧑‍🦱'); + Smilies::add($b, ':person: curly hair:', '🧑‍🦱'); Smilies::add($b, ':woman: white hair:', '👩‍🦳'); - Smilies::add($b, ':⊛ person: white hair:', '🧑‍🦳'); + Smilies::add($b, ':person: white hair:', '🧑‍🦳'); Smilies::add($b, ':woman: bald:', '👩‍🦲'); Smilies::add($b, ':bald::', '🧑‍🦲'); Smilies::add($b, ':woman: blond hair:', '👱‍♀️'); @@ -525,6 +326,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':older person:', '🧓'); Smilies::add($b, ':old man:', '👴'); Smilies::add($b, ':old woman:', '👵'); + Smilies::add($b, ':pregnant:', '🤰'); // person-gesture Smilies::add($b, ':person frowning:', '🙍'); @@ -549,12 +351,15 @@ function unicode_smilies_smilies(&$a,&$b) { // Smilies::add($b, ':deaf man:', '🧏‍♂️'); // Smilies::add($b, ':deaf woman:', '🧏‍♀️'); Smilies::add($b, ':person bowing:', '🙇'); + Smilies::add($b, ':bow:', '🙇'); Smilies::add($b, ':man bowing:', '🙇‍♂️'); Smilies::add($b, ':woman bowing:', '🙇‍♀️'); Smilies::add($b, ':person facepalming:', '🤦'); + Smilies::add($b, ':facepalm:', '🤦'); Smilies::add($b, ':man facepalming:', '🤦‍♂️'); Smilies::add($b, ':woman facepalming:', '🤦‍♀️'); Smilies::add($b, ':person shrugging:', '🤷'); + Smilies::add($b, ':shrug:', '🤷'); Smilies::add($b, ':man shrugging:', '🤷‍♂️'); Smilies::add($b, ':woman shrugging:', '🤷‍♀️'); @@ -562,6 +367,8 @@ function unicode_smilies_smilies(&$a,&$b) { // person-fantasy Smilies::add($b, ':baby angel:', '👼'); + Smilies::add($b, ':angel:', '👼'); + Smilies::add($b, ':cherub:', '👼'); Smilies::add($b, ':Santa Claus:', '🎅'); Smilies::add($b, ':Mrs. Claus:', '🤶'); Smilies::add($b, ':superhero:', '🦸'); @@ -596,6 +403,8 @@ function unicode_smilies_smilies(&$a,&$b) { // person-sport + Smilies::add($b, ':golf:', '🏌'); + // person-resting // family @@ -621,10 +430,10 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':monkey face:', '🐵'); Smilies::add($b, ':monkey:', '🐒'); Smilies::add($b, ':gorilla:', '🦍'); -// Smilies::add($b, ':orangutan:', '🦧'); + Smilies::add($b, ':orangutan:', '🦧'); Smilies::add($b, ':dog face:', '🐶'); Smilies::add($b, ':dog:', '🐕'); -// Smilies::add($b, ':guide dog:', '🦮'); + Smilies::add($b, ':guide dog:', '🦮'); Smilies::add($b, ':poodle:', '🐩'); Smilies::add($b, ':wolf:', '🐺'); Smilies::add($b, ':fox:', '🦊'); @@ -649,7 +458,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':boar:', '🐗'); Smilies::add($b, ':pig nose:', '🐽'); Smilies::add($b, ':ram:', '🐏'); - Smilies::add($b, ':ewe:', '🐑'); + Smilies::add($b, ':sheep:', '🐑'); Smilies::add($b, ':goat:', '🐐'); Smilies::add($b, ':camel:', '🐪'); Smilies::add($b, ':two-hump camel:', '🐫'); @@ -670,12 +479,17 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':bear:', '🐻'); Smilies::add($b, ':koala:', '🐨'); Smilies::add($b, ':panda:', '🐼'); -// Smilies::add($b, ':sloth:', '🦥'); -// Smilies::add($b, ':otter:', '🦦'); -// Smilies::add($b, ':skunk:', '🦨'); -// Smilies::add($b, ':kangaroo:', '🦘'); + Smilies::add($b, ':sloth:', '🦥'); + Smilies::add($b, ':otter:', '🦦'); + Smilies::add($b, ':skunk:', '🦨'); + Smilies::add($b, ':kangaroo:', '🦘'); Smilies::add($b, ':badger:', '🦡'); Smilies::add($b, ':paw prints:', '🐾'); +// Smilies::add($b, ':bunnyflowers:', '&#x;'); + Smilies::add($b, ':chick:', '🐤'); + Smilies::add($b, ':ladybird:', '🐞'); + Smilies::add($b, ':bunny:', '🐰'); +// Smilies::add($b, ':dragonfly:', '&#x;'); // animal-bird Smilies::add($b, ':turkey:', '🦃'); @@ -685,13 +499,13 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':baby chick:', '🐤'); Smilies::add($b, ':front-facing baby chick:', '🐥'); Smilies::add($b, ':bird:', '🐦'); - Smilies::add($b, ':penguin:', '🐧'); + Smilies::add($b, ':tux:', '🐧'); Smilies::add($b, ':dove:', '🕊'); Smilies::add($b, ':eagle:', '🦅'); Smilies::add($b, ':duck:', '🦆'); Smilies::add($b, ':swan:', '🦢'); Smilies::add($b, ':owl:', '🦉'); -// Smilies::add($b, ':flamingo:', '🦩'); + Smilies::add($b, ':flamingo:', '🦩'); Smilies::add($b, ':peacock:', '🦚'); Smilies::add($b, ':parrot:', '🦜'); @@ -705,6 +519,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':snake:', '🐍'); Smilies::add($b, ':dragon face:', '🐲'); Smilies::add($b, ':dragon:', '🐉'); + Smilies::add($b, ':draco:', '🐉'); Smilies::add($b, ':sauropod:', '🦕'); Smilies::add($b, ':T-Rex:', '🦖'); @@ -770,6 +585,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':pineapple:', '🍍'); Smilies::add($b, ':mango:', '🥭'); Smilies::add($b, ':red apple:', '🍎'); + Smilies::add($b, ':apple:', '🍎'); Smilies::add($b, ':green apple:', '🍏'); Smilies::add($b, ':pear:', '🍐'); Smilies::add($b, ':peach:', '🍑'); @@ -789,8 +605,8 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':cucumber:', '🥒'); Smilies::add($b, ':leafy green:', '🥬'); Smilies::add($b, ':broccoli:', '🥦'); -// Smilies::add($b, ':garlic:', '🧄'); -// Smilies::add($b, ':onion:', '🧅'); + Smilies::add($b, ':garlic:', '🧄'); + Smilies::add($b, ':onion:', '🧅'); Smilies::add($b, ':mushroom:', '🍄'); Smilies::add($b, ':peanuts:', '🥜'); Smilies::add($b, ':chestnut:', '🌰'); @@ -802,7 +618,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':pretzel:', '🥨'); Smilies::add($b, ':bagel:', '🥯'); Smilies::add($b, ':pancakes:', '🥞'); -// Smilies::add($b, ':waffle:', '🧇'); + Smilies::add($b, ':waffle:', '🧇'); Smilies::add($b, ':cheese wedge:', '🧀'); Smilies::add($b, ':meat on bone:', '🍖'); Smilies::add($b, ':poultry leg:', '🍗'); @@ -816,15 +632,16 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':taco:', '🌮'); Smilies::add($b, ':burrito:', '🌯'); Smilies::add($b, ':stuffed flatbread:', '🥙'); -// Smilies::add($b, ':falafel:', '🧆'); + Smilies::add($b, ':falafel:', '🧆'); Smilies::add($b, ':egg:', '🥚'); Smilies::add($b, ':cooking:', '🍳'); + Smilies::add($b, ':fryegg:', '🍳'); Smilies::add($b, ':shallow pan of food:', '🥘'); Smilies::add($b, ':pot of food:', '🍲'); Smilies::add($b, ':bowl with spoon:', '🥣'); Smilies::add($b, ':green salad:', '🥗'); Smilies::add($b, ':popcorn:', '🍿'); -// Smilies::add($b, ':butter:', '🧈'); + Smilies::add($b, ':butter:', '🧈'); Smilies::add($b, ':salt:', '🧂'); Smilies::add($b, ':canned food:', '🥫'); @@ -862,6 +679,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':cookie:', '🍪'); Smilies::add($b, ':birthday cake:', '🎂'); Smilies::add($b, ':shortcake:', '🍰'); + Smilies::add($b, ':cake:', '🍰'); Smilies::add($b, ':cupcake:', '🧁'); Smilies::add($b, ':pie:', '🥧'); Smilies::add($b, ':chocolate bar:', '🍫'); @@ -874,6 +692,9 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':baby bottle:', '🍼'); Smilies::add($b, ':glass of milk:', '🥛'); Smilies::add($b, ':hot beverage:', '☕'); + Smilies::add($b, ':coffee:', '☕'); + Smilies::add($b, ':tea:', '☕'); + Smilies::add($b, ':tee:', '☕'); Smilies::add($b, ':teacup without handle:', '🍵'); Smilies::add($b, ':sake:', '🍶'); Smilies::add($b, ':bottle with popping cork:', '🍾'); @@ -881,13 +702,15 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':cocktail glass:', '🍸'); Smilies::add($b, ':tropical drink:', '🍹'); Smilies::add($b, ':beer mug:', '🍺'); + Smilies::add($b, ':beer:', '🍺'); + Smilies::add($b, ':homebrew:', '🍺'); Smilies::add($b, ':clinking beer mugs:', '🍻'); Smilies::add($b, ':clinking glasses:', '🥂'); Smilies::add($b, ':tumbler glass:', '🥃'); Smilies::add($b, ':cup with straw:', '🥤'); // Smilies::add($b, ':beverage box:', '🧃'); -// Smilies::add($b, ':mate:', '🧉'); -// Smilies::add($b, ':ice:', '🧊'); + Smilies::add($b, ':mate:', '🧉'); + Smilies::add($b, ':ice:', '🧊'); // dishware Smilies::add($b, ':chopsticks:', '🥢'); @@ -1035,7 +858,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':small airplane:', '🛩'); Smilies::add($b, ':airplane departure:', '🛫'); Smilies::add($b, ':airplane arrival:', '🛬'); -// Smilies::add($b, ':parachute:', '🪂'); + Smilies::add($b, ':parachute:', '🪂'); Smilies::add($b, ':seat:', '💺'); Smilies::add($b, ':helicopter:', '🚁'); Smilies::add($b, ':suspension railway:', '🚟'); @@ -1099,7 +922,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':sun:', '☀'); Smilies::add($b, ':full moon face:', '🌝'); Smilies::add($b, ':sun with face:', '🌞'); -// Smilies::add($b, ':ringed planet:', '🪐'); + Smilies::add($b, ':ringed planet:', '🪐'); Smilies::add($b, ':star:', '⭐'); Smilies::add($b, ':glowing star:', '🌟'); Smilies::add($b, ':shooting star:', '🌠'); @@ -1170,6 +993,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':basketball:', '🏀'); Smilies::add($b, ':volleyball:', '🏐'); Smilies::add($b, ':american football:', '🏈'); + Smilies::add($b, ':football:', '🏈'); Smilies::add($b, ':rugby football:', '🏉'); Smilies::add($b, ':tennis:', '🎾'); Smilies::add($b, ':flying disc:', '🥏'); @@ -1191,11 +1015,20 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':skis:', '🎿'); Smilies::add($b, ':sled:', '🛷'); Smilies::add($b, ':curling stone:', '🥌'); + Smilies::add($b, ':cycling:', '🚴'); + Smilies::add($b, ':darts:', '🎯'); + Smilies::add($b, ':fencing:', '🤺'); + Smilies::add($b, ':juggling:', '🤹'); +// Smilies::add($b, ':skipping:', '&#x;'); +// Smilies::add($b, ':archery:', '&#x;'); + Smilies::add($b, ':surfing:', '🏄'); + Smilies::add($b, ':snooker:', '🎱'); + Smilies::add($b, ':horseriding:', '🏇'); // game Smilies::add($b, ':direct hit:', '🎯'); -// Smilies::add($b, ':yo-yo:', '🪀'); -// Smilies::add($b, ':kite:', '🪁'); + Smilies::add($b, ':yo-yo:', '🪀'); + Smilies::add($b, ':kite:', '🪁'); Smilies::add($b, ':pool 8 ball:', '🎱'); Smilies::add($b, ':crystal ball:', '🔮'); Smilies::add($b, ':nazar amulet:', '🧿'); @@ -1227,7 +1060,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':sunglasses:', '🕶'); Smilies::add($b, ':goggles:', '🥽'); Smilies::add($b, ':lab coat:', '🥼'); -// Smilies::add($b, ':safety vest:', '🦺'); + Smilies::add($b, ':safety vest:', '🦺'); Smilies::add($b, ':necktie:', '👔'); Smilies::add($b, ':t-shirt:', '👕'); Smilies::add($b, ':jeans:', '👖'); @@ -1237,10 +1070,10 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':socks:', '🧦'); Smilies::add($b, ':dress:', '👗'); Smilies::add($b, ':kimono:', '👘'); -// Smilies::add($b, ':sari:', '🥻'); -// Smilies::add($b, ':one-piece swimsuit:', '🩱'); -// Smilies::add($b, ':briefs:', '🩲'); -// Smilies::add($b, ':shorts:', '🩳'); + Smilies::add($b, ':sari:', '🥻'); + Smilies::add($b, ':one-piece swimsuit:', '🩱'); + Smilies::add($b, ':briefs:', '🩲'); + Smilies::add($b, ':shorts:', '🩳'); Smilies::add($b, ':bikini:', '👙'); Smilies::add($b, ':woman’s clothes:', '👚'); Smilies::add($b, ':purse:', '👛'); @@ -1428,11 +1261,12 @@ function unicode_smilies_smilies(&$a,&$b) { // tool Smilies::add($b, ':hammer:', '🔨'); -// Smilies::add($b, ':axe:', '🪓'); +// Smilies::add($b, ':axe:', '🪓'); Smilies::add($b, ':pick:', '⛏'); Smilies::add($b, ':hammer and pick:', '⚒'); Smilies::add($b, ':hammer and wrench:', '🛠'); Smilies::add($b, ':dagger:', '🗡'); + Smilies::add($b, ':sabre:', '🗡'); Smilies::add($b, ':crossed swords:', '⚔'); Smilies::add($b, ':pistol:', '🔫'); Smilies::add($b, ':bow and arrow:', '🏹'); @@ -1442,7 +1276,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':gear:', '⚙'); Smilies::add($b, ':clamp:', '🗜'); Smilies::add($b, ':balance scale:', '⚖'); -// Smilies::add($b, ':white cane:', '🦯'); + Smilies::add($b, ':white cane:', '🦯'); Smilies::add($b, ':link:', '🔗'); Smilies::add($b, ':chains:', '⛓'); Smilies::add($b, ':toolbox:', '🧰'); @@ -1459,10 +1293,10 @@ function unicode_smilies_smilies(&$a,&$b) { // medical Smilies::add($b, ':syringe:', '💉'); -// Smilies::add($b, ':drop of blood:', '🩸'); + Smilies::add($b, ':drop of blood:', '🩸'); Smilies::add($b, ':pill:', '💊'); -// Smilies::add($b, ':adhesive bandage:', '🩹'); -// Smilies::add($b, ':stethoscope:', '🩺'); + Smilies::add($b, ':adhesive bandage:', '🩹'); + Smilies::add($b, ':stethoscope:', '🩺'); // household Smilies::add($b, ':door:', '🚪'); @@ -1471,8 +1305,8 @@ function unicode_smilies_smilies(&$a,&$b) { // Smilies::add($b, ':chair:', '🪑'); Smilies::add($b, ':toilet:', '🚽'); Smilies::add($b, ':shower:', '🚿'); -// Smilies::add($b, ':bathtub:', '🛁'); -// Smilies::add($b, ':razor:', '🪒'); + Smilies::add($b, ':bathtub:', '🛁'); + Smilies::add($b, ':razor:', '🪒'); Smilies::add($b, ':lotion bottle:', '🧴'); Smilies::add($b, ':safety pin:', '🧷'); Smilies::add($b, ':broom:', '🧹'); @@ -1519,6 +1353,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':no one under eighteen:', '🔞'); Smilies::add($b, ':radioactive:', '☢'); Smilies::add($b, ':biohazard:', '☣'); + Smilies::add($b, ':army:', '🪖'); // arrow Smilies::add($b, ':up arrow:', '⬆'); @@ -1679,6 +1514,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':B button (blood type):', '🅱'); Smilies::add($b, ':CL button:', '🆑'); Smilies::add($b, ':COOL button:', '🆒'); + Smilies::add($b, ':cool:', '🆒'); Smilies::add($b, ':FREE button:', '🆓'); Smilies::add($b, ':information:', 'ℹ'); Smilies::add($b, ':ID button:', '🆔'); From 6b17e94b86620eabd7cfae735f42d849105a93c1 Mon Sep 17 00:00:00 2001 From: loma-one <44441246+loma-one@users.noreply.github.com> Date: Wed, 15 Jun 2022 18:42:08 +0200 Subject: [PATCH 047/677] Update unicode_smilies/unicode_smilies.php Co-authored-by: Hypolite Petovan --- unicode_smilies/unicode_smilies.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unicode_smilies/unicode_smilies.php b/unicode_smilies/unicode_smilies.php index e2f81058..b6863a3e 100644 --- a/unicode_smilies/unicode_smilies.php +++ b/unicode_smilies/unicode_smilies.php @@ -679,7 +679,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':cookie:', '🍪'); Smilies::add($b, ':birthday cake:', '🎂'); Smilies::add($b, ':shortcake:', '🍰'); - Smilies::add($b, ':cake:', '🍰'); + Smilies::add($b, ':cake:', '🍰'); Smilies::add($b, ':cupcake:', '🧁'); Smilies::add($b, ':pie:', '🥧'); Smilies::add($b, ':chocolate bar:', '🍫'); From ab71c7b80bad1efedd58e7449b0fbcc6d6c8593f Mon Sep 17 00:00:00 2001 From: loma-one <44441246+loma-one@users.noreply.github.com> Date: Wed, 15 Jun 2022 18:42:15 +0200 Subject: [PATCH 048/677] Update unicode_smilies/unicode_smilies.php Co-authored-by: Hypolite Petovan --- unicode_smilies/unicode_smilies.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unicode_smilies/unicode_smilies.php b/unicode_smilies/unicode_smilies.php index b6863a3e..f330487d 100644 --- a/unicode_smilies/unicode_smilies.php +++ b/unicode_smilies/unicode_smilies.php @@ -1015,7 +1015,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':skis:', '🎿'); Smilies::add($b, ':sled:', '🛷'); Smilies::add($b, ':curling stone:', '🥌'); - Smilies::add($b, ':cycling:', '🚴'); + Smilies::add($b, ':cycling:', '🚴'); Smilies::add($b, ':darts:', '🎯'); Smilies::add($b, ':fencing:', '🤺'); Smilies::add($b, ':juggling:', '🤹'); From dc5e21852636202e486f234a1f3eb064bcd01b45 Mon Sep 17 00:00:00 2001 From: loma-one <44441246+loma-one@users.noreply.github.com> Date: Wed, 15 Jun 2022 18:42:25 +0200 Subject: [PATCH 049/677] Update unicode_smilies/unicode_smilies.php Co-authored-by: Hypolite Petovan --- unicode_smilies/unicode_smilies.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unicode_smilies/unicode_smilies.php b/unicode_smilies/unicode_smilies.php index f330487d..45c2351a 100644 --- a/unicode_smilies/unicode_smilies.php +++ b/unicode_smilies/unicode_smilies.php @@ -355,7 +355,7 @@ function unicode_smilies_smilies(&$a,&$b) { Smilies::add($b, ':man bowing:', '🙇‍♂️'); Smilies::add($b, ':woman bowing:', '🙇‍♀️'); Smilies::add($b, ':person facepalming:', '🤦'); - Smilies::add($b, ':facepalm:', '🤦'); + Smilies::add($b, ':facepalm:', '🤦'); Smilies::add($b, ':man facepalming:', '🤦‍♂️'); Smilies::add($b, ':woman facepalming:', '🤦‍♀️'); Smilies::add($b, ':person shrugging:', '🤷'); From 631ad78efcf6a3b8c69fedfe883c799e005209b5 Mon Sep 17 00:00:00 2001 From: loma-one <44441246+loma-one@users.noreply.github.com> Date: Sat, 18 Jun 2022 08:53:09 +0200 Subject: [PATCH 050/677] Add files via upload --- smiley_pack/icons/diaspora.gif | Bin 0 -> 79 bytes smiley_pack/icons/friendica.gif | Bin 0 -> 237 bytes smiley_pack/icons/hubzilla.gif | Bin 0 -> 176 bytes smiley_pack/icons/mastodon.gif | Bin 0 -> 934 bytes smiley_pack/icons/misskey.gif | Bin 0 -> 998 bytes smiley_pack/icons/nextcloud.gif | Bin 0 -> 363 bytes smiley_pack/icons/pixelfed.gif | Bin 0 -> 1064 bytes smiley_pack/icons/pleroma.gif | Bin 0 -> 100 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 smiley_pack/icons/diaspora.gif create mode 100644 smiley_pack/icons/friendica.gif create mode 100644 smiley_pack/icons/hubzilla.gif create mode 100644 smiley_pack/icons/mastodon.gif create mode 100644 smiley_pack/icons/misskey.gif create mode 100644 smiley_pack/icons/nextcloud.gif create mode 100644 smiley_pack/icons/pixelfed.gif create mode 100644 smiley_pack/icons/pleroma.gif diff --git a/smiley_pack/icons/diaspora.gif b/smiley_pack/icons/diaspora.gif new file mode 100644 index 0000000000000000000000000000000000000000..82971986b249c8d18b8e81d4dfcccc3646a191f3 GIT binary patch literal 79 zcmZ?wbhEHb6krfwXkcUj0!e8l#h)yUTnvm1Iv_qshJi_~hrjal#0!tQb5DI;5SaJu eeyx&uUxa7tw3JPYR;TvtS<4Zgtr^O|U=0A+vKN~G literal 0 HcmV?d00001 diff --git a/smiley_pack/icons/friendica.gif b/smiley_pack/icons/friendica.gif new file mode 100644 index 0000000000000000000000000000000000000000..45c50e876582e3050390b19178ccc3e77c306fa7 GIT binary patch literal 237 zcmZ?wbhEHb6krfwXpvw5f;Ef14y>}dyG8fmR;@?dw4Q9!c(+^W#SXPsJ5=B9RQ|AA z@zZYkue;@b?v?$uPwLM;sek(=kF2rjo)KF#Avd+BB(Sw!qG*w%v=UaN_)pNeC^fMp zHASI3vm`^o-P1RKLGdRGBNu}_gAT}gkV6<)Lmzx+bm^E+lt4;G) nZ~EkO{jJpXj*jO&AI`5sa@QvYkhq0)` zc&2mdT)VNj(^x_-m3928AdOdhOqIQ+oBgJ$0rQ=HlUQM{{%C$OXnrtaeWA&FbK+YiQ1` zoO2D&yFY0em6jRPF-kq7(lIJMqozEcp=TU|Nd!#tiY}v@qh(F z5Y6@{K&%9?ado00QdAq8z!$zHNDl8*Mv3@3QQmzC>pQE4eGQYz4FyP~%}eAJwH|CQ zxR{+xCY|P$?W~@x=*iyGEFOsIKHpWEb8F)JXtv|>^I{1nzw%0MMe2R}!;QNe{i1>0 kwc__mZg~oC-`C6o3a)8fa(jUz?z@(cRQG1u5@JEoUp=~;_W%F@ literal 0 HcmV?d00001 diff --git a/smiley_pack/icons/misskey.gif b/smiley_pack/icons/misskey.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe2bee936510baa5b9deb40874be89010c2b1b56 GIT binary patch literal 998 zcmd7R=}(gf9Ki7(h*Urjgr=(pE1+B=r681JFcBRXqg$deEX!Uv(RIh@Y9?9G;JW_!IQ5)-!l7yIV(FMNBie$d)>rw|I^_bvEx z3-wlandxQj4s&!F3|JX_}AQU!DA5W|k++YhsrvpFlk zTt2~G$r)a*q^?%7R!(tNkJ8qvL@W91)zjRyf^WX7=C8xB|HY);UnhlVJK^~|RY_w=YAPpDGBcKS@%Y$TLh^*KISp=)xAnGC@ z3b!hwAm79(LapLRn=0I(iXBo!@siDUee|$ATBV7Q)bVU(?4&H(sE%|9sXX3=pn$}hO^E_stV@+>(IyFs#QWwX zAZVc>1^Rf4I!PWyL5G&>Q^!@wi(0hakRa<57spbdL0d=CfF$~mtqMc3+qeztRJS3G z)ol^=>9eLC7(sh9TbD+*aR&4nk|ycW?S}2jhr6In_ZWBZy6wy6y)0AuigC9F*|{?M z45Q!e9s53S;yH{zFPMA*lP`)aKft3OVd@o3{{;Ax<^NA*Z?ZCS;Q;F3-~M|7j)b9y z@}_sm(k-y_Q^CQ{Q-M!0dHcsHcToKqO7d;T-GP^Z&&A+w5k10u{bN|)sO$2lM=hx;>7Hsz3*>=)Y(7`Jqa#=ZlV`qx39OmLL{h@y2 pueY*`$%LZm`?VigTJXvsITSc%Iru{T+GP<-XKv2dzf%Yu{{TQAj`jcm literal 0 HcmV?d00001 diff --git a/smiley_pack/icons/nextcloud.gif b/smiley_pack/icons/nextcloud.gif new file mode 100644 index 0000000000000000000000000000000000000000..fa81b76468713cb766301c57ab18bde5b48abab6 GIT binary patch literal 363 zcmV-x0hInnNk%w1VGsZi0Hrg2@Df$s&i#CWp%`h|4UA%P)z`Fp11Fip(~Q z%sP$DJ&w&jj?G7q&Pb5XSeMXWn$cjI(PEp@fvVSmtJs39*o3Uugss_yuGx>Y+mW^0 zp1j|pzTl<6;HALfuEyi8$K#@{{8*_{r>;||Nj{q zA{iSZA^s6Va%Ew3Wn>_CX>@2HM@dak03rDV0SW*=04x9i000mG5C8xMbHHCnr&viRpB$MsB|~OkYLlPDl{G- zFAOI=H3CF2Jtqw>AP+1(JRvwHLnS#RJUuK90S6Wm0USCmEjt|n5*7za5h5cKPPDbQ JN47sf06Pg6y5j%< literal 0 HcmV?d00001 diff --git a/smiley_pack/icons/pixelfed.gif b/smiley_pack/icons/pixelfed.gif new file mode 100644 index 0000000000000000000000000000000000000000..da5c1e97bed58f41233e32428537f70cd9c1b665 GIT binary patch literal 1064 zcmZ?wbhEHb6krfwc)pflfkx9i(SVs+lirK^zZdiWAnvzHv+k{=&j(4r4^qAhb!UB) z_Wda1^Ip#9BM`}Zzfy9)sha#r!TXbf&nHE%XR09&)T1tGXYSUU_gTgBv#RGC4cE_V z9=G+a@95iXHr{YXckUNW_b*!RpS4|gnC;zTw&%3*#+wF9uNkhqY_#Tr@%jruH71+S znruF4y6u4Zfn#Pn&zo#GX143F`QCk&hhO7VvkE*~nS zMYo4DZ1^Rz)AK{6G{eSU^QR~Na z`SU#r;CmdPa3^)urdWo%4;k)!;dvI!^E`y%-WQ%1p~BB%xn4zby@_IY`nl`qvCrE| zCfr#4Xy5g_hpxWZfAjH?+gt7&J%07pzQ>R5etG)$*SCLv|NQ^^_y7O@lF~{e6Dj@^ zbS_FwEJ;mKD9CR@Sj140SG`Dg@NM(!+%bZ6VH4ljpKLl#Qf0b zo~TjyY>TGxGOok*(tIWj4;FIDT4bKmNHj5UU}O`q=y{=V?A&qHW;US+1;^$N8LJsD z4koLgoa_9bO{HRjqRWiXH4#gHO*!ta?DSv2VnqT&!-^%Ip_wxuaRe%`39=+G2y$g# z@|-3oDP-c<*eRm!Hq&+K%S(%0YIJG}7BaDFhAsDMoV4X-kcw-b-js%mO0AmyQ~rJV za9C4V#U%RQ#2F8hSOtvc8hkZWV(FT!%^ZIqA<)@(scXZlIWL`_o^X(wQ}{t+i#wl$ gPEc3Ol!K4hCYi>qv5_n)OyH5Wu474*5MZzd0RKgqy#N3J literal 0 HcmV?d00001 diff --git a/smiley_pack/icons/pleroma.gif b/smiley_pack/icons/pleroma.gif new file mode 100644 index 0000000000000000000000000000000000000000..7be5eca482992d966a37bd6cc8f7662fdcb48547 GIT binary patch literal 100 zcmZ?wbhEHb6krfwIK;;AdvV0CCE>q8DB}0h@IOn#C8d>sNbx5NBNqcZgAM}_fYdTD zYgTCK+}4`+Ol`_E+uoP!CQWagsL^&ka+&z4#8~e2@BiG)TY679=hU8HCI)K&0KX Date: Sun, 19 Jun 2022 08:57:40 +0200 Subject: [PATCH 051/677] Supplement emoji Complete the fediverse, commercial emoji & close the name by : --- smiley_pack/icons/ccc/ccc.gif | Bin 0 -> 694 bytes smiley_pack/icons/commercial/spotify.gif | Bin 0 -> 653 bytes smiley_pack/icons/commercial/twitch.gif | Bin 0 -> 297 bytes smiley_pack/icons/commercial/twitter.gif | Bin 0 -> 8299 bytes smiley_pack/icons/commercial/youtube.gif | Bin 0 -> 612 bytes smiley_pack/icons/fediverse/ap.gif | Bin 0 -> 151 bytes smiley_pack/icons/fediverse/diaspora.gif | Bin 0 -> 79 bytes smiley_pack/icons/fediverse/friendica.gif | Bin 0 -> 237 bytes smiley_pack/icons/fediverse/hubzilla.gif | Bin 0 -> 132 bytes smiley_pack/icons/fediverse/mastodon.gif | Bin 0 -> 934 bytes smiley_pack/icons/fediverse/misskey.gif | Bin 0 -> 405 bytes smiley_pack/icons/fediverse/nextcloud.gif | Bin 0 -> 363 bytes smiley_pack/icons/fediverse/pixelfed.gif | Bin 0 -> 1064 bytes smiley_pack/icons/fediverse/pleroma.gif | Bin 0 -> 100 bytes smiley_pack/smiley_pack.php | 577 ++++++++++++---------- 15 files changed, 314 insertions(+), 263 deletions(-) create mode 100644 smiley_pack/icons/ccc/ccc.gif create mode 100644 smiley_pack/icons/commercial/spotify.gif create mode 100644 smiley_pack/icons/commercial/twitch.gif create mode 100644 smiley_pack/icons/commercial/twitter.gif create mode 100644 smiley_pack/icons/commercial/youtube.gif create mode 100644 smiley_pack/icons/fediverse/ap.gif create mode 100644 smiley_pack/icons/fediverse/diaspora.gif create mode 100644 smiley_pack/icons/fediverse/friendica.gif create mode 100644 smiley_pack/icons/fediverse/hubzilla.gif create mode 100644 smiley_pack/icons/fediverse/mastodon.gif create mode 100644 smiley_pack/icons/fediverse/misskey.gif create mode 100644 smiley_pack/icons/fediverse/nextcloud.gif create mode 100644 smiley_pack/icons/fediverse/pixelfed.gif create mode 100644 smiley_pack/icons/fediverse/pleroma.gif diff --git a/smiley_pack/icons/ccc/ccc.gif b/smiley_pack/icons/ccc/ccc.gif new file mode 100644 index 0000000000000000000000000000000000000000..2a50f84ab560b4ec4204987e672e54a2dcfbed8f GIT binary patch literal 694 zcmbW!`AgGr9LMqZ=lE_WdF7R@Y|~n`G%c4W;V!51N=;404!33Pl;eaIwtijz5f-I15HwYcTa}NkP$cqEs9Pr%>A}*5fkjx1M zI3u|;3OxkAt|bNGOP~3 z8ab{G#I*|C5Q>|^ur7-9#E^0o>Ww9Rail+<3?vYp3g1m6dLG;5;fWM7 znM$TJ=u8%UoJXIWr}xV7TmjQtiRKIFLLswwfmtf1OU2A`3A0kptX42nNIw+js9q4zv-r{-E@8czaGKghnX*9bmJlUI!!;#kk60EuUWD+M+{HN zpLt?1S|EQHi37*!Kky7z(!%uQqVzOwX;x7tH&7840lY1WOhFAU+j+J_0o$NaS5<3k zYU{4lH#9aix3peuYrocU{f4fytGnlB@2%T?HQ<<&X z@$r<Jjt41}{f-N%?2X|Fpm&?!bQ jW`af5%CJe>=(D44()xWNQ^P9{GGFSI&!$`lMd0@jm?GB3 literal 0 HcmV?d00001 diff --git a/smiley_pack/icons/commercial/spotify.gif b/smiley_pack/icons/commercial/spotify.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5f10b77a4e0ba94cdf14f1ac52ab5fe754686d1 GIT binary patch literal 653 zcmZ?wbhEHblwgoxIF`pCDJ&u>A|fd&A}J;+DFH-cl2T%l(qfV_Vv=&=k_r-%N)nPP zl9H;Dl4_EYI?|H*vXaKKQf6{eRti!!ic(HWQZC9;ZYomlDpEdbQvT{vK^juQ8d4!Z zq$w4qDHWwH6|Ex`t0NV!E0v%tm1ZE7X(*LtD3xO*l?z11()lLRg(lKPKx8UiVkTW` zCS7JGU1=^|YbjlCCEW-_*3vCD(ycbq?RL_A4$>2yq$fMc0MT?8nHfOjDl^knW|phW zY&V%XZZdO$$X#Z>hs;6`nZ;f*OTA>4dC4sImRaR1v)Wf?jjzl)KiLibvKxUYKz37r z?3O^;t%0)JgJgFG%kB=5JrE{)FkJReXhQmjWZWFUgpL!rC*2+I&-@fcve-jB_2G#VQ`Wd;Yk%2zm{^7Cv z(gO^wR^9E-wGb6J$|E9abulAzZSw~s$rOpqPb!^!LSk)C1FoIFZJxQhrngdvnL#-0 zpWISQrN_){Jd$1?9$Zr6m8j#D-L~?P!eLHni_&=L!Ly{{l}!ofX_BlnN z9VRvkr{hY01q#Wx=gc_ql~3OBS;Vi`%g(<)dMltV`tj!~(YdlYx6@o$oLK_dY#Ykl zT)Fv-JiEHh1=(}+_-uTv_}Hha8tEqY>Ikw<<+|}ztE}C& KYoD4TgEas^N@g+u literal 0 HcmV?d00001 diff --git a/smiley_pack/icons/commercial/twitter.gif b/smiley_pack/icons/commercial/twitter.gif new file mode 100644 index 0000000000000000000000000000000000000000..942a053694613d4396d624f3fdd2f7bff148b709 GIT binary patch literal 8299 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 literal 0 HcmV?d00001 diff --git a/smiley_pack/icons/commercial/youtube.gif b/smiley_pack/icons/commercial/youtube.gif new file mode 100644 index 0000000000000000000000000000000000000000..f4b9b6a364890831c62d303ad82d4004ac761e40 GIT binary patch literal 612 zcmZ?wbhEHblwgoxI2On7lY#jc1M7bVhW`wV{~4J6Gcf;U;Qr6R@}Gh2KLf{KM)tpq zoc|a(KC=q{W8wP2De#wHyrp z^o+jin|v`c`(bGI)!6KdiTN*M^WUZ>-_5N5nVSAGv;1Lc|Hazox25fGE8E}J4&Ut@ zf7{xBw{!jG;{4Uc>-%lntN*H2%+zkWf#0{njm z1pE#N{2dVdJ23EfV9?K?uz!Iee}Y2(goXbJ5C0n;@i#p3Z$$Xth^SvFDL)JHzP7h~ z@9+J(aPG(L+ddvX^5OLH50}q>ynf~5o!jppKY0K6;hQH9-#&Tp?#cakAoAhcrw=8i zmFR#Jf3h%gG1N2YFaQB4P8iq^HqsPR=H_0-u+_qsUvq+QXc2&zIJ9(P;x4Vb>OYB(5(!{vl zD?B3Dm+#E7bM@ToJ;GyRqXNBeEN$Xi?|wfrEWrLLQxn6>@aP~P&JVW)*L#Ne2^7f+ zY*{4J$g5m5)kvX(*`{Kp9!Hm=PvR;j6}DQ31i{cop0<`2hQ#LfekGSO9z!M+}Es literal 0 HcmV?d00001 diff --git a/smiley_pack/icons/fediverse/ap.gif b/smiley_pack/icons/fediverse/ap.gif new file mode 100644 index 0000000000000000000000000000000000000000..f37cff597fd2583f607a804930a872708effc2cd GIT binary patch literal 151 zcmZ?wbhEHblwgoxIK;{T1RojdK7mmEXNG!7X(b3!{3qyKl$uzQnxasiS(2gP?&%xA zp!k!8k&A(yK?kG_WB>!Rd&RCh{|rufuHI|0c>zCzmjKW8@4C$%Udxz_oD^K1e>&%7 uWoG($m4@Kc?WZ~A_4}F16*^|@Nh#9QX6+VxwCeE7iv15ZM9g7eum%7!f-=4U literal 0 HcmV?d00001 diff --git a/smiley_pack/icons/fediverse/diaspora.gif b/smiley_pack/icons/fediverse/diaspora.gif new file mode 100644 index 0000000000000000000000000000000000000000..82971986b249c8d18b8e81d4dfcccc3646a191f3 GIT binary patch literal 79 zcmZ?wbhEHb6krfwXkcUj0!e8l#h)yUTnvm1Iv_qshJi_~hrjal#0!tQb5DI;5SaJu eeyx&uUxa7tw3JPYR;TvtS<4Zgtr^O|U=0A+vKN~G literal 0 HcmV?d00001 diff --git a/smiley_pack/icons/fediverse/friendica.gif b/smiley_pack/icons/fediverse/friendica.gif new file mode 100644 index 0000000000000000000000000000000000000000..45c50e876582e3050390b19178ccc3e77c306fa7 GIT binary patch literal 237 zcmZ?wbhEHb6krfwXpvw5f;Ef14y>}dyG8fmR;@?dw4Q9!c(+^W#SXPsJ5=B9RQ|AA z@zZYkue;@b?v?$uPwLM;sek(=kF2rjo)KF#Avd+BB(Sw!qG*w%v=UaN_)pNeC^fMp zHASI3vm`^o-P1RKLGdRGBNu}_gAT}gkV6<)Lmzx+bU{cCGJ0(ZJ^fm_F!c3yV?+qu%Jw?$8BtHIJT?{+$Z}t)|@Y{ hcf}0DqJ8nlrd+x)$?NK>lhsb;!I~oFd&L+StN|o9Eq(w1 literal 0 HcmV?d00001 diff --git a/smiley_pack/icons/fediverse/mastodon.gif b/smiley_pack/icons/fediverse/mastodon.gif new file mode 100644 index 0000000000000000000000000000000000000000..896450372dd0404a3adb9aab10f2e3fc016cc3db GIT binary patch literal 934 zcmeIx+e=e%00;12*+nhK)DTUv9GbSxkmw<^ut`};WDgM`5eXxx2tp*Phr(uAZpU-x zCBjfo3f@+!QwJkLF-XIPn%mCrcV@HQbGmWnWjD8-=AY1eUp`OY$1i*@l$D+=tm1-1 z;AjJ&P7hw_!OJKL)ayY#1zu6$H3b@?Adtd1DU87oXhiW+xK{@EM;jRgI087$l~PGk z3dm{DM5oGN3I@|O&AI`5sa@QvYkhq0)` zc&2mdT)VNj(^x_-m3928AdOdhOqIQ+oBgJ$0rQ=HlUQM{{%C$OXnrtaeWA&FbK+YiQ1` zoO2D&yFY0em6jRPF-kq7(lIJMqozEcp=TU|Nd!#tiY}v@qh(F z5Y6@{K&%9?ado00QdAq8z!$zHNDl8*Mv3@3QQmzC>pQE4eGQYz4FyP~%}eAJwH|CQ zxR{+xCY|P$?W~@x=*iyGEFOsIKHpWEb8F)JXtv|>^I{1nzw%0MMe2R}!;QNe{i1>0 kwc__mZg~oC-`C6o3a)8fa(jUz?z@(cRQG1u5@JEoUp=~;_W%F@ literal 0 HcmV?d00001 diff --git a/smiley_pack/icons/fediverse/misskey.gif b/smiley_pack/icons/fediverse/misskey.gif new file mode 100644 index 0000000000000000000000000000000000000000..84982750c6ffcc159c88b23e461aee4596f8f555 GIT binary patch literal 405 zcmZ?wbhEHblwgoxSgOsy(6Nf4a|J`^N`@{VTE)<{nyG6gbJq%n?v)JPs~EahGjy+E z0+Kze*t=G+bgy9O0kYRH_N-#;S;N-7f(gj&1)?>qJ!=^H*0A)hV(44T+Pj9cXBBVv zO6I=R+&wFJfC?tAmJp!jAJ}O#WTOMyFwR4TA>chu+zbf~rm6dBMmUGoQX*o5uwRI?n zi`e({X4fjmsZ5y~SDP#_drrH3a_ORJOX8MIWnHm!N_4WlK=Qm*Q<$8jbM0BSt}L0t q;8q-{k+w=Wj+@twIhlQOoMcg;kVho1sB@rz-~9&g2@Df$s&i#CWp%`h|4UA%P)z`Fp11Fip(~Q z%sP$DJ&w&jj?G7q&Pb5XSeMXWn$cjI(PEp@fvVSmtJs39*o3Uugss_yuGx>Y+mW^0 zp1j|pzTl<6;HALfuEyi8$K#@{{8*_{r>;||Nj{q zA{iSZA^s6Va%Ew3Wn>_CX>@2HM@dak03rDV0SW*=04x9i000mG5C8xMbHHCnr&viRpB$MsB|~OkYLlPDl{G- zFAOI=H3CF2Jtqw>AP+1(JRvwHLnS#RJUuK90S6Wm0USCmEjt|n5*7za5h5cKPPDbQ JN47sf06Pg6y5j%< literal 0 HcmV?d00001 diff --git a/smiley_pack/icons/fediverse/pixelfed.gif b/smiley_pack/icons/fediverse/pixelfed.gif new file mode 100644 index 0000000000000000000000000000000000000000..da5c1e97bed58f41233e32428537f70cd9c1b665 GIT binary patch literal 1064 zcmZ?wbhEHb6krfwc)pflfkx9i(SVs+lirK^zZdiWAnvzHv+k{=&j(4r4^qAhb!UB) z_Wda1^Ip#9BM`}Zzfy9)sha#r!TXbf&nHE%XR09&)T1tGXYSUU_gTgBv#RGC4cE_V z9=G+a@95iXHr{YXckUNW_b*!RpS4|gnC;zTw&%3*#+wF9uNkhqY_#Tr@%jruH71+S znruF4y6u4Zfn#Pn&zo#GX143F`QCk&hhO7VvkE*~nS zMYo4DZ1^Rz)AK{6G{eSU^QR~Na z`SU#r;CmdPa3^)urdWo%4;k)!;dvI!^E`y%-WQ%1p~BB%xn4zby@_IY`nl`qvCrE| zCfr#4Xy5g_hpxWZfAjH?+gt7&J%07pzQ>R5etG)$*SCLv|NQ^^_y7O@lF~{e6Dj@^ zbS_FwEJ;mKD9CR@Sj140SG`Dg@NM(!+%bZ6VH4ljpKLl#Qf0b zo~TjyY>TGxGOok*(tIWj4;FIDT4bKmNHj5UU}O`q=y{=V?A&qHW;US+1;^$N8LJsD z4koLgoa_9bO{HRjqRWiXH4#gHO*!ta?DSv2VnqT&!-^%Ip_wxuaRe%`39=+G2y$g# z@|-3oDP-c<*eRm!Hq&+K%S(%0YIJG}7BaDFhAsDMoV4X-kcw-b-js%mO0AmyQ~rJV za9C4V#U%RQ#2F8hSOtvc8hkZWV(FT!%^ZIqA<)@(scXZlIWL`_o^X(wQ}{t+i#wl$ gPEc3Ol!K4hCYi>qv5_n)OyH5Wu474*5MZzd0RKgqy#N3J literal 0 HcmV?d00001 diff --git a/smiley_pack/icons/fediverse/pleroma.gif b/smiley_pack/icons/fediverse/pleroma.gif new file mode 100644 index 0000000000000000000000000000000000000000..7be5eca482992d966a37bd6cc8f7662fdcb48547 GIT binary patch literal 100 zcmZ?wbhEHb6krfwIK;;AdvV0CCE>q8DB}0h@IOn#C8d>sNbx5NBNqcZgAM}_fYdTD zYgTCK+}4`+Ol`_E+uoP!CQWagsL^&ka+&z4#8~e2@BiG)TY679=hU8HCI)K&0KX * All smileys from sites offering them as Public Domain */ @@ -25,405 +26,405 @@ function smiley_pack_smilies(&$a,&$b) { #Animal smileys. - $b['texts'][] = ':bunnyflowers'; - $b['icons'][] = '' . ':bunnyflowers' . ''; + $b['texts'][] = ':bunnyflowers:'; + $b['icons'][] = '' . ':bunnyflowers:' . ''; - $b['texts'][] = ':chick'; - $b['icons'][] = '' . ':chick' . ''; + $b['texts'][] = ':chick:'; + $b['icons'][] = '' . ':chick:' . ''; - $b['texts'][] = ':bumblebee'; - $b['icons'][] = '' . ':bee' . ''; + $b['texts'][] = ':bumblebee:'; + $b['icons'][] = '' . ':bee:' . ''; - $b['texts'][] = ':ladybird'; - $b['icons'][] = '' . ':ladybird' . ''; + $b['texts'][] = ':ladybird:'; + $b['icons'][] = '' . ':ladybird:' . ''; - $b['texts'][] = ':bigspider'; - $b['icons'][] = '' . ':bigspider' . ''; + $b['texts'][] = ':bigspider:'; + $b['icons'][] = '' . ':bigspider:' . ''; - $b['texts'][] = ':cat'; - $b['icons'][] = '' . ':cat' . ''; + $b['texts'][] = ':cat:'; + $b['icons'][] = '' . ':cat:' . ''; - $b['texts'][] = ':bunny'; - $b['icons'][] = '' . ':bunny' . ''; + $b['texts'][] = ':bunny:'; + $b['icons'][] = '' . ':bunny:' . ''; - $b['texts'][] = ':cow'; - $b['icons'][] = '' . ':cow' . ''; + $b['texts'][] = ':cow:'; + $b['icons'][] = '' . ':cow:' . ''; - $b['texts'][] = ':crab'; - $b['icons'][] = '' . ':crab' . ''; + $b['texts'][] = ':crab:'; + $b['icons'][] = '' . ':crab:' . ''; - $b['texts'][] = ':dolphin'; - $b['icons'][] = '' . ':dolphin' . ''; + $b['texts'][] = ':dolphin:'; + $b['icons'][] = '' . ':dolphin:' . ''; - $b['texts'][] = ':dragonfly'; - $b['icons'][] = '' . ':dragonfly' . ''; + $b['texts'][] = ':dragonfly:'; + $b['icons'][] = '' . ':dragonfly:' . ''; - $b['texts'][] = ':frog'; - $b['icons'][] = '' . ':frog' . ''; + $b['texts'][] = ':frog:'; + $b['icons'][] = '' . ':frog:' . ''; - $b['texts'][] = ':hamster'; - $b['icons'][] = '' . ':hamster' . ''; + $b['texts'][] = ':hamster:'; + $b['icons'][] = '' . ':hamster:' . ''; - $b['texts'][] = ':monkey'; - $b['icons'][] = '' . ':monkey' . ''; + $b['texts'][] = ':monkey:'; + $b['icons'][] = '' . ':monkey:' . ''; - $b['texts'][] = ':horse'; - $b['icons'][] = '' . ':horse' . ''; + $b['texts'][] = ':horse:'; + $b['icons'][] = '' . ':horse:' . ''; - $b['texts'][] = ':parrot'; - $b['icons'][] = '' . ':parrot' . ''; + $b['texts'][] = ':parrot:'; + $b['icons'][] = '' . ':parrot:' . ''; - $b['texts'][] = ':tux'; - $b['icons'][] = '' . ':tux' . ''; + $b['texts'][] = ':tux:'; + $b['icons'][] = '' . ':tux:' . ''; - $b['texts'][] = ':snail'; - $b['icons'][] = '' . ':snail' . ''; + $b['texts'][] = ':snail:'; + $b['icons'][] = '' . ':snail:' . ''; - $b['texts'][] = ':sheep'; - $b['icons'][] = '' . ':sheep' . ''; + $b['texts'][] = ':sheep:'; + $b['icons'][] = '' . ':sheep:' . ''; - $b['texts'][] = ':dog'; - $b['icons'][] = '' . ':dog' . ''; + $b['texts'][] = ':dog:'; + $b['icons'][] = '' . ':dog:' . ''; - $b['texts'][] = ':elephant'; - $b['icons'][] = '' . ':elephant' . ''; + $b['texts'][] = ':elephant:'; + $b['icons'][] = '' . ':elephant:' . ''; - $b['texts'][] = ':fish'; - $b['icons'][] = '' . ':fish' . ''; + $b['texts'][] = ':fish:'; + $b['icons'][] = '' . ':fish:' . ''; - $b['texts'][] = ':giraffe'; - $b['icons'][] = '' . ':giraffe' . ''; + $b['texts'][] = ':giraffe:'; + $b['icons'][] = '' . ':giraffe:' . ''; - $b['texts'][] = ':pig'; - $b['icons'][] = '' . ':pig' . ''; + $b['texts'][] = ':pig:'; + $b['icons'][] = '' . ':pig:' . ''; #Baby Smileys - $b['texts'][] = ':baby'; - $b['icons'][] = '' . ':baby' . ''; + $b['texts'][] = ':baby:'; + $b['icons'][] = '' . ':baby:' . ''; - $b['texts'][] = ':babycot'; - $b['icons'][] = '' . ':babycot' . ''; + $b['texts'][] = ':babycot:'; + $b['icons'][] = '' . ':babycot:' . ''; - $b['texts'][] = ':pregnant'; - $b['icons'][] = '' . ':pregnant' . ''; + $b['texts'][] = ':pregnant:'; + $b['icons'][] = '' . ':pregnant:' . ''; - $b['texts'][] = ':stork'; - $b['icons'][] = '' . ':stork' . ''; + $b['texts'][] = ':stork:'; + $b['icons'][] = '' . ':stork:' . ''; #Confused Smileys - $b['texts'][] = ':confused'; - $b['icons'][] = '' . ':confused' . ''; + $b['texts'][] = ':confused:'; + $b['icons'][] = '' . ':confused:' . ''; - $b['texts'][] = ':shrug'; - $b['icons'][] = '' . ':shrug' . ''; + $b['texts'][] = ':shrug:'; + $b['icons'][] = '' . ':shrug:' . ''; - $b['texts'][] = ':stupid'; - $b['icons'][] = '' . ':stupid' . ''; + $b['texts'][] = ':stupid:'; + $b['icons'][] = '' . ':stupid:' . ''; - $b['texts'][] = ':dazed'; - $b['icons'][] = '' . ':dazed' . ''; + $b['texts'][] = ':dazed:'; + $b['icons'][] = '' . ':dazed:' . ''; #Cool Smileys - $b['texts'][] = ':affro'; - $b['icons'][] = '' . ':affro' . ''; + $b['texts'][] = ':affro:'; + $b['icons'][] = '' . ':affro:' . ''; #Devil/Angel Smileys - $b['texts'][] = ':angel'; - $b['icons'][] = '' . ':angel' . ''; + $b['texts'][] = ':angel:'; + $b['icons'][] = '' . ':angel:' . ''; - $b['texts'][] = ':cherub'; - $b['icons'][] = '' . ':cherub' . ''; + $b['texts'][] = ':cherub:'; + $b['icons'][] = '' . ':cherub:' . ''; - $b['texts'][] = ':devilangel'; - $b['icons'][] = '' . ':devilangel' . ''; + $b['texts'][] = ':devilangel:'; + $b['icons'][] = '' . ':devilangel:' . ''; - $b['texts'][] = ':catdevil'; - $b['icons'][] = '' . ':catdevil' . ''; + $b['texts'][] = ':catdevil:'; + $b['icons'][] = '' . ':catdevil:' . ''; - $b['texts'][] = ':devillish'; - $b['icons'][] = '' . ':devillish' . ''; + $b['texts'][] = ':devillish:'; + $b['icons'][] = '' . ':devillish:' . ''; - $b['texts'][] = ':daseesaw'; - $b['icons'][] = '' . ':daseesaw' . ''; + $b['texts'][] = ':daseesaw:'; + $b['icons'][] = '' . ':daseesaw:' . ''; - $b['texts'][] = ':turnevil'; - $b['icons'][] = '' . ':turnevil' . ''; + $b['texts'][] = ':turnevil:'; + $b['icons'][] = '' . ':turnevil:' . ''; - $b['texts'][] = ':saint'; - $b['icons'][] = '' . ':saint' . ''; + $b['texts'][] = ':saint:'; + $b['icons'][] = '' . ':saint:' . ''; - $b['texts'][] = ':graveside'; - $b['icons'][] = '' . ':graveside' . ''; + $b['texts'][] = ':graveside:'; + $b['icons'][] = '' . ':graveside:' . ''; #Unpleasent smileys. - $b['texts'][] = ':toilet'; - $b['icons'][] = '' . ':toilet' . ''; + $b['texts'][] = ':toilet:'; + $b['icons'][] = '' . ':toilet:' . ''; - $b['texts'][] = ':fartinbed'; - $b['icons'][] = '' . ':fartinbed' . ''; + $b['texts'][] = ':fartinbed:'; + $b['icons'][] = '' . ':fartinbed:' . ''; - $b['texts'][] = ':fartblush'; - $b['icons'][] = '' . ':fartblush' . ''; + $b['texts'][] = ':fartblush:'; + $b['icons'][] = '' . ':fartblush:' . ''; #Drinks - $b['texts'][] = ':tea'; - $b['icons'][] = '' . ':tea' . ''; + $b['texts'][] = ':tea:'; + $b['icons'][] = '' . ':tea:' . ''; - $b['texts'][] = ':drool'; - $b['icons'][] = '' . ':drool' . ''; + $b['texts'][] = ':drool:'; + $b['icons'][] = '' . ':drool:' . ''; #Sad smileys - $b['texts'][] = ':crying'; - $b['icons'][] = '' . ':crying' . ''; + $b['texts'][] = ':crying:'; + $b['icons'][] = '' . ':crying:' . ''; - $b['texts'][] = ':prisoner'; - $b['icons'][] = '' . ':prisoner' . ''; + $b['texts'][] = ':prisoner:'; + $b['icons'][] = '' . ':prisoner:' . ''; - $b['texts'][] = ':sigh'; - $b['icons'][] = '' . ':sigh' . ''; + $b['texts'][] = ':sigh:'; + $b['icons'][] = '' . ':sigh:' . ''; #Smoking - only one smiley in here, maybe it needs moving elsewhere? - $b['texts'][] = ':smoking'; - $b['icons'][] = '' . ':smoking' . ''; + $b['texts'][] = ':smoking:'; + $b['icons'][] = '' . ':smoking:' . ''; #Sport smileys - $b['texts'][] = ':basketball'; - $b['icons'][] = '' . ':basketball' . ''; + $b['texts'][] = ':basketball:'; + $b['icons'][] = '' . ':basketball:' . ''; $b['texts'][] = '~bowling'; $b['icons'][] = '' . '~bowling' . ''; - $b['texts'][] = ':cycling'; - $b['icons'][] = '' . ':cycling' . ''; + $b['texts'][] = ':cycling:'; + $b['icons'][] = '' . ':cycling:' . ''; - $b['texts'][] = ':darts'; - $b['icons'][] = '' . ':darts' . ''; + $b['texts'][] = ':darts:'; + $b['icons'][] = '' . ':darts:' . ''; - $b['texts'][] = ':fencing'; - $b['icons'][] = '' . ':fencing' . ''; + $b['texts'][] = ':fencing:'; + $b['icons'][] = '' . ':fencing:' . ''; - $b['texts'][] = ':juggling'; - $b['icons'][] = '' . ':juggling' . ''; + $b['texts'][] = ':juggling:'; + $b['icons'][] = '' . ':juggling:' . ''; - $b['texts'][] = ':skipping'; - $b['icons'][] = '' . ':skipping' . ''; + $b['texts'][] = ':skipping:'; + $b['icons'][] = '' . ':skipping:' . ''; - $b['texts'][] = ':archery'; - $b['icons'][] = '' . ':archery' . ''; + $b['texts'][] = ':archery:'; + $b['icons'][] = '' . ':archery:' . ''; - $b['texts'][] = ':surfing'; - $b['icons'][] = '' . ':surfing' . ''; + $b['texts'][] = ':surfing:'; + $b['icons'][] = '' . ':surfing:' . ''; - $b['texts'][] = ':snooker'; - $b['icons'][] = '' . ':snooker' . ''; + $b['texts'][] = ':snooker:'; + $b['icons'][] = '' . ':snooker:' . ''; - $b['texts'][] = ':horseriding'; - $b['icons'][] = '' . ':horseriding' . ''; + $b['texts'][] = ':horseriding:'; + $b['icons'][] = '' . ':horseriding:' . ''; #Love smileys - $b['texts'][] = ':iloveyou'; - $b['icons'][] = '' . ':iloveyou' . ''; + $b['texts'][] = ':iloveyou:'; + $b['icons'][] = '' . ':iloveyou:' . ''; - $b['texts'][] = ':inlove'; - $b['icons'][] = '' . ':inlove' . ''; + $b['texts'][] = ':inlove:'; + $b['icons'][] = '' . ':inlove:' . ''; $b['texts'][] = '~love'; $b['icons'][] = '' . ':love' . ''; - $b['texts'][] = ':lovebear'; - $b['icons'][] = '' . ':lovebear' . ''; + $b['texts'][] = ':lovebear:'; + $b['icons'][] = '' . ':lovebear:' . ''; - $b['texts'][] = ':lovebed'; - $b['icons'][] = '' . ':lovebed' . ''; + $b['texts'][] = ':lovebed:'; + $b['icons'][] = '' . ':lovebed:' . ''; - $b['texts'][] = ':loveheart'; - $b['icons'][] = '' . ':loveheart' . ''; + $b['texts'][] = ':loveheart:'; + $b['icons'][] = '' . ':loveheart:' . ''; #Tired/Sleep smileys $b['texts'][] = ':countsheep'; - $b['icons'][] = '' . ':countsheep' . ''; + $b['icons'][] = '' . ':countsheep:' . ''; - $b['texts'][] = ':hammock'; - $b['icons'][] = '' . ':hammock' . ''; + $b['texts'][] = ':hammock:'; + $b['icons'][] = '' . ':hammock:' . ''; - $b['texts'][] = ':pillow'; - $b['icons'][] = '' . ':pillow' . ''; + $b['texts'][] = ':pillow:'; + $b['icons'][] = '' . ':pillow:' . ''; - $b['texts'][] = ':yawn'; - $b['icons'][] = '' . ':yawn' . ''; + $b['texts'][] = ':yawn:'; + $b['icons'][] = '' . ':yawn:' . ''; #Fight/Flame/Violent smileys - $b['texts'][] = ':2guns'; - $b['icons'][] = '' . ':2guns' . ''; + $b['texts'][] = ':2guns:'; + $b['icons'][] = '' . ':2guns:' . ''; $b['texts'][] = ':alienfight'; $b['icons'][] = '' . ':alienfight' . ''; - $b['texts'][] = ':army'; - $b['icons'][] = '' . ':army' . ''; + $b['texts'][] = ':army:'; + $b['icons'][] = '' . ':army:' . ''; - $b['texts'][] = ':arrowhead'; - $b['icons'][] = '' . ':arrowhead' . ''; + $b['texts'][] = ':arrowhead:'; + $b['icons'][] = '' . ':arrowhead:' . ''; - $b['texts'][] = ':bfg'; - $b['icons'][] = '' . ':bfg' . ''; + $b['texts'][] = ':bfg:'; + $b['icons'][] = '' . ':bfg:' . ''; - $b['texts'][] = ':bowman'; - $b['icons'][] = '' . ':bowman' . ''; + $b['texts'][] = ':bowman:'; + $b['icons'][] = '' . ':bowman:' . ''; - $b['texts'][] = ':chainsaw'; - $b['icons'][] = '' . ':chainsaw' . ''; + $b['texts'][] = ':chainsaw:'; + $b['icons'][] = '' . ':chainsaw:' . ''; - $b['texts'][] = ':crossbow'; - $b['icons'][] = '' . ':crossbow' . ''; + $b['texts'][] = ':crossbow:'; + $b['icons'][] = '' . ':crossbow:' . ''; - $b['texts'][] = ':crusader'; - $b['icons'][] = '' . ':crusader' . ''; + $b['texts'][] = ':crusader:'; + $b['icons'][] = '' . ':crusader:' . ''; - $b['texts'][] = ':dead'; - $b['icons'][] = '' . ':dead' . ''; + $b['texts'][] = ':dead:'; + $b['icons'][] = '' . ':dead:' . ''; - $b['texts'][] = ':hammersplat'; - $b['icons'][] = '' . ':hammersplat' . ''; + $b['texts'][] = ':hammersplat:'; + $b['icons'][] = '' . ':hammersplat:' . ''; - $b['texts'][] = ':lasergun'; - $b['icons'][] = '' . ':lasergun' . ''; + $b['texts'][] = ':lasergun:'; + $b['icons'][] = '' . ':lasergun:' . ''; - $b['texts'][] = ':machinegun'; - $b['icons'][] = '' . ':machinegun' . ''; + $b['texts'][] = ':machinegun:'; + $b['icons'][] = '' . ':machinegun:' . ''; - $b['texts'][] = ':acid'; - $b['icons'][] = '' . ':acid' . ''; + $b['texts'][] = ':acid:'; + $b['icons'][] = '' . ':acid:' . ''; #Fantasy smileys - monsters and dragons fantasy. The other type of fantasy belongs in adult smileys - $b['texts'][] = ':alienmonster'; - $b['icons'][] = '' . ':alienmonster' . ''; + $b['texts'][] = ':alienmonster:'; + $b['icons'][] = '' . ':alienmonster:' . ''; - $b['texts'][] = ':barbarian'; - $b['icons'][] = '' . ':barbarian' . ''; + $b['texts'][] = ':barbarian:'; + $b['icons'][] = '' . ':barbarian:' . ''; - $b['texts'][] = ':dinosaur'; - $b['icons'][] = '' . ':dinosaur' . ''; + $b['texts'][] = ':dinosaur:'; + $b['icons'][] = '' . ':dinosaur:' . ''; - $b['texts'][] = ':dragon'; - $b['icons'][] = '' . ':dragon' . ''; + $b['texts'][] = ':dragon:'; + $b['icons'][] = '' . ':dragon:' . ''; - $b['texts'][] = ':draco'; - $b['icons'][] = '' . ':draco' . ''; + $b['texts'][] = ':draco:'; + $b['icons'][] = '' . ':draco:' . ''; - $b['texts'][] = ':ghost'; - $b['icons'][] = '' . ':ghost' . ''; + $b['texts'][] = ':ghost:'; + $b['icons'][] = '' . ':ghost:' . ''; - $b['texts'][] = ':mummy'; - $b['icons'][] = '' . ':mummy' . ''; + $b['texts'][] = ':mummy:'; + $b['icons'][] = '' . ':mummy:' . ''; #Food smileys - $b['texts'][] = ':apple'; - $b['icons'][] = '' . ':apple' . ''; + $b['texts'][] = ':apple:'; + $b['icons'][] = '' . ':apple:' . ''; - $b['texts'][] = ':broccoli'; - $b['icons'][] = '' . ':brocolli' . ''; + $b['texts'][] = ':broccoli:'; + $b['icons'][] = '' . ':brocolli:' . ''; - $b['texts'][] = ':cake'; - $b['icons'][] = '' . ':cake' . ''; + $b['texts'][] = ':cake:'; + $b['icons'][] = '' . ':cake:' . ''; - $b['texts'][] = ':carrot'; - $b['icons'][] = '' . ':carrot' . ''; + $b['texts'][] = ':carrot:'; + $b['icons'][] = '' . ':carrot:' . ''; - $b['texts'][] = ':popcorn'; - $b['icons'][] = '' . ':popcorn' . ''; + $b['texts'][] = ':popcorn:'; + $b['icons'][] = '' . ':popcorn:' . ''; - $b['texts'][] = ':tomato'; - $b['icons'][] = '' . ':tomato' . ''; + $b['texts'][] = ':tomato:'; + $b['icons'][] = '' . ':tomato:' . ''; - $b['texts'][] = ':banana'; - $b['icons'][] = '' . ':banana' . ''; + $b['texts'][] = ':banana:'; + $b['icons'][] = '' . ':banana:' . ''; - $b['texts'][] = ':cooking'; - $b['icons'][] = '' . ':cooking' . ''; + $b['texts'][] = ':cooking:'; + $b['icons'][] = '' . ':cooking:' . ''; - $b['texts'][] = ':fryegg'; - $b['icons'][] = '' . ':fryegg' . ''; + $b['texts'][] = ':fryegg:'; + $b['icons'][] = '' . ':fryegg:' . ''; - $b['texts'][] = ':birthdaycake'; - $b['icons'][] = '' . ':birthdaycake' . ''; + $b['texts'][] = ':birthdaycake:'; + $b['icons'][] = '' . ':birthdaycake:' . ''; #Happy smileys - $b['texts'][] = ':cloud9'; - $b['icons'][] = '' . ':cloud9' . ''; + $b['texts'][] = ':cloud9:'; + $b['icons'][] = '' . ':cloud9:' . ''; - $b['texts'][] = ':tearsofjoy'; - $b['icons'][] = '' . ':tearsofjoy' . ''; + $b['texts'][] = ':tearsofjoy:'; + $b['icons'][] = '' . ':tearsofjoy:' . ''; #Repsect smileys - $b['texts'][] = ':bow'; - $b['icons'][] = '' . ':bow' . ''; + $b['texts'][] = ':bow:'; + $b['icons'][] = '' . ':bow:' . ''; - $b['texts'][] = ':bravo'; - $b['icons'][] = '' . ':bravo' . ''; + $b['texts'][] = ':bravo:'; + $b['icons'][] = '' . ':bravo:' . ''; - $b['texts'][] = ':hailking'; - $b['icons'][] = '' . ':hailking' . ''; + $b['texts'][] = ':hailking:'; + $b['icons'][] = '' . ':hailking:' . ''; - $b['texts'][] = ':number1'; - $b['icons'][] = '' . ':number1' . ''; + $b['texts'][] = ':number1:'; + $b['icons'][] = '' . ':number1:' . ''; #Laugh smileys - $b['texts'][] = ':hahaha'; - $b['icons'][] = '' . ':hahaha' . ''; + $b['texts'][] = ':hahaha:'; + $b['icons'][] = '' . ':hahaha:' . ''; - $b['texts'][] = ':loltv'; - $b['icons'][] = '' . ':loltv' . ''; + $b['texts'][] = ':loltv:'; + $b['icons'][] = '' . ':loltv:' . ''; - $b['texts'][] = ':rofl'; - $b['icons'][] = '' . ':rofl' . ''; + $b['texts'][] = ':rofl:'; + $b['icons'][] = '' . ':rofl:' . ''; #Music smileys - $b['texts'][] = ':drums'; - $b['icons'][] = '' . ':drums' . ''; + $b['texts'][] = ':drums:'; + $b['icons'][] = '' . ':drums:' . ''; - $b['texts'][] = ':guitar'; - $b['icons'][] = '' . ':guitar' . ''; + $b['texts'][] = ':guitar:'; + $b['icons'][] = '' . ':guitar:' . ''; - $b['texts'][] = ':trumpet'; - $b['icons'][] = '' . ':trumpet' . ''; + $b['texts'][] = ':trumpet:'; + $b['icons'][] = '' . ':trumpet:' . ''; #Smileys that used to be in core - $b['texts'][] = ':headbang'; - $b['icons'][] = '' . ':headbang' . ''; + $b['texts'][] = ':headbang:'; + $b['icons'][] = '' . ':headbang:' . ''; - $b['texts'][] = ':beard'; - $b['icons'][] = '' . ':beard' . ''; + $b['texts'][] = ':beard:'; + $b['icons'][] = '' . ':beard:' . ''; - $b['texts'][] = ':whitebeard'; - $b['icons'][] = '' . ':whitebeard' . ''; + $b['texts'][] = ':whitebeard:'; + $b['icons'][] = '' . ':whitebeard:' . ''; - $b['texts'][] = ':shaka'; - $b['icons'][] = '' . ':shaka' . ''; + $b['texts'][] = ':shaka:'; + $b['icons'][] = '' . ':shaka:' . ''; $b['texts'][] = ':\\.../'; $b['icons'][] = '' . ':\\.../' . ''; @@ -431,8 +432,8 @@ function smiley_pack_smilies(&$a,&$b) { $b['texts'][] = ':\\ooo/'; $b['icons'][] = '' . ':\\ooo/' . ''; - $b['texts'][] = ':headdesk'; - $b['icons'][] = '' . ':headdesk' . ''; + $b['texts'][] = ':headdesk:'; + $b['icons'][] = '' . ':headdesk:' . ''; #These two are still in core, so oldcore isn't strictly right, but we don't want too many directories @@ -445,47 +446,97 @@ function smiley_pack_smilies(&$a,&$b) { # Regex killers - stick these at the bottom so they appear at the end of the English and # at the start of $OtherLanguage. - $b['texts'][] = ':cool'; - $b['icons'][] = '' . ':cool' . ''; + $b['texts'][] = ':cool:'; + $b['icons'][] = '' . ':cool:' . ''; - $b['texts'][] = ':vomit'; - $b['icons'][] = '' . ':vomit' . ''; + $b['texts'][] = ':vomit:'; + $b['icons'][] = '' . ':vomit:' . ''; - $b['texts'][] = ':golf'; - $b['icons'][] = '' . ':golf' . ''; + $b['texts'][] = ':golf:'; + $b['icons'][] = '' . ':golf:' . ''; - $b['texts'][] = ':football'; - $b['icons'][] = '' . ':football' . ''; + $b['texts'][] = ':football:'; + $b['icons'][] = '' . ':football:' . ''; - $b['texts'][] = ':tennis'; - $b['icons'][] = '' . ':tennis' . ''; + $b['texts'][] = ':tennis:'; + $b['icons'][] = '' . ':tennis:' . ''; - $b['texts'][] = ':alpha'; - $b['icons'][] = '' . ':alpha' . ''; + $b['texts'][] = ':alpha:'; + $b['icons'][] = '' . ':alpha:' . ''; - $b['texts'][] = ':marine'; - $b['icons'][] = '' . ':marine' . ''; + $b['texts'][] = ':marine:'; + $b['icons'][] = '' . ':marine:' . ''; - $b['texts'][] = ':sabre'; - $b['icons'][] = '' . ':sabre' . ''; + $b['texts'][] = ':sabre:'; + $b['icons'][] = '' . ':sabre:' . ''; - $b['texts'][] = ':tank'; - $b['icons'][] = '' . ':tank' . ''; + $b['texts'][] = ':tank:'; + $b['icons'][] = '' . ':tank:' . ''; - $b['texts'][] = ':viking'; - $b['icons'][] = '' . ':viking' . ''; + $b['texts'][] = ':viking:'; + $b['icons'][] = '' . ':viking:' . ''; - $b['texts'][] = ':gangs'; - $b['icons'][] = '' . ':gangs' . ''; + $b['texts'][] = ':gangs:'; + $b['icons'][] = '' . ':gangs:' . ''; - $b['texts'][] = ':dj'; - $b['icons'][] = '' . ':dj' . ''; + $b['texts'][] = ':dj:'; + $b['icons'][] = '' . ':dj:' . ''; - $b['texts'][] = ':elvis'; - $b['icons'][] = '' . ':elivs' . ''; + $b['texts'][] = ':elvis:'; + $b['icons'][] = '' . ':elivs:' . ''; + + $b['texts'][] = ':violin:'; + $b['icons'][] = '' . ':violin:' . ''; + +# New Gif Emoji (@one@loma.ml) +# Fediverse + + $b['texts'][] = ':friendica:'; + $b['icons'][] = '' . ':friendica:' . ''; + + $b['texts'][] = ':mastodon:'; + $b['icons'][] = '' . ':mastodon:' . ''; + + $b['texts'][] = ':pleroma:'; + $b['icons'][] = '' . ':pleroma:' . ''; + + $b['texts'][] = ':misskey:'; + $b['icons'][] = '' . ':misskey:' . ''; + + $b['texts'][] = ':diaspora:'; + $b['icons'][] = '' . ':diaspora:' . ''; + + $b['texts'][] = ':hubzilla:'; + $b['icons'][] = '' . ':hubzilla:' . ''; + + $b['texts'][] = ':pixelfed:'; + $b['icons'][] = '' . ':pixelfeed:' . ''; + + $b['texts'][] = ':nextcloud:'; + $b['icons'][] = '' . ':nextcloud:' . ''; + + $b['texts'][] = ':activitypub:'; + $b['icons'][] = '' . ':activitypub:' . ''; + +# ccc + + $b['texts'][] = ':ccc event:'; + $b['icons'][] = '' . ':ccc event:' . ''; + +# Commercial + + $b['texts'][] = ':youtube:'; + $b['icons'][] = '' . ':youtube:' . ''; + + $b['texts'][] = ':spotify:'; + $b['icons'][] = '' . ':spotify:' . ''; + + $b['texts'][] = ':twitter:'; + $b['icons'][] = '' . ':twitter:' . ''; + + $b['texts'][] = ':twitch:'; + $b['icons'][] = '' . ':twitch:' . ''; - $b['texts'][] = ':violin'; - $b['icons'][] = '' . ':violin' . ''; } From b1b26062fc11afc0607100e15f161aa0c02f56d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Wed, 22 Jun 2022 17:19:26 +0200 Subject: [PATCH 052/677] Images::getInfoFromURL[Cached]() will both return empty arrays on error and that needs to be reflected here, too. --- statusnet/statusnet.php | 2 +- twitter/twitter.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 6fc1469c..f0f2755b 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -1050,7 +1050,7 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex $own_url = DI::pConfig()->get($uid, 'statusnet', 'own_url'); if ($content->user->id == $own_url) { - $self = DBA::selectFirst([], ['self' => true, 'uid' => $uid]); + $self = DBA::selectFirst('', ['self' => true, 'uid' => $uid]); if (DBA::isResult($self)) { $contactid = $self["id"]; diff --git a/twitter/twitter.php b/twitter/twitter.php index 3c46ac7e..5a5071fc 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -1279,7 +1279,7 @@ function twitter_fix_avatar($avatar) $new_avatar = str_replace("_normal.", "_400x400.", $avatar); $info = Images::getInfoFromURLCached($new_avatar); - if (!$info) { + if (empty($info)) { $new_avatar = $avatar; } From d39717a2d568c7bd78a5b7781bb86893ae01383b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Wed, 22 Jun 2022 18:17:09 +0200 Subject: [PATCH 053/677] Converted more double-quotes to single --- statusnet/statusnet.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index f0f2755b..5f520de4 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -1050,7 +1050,7 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex $own_url = DI::pConfig()->get($uid, 'statusnet', 'own_url'); if ($content->user->id == $own_url) { - $self = DBA::selectFirst('', ['self' => true, 'uid' => $uid]); + $self = DBA::selectFirst('*', ['self' => true, 'uid' => $uid]); if (DBA::isResult($self)) { $contactid = $self["id"]; From 04466968dcd4ccd796894a951b2ff821a83545b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Mon, 20 Jun 2022 21:31:55 +0200 Subject: [PATCH 054/677] Let's avoid local variables --- advancedcontentfilter/advancedcontentfilter.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/advancedcontentfilter/advancedcontentfilter.php b/advancedcontentfilter/advancedcontentfilter.php index fecf9563..9f6a7cff 100644 --- a/advancedcontentfilter/advancedcontentfilter.php +++ b/advancedcontentfilter/advancedcontentfilter.php @@ -450,10 +450,7 @@ function advancedcontentfilter_prepare_item_row(array $item_row): array $item_row['tags'] = $tags['tags']; $item_row['hashtags'] = $tags['hashtags']; $item_row['mentions'] = $tags['mentions']; - - $attachments = Post\Media::splitAttachments($item_row['uri-id'], $item_row['guid'] ?? ''); - - $item_row['attachments'] = $attachments; + $item_row['attachments'] = Post\Media::splitAttachments($item_row['uri-id'], $item_row['guid'] ?? ''); return $item_row; } From 07307823ca4a63984502f63c5a40ae23ee1f2f31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Wed, 22 Jun 2022 18:55:35 +0200 Subject: [PATCH 055/677] Changed more double-quotes to single --- twitter/twitter.php | 201 ++++++++++++++++++++++++-------------------- 1 file changed, 108 insertions(+), 93 deletions(-) diff --git a/twitter/twitter.php b/twitter/twitter.php index 5a5071fc..458677ce 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -116,7 +116,7 @@ function twitter_install() Hook::register('probe_detect' , __FILE__, 'twitter_probe_detect'); Hook::register('item_by_link' , __FILE__, 'twitter_item_by_link'); Hook::register('parse_link' , __FILE__, 'twitter_parse_link'); - Logger::info("installed twitter"); + Logger::info('installed twitter'); } // Hook functions @@ -145,15 +145,15 @@ function twitter_support_follow(App $a, array &$data) function twitter_follow(App $a, array &$contact) { - Logger::info('Check if contact is twitter contact', ['url' => $contact["url"]]); + Logger::info('Check if contact is twitter contact', ['url' => $contact['url']]); - if (!strstr($contact["url"], "://twitter.com") && !strstr($contact["url"], "@twitter.com")) { + if (!strstr($contact['url'], '://twitter.com') && !strstr($contact['url'], '@twitter.com')) { return; } // contact seems to be a twitter contact, so continue - $nickname = preg_replace("=https?://twitter.com/(.*)=ism", "$1", $contact["url"]); - $nickname = str_replace("@twitter.com", "", $nickname); + $nickname = preg_replace("=https?://twitter.com/(.*)=ism", "$1", $contact['url']); + $nickname = str_replace('@twitter.com', '', $nickname); $uid = $a->getLoggedInUserId(); @@ -169,7 +169,7 @@ function twitter_follow(App $a, array &$contact) $contact = Contact::getById($contact_id, ['name', 'nick', 'url', 'addr', 'batch', 'notify', 'poll', 'request', 'confirm', 'poco', 'photo', 'priority', 'network', 'alias', 'pubkey']); if (DBA::isResult($contact)) { - $contact["contact"] = $contact; + $contact['contact'] = $contact; } } @@ -262,7 +262,7 @@ function twitter_settings_post(App $a) } $connection = new TwitterOAuth($ckey, $csecret, $_POST['twitter-token'], $_POST['twitter-token2']); - $token = $connection->oauth("oauth/access_token", ["oauth_verifier" => $_POST['twitter-pin']]); + $token = $connection->oauth('oauth/access_token', ['oauth_verifier' => $_POST['twitter-pin']]); // ok, now that we have the Access Token, save them in the user config DI::pConfig()->set(local_user(), 'twitter', 'oauthtoken', $token['oauth_token']); DI::pConfig()->set(local_user(), 'twitter', 'oauthsecret', $token['oauth_token_secret']); @@ -634,7 +634,7 @@ function twitter_post_hook(App $a, array &$b) } // Post to Twitter - if (!DI::pConfig()->get($b["uid"], 'twitter', 'import') + if (!DI::pConfig()->get($b['uid'], 'twitter', 'import') && ($b['private'] || ($b['created'] !== $b['edited']))) { return; } @@ -647,17 +647,17 @@ function twitter_post_hook(App $a, array &$b) Logger::debug('Got comment', ['item' => $b]); // Looking if its a reply to a twitter post - if (!twitter_get_id($b["parent-uri"]) && - !twitter_get_id($b["extid"]) && - !twitter_get_id($b["thr-parent"])) { - Logger::info('No twitter post', ['parent' => $b["parent"]]); + if (!twitter_get_id($b['parent-uri']) && + !twitter_get_id($b['extid']) && + !twitter_get_id($b['thr-parent'])) { + Logger::info('No twitter post', ['parent' => $b['parent']]); return; } - $condition = ['uri' => $b["thr-parent"], 'uid' => $b["uid"]]; + $condition = ['uri' => $b['thr-parent'], 'uid' => $b['uid']]; $thr_parent = Post::selectFirst(['uri', 'extid', 'author-link', 'author-nick', 'author-network'], $condition); if (!DBA::isResult($thr_parent)) { - Logger::warning('No parent found', ['thr-parent' => $b["thr-parent"]]); + Logger::warning('No parent found', ['thr-parent' => $b['thr-parent']]); return; } @@ -665,9 +665,9 @@ function twitter_post_hook(App $a, array &$b) $nickname = '@[url=' . $thr_parent['author-link'] . ']' . $thr_parent['author-nick'] . '[/url]'; $nicknameplain = '@' . $thr_parent['author-nick']; - Logger::info('Comparing', ['nickname' => $nickname, 'nicknameplain' => $nicknameplain, 'body' => $b["body"]]); - if ((strpos($b["body"], $nickname) === false) && (strpos($b["body"], $nicknameplain) === false)) { - $b["body"] = $nickname . " " . $b["body"]; + Logger::info('Comparing', ['nickname' => $nickname, 'nicknameplain' => $nicknameplain, 'body' => $b['body']]); + if ((strpos($b['body'], $nickname) === false) && (strpos($b['body'], $nicknameplain) === false)) { + $b['body'] = $nickname . ' ' . $b['body']; } } @@ -686,7 +686,7 @@ function twitter_post_hook(App $a, array &$b) } if ($b['verb'] == Activity::LIKE) { - Logger::info('Like', ['uid' => $b['uid'], 'id' => twitter_get_id($b["thr-parent"])]); + Logger::info('Like', ['uid' => $b['uid'], 'id' => twitter_get_id($b['thr-parent'])]); twitter_api_post('favorites/create', twitter_get_id($b['thr-parent']), $b['uid']); @@ -694,7 +694,7 @@ function twitter_post_hook(App $a, array &$b) } if ($b['verb'] == Activity::ANNOUNCE) { - Logger::info('Retweet', ['uid' => $b['uid'], 'id' => twitter_get_id($b["thr-parent"])]); + Logger::info('Retweet', ['uid' => $b['uid'], 'id' => twitter_get_id($b['thr-parent'])]); twitter_retweet($b['uid'], twitter_get_id($b['thr-parent'])); return; } @@ -708,7 +708,7 @@ function twitter_post_hook(App $a, array &$b) return; } - if ($b['app'] == "Twitter") { + if ($b['app'] == 'Twitter') { return; } @@ -752,10 +752,10 @@ function twitter_post_hook(App $a, array &$b) $msgarr = Plaintext::getPost($b, $max_char, true, BBCode::TWITTER); Logger::info('Got plaintext', ['id' => $b['id'], 'message' => $msgarr]); - $msg = $msgarr["text"]; + $msg = $msgarr['text']; - if (($msg == "") && isset($msgarr["title"])) { - $msg = Plaintext::shorten($msgarr["title"], $max_char - 50, $b['uid']); + if (($msg == '') && isset($msgarr['title'])) { + $msg = Plaintext::shorten($msgarr['title'], $max_char - 50, $b['uid']); } // Add the link to the body if the type isn't a photo or there are more than 4 images in the post @@ -823,7 +823,7 @@ function twitter_post_hook(App $a, array &$b) Logger::info('twitter_post send', ['id' => $b['id'], 'result' => $result]); if (!empty($result->source)) { - DI::config()->set("twitter", "application_name", strip_tags($result->source)); + DI::config()->set('twitter', 'application_name', strip_tags($result->source)); } if (!empty($result->errors)) { @@ -831,7 +831,7 @@ function twitter_post_hook(App $a, array &$b) Worker::defer(); } elseif ($thr_parent) { Logger::notice('Post send, updating extid', ['id' => $b['id'], 'extid' => $result->id_str]); - Item::update(['extid' => "twitter::" . $result->id_str], ['id' => $b['id']]); + Item::update(['extid' => 'twitter::' . $result->id_str], ['id' => $b['id']]); } } } @@ -911,7 +911,7 @@ function twitter_addon_admin_post(App $a) function twitter_addon_admin(App $a, &$o) { - $t = Renderer::getMarkupTemplate("admin.tpl", "addon/twitter/"); + $t = Renderer::getMarkupTemplate('admin.tpl', 'addon/twitter/'); $o = Renderer::replaceMacros($t, [ '$submit' => DI::l10n()->t('Save Settings'), @@ -942,7 +942,7 @@ function twitter_cron(App $a) $pconfigs = DBA::selectToArray('pconfig', [], ['cat' => 'twitter', 'k' => 'mirror_posts', 'v' => true]); foreach ($pconfigs as $rr) { Logger::notice('Fetching', ['user' => $rr['uid']]); - Worker::add(['priority' => PRIORITY_MEDIUM, 'force_priority' => true], "addon/twitter/twitter_sync.php", 1, (int) $rr['uid']); + Worker::add(['priority' => PRIORITY_MEDIUM, 'force_priority' => true], 'addon/twitter/twitter_sync.php', 1, (int) $rr['uid']); } $abandon_days = intval(DI::config()->get('system', 'account_abandon_days')); @@ -962,7 +962,7 @@ function twitter_cron(App $a) } Logger::notice('importing timeline', ['user' => $rr['uid']]); - Worker::add(['priority' => PRIORITY_MEDIUM, 'force_priority' => true], "addon/twitter/twitter_sync.php", 2, (int) $rr['uid']); + Worker::add(['priority' => PRIORITY_MEDIUM, 'force_priority' => true], 'addon/twitter/twitter_sync.php', 2, (int) $rr['uid']); /* // To-Do // check for new contacts once a day @@ -1016,36 +1016,36 @@ function twitter_expire(App $a) function twitter_prepare_body(App $a, array &$b) { - if ($b["item"]["network"] != Protocol::TWITTER) { + if ($b['item']['network'] != Protocol::TWITTER) { return; } - if ($b["preview"]) { + if ($b['preview']) { $max_char = 280; - $item = $b["item"]; - $item["plink"] = DI::baseUrl()->get() . "/display/" . $item["guid"]; + $item = $b['item']; + $item['plink'] = DI::baseUrl()->get() . '/display/' . $item['guid']; - $condition = ['uri' => $item["thr-parent"], 'uid' => local_user()]; + $condition = ['uri' => $item['thr-parent'], 'uid' => local_user()]; $orig_post = Post::selectFirst(['author-link'], $condition); if (DBA::isResult($orig_post)) { - $nicknameplain = preg_replace("=https?://twitter.com/(.*)=ism", "$1", $orig_post["author-link"]); - $nickname = "@[url=" . $orig_post["author-link"] . "]" . $nicknameplain . "[/url]"; - $nicknameplain = "@" . $nicknameplain; + $nicknameplain = preg_replace("=https?://twitter.com/(.*)=ism", "$1", $orig_post['author-link']); + $nickname = '@[url=' . $orig_post['author-link'] . ']' . $nicknameplain . '[/url]'; + $nicknameplain = '@' . $nicknameplain; - if ((strpos($item["body"], $nickname) === false) && (strpos($item["body"], $nicknameplain) === false)) { - $item["body"] = $nickname . " " . $item["body"]; + if ((strpos($item['body'], $nickname) === false) && (strpos($item['body'], $nicknameplain) === false)) { + $item['body'] = $nickname . ' ' . $item['body']; } } $msgarr = Plaintext::getPost($item, $max_char, true, BBCode::TWITTER); - $msg = $msgarr["text"]; + $msg = $msgarr['text']; - if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) { - $msg .= " " . $msgarr["url"]; + if (isset($msgarr['url']) && ($msgarr['type'] != 'photo')) { + $msg .= ' ' . $msgarr['url']; } - if (isset($msgarr["image"])) { - $msg .= " " . $msgarr["image"]; + if (isset($msgarr['image'])) { + $msg .= ' ' . $msgarr['image']; } $b['html'] = nl2br(htmlspecialchars($msg)); @@ -1206,7 +1206,7 @@ function twitter_fetchtimeline(App $a, $uid) $application_name = DI::config()->get('twitter', 'application_name'); - if ($application_name == "") { + if ($application_name == '') { $application_name = DI::baseUrl()->getHostname(); } @@ -1220,12 +1220,19 @@ function twitter_fetchtimeline(App $a, $uid) return; } - $parameters = ["exclude_replies" => true, "trim_user" => false, "contributor_details" => true, "include_rts" => true, "tweet_mode" => "extended", "include_ext_alt_text" => true]; + $parameters = [ + 'exclude_replies' => true, + 'trim_user' => false, + 'contributor_details' => true, + 'include_rts' => true, + 'tweet_mode' => 'extended', + 'include_ext_alt_text' => true, + ]; - $first_time = ($lastid == ""); + $first_time = ($lastid == ''); - if ($lastid != "") { - $parameters["since_id"] = $lastid; + if ($lastid != '') { + $parameters['since_id'] = $lastid; } try { @@ -1276,10 +1283,10 @@ function twitter_fetchtimeline(App $a, $uid) function twitter_fix_avatar($avatar) { - $new_avatar = str_replace("_normal.", "_400x400.", $avatar); + $new_avatar = str_replace('_normal.', '_400x400.', $avatar); $info = Images::getInfoFromURLCached($new_avatar); - if (empty($info)) { + if (!$info) { $new_avatar = $avatar; } @@ -1365,7 +1372,7 @@ function twitter_user_to_contact($data) function twitter_get_contact($data, int $uid = 0) { - $contact = DBA::selectFirst('contact', ['id'], ['uid' => $uid, 'alias' => "twitter::" . $data->id_str]); + $contact = DBA::selectFirst('contact', ['id'], ['uid' => $uid, 'alias' => 'twitter::' . $data->id_str]); if (DBA::isResult($contact)) { return $contact['id']; } else { @@ -1386,7 +1393,7 @@ function twitter_fetch_contact($uid, $data, $create_user) unset($fields['photo']); // Update the public contact - $pcontact = DBA::selectFirst('contact', ['id'], ['uid' => 0, 'alias' => "twitter::" . $data->id_str]); + $pcontact = DBA::selectFirst('contact', ['id'], ['uid' => 0, 'alias' => 'twitter::' . $data->id_str]); if (DBA::isResult($pcontact)) { $cid = $pcontact['id']; } else { @@ -1400,7 +1407,7 @@ function twitter_fetch_contact($uid, $data, $create_user) Logger::warning('No contact found', ['fields' => $fields]); } - $contact = DBA::selectFirst('contact', [], ['uid' => $uid, 'alias' => "twitter::" . $data->id_str]); + $contact = DBA::selectFirst('contact', [], ['uid' => $uid, 'alias' => 'twitter::' . $data->id_str]); if (!DBA::isResult($contact) && empty($cid)) { Logger::warning('User contact not found', ['uid' => $uid, 'twitter-id' => $data->id_str]); return 0; @@ -1430,8 +1437,8 @@ function twitter_fetch_contact($uid, $data, $create_user) Group::addMember(User::getDefaultGroup($uid), $contact_id); } else { - if ($contact["readonly"] || $contact["blocked"]) { - Logger::notice('Contact is blocked or readonly.', ['nickname' => $contact["nick"]]); + if ($contact['readonly'] || $contact['blocked']) { + Logger::notice('Contact is blocked or readonly.', ['nickname' => $contact['nick']]); return -1; } @@ -1739,7 +1746,7 @@ function twitter_createpost(App $a, $uid, $post, array $self, $create_user, $onl $postarray['network'] = Protocol::TWITTER; $postarray['uid'] = $uid; $postarray['wall'] = 0; - $postarray['uri'] = "twitter::" . $post->id_str; + $postarray['uri'] = 'twitter::' . $post->id_str; $postarray['protocol'] = Conversation::PARCEL_TWITTER; $postarray['source'] = json_encode($post); $postarray['direction'] = Conversation::PULL; @@ -1756,8 +1763,8 @@ function twitter_createpost(App $a, $uid, $post, array $self, $create_user, $onl $contactid = 0; - if ($post->in_reply_to_status_id_str != "") { - $thr_parent = "twitter::" . $post->in_reply_to_status_id_str; + if ($post->in_reply_to_status_id_str != '') { + $thr_parent = 'twitter::' . $post->in_reply_to_status_id_str; $item = Post::selectFirst(['uri'], ['uri' => $thr_parent, 'uid' => $uid]); if (!DBA::isResult($item)) { @@ -1798,7 +1805,7 @@ function twitter_createpost(App $a, $uid, $post, array $self, $create_user, $onl $postarray['owner-id'] = twitter_get_contact($post->user); $postarray['owner-name'] = $post->user->name; - $postarray['owner-link'] = "https://twitter.com/" . $post->user->screen_name; + $postarray['owner-link'] = 'https://twitter.com/' . $post->user->screen_name; $postarray['owner-avatar'] = twitter_fix_avatar($post->user->profile_image_url_https); } @@ -1815,7 +1822,7 @@ function twitter_createpost(App $a, $uid, $post, array $self, $create_user, $onl $postarray['author-name'] = $postarray['owner-name']; $postarray['author-link'] = $postarray['owner-link']; $postarray['author-avatar'] = $postarray['owner-avatar']; - $postarray['plink'] = "https://twitter.com/" . $post->user->screen_name . "/status/" . $post->id_str; + $postarray['plink'] = 'https://twitter.com/' . $post->user->screen_name . '/status/' . $post->id_str; $postarray['app'] = strip_tags($post->source); if ($post->user->protected) { @@ -1857,16 +1864,16 @@ function twitter_createpost(App $a, $uid, $post, array $self, $create_user, $onl } if (!empty($post->place->name)) { - $postarray["location"] = $post->place->name; + $postarray['location'] = $post->place->name; } if (!empty($post->place->full_name)) { - $postarray["location"] = $post->place->full_name; + $postarray['location'] = $post->place->full_name; } if (!empty($post->geo->coordinates)) { - $postarray["coord"] = $post->geo->coordinates[0] . " " . $post->geo->coordinates[1]; + $postarray['coord'] = $post->geo->coordinates[0] . ' ' . $post->geo->coordinates[1]; } if (!empty($post->coordinates->coordinates)) { - $postarray["coord"] = $post->coordinates->coordinates[1] . " " . $post->coordinates->coordinates[0]; + $postarray['coord'] = $post->coordinates->coordinates[1] . ' ' . $post->coordinates->coordinates[0]; } if (!empty($post->retweeted_status)) { $retweet = twitter_createpost($a, $uid, $post->retweeted_status, $self, false, false, $noquote); @@ -1923,7 +1930,7 @@ function twitter_createpost(App $a, $uid, $post, array $self, $create_user, $onl $postarray['body'] .= $quoted['body'] . '[/share]'; } else { // Quoted post author is blocked/ignored, so we just provide the link to avoid removing quote context. - $postarray['body'] .= "\n\nhttps://twitter.com/" . $post->quoted_status->user->screen_name . "/status/" . $post->quoted_status->id_str; + $postarray['body'] .= "\n\nhttps://twitter.com/" . $post->quoted_status->user->screen_name . '/status/' . $post->quoted_status->id_str; } } } @@ -1964,7 +1971,7 @@ function twitter_fetchparentposts(App $a, $uid, $post, TwitterOAuth $connection, } if (empty($post->id_str)) { - Logger::info("twitter_fetchparentposts: This is not a post", ['post' => $post]); + Logger::info('twitter_fetchparentposts: This is not a post', ['post' => $post]); break; } @@ -1975,7 +1982,7 @@ function twitter_fetchparentposts(App $a, $uid, $post, TwitterOAuth $connection, $posts[] = $post; } - Logger::info("twitter_fetchparentposts: Fetching " . count($posts) . " parents"); + Logger::info('twitter_fetchparentposts: Fetching ' . count($posts) . ' parents'); $posts = array_reverse($posts); @@ -1989,9 +1996,9 @@ function twitter_fetchparentposts(App $a, $uid, $post, TwitterOAuth $connection, $item = Item::insert($postarray); - $postarray["id"] = $item; + $postarray['id'] = $item; - Logger::notice('twitter_fetchparentpost: User ' . $self["nick"] . ' posted parent timeline item ' . $item); + Logger::notice('twitter_fetchparentpost: User ' . $self['nick'] . ' posted parent timeline item ' . $item); } } } @@ -2009,7 +2016,7 @@ function twitter_fetchhometimeline(App $a, $uid) $application_name = DI::config()->get('twitter', 'application_name'); - if ($application_name == "") { + if ($application_name == '') { $application_name = DI::baseUrl()->getHostname(); } @@ -2036,15 +2043,23 @@ function twitter_fetchhometimeline(App $a, $uid) return; } - $parameters = ["exclude_replies" => false, "trim_user" => false, "contributor_details" => true, "include_rts" => true, "tweet_mode" => "extended", "include_ext_alt_text" => true]; - //$parameters["count"] = 200; + $parameters = [ + 'exclude_replies' => false, + 'trim_user' => false, + 'contributor_details' => true, + 'include_rts' => true, + 'tweet_mode' => 'extended', + 'include_ext_alt_text' => true, + //'count' => 200, + ]; + // Fetching timeline $lastid = DI::pConfig()->get($uid, 'twitter', 'lasthometimelineid'); - $first_time = ($lastid == ""); + $first_time = ($lastid == ''); - if ($lastid != "") { - $parameters["since_id"] = $lastid; + if ($lastid != '') { + $parameters['since_id'] = $lastid; } try { @@ -2080,16 +2095,16 @@ function twitter_fetchhometimeline(App $a, $uid) } if (stristr($post->source, $application_name) && $post->user->screen_name == $own_id) { - Logger::info("Skip previously sent post"); + Logger::info('Skip previously sent post'); continue; } - if ($mirror_posts && $post->user->screen_name == $own_id && $post->in_reply_to_status_id_str == "") { - Logger::info("Skip post that will be mirrored"); + if ($mirror_posts && $post->user->screen_name == $own_id && $post->in_reply_to_status_id_str == '') { + Logger::info('Skip post that will be mirrored'); continue; } - if ($post->in_reply_to_status_id_str != "") { + if ($post->in_reply_to_status_id_str != '') { twitter_fetchparentposts($a, $uid, $post, $connection, $self); } @@ -2097,7 +2112,7 @@ function twitter_fetchhometimeline(App $a, $uid) $postarray = twitter_createpost($a, $uid, $post, $self, $create_user, true, false); - if (empty($postarray['body']) || trim($postarray['body']) == "") { + if (empty($postarray['body']) || trim($postarray['body']) == '') { Logger::info('Empty body for post ' . $post->id_str . ' and user ' . $uid); continue; } @@ -2112,7 +2127,7 @@ function twitter_fetchhometimeline(App $a, $uid) } $item = Item::insert($postarray, $notify); - $postarray["id"] = $item; + $postarray['id'] = $item; Logger::notice('User ' . $uid . ' posted home timeline item ' . $item); } @@ -2124,10 +2139,10 @@ function twitter_fetchhometimeline(App $a, $uid) // Fetching mentions $lastid = DI::pConfig()->get($uid, 'twitter', 'lastmentionid'); - $first_time = ($lastid == ""); + $first_time = ($lastid == ''); - if ($lastid != "") { - $parameters["since_id"] = $lastid; + if ($lastid != '') { + $parameters['since_id'] = $lastid; } try { @@ -2138,13 +2153,13 @@ function twitter_fetchhometimeline(App $a, $uid) } if (!is_array($items)) { - Logger::warning("mentions are no arrays", ['items' => $items]); + Logger::warning('mentions are no arrays', ['items' => $items]); return; } $posts = array_reverse($items); - Logger::info("Fetching mentions for user " . $uid . " " . sizeof($posts) . " items"); + Logger::info('Fetching mentions for user ' . $uid . ' ' . sizeof($posts) . ' items'); if (count($posts)) { foreach ($posts as $post) { @@ -2156,7 +2171,7 @@ function twitter_fetchhometimeline(App $a, $uid) continue; } - if ($post->in_reply_to_status_id_str != "") { + if ($post->in_reply_to_status_id_str != '') { twitter_fetchparentposts($a, $uid, $post, $connection, $self); } @@ -2188,7 +2203,7 @@ function twitter_fetch_own_contact(App $a, $uid) $contact_id = 0; - if ($own_id == "") { + if ($own_id == '') { $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); // Fetching user data @@ -2219,12 +2234,12 @@ function twitter_is_retweet(App $a, $uid, $body) // Skip if it isn't a pure repeated messages // Does it start with a share? - if (strpos($body, "[share") > 0) { + if (strpos($body, '[share') > 0) { return false; } // Does it end with a share? - if (strlen($body) > (strrpos($body, "[/share]") + 8)) { + if (strlen($body) > (strrpos($body, '[/share]') + 8)) { return false; } @@ -2234,7 +2249,7 @@ function twitter_is_retweet(App $a, $uid, $body) return false; } - $link = ""; + $link = ''; preg_match("/link='(.*?)'/ism", $attributes, $matches); if (!empty($matches[1])) { $link = $matches[1]; @@ -2262,7 +2277,7 @@ function twitter_retweet(int $uid, int $id, int $item_id = 0) if (!empty($item_id) && !empty($result->id_str)) { Logger::notice('Update extid', ['id' => $item_id, 'extid' => $result->id_str]); - Item::update(['extid' => "twitter::" . $result->id_str], ['id' => $item_id]); + Item::update(['extid' => 'twitter::' . $result->id_str], ['id' => $item_id]); } return !isset($result->errors); @@ -2270,7 +2285,7 @@ function twitter_retweet(int $uid, int $id, int $item_id = 0) function twitter_update_mentions($body) { - $URLSearchString = "^\[\]"; + $URLSearchString = '^\[\]'; $return = preg_replace_callback( "/@\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", function ($matches) { From 7d171c978704658990abd7b2bffc07d98bb170cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Wed, 22 Jun 2022 18:17:09 +0200 Subject: [PATCH 056/677] Converted more double-quotes to single --- statusnet/statusnet.php | 355 ++++++++++++++++++++-------------------- 1 file changed, 182 insertions(+), 173 deletions(-) diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 5f520de4..b7d3f372 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -74,13 +74,13 @@ function statusnet_install() Hook::register('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron'); Hook::register('prepare_body', 'addon/statusnet/statusnet.php', 'statusnet_prepare_body'); Hook::register('check_item_notification', 'addon/statusnet/statusnet.php', 'statusnet_check_item_notification'); - Logger::notice("installed GNU Social"); + Logger::notice('installed GNU Social'); } function statusnet_check_item_notification(App $a, &$notification_data) { - if (DI::pConfig()->get($notification_data["uid"], 'statusnet', 'post')) { - $notification_data["profiles"][] = DI::pConfig()->get($notification_data["uid"], 'statusnet', 'own_url'); + if (DI::pConfig()->get($notification_data['uid'], 'statusnet', 'post')) { + $notification_data['profiles'][] = DI::pConfig()->get($notification_data['uid'], 'statusnet', 'own_url'); } } @@ -412,20 +412,22 @@ function statusnet_action(App $a, $uid, $pid, $action) $connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret); - Logger::debug("statusnet_action '" . $action . "' ID: " . $pid); + Logger::debug('statusnet_action "' . $action . '" ID: ' . $pid); switch ($action) { - case "delete": - $result = $connection->post("statuses/destroy/" . $pid); + case 'delete': + $result = $connection->post('statuses/destroy/' . $pid); break; - case "like": - $result = $connection->post("favorites/create/" . $pid); + + case 'like': + $result = $connection->post('favorites/create/' . $pid); break; - case "unlike": - $result = $connection->post("favorites/destroy/" . $pid); + + case 'unlike': + $result = $connection->post('favorites/destroy/' . $pid); break; } - Logger::info("statusnet_action '" . $action . "' send, result: " . print_r($result, true)); + Logger::info('statusnet_action "' . $action . '" send, result: ' . print_r($result, true)); } function statusnet_post_hook(App $a, &$b) @@ -433,46 +435,46 @@ function statusnet_post_hook(App $a, &$b) /** * Post to GNU Social */ - if (!DI::pConfig()->get($b["uid"], 'statusnet', 'import')) { + if (!DI::pConfig()->get($b['uid'], 'statusnet', 'import')) { if ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) return; } $b['body'] = Post\Media::addAttachmentsToBody($b['uri-id'], $b['body']); - $api = DI::pConfig()->get($b["uid"], 'statusnet', 'baseapi'); + $api = DI::pConfig()->get($b['uid'], 'statusnet', 'baseapi'); $hostname = preg_replace("=https?://([\w\.]*)/.*=ism", "$1", $api); if ($b['parent'] != $b['id']) { - Logger::debug("statusnet_post_hook: parameter " . print_r($b, true)); + Logger::debug('statusnet_post_hook: parameter ', ['b' => $b]); // Looking if its a reply to a GNU Social post $hostlength = strlen($hostname) + 2; - if ((substr($b["parent-uri"], 0, $hostlength) != $hostname . "::") && (substr($b["extid"], 0, $hostlength) != $hostname . "::") && (substr($b["thr-parent"], 0, $hostlength) != $hostname . "::")) { - Logger::notice("statusnet_post_hook: no GNU Social post " . $b["parent"]); + if ((substr($b['parent-uri'], 0, $hostlength) != $hostname . '::') && (substr($b['extid'], 0, $hostlength) != $hostname . '::') && (substr($b['thr-parent'], 0, $hostlength) != $hostname . '::')) { + Logger::notice('statusnet_post_hook: no GNU Social post ' . $b['parent']); return; } - $condition = ['uri' => $b["thr-parent"], 'uid' => $b["uid"]]; + $condition = ['uri' => $b['thr-parent'], 'uid' => $b['uid']]; $orig_post = Post::selectFirst(['author-link', 'uri'], $condition); if (!DBA::isResult($orig_post)) { - Logger::notice("statusnet_post_hook: no parent found " . $b["thr-parent"]); + Logger::notice('statusnet_post_hook: no parent found ' . $b['thr-parent']); return; } else { $iscomment = true; } - $nick = preg_replace("=https?://(.*)/(.*)=ism", "$2", $orig_post["author-link"]); + $nick = preg_replace("=https?://(.*)/(.*)=ism", "$2", $orig_post['author-link']); - $nickname = "@[url=" . $orig_post["author-link"] . "]" . $nick . "[/url]"; - $nicknameplain = "@" . $nick; + $nickname = '@[url=' . $orig_post['author-link'] . ']' . $nick . '[/url]'; + $nicknameplain = '@' . $nick; - Logger::info("statusnet_post_hook: comparing " . $nickname . " and " . $nicknameplain . " with " . $b["body"]); - if ((strpos($b["body"], $nickname) === false) && (strpos($b["body"], $nicknameplain) === false)) { - $b["body"] = $nickname . " " . $b["body"]; + Logger::info('statusnet_post_hook: comparing ' . $nickname . ' and ' . $nicknameplain . ' with ' . $b['body']); + if ((strpos($b['body'], $nickname) === false) && (strpos($b['body'], $nicknameplain) === false)) { + $b['body'] = $nickname . ' ' . $b['body']; } - Logger::info("statusnet_post_hook: parent found " . print_r($orig_post, true)); + Logger::info('statusnet_post_hook: parent found ', ['orig_post' => $orig_post]); } else { $iscomment = false; @@ -489,15 +491,15 @@ function statusnet_post_hook(App $a, &$b) } if (($b['verb'] == Activity::POST) && $b['deleted']) { - statusnet_action($a, $b["uid"], substr($orig_post["uri"], $hostlength), "delete"); + statusnet_action($a, $b['uid'], substr($orig_post['uri'], $hostlength), 'delete'); } if ($b['verb'] == Activity::LIKE) { - Logger::info("statusnet_post_hook: parameter 2 " . substr($b["thr-parent"], $hostlength)); + Logger::info('statusnet_post_hook: parameter 2 ' . substr($b['thr-parent'], $hostlength)); if ($b['deleted']) - statusnet_action($a, $b["uid"], substr($b["thr-parent"], $hostlength), "unlike"); + statusnet_action($a, $b['uid'], substr($b['thr-parent'], $hostlength), 'unlike'); else - statusnet_action($a, $b["uid"], substr($b["thr-parent"], $hostlength), "like"); + statusnet_action($a, $b['uid'], substr($b['thr-parent'], $hostlength), 'like'); return; } @@ -510,7 +512,7 @@ function statusnet_post_hook(App $a, &$b) return; } - if ($b['app'] == "StatusNet") { + if ($b['app'] == 'StatusNet') { return; } @@ -535,34 +537,34 @@ function statusnet_post_hook(App $a, &$b) DI::pConfig()->set($b['uid'], 'statusnet', 'max_char', $max_char); - $tempfile = ""; + $tempfile = ''; $msgarr = Plaintext::getPost($b, $max_char, true, 7); - $msg = $msgarr["text"]; + $msg = $msgarr['text']; - if (($msg == "") && isset($msgarr["title"])) - $msg = Plaintext::shorten($msgarr["title"], $max_char - 50, $b['uid']); + if (($msg == '') && isset($msgarr['title'])) + $msg = Plaintext::shorten($msgarr['title'], $max_char - 50, $b['uid']); - $image = ""; + $image = ''; - if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) { - $msg .= " \n" . $msgarr["url"]; - } elseif (isset($msgarr["image"]) && ($msgarr["type"] != "video")) { - $image = $msgarr["image"]; + if (isset($msgarr['url']) && ($msgarr['type'] != 'photo')) { + $msg .= " \n" . $msgarr['url']; + } elseif (isset($msgarr['image']) && ($msgarr['type'] != 'video')) { + $image = $msgarr['image']; } - if ($image != "") { + if ($image != '') { $img_str = DI::httpClient()->fetch($image); - $tempfile = tempnam(System::getTempPath(), "cache"); + $tempfile = tempnam(System::getTempPath(), 'cache'); file_put_contents($tempfile, $img_str); - $postdata = ["status" => $msg, "media[]" => $tempfile]; + $postdata = ['status' => $msg, 'media[]' => $tempfile]; } else { - $postdata = ["status" => $msg]; + $postdata = ['status' => $msg]; } // and now send it :-) if (strlen($msg)) { if ($iscomment) { - $postdata["in_reply_to_status_id"] = substr($orig_post["uri"], $hostlength); + $postdata['in_reply_to_status_id'] = substr($orig_post['uri'], $hostlength); Logger::info('statusnet_post send reply ' . print_r($postdata, true)); } @@ -578,17 +580,17 @@ function statusnet_post_hook(App $a, &$b) "\nmessage: " . $msg . "\nOriginal post: " . print_r($b, true) . "\nPost Data: " . print_r($postdata, true)); if (!empty($result->source)) { - DI::pConfig()->set($b["uid"], "statusnet", "application_name", strip_tags($result->source)); + DI::pConfig()->set($b['uid'], 'statusnet', 'application_name', strip_tags($result->source)); } if (!empty($result->error)) { Logger::notice('Send to GNU Social failed: "' . $result->error . '"'); } elseif ($iscomment) { - Logger::notice('statusnet_post: Update extid ' . $result->id . " for post id " . $b['id']); - Item::update(['extid' => $hostname . "::" . $result->id, 'body' => $result->text], ['id' => $b['id']]); + Logger::notice('statusnet_post: Update extid ' . $result->id . ' for post id ' . $b['id']); + Item::update(['extid' => $hostname . '::' . $result->id, 'body' => $result->text], ['id' => $b['id']]); } } - if ($tempfile != "") { + if ($tempfile != '') { unlink($tempfile); } } @@ -607,10 +609,10 @@ function statusnet_addon_admin_post(App $a) $secret = trim($_POST['secret'][$id]); $key = trim($_POST['key'][$id]); //$applicationname = (!empty($_POST['applicationname']) ? Strings::escapeTags(trim($_POST['applicationname'][$id])):''); - if ($sitename != "" && - $apiurl != "" && - $secret != "" && - $key != "" && + if ($sitename != '' && + $apiurl != '' && + $secret != '' && + $key != '' && empty($_POST['delete'][$id])) { $sites[] = [ @@ -652,7 +654,7 @@ function statusnet_addon_admin(App $a, &$o) //'applicationname' => Array("applicationname[$id]", DI::l10n()->t("Application name"), "", ""), ]; - $t = Renderer::getMarkupTemplate("admin.tpl", "addon/statusnet/"); + $t = Renderer::getMarkupTemplate('admin.tpl', 'addon/statusnet/'); $o = Renderer::replaceMacros($t, [ '$submit' => DI::l10n()->t('Save Settings'), '$sites' => $sitesform, @@ -661,41 +663,41 @@ function statusnet_addon_admin(App $a, &$o) function statusnet_prepare_body(App $a, &$b) { - if ($b["item"]["network"] != Protocol::STATUSNET) { + if ($b['item']['network'] != Protocol::STATUSNET) { return; } - if ($b["preview"]) { + if ($b['preview']) { $max_char = DI::pConfig()->get(local_user(), 'statusnet', 'max_char'); if (intval($max_char) == 0) { $max_char = 140; } - $item = $b["item"]; - $item["plink"] = DI::baseUrl()->get() . "/display/" . $item["guid"]; + $item = $b['item']; + $item['plink'] = DI::baseUrl()->get() . '/display/' . $item['guid']; - $condition = ['uri' => $item["thr-parent"], 'uid' => local_user()]; + $condition = ['uri' => $item['thr-parent'], 'uid' => local_user()]; $orig_post = Post::selectFirst(['author-link', 'uri'], $condition); if (DBA::isResult($orig_post)) { - $nick = preg_replace("=https?://(.*)/(.*)=ism", "$2", $orig_post["author-link"]); + $nick = preg_replace("=https?://(.*)/(.*)=ism", "$2", $orig_post['author-link']); - $nickname = "@[url=" . $orig_post["author-link"] . "]" . $nick . "[/url]"; - $nicknameplain = "@" . $nick; + $nickname = '@[url=' . $orig_post['author-link'] . ']' . $nick . '[/url]'; + $nicknameplain = '@' . $nick; - if ((strpos($item["body"], $nickname) === false) && (strpos($item["body"], $nicknameplain) === false)) { - $item["body"] = $nickname . " " . $item["body"]; + if ((strpos($item['body'], $nickname) === false) && (strpos($item['body'], $nicknameplain) === false)) { + $item['body'] = $nickname . ' ' . $item['body']; } } $msgarr = Plaintext::getPost($item, $max_char, true, 7); - $msg = $msgarr["text"]; + $msg = $msgarr['text']; - if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) { - $msg .= " " . $msgarr["url"]; + if (isset($msgarr['url']) && ($msgarr['type'] != 'photo')) { + $msg .= ' ' . $msgarr['url']; } - if (isset($msgarr["image"])) { - $msg .= " " . $msgarr["image"]; + if (isset($msgarr['image'])) { + $msg .= ' ' . $msgarr['image']; } $b['html'] = nl2br(htmlspecialchars($msg)); @@ -743,7 +745,7 @@ function statusnet_cron(App $a, $b) } Logger::notice('statusnet: importing timeline from user ' . $rr['uid']); - statusnet_fetchhometimeline($a, $rr["uid"], $rr["v"]); + statusnet_fetchhometimeline($a, $rr['uid'], $rr['v']); } Logger::notice('statusnet: cron_end'); @@ -765,21 +767,26 @@ function statusnet_fetchtimeline(App $a, $uid) // 1st try personal config, then system config and fallback to the // hostname of the node if neither one is set. $application_name = DI::pConfig()->get($uid, 'statusnet', 'application_name'); - if ($application_name == "") { + if ($application_name == '') { $application_name = DI::config()->get('statusnet', 'application_name'); } - if ($application_name == "") { + if ($application_name == '') { $application_name = DI::baseUrl()->getHostname(); } $connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret); - $parameters = ["exclude_replies" => true, "trim_user" => true, "contributor_details" => false, "include_rts" => false]; + $parameters = [ + 'exclude_replies' => true, + 'trim_user' => true, + 'contributor_details' => false, + 'include_rts' => false, + ]; - $first_time = ($lastid == ""); + $first_time = ($lastid == ''); - if ($lastid <> "") { - $parameters["since_id"] = $lastid; + if ($lastid != '') { + $parameters['since_id'] = $lastid; } $items = $connection->get('statuses/user_timeline', $parameters); @@ -799,7 +806,7 @@ function statusnet_fetchtimeline(App $a, $uid) continue; } - if ($post->source == "activity") { + if ($post->source == 'activity') { continue; } @@ -807,48 +814,48 @@ function statusnet_fetchtimeline(App $a, $uid) continue; } - if ($post->in_reply_to_status_id != "") { + if ($post->in_reply_to_status_id != '') { continue; } if (!stristr($post->source, $application_name)) { - $_SESSION["authenticated"] = true; - $_SESSION["uid"] = $uid; + $_SESSION['authenticated'] = true; + $_SESSION['uid'] = $uid; unset($_REQUEST); - $_REQUEST["api_source"] = true; - $_REQUEST["profile_uid"] = $uid; - //$_REQUEST["source"] = "StatusNet"; - $_REQUEST["source"] = $post->source; - $_REQUEST["extid"] = Protocol::STATUSNET; + $_REQUEST['api_source'] = true; + $_REQUEST['profile_uid'] = $uid; + //$_REQUEST['source'] = 'StatusNet'; + $_REQUEST['source'] = $post->source; + $_REQUEST['extid'] = Protocol::STATUSNET; if (isset($post->id)) { - $_REQUEST['message_id'] = Item::newURI($uid, Protocol::STATUSNET . ":" . $post->id); + $_REQUEST['message_id'] = Item::newURI($uid, Protocol::STATUSNET . ':' . $post->id); } - //$_REQUEST["date"] = $post->created_at; + //$_REQUEST['date'] = $post->created_at; - $_REQUEST["title"] = ""; + $_REQUEST['title'] = ''; - $_REQUEST["body"] = $post->text; + $_REQUEST['body'] = $post->text; if (is_string($post->place->name)) { - $_REQUEST["location"] = $post->place->name; + $_REQUEST['location'] = $post->place->name; } if (is_string($post->place->full_name)) { - $_REQUEST["location"] = $post->place->full_name; + $_REQUEST['location'] = $post->place->full_name; } if (is_array($post->geo->coordinates)) { - $_REQUEST["coord"] = $post->geo->coordinates[0] . " " . $post->geo->coordinates[1]; + $_REQUEST['coord'] = $post->geo->coordinates[0] . ' ' . $post->geo->coordinates[1]; } if (is_array($post->coordinates->coordinates)) { - $_REQUEST["coord"] = $post->coordinates->coordinates[1] . " " . $post->coordinates->coordinates[0]; + $_REQUEST['coord'] = $post->coordinates->coordinates[1] . ' ' . $post->coordinates->coordinates[0]; } //print_r($_REQUEST); - if ($_REQUEST["body"] != "") { + if ($_REQUEST['body'] != '') { Logger::notice('statusnet: posting for user ' . $uid); item_post($a); @@ -866,7 +873,7 @@ function statusnet_address($contact) $hostname = preg_replace("=https?://([\w\.]*)/.*=ism", "$1", $contact->statusnet_profile_url); - $address = $contact->screen_name . "@" . $hostname; + $address = $contact->screen_name . '@' . $hostname; return $address; } @@ -884,8 +891,8 @@ function statusnet_fetch_contact($uid, $contact, $create_user) return 0; } - if (DBA::isResult($contact_record) && ($contact_record["readonly"] || $contact_record["blocked"])) { - Logger::info("statusnet_fetch_contact: Contact '" . $contact_record["nick"] . "' is blocked or readonly."); + if (DBA::isResult($contact_record) && ($contact_record['readonly'] || $contact_record['blocked'])) { + Logger::info('statusnet_fetch_contact: Contact "' . $contact_record['nick'] . '" is blocked or readonly.'); return -1; } @@ -938,7 +945,7 @@ function statusnet_fetch_contact($uid, $contact, $create_user) // check that we have all the photos, this has been known to fail on occasion if ((!$contact_record['photo']) || (!$contact_record['thumb']) || (!$contact_record['micro']) || ($update_photo)) { - Logger::info("statusnet_fetch_contact: Updating contact " . $contact->screen_name); + Logger::info('statusnet_fetch_contact: Updating contact ' . $contact->screen_name); $photos = Photo::importProfilePhoto($contact->profile_image_url, $uid, $contact_record['id']); @@ -960,10 +967,10 @@ function statusnet_fetch_contact($uid, $contact, $create_user) } } - return $contact_record["id"]; + return $contact_record['id']; } -function statusnet_fetchuser(App $a, $uid, $screen_name = "", $user_id = "") +function statusnet_fetchuser(App $a, $uid, $screen_name = '', $user_id = '') { $ckey = DI::pConfig()->get($uid, 'statusnet', 'consumerkey'); $csecret = DI::pConfig()->get($uid, 'statusnet', 'consumersecret'); @@ -984,12 +991,12 @@ function statusnet_fetchuser(App $a, $uid, $screen_name = "", $user_id = "") $parameters = []; - if ($screen_name != "") { - $parameters["screen_name"] = $screen_name; + if ($screen_name != '') { + $parameters['screen_name'] = $screen_name; } - if ($user_id != "") { - $parameters["user_id"] = $user_id; + if ($user_id != '') { + $parameters['user_id'] = $user_id; } // Fetching user data @@ -1006,7 +1013,7 @@ function statusnet_fetchuser(App $a, $uid, $screen_name = "", $user_id = "") function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_existing_contact) { - Logger::info("statusnet_createpost: start"); + Logger::info('statusnet_createpost: start'); $api = DI::pConfig()->get($uid, 'statusnet', 'baseapi'); $hostname = preg_replace("=https?://([\w\.]*)/.*=ism", "$1", $api); @@ -1023,7 +1030,7 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex $content = $post; } - $postarray['uri'] = $hostname . "::" . $content->id; + $postarray['uri'] = $hostname . '::' . $content->id; if (Post::exists(['extid' => $postarray['uri'], 'uid' => $uid])) { return []; @@ -1032,7 +1039,7 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex $contactid = 0; if (!empty($content->in_reply_to_status_id)) { - $thr_parent = $hostname . "::" . $content->in_reply_to_status_id; + $thr_parent = $hostname . '::' . $content->in_reply_to_status_id; $item = Post::selectFirst(['uri'], ['uri' => $thr_parent, 'uid' => $uid]); if (!DBA::isResult($item)) { @@ -1052,11 +1059,11 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex if ($content->user->id == $own_url) { $self = DBA::selectFirst('*', ['self' => true, 'uid' => $uid]); if (DBA::isResult($self)) { - $contactid = $self["id"]; + $contactid = $self['id']; - $postarray['owner-name'] = $self["name"]; - $postarray['owner-link'] = $self["url"]; - $postarray['owner-avatar'] = $self["photo"]; + $postarray['owner-name'] = $self['name']; + $postarray['owner-link'] = $self['url']; + $postarray['owner-avatar'] = $self['photo']; } else { return []; } @@ -1088,7 +1095,7 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex $postarray['author-avatar'] = $content->user->profile_image_url; // To-Do: Maybe unreliable? Can the api be entered without trailing "/"? - $hostname = str_replace("/api/", "/notice/", DI::pConfig()->get($uid, 'statusnet', 'baseapi')); + $hostname = str_replace('/api/', '/notice/', DI::pConfig()->get($uid, 'statusnet', 'baseapi')); $postarray['plink'] = $hostname . $content->id; $postarray['app'] = strip_tags($content->source); @@ -1106,22 +1113,22 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex $postarray['edited'] = DateTimeFormat::utc($content->created_at); if (!empty($content->place->name)) { - $postarray["location"] = $content->place->name; + $postarray['location'] = $content->place->name; } if (!empty($content->place->full_name)) { - $postarray["location"] = $content->place->full_name; + $postarray['location'] = $content->place->full_name; } if (!empty($content->geo->coordinates)) { - $postarray["coord"] = $content->geo->coordinates[0] . " " . $content->geo->coordinates[1]; + $postarray['coord'] = $content->geo->coordinates[0] . ' ' . $content->geo->coordinates[1]; } if (!empty($content->coordinates->coordinates)) { - $postarray["coord"] = $content->coordinates->coordinates[1] . " " . $content->coordinates->coordinates[0]; + $postarray['coord'] = $content->coordinates->coordinates[1] . ' ' . $content->coordinates->coordinates[0]; } - Logger::info("statusnet_createpost: end"); + Logger::info('statusnet_createpost: end'); return $postarray; } @@ -1140,7 +1147,7 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1) // "create_user" is deactivated, since currently you cannot add users manually by now $create_user = true; - Logger::info("statusnet_fetchhometimeline: Fetching for user " . $uid); + Logger::info('statusnet_fetchhometimeline: Fetching for user ' . $uid); $connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret); @@ -1152,36 +1159,41 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1) $contact = Contact::selectFirst([], ['id' => $own_contact, 'uid' => $uid]); if (DBA::isResult($contact)) { - $nick = $contact["nick"]; + $nick = $contact['nick']; } else { - Logger::info("statusnet_fetchhometimeline: Own GNU Social contact not found for user " . $uid); + Logger::info('statusnet_fetchhometimeline: Own GNU Social contact not found for user ' . $uid); return; } $self = Contact::selectFirst([], ['self' => true, 'uid' => $uid]); if (!DBA::isResult($self)) { - Logger::info("statusnet_fetchhometimeline: Own contact not found for user " . $uid); + Logger::info('statusnet_fetchhometimeline: Own contact not found for user ' . $uid); return; } $user = User::getById($uid); if (!DBA::isResult($user)) { - Logger::info("statusnet_fetchhometimeline: Own user not found for user " . $uid); + Logger::info('statusnet_fetchhometimeline: Own user not found for user ' . $uid); return; } - $parameters = ["exclude_replies" => false, "trim_user" => false, "contributor_details" => true, "include_rts" => true]; - //$parameters["count"] = 200; + $parameters = [ + 'exclude_replies' => false, + 'trim_user' => false, + 'contributor_details' => true, + 'include_rts' => true, + //'count' => 200, + ]; if ($mode == 1) { // Fetching timeline $lastid = DI::pConfig()->get($uid, 'statusnet', 'lasthometimelineid'); //$lastid = 1; - $first_time = ($lastid == ""); + $first_time = ($lastid == ''); - if ($lastid != "") { - $parameters["since_id"] = $lastid; + if ($lastid != '') { + $parameters['since_id'] = $lastid; } $items = $connection->get('statuses/home_timeline', $parameters); @@ -1194,16 +1206,16 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1) } elseif (is_string($items) || is_float($items) || is_int($items)) { $errormsg = $items; } else { - $errormsg = "Unknown error"; + $errormsg = 'Unknown error'; } - Logger::info("statusnet_fetchhometimeline: Error fetching home timeline: " . $errormsg); + Logger::info('statusnet_fetchhometimeline: Error fetching home timeline: ' . $errormsg); return; } $posts = array_reverse($items); - Logger::info("statusnet_fetchhometimeline: Fetching timeline for user " . $uid . " " . sizeof($posts) . " items"); + Logger::info('statusnet_fetchhometimeline: Fetching timeline for user ' . $uid . ' ' . sizeof($posts) . ' items'); if (count($posts)) { foreach ($posts as $post) { @@ -1224,14 +1236,14 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1) } else { $postarray = statusnet_createpost($a, $uid, $post, $self, $create_user, true); - if (trim($postarray['body']) == "") { + if (trim($postarray['body']) == '') { continue; } $item = Item::insert($postarray); - $postarray["id"] = $item; + $postarray['id'] = $item; - Logger::notice('statusnet_fetchhometimeline: User ' . $self["nick"] . ' posted home timeline item ' . $item); + Logger::notice('statusnet_fetchhometimeline: User ' . $self['nick'] . ' posted home timeline item ' . $item); } } } @@ -1240,22 +1252,22 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1) // Fetching mentions $lastid = DI::pConfig()->get($uid, 'statusnet', 'lastmentionid'); - $first_time = ($lastid == ""); + $first_time = ($lastid == ''); - if ($lastid != "") { - $parameters["since_id"] = $lastid; + if ($lastid != '') { + $parameters['since_id'] = $lastid; } $items = $connection->get('statuses/mentions_timeline', $parameters); if (!is_array($items)) { - Logger::info("statusnet_fetchhometimeline: Error fetching mentions: " . print_r($items, true)); + Logger::info('statusnet_fetchhometimeline: Error fetching mentions: ' . print_r($items, true)); return; } $posts = array_reverse($items); - Logger::info("statusnet_fetchhometimeline: Fetching mentions for user " . $uid . " " . sizeof($posts) . " items"); + Logger::info('statusnet_fetchhometimeline: Fetching mentions for user ' . $uid . ' ' . sizeof($posts) . ' items'); if (count($posts)) { foreach ($posts as $post) { @@ -1275,13 +1287,13 @@ function statusnet_fetchhometimeline(App $a, $uid, $mode = 1) $conversations[$post->statusnet_conversation_id] = $post->statusnet_conversation_id; } } else { - if (trim($postarray['body']) == "") { + if (trim($postarray['body']) == '') { continue; } $item = Item::insert($postarray); - Logger::notice('statusnet_fetchhometimeline: User ' . $self["nick"] . ' posted mention timeline item ' . $item); + Logger::notice('statusnet_fetchhometimeline: User ' . $self['nick'] . ' posted mention timeline item ' . $item); } } } @@ -1300,7 +1312,7 @@ function statusnet_complete_conversation(App $a, $uid, $self, $create_user, $nic $connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret); - $parameters["count"] = 200; + $parameters['count'] = 200; $items = $connection->get('statusnet/conversation/' . $conversation, $parameters); if (is_array($items)) { @@ -1314,9 +1326,9 @@ function statusnet_complete_conversation(App $a, $uid, $self, $create_user, $nic } $item = Item::insert($postarray); - $postarray["id"] = $item; + $postarray['id'] = $item; - Logger::notice('statusnet_complete_conversation: User ' . $self["nick"] . ' posted home timeline item ' . $item); + Logger::notice('statusnet_complete_conversation: User ' . $self['nick'] . ' posted home timeline item ' . $item); } } } @@ -1325,19 +1337,16 @@ function statusnet_convertmsg(App $a, $body) { $body = preg_replace("=\[url\=https?://([0-9]*).([0-9]*).([0-9]*).([0-9]*)/([0-9]*)\](.*?)\[\/url\]=ism", "$1.$2.$3.$4/$5", $body); - $URLSearchString = "^\[\]"; + $URLSearchString = '^\[\]'; $links = preg_match_all("/[^!#@]\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", $body, $matches, PREG_SET_ORDER); - $footer = ""; - $footerurl = ""; - $footerlink = ""; - $type = ""; + $footer = $footerurl = $footerlink = $type = ''; if ($links) { foreach ($matches AS $match) { - $search = "[url=" . $match[1] . "]" . $match[2] . "[/url]"; + $search = '[url=' . $match[1] . ']' . $match[2] . '[/url]'; - Logger::info("statusnet_convertmsg: expanding url " . $match[1]); + Logger::info('statusnet_convertmsg: expanding url ' . $match[1]); try { $expanded_url = DI::httpClient()->finalUrl($match[1]); @@ -1346,56 +1355,56 @@ function statusnet_convertmsg(App $a, $body) $expanded_url = $match[1]; } - Logger::info("statusnet_convertmsg: fetching data for " . $expanded_url); + Logger::info('statusnet_convertmsg: fetching data for ' . $expanded_url); $oembed_data = OEmbed::fetchURL($expanded_url, true); - Logger::info("statusnet_convertmsg: fetching data: done"); + Logger::info('statusnet_convertmsg: fetching data: done'); - if ($type == "") { + if ($type == '') { $type = $oembed_data->type; } - if ($oembed_data->type == "video") { - //$body = str_replace($search, "[video]".$expanded_url."[/video]", $body); + if ($oembed_data->type == 'video') { + //$body = str_replace($search, '[video]'.$expanded_url.'[/video]', $body); $type = $oembed_data->type; $footerurl = $expanded_url; - $footerlink = "[url=" . $expanded_url . "]" . $expanded_url . "[/url]"; + $footerlink = '[url=' . $expanded_url . ']' . $expanded_url . '[/url]'; $body = str_replace($search, $footerlink, $body); - } elseif (($oembed_data->type == "photo") && isset($oembed_data->url)) { - $body = str_replace($search, "[url=" . $expanded_url . "][img]" . $oembed_data->url . "[/img][/url]", $body); - } elseif ($oembed_data->type != "link") { - $body = str_replace($search, "[url=" . $expanded_url . "]" . $expanded_url . "[/url]", $body); + } elseif (($oembed_data->type == 'photo') && isset($oembed_data->url)) { + $body = str_replace($search, '[url=' . $expanded_url . '][img]' . $oembed_data->url . '[/img][/url]', $body); + } elseif ($oembed_data->type != 'link') { + $body = str_replace($search, '[url=' . $expanded_url . ']' . $expanded_url . '[/url]', $body); } else { $img_str = DI::httpClient()->fetch($expanded_url, HttpClientAccept::DEFAULT, 4); - $tempfile = tempnam(System::getTempPath(), "cache"); + $tempfile = tempnam(System::getTempPath(), 'cache'); file_put_contents($tempfile, $img_str); $mime = mime_content_type($tempfile); unlink($tempfile); - if (substr($mime, 0, 6) == "image/") { - $type = "photo"; - $body = str_replace($search, "[img]" . $expanded_url . "[/img]", $body); + if (substr($mime, 0, 6) == 'image/') { + $type = 'photo'; + $body = str_replace($search, '[img]' . $expanded_url . '[/img]', $body); } else { $type = $oembed_data->type; $footerurl = $expanded_url; - $footerlink = "[url=" . $expanded_url . "]" . $expanded_url . "[/url]"; + $footerlink = '[url=' . $expanded_url . ']' . $expanded_url . '[/url]'; $body = str_replace($search, $footerlink, $body); } } } - if ($footerurl != "") { + if ($footerurl != '') { $footer = "\n" . PageInfo::getFooterFromUrl($footerurl); } - if (($footerlink != "") && (trim($footer) != "")) { - $removedlink = trim(str_replace($footerlink, "", $body)); + if (($footerlink != '') && (trim($footer) != '')) { + $removedlink = trim(str_replace($footerlink, '', $body)); - if (($removedlink == "") || strstr($body, $removedlink)) { + if (($removedlink == '') || strstr($body, $removedlink)) { $body = $removedlink; } @@ -1417,7 +1426,7 @@ function statusnet_fetch_own_contact(App $a, $uid) $contact_id = 0; - if ($own_url == "") { + if ($own_url == '') { $connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret); // Fetching user data @@ -1433,7 +1442,7 @@ function statusnet_fetch_own_contact(App $a, $uid) } else { $contact = Contact::selectFirst([], ['uid' => $uid, 'alias' => $own_url]); if (DBA::isResult($contact)) { - $contact_id = $contact["id"]; + $contact_id = $contact['id']; } else { DI::pConfig()->delete($uid, 'statusnet', 'own_url'); } @@ -1447,12 +1456,12 @@ function statusnet_is_retweet(App $a, $uid, $body) // Skip if it isn't a pure repeated messages // Does it start with a share? - if (strpos($body, "[share") > 0) { + if (strpos($body, '[share') > 0) { return false; } // Does it end with a share? - if (strlen($body) > (strrpos($body, "[/share]") + 8)) { + if (strlen($body) > (strrpos($body, '[/share]') + 8)) { return false; } @@ -1462,7 +1471,7 @@ function statusnet_is_retweet(App $a, $uid, $body) return false; } - $link = ""; + $link = ''; preg_match("/link='(.*?)'/ism", $attributes, $matches); if (!empty($matches[1])) { $link = $matches[1]; From f7ba4848bcba95c5924bfb33303a3670fef8be51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Wed, 22 Jun 2022 18:59:45 +0200 Subject: [PATCH 057/677] Changes: - ops, my bad that I misunderstood @MrPetovan here and maybe me having a cold :-/ - also made $contactId camel-case --- statusnet/statusnet.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index b7d3f372..66648893 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -1036,7 +1036,7 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex return []; } - $contactid = 0; + $contactId = 0; if (!empty($content->in_reply_to_status_id)) { $thr_parent = $hostname . '::' . $content->in_reply_to_status_id; @@ -1057,9 +1057,9 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex $own_url = DI::pConfig()->get($uid, 'statusnet', 'own_url'); if ($content->user->id == $own_url) { - $self = DBA::selectFirst('*', ['self' => true, 'uid' => $uid]); + $self = DBA::selectFirst('contact', [], ['self' => true, 'uid' => $uid]); if (DBA::isResult($self)) { - $contactid = $self['id']; + $contactId = $self['id']; $postarray['owner-name'] = $self['name']; $postarray['owner-link'] = $self['url']; @@ -1074,19 +1074,19 @@ function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_ex $postarray['object-type'] = Activity\ObjectType::NOTE; } - if ($contactid == 0) { - $contactid = statusnet_fetch_contact($uid, $post->user, $create_user); + if ($contactId == 0) { + $contactId = statusnet_fetch_contact($uid, $post->user, $create_user); $postarray['owner-name'] = $post->user->name; $postarray['owner-link'] = $post->user->statusnet_profile_url; $postarray['owner-avatar'] = $post->user->profile_image_url; } - if (($contactid == 0) && !$only_existing_contact) { - $contactid = $self['id']; - } elseif ($contactid <= 0) { + if (($contactId == 0) && !$only_existing_contact) { + $contactId = $self['id']; + } elseif ($contactId <= 0) { return []; } - $postarray['contact-id'] = $contactid; + $postarray['contact-id'] = $contactId; $postarray['verb'] = Activity::POST; From b9f330fa18cfef487bc46bd3de71ca7c5c76c744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Thu, 23 Jun 2022 01:47:32 +0200 Subject: [PATCH 058/677] Changed: - removed discouraged ?> - changed double-quotes to single --- convert/UnitConvertor.php | 283 ------------------ convert/convert.php | 168 +++++------ diaspora/diasphp.php | 1 - leistungsschutzrecht/leistungsschutzrecht.php | 1 - libravatar/Services/Libravatar.php | 2 - statusnet/library/codebirdsn.php | 2 - webrtc/webrtc.php | 1 - 7 files changed, 78 insertions(+), 380 deletions(-) delete mode 100644 convert/UnitConvertor.php diff --git a/convert/UnitConvertor.php b/convert/UnitConvertor.php deleted file mode 100644 index d7933a8f..00000000 --- a/convert/UnitConvertor.php +++ /dev/null @@ -1,283 +0,0 @@ - | -// | Co-authored by : CVH, Chris Hansel | -// +----------------------------------------------------------------------+ -// -// $Id: UnitConvertor.php,v 1.00 2002/02/20 11:40:00 stasokhvat Exp $ - -/** -* UnitConvertor is able to convert between different units and currencies. -* -* @author Stanislav Okhvat -* @version $Id: UnitConvertor.php,v 1.00 2002/03/01 17:00:00 stasokhvat Exp $ -* @package UnitConvertor -* @access public -* @history 01.03.2002 Implemented the code for regular and offset-based -* conversions -* -* 13.12.2004 -* By Chris Hansel (CVH): changed getConvSpecs in order to have it look up -* intermediary conversions (also see comments in check_key). -* -* Intermediary conversions are useful when no conversion ratio is specified -* between two units when we calculate between the two. For example, we want -* to convert between Fahrenheit and Kelvin, and we have only -* specified how to convert Centigrade<->Fahrenheit and -* Centigrade<->Kelvin. While a direct (Fahrenheit->Kelvin) or -* reverse (Kelvin->Fahrenheit) lookups fail, looking for an intermediary -* unit linking the two (Centigrade) helps us do the conversion. -* -* 13.12.2004 -* Chris Hansel (CVH): $to_array argument of addConversion method can now -* contain units as 'unit1/unit2/unit3', when all units stand for the same -* thing. See examples in unitconv.php -*/ -class UnitConvertor -{ - /** - * Stores conversion ratios. - * - * @var array - * @access private - */ - var $conversion_table = array(); - - /** - * Decimal point character (default is "." - American - set in constructor). - * - * @var string - * @access private - */ - var $decimal_point; - - /** - * Thousands separator (default is "," - American - set in constructor). - * - * @var string - * @access private - */ - var $thousand_separator; - - /** - * For future use - * - * @var array - * @access private - */ - var $bases = array(); - - /** - * Constructor. Initializes the UnitConvertor object with the most important - * properties. - * - * @param string decimal point character - * @param string thousand separator character - * @return void - * @access public - */ - function UnitConvertor($dec_point = '.', $thousand_sep = ',') - { - $this->decimal_point = $dec_point; - $this->thousand_separator = $thousand_sep; - - } // end func UnitConvertor - - /** - * Adds a conversion ratio to the conversion table. - * - * @param string the name of unit from which to convert - * @param array array( - * "pound"=>array("ratio"=>'', "offset"=>'') - * ) - * "pound" - name of unit to set conversion ration to - * "ratio" - 'double' conversion ratio which, when - * multiplied by the number of $from_unit units produces - * the result - * "offset" - an offset from 0 which will be added to - * the result when converting (needed for temperature - * conversions and defaults to 0). - * @return boolean true if successful, false otherwise - * @access public - */ - function addConversion($from_unit, $to_array) - { - if (!isset($this->conversion_table[$from_unit])) { - while(list($key, $val) = each($to_array)) - { - if (strstr($key, '/')) - { - $to_units = explode('/', $key); - foreach ($to_units as $to_unit) - { - $this->bases[$from_unit][] = $to_unit; - - if (!is_array($val)) - { - $this->conversion_table[$from_unit."_".$to_unit] = array("ratio"=>$val, "offset"=>0); - } - else - { - $this->conversion_table[$from_unit."_".$to_unit] = - array( - "ratio"=>$val['ratio'], - "offset"=>(isset($val['offset']) ? $val['offset'] : 0) - ); - } - } - } - else - { - $this->bases[$from_unit][] = $key; - - if (!is_array($val)) - { - $this->conversion_table[$from_unit."_".$key] = array("ratio"=>$val, "offset"=>0); - } - else - { - $this->conversion_table[$from_unit."_".$key] = - array( - "ratio"=>$val['ratio'], - "offset"=>(isset($val['offset']) ? $val['offset'] : 0) - ); - } - } - } - return true; - } - return false; - - } // end func addConversion - - /** - * Converts from one unit to another using specified precision. - * - * @param double value to convert - * @param string name of the source unit from which to convert - * @param string name of the target unit to which we are converting - * @param integer double precision of the end result - * @return void - * @access public - */ - function convert($value, $from_unit, $to_unit, $precision) - { - if ($this->getConvSpecs($from_unit, $to_unit, $value, $converted )) - { - return number_format($converted , (int)$precision, $this->decimal_point, $this->thousand_separator); - } else { - return false; - } - } // end func - - /** - * CVH : changed this Function getConvSpecs in order to have it look up - * intermediary Conversions from the - * "base" unit being that one that has the highest hierarchical order in one - * "logical" Conversion_Array - * when taking $conv->addConversion('km', - * array('meter'=>1000, 'dmeter'=>10000, 'centimeter'=>100000, - * 'millimeter'=>1000000, 'mile'=>0.62137, 'naut.mile'=>0.53996, - * 'inch(es)/zoll'=>39370, 'ft/foot/feet'=>3280.8, 'yd/yard'=>1093.6)); - * "km" would be the logical base unit for all units of dinstance, thus, - * if the function fails to find a direct or reverse conversion in the table - * it is only logical to suspect that if there is a chance - * converting the value it only is via the "base" unit, and so - * there is not even a need for a recursive search keeping the perfomance - * acceptable and the ressource small... - * - * CVH check_key checks for a key in the Conversiontable and returns a value - */ - function check_key( $key) { - if ( array_key_exists ($key,$this->conversion_table)) { - if (! empty($this->conversion_table[$key])) { - return $this->conversion_table[$key]; - } - } - return false; - } - - /** - * Key function. Finds the conversion ratio and offset from one unit to another. - * - * @param string name of the source unit from which to convert - * @param string name of the target unit to which we are converting - * @param double conversion ratio found. Returned by reference. - * @param double offset which needs to be added (or subtracted, if negative) - * to the result to convert correctly. - * For temperature or some scientific conversions, - * i.e. Fahrenheit -> Celcius - * @return boolean true if ratio and offset are found for the supplied - * units, false otherwise - * @access private - */ - function getConvSpecs($from_unit, $to_unit, $value, &$converted) - { - $key = $from_unit."_".$to_unit; - $revkey = $to_unit."_".$from_unit; - $found = false; - if ($ct_arr = $this->check_key($key)) { - // Conversion Specs found directly - $ratio = (double)$ct_arr['ratio']; - $offset = $ct_arr['offset']; - $converted = (double)(($value * $ratio)+ $offset); - - return true; - } // not found in direct order, try reverse order - elseif ($ct_arr = $this->check_key($revkey)) { - $ratio = (double)(1/$ct_arr['ratio']); - $offset = -$ct_arr['offset']; - $converted = (double)(($value + $offset) * $ratio); - - return true; - } // not found test for intermediary conversion - else { - // return ratio = 1 if keyparts match - if ($key == $revkey) { - $ratio = 1; - $offset = 0; - $converted = $value; - return true; - } - // otherwise search intermediary - reset($this->conversion_table); - while (list($convk, $i1_value) = each($this->conversion_table)) { - // split the key into parts - $keyparts = preg_split("/_/",$convk); - // return ratio = 1 if keyparts match - - // Now test if either part matches the from or to unit - if ($keyparts[1] == $to_unit && ($i2_value = $this->check_key($keyparts[0]."_".$from_unit))) { - // an intermediary $keyparts[0] was found - // now let us put things together intermediary 1 and 2 - $converted = (double)(((($value - $i2_value['offset']) / $i2_value['ratio']) * $i1_value['ratio'])+ $i1_value['offset']); - - $found = true; - - } elseif ($keyparts[1] == $from_unit && ($i2_value = $this->check_key($keyparts[0]."_".$to_unit))) { - // an intermediary $keyparts[0] was found - // now let us put things together intermediary 2 and 1 - $converted = (double)(((($value - $i1_value['offset']) / $i1_value['ratio']) + $i2_value['offset']) * $i2_value['ratio']); - - $found = true; - } - } - return $found; - } - - } // end func getConvSpecs - -} // end class UnitConvertor -?> \ No newline at end of file diff --git a/convert/convert.php b/convert/convert.php index 5449cc14..1385731c 100644 --- a/convert/convert.php +++ b/convert/convert.php @@ -18,12 +18,6 @@ function convert_app_menu($a,&$b) { function convert_module() {} - - - - - - function convert_content($app) { include("UnitConvertor.php"); @@ -85,92 +79,90 @@ include("UnitConvertor.php"); } } - $conv = new TP_Converter('en'); - $conversions = [ - 'Temperature'=>['base' =>'Celsius', - 'conv'=>[ - 'Fahrenheit'=>['ratio'=>1.8, 'offset'=>32], - 'Kelvin'=>['ratio'=>1, 'offset'=>273], - 'Reaumur'=>0.8 + 'Temperature' => ['base' => 'Celsius', + 'conv' => [ + 'Fahrenheit' => ['ratio' => 1.8, 'offset' => 32], + 'Kelvin' => ['ratio' => 1, 'offset' => 273], + 'Reaumur' => 0.8 ] ], - 'Weight' => ['base' =>'kg', - 'conv'=>[ - 'g'=>1000, - 'mg'=>1000000, - 't'=>0.001, - 'grain'=>15432, - 'oz'=>35.274, - 'lb'=>2.2046, - 'cwt(UK)' => 0.019684, - 'cwt(US)' => 0.022046, - 'ton (US)' => 0.0011023, - 'ton (UK)' => 0.0009842 + 'Weight' => ['base' => 'kg', + 'conv' => [ + 'g' => 1000, + 'mg' => 1000000, + 't' => 0.001, + 'grain' => 15432, + 'oz' => 35.274, + 'lb' => 2.2046, + 'cwt(UK)' => 0.019684, + 'cwt(US)' => 0.022046, + 'ton (US)' => 0.0011023, + 'ton (UK)' => 0.0009842 ] ], - 'Distance' => ['base' =>'km', - 'conv'=>[ - 'm'=>1000, - 'dm'=>10000, - 'cm'=>100000, - 'mm'=>1000000, - 'mile'=>0.62137, - 'naut.mile'=>0.53996, - 'inch(es)'=>39370, - 'ft'=>3280.8, - 'yd'=>1093.6, - 'furlong'=>4.970969537898672, - 'fathom'=>546.8066491688539 + 'Distance' => ['base' => 'km', + 'conv' => [ + 'm' => 1000, + 'dm' => 10000, + 'cm' => 100000, + 'mm' => 1000000, + 'mile' => 0.62137, + 'naut.mile' => 0.53996, + 'inch(es)' => 39370, + 'ft' => 3280.8, + 'yd' => 1093.6, + 'furlong' => 4.970969537898672, + 'fathom' => 546.8066491688539 ] ], - 'Area' => ['base' =>'km 2', - 'conv'=>[ - 'ha'=>100, - 'acre'=>247.105, - 'm 2'=>pow(1000,2), - 'dm 2'=>pow(10000,2), - 'cm 2'=>pow(100000,2), - 'mm 2'=>pow(1000000,2), - 'mile 2'=>pow(0.62137,2), - 'naut.miles 2'=>pow(0.53996,2), - 'in 2'=>pow(39370,2), - 'ft 2'=>pow(3280.8,2), - 'yd 2'=>pow(1093.6,2), + 'Area' => ['base' => 'km 2', + 'conv' => [ + 'ha' => 100, + 'acre' => 247.105, + 'm 2' => pow(1000,2), + 'dm 2' => pow(10000,2), + 'cm 2' => pow(100000,2), + 'mm 2' => pow(1000000,2), + 'mile 2' => pow(0.62137,2), + 'naut.miles 2' => pow(0.53996,2), + 'in 2' => pow(39370,2), + 'ft 2' => pow(3280.8,2), + 'yd 2' => pow(1093.6,2), ] ], - 'Volume' => ['base' =>'m 3', - 'conv'=>[ - 'in 3'=>61023.6, - 'ft 3'=>35.315, - 'cm 3'=>pow(10,6), - 'dm 3'=>1000, - 'litre'=>1000, - 'hl'=>10, - 'yd 3'=>1.30795, - 'gal(US)'=>264.172, - 'gal(UK)'=>219.969, - 'pint' => 2113.376, - 'quart' => 1056.688, - 'cup' => 4266.753, - 'fl oz' => 33814.02, - 'tablespoon' => 67628.04, - 'teaspoon' => 202884.1, - 'pt (UK)'=>1000/0.56826, - 'barrel petroleum'=>1000/158.99, - 'Register Tons'=>2.832, - 'Ocean Tons'=>1.1327 + 'Volume' => ['base' => 'm 3', + 'conv' => [ + 'in 3' => 61023.6, + 'ft 3' => 35.315, + 'cm 3' => pow(10,6), + 'dm 3' => 1000, + 'litre' => 1000, + 'hl' => 10, + 'yd 3' => 1.30795, + 'gal(US)' => 264.172, + 'gal(UK)' => 219.969, + 'pint' => 2113.376, + 'quart' => 1056.688, + 'cup' => 4266.753, + 'fl oz' => 33814.02, + 'tablespoon' => 67628.04, + 'teaspoon' => 202884.1, + 'pt (UK)' => 1000/0.56826, + 'barrel petroleum' => 1000/158.99, + 'Register Tons' => 2.832, + 'Ocean Tons' => 1.1327 ] ], - 'Speed' =>['base' =>'kmph', - 'conv'=>[ - 'mps'=>0.0001726031, - 'milesph'=>0.62137, - 'knots'=>0.53996, - 'mach STP'=>0.0008380431, - 'c (warp)'=>9.265669e-10 + 'Speed' => ['base' => 'kmph', + 'conv' => [ + 'mps' => 0.0001726031, + 'milesph' => 0.62137, + 'knots' => 0.53996, + 'mach STP' => 0.0008380431, + 'c (warp)' => 9.265669e-10 ] ] ]; @@ -188,24 +180,21 @@ while (list($key,$val) = each($conversions)) { if (isset($_POST['from_unit']) && isset($_POST['value'])) { - $_POST['value'] = $_POST['value'] + 0; - - + $_POST['value'] = $_POST['value'] + 0; $o .= ($conv->getTable($_POST['value'], $_POST['from_unit'], $_POST['to_unit'], 5))."

"; } else { $o .= "

Select:

"; } - if(isset($_POST['value'])) + if (isset($_POST['value'])) { $value = $_POST['value']; - else + } else { $value = ''; + } $o .= '
'; - $o .= ''; - $o .= ''; + $o .= ''; - - $o .= '
'; + $o .= ''; return $o; } diff --git a/diaspora/diasphp.php b/diaspora/diasphp.php index 4225353e..1588b582 100644 --- a/diaspora/diasphp.php +++ b/diaspora/diasphp.php @@ -110,4 +110,3 @@ class Diasphp { return true; } } -?> diff --git a/leistungsschutzrecht/leistungsschutzrecht.php b/leistungsschutzrecht/leistungsschutzrecht.php index c0e93f0c..7024c73a 100644 --- a/leistungsschutzrecht/leistungsschutzrecht.php +++ b/leistungsschutzrecht/leistungsschutzrecht.php @@ -166,4 +166,3 @@ function leistungsschutzrecht_cron($a,$b) { leistungsschutzrecht_fetchsites(); DI::config()->set('leistungsschutzrecht','last_poll', time()); } -?> diff --git a/libravatar/Services/Libravatar.php b/libravatar/Services/Libravatar.php index c679ca9d..18aa5c90 100644 --- a/libravatar/Services/Libravatar.php +++ b/libravatar/Services/Libravatar.php @@ -667,5 +667,3 @@ class Services_Libravatar * c-hanging-comment-ender-p: nil * End: */ - -?> diff --git a/statusnet/library/codebirdsn.php b/statusnet/library/codebirdsn.php index e5e281b9..020c69c4 100644 --- a/statusnet/library/codebirdsn.php +++ b/statusnet/library/codebirdsn.php @@ -1055,5 +1055,3 @@ class CodebirdSN return $parsed; } } - -?> diff --git a/webrtc/webrtc.php b/webrtc/webrtc.php index 194425d5..4597fb1a 100644 --- a/webrtc/webrtc.php +++ b/webrtc/webrtc.php @@ -52,4 +52,3 @@ function webrtc_content(&$a) { return $o; } -?> From be9d786ef9a6203569a0a69373a3fc2922399be8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Thu, 23 Jun 2022 05:46:32 +0200 Subject: [PATCH 059/677] Ops, we need this back! :-( --- convert/UnitConvertor.php | 283 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 convert/UnitConvertor.php diff --git a/convert/UnitConvertor.php b/convert/UnitConvertor.php new file mode 100644 index 00000000..d7933a8f --- /dev/null +++ b/convert/UnitConvertor.php @@ -0,0 +1,283 @@ + | +// | Co-authored by : CVH, Chris Hansel | +// +----------------------------------------------------------------------+ +// +// $Id: UnitConvertor.php,v 1.00 2002/02/20 11:40:00 stasokhvat Exp $ + +/** +* UnitConvertor is able to convert between different units and currencies. +* +* @author Stanislav Okhvat +* @version $Id: UnitConvertor.php,v 1.00 2002/03/01 17:00:00 stasokhvat Exp $ +* @package UnitConvertor +* @access public +* @history 01.03.2002 Implemented the code for regular and offset-based +* conversions +* +* 13.12.2004 +* By Chris Hansel (CVH): changed getConvSpecs in order to have it look up +* intermediary conversions (also see comments in check_key). +* +* Intermediary conversions are useful when no conversion ratio is specified +* between two units when we calculate between the two. For example, we want +* to convert between Fahrenheit and Kelvin, and we have only +* specified how to convert Centigrade<->Fahrenheit and +* Centigrade<->Kelvin. While a direct (Fahrenheit->Kelvin) or +* reverse (Kelvin->Fahrenheit) lookups fail, looking for an intermediary +* unit linking the two (Centigrade) helps us do the conversion. +* +* 13.12.2004 +* Chris Hansel (CVH): $to_array argument of addConversion method can now +* contain units as 'unit1/unit2/unit3', when all units stand for the same +* thing. See examples in unitconv.php +*/ +class UnitConvertor +{ + /** + * Stores conversion ratios. + * + * @var array + * @access private + */ + var $conversion_table = array(); + + /** + * Decimal point character (default is "." - American - set in constructor). + * + * @var string + * @access private + */ + var $decimal_point; + + /** + * Thousands separator (default is "," - American - set in constructor). + * + * @var string + * @access private + */ + var $thousand_separator; + + /** + * For future use + * + * @var array + * @access private + */ + var $bases = array(); + + /** + * Constructor. Initializes the UnitConvertor object with the most important + * properties. + * + * @param string decimal point character + * @param string thousand separator character + * @return void + * @access public + */ + function UnitConvertor($dec_point = '.', $thousand_sep = ',') + { + $this->decimal_point = $dec_point; + $this->thousand_separator = $thousand_sep; + + } // end func UnitConvertor + + /** + * Adds a conversion ratio to the conversion table. + * + * @param string the name of unit from which to convert + * @param array array( + * "pound"=>array("ratio"=>'', "offset"=>'') + * ) + * "pound" - name of unit to set conversion ration to + * "ratio" - 'double' conversion ratio which, when + * multiplied by the number of $from_unit units produces + * the result + * "offset" - an offset from 0 which will be added to + * the result when converting (needed for temperature + * conversions and defaults to 0). + * @return boolean true if successful, false otherwise + * @access public + */ + function addConversion($from_unit, $to_array) + { + if (!isset($this->conversion_table[$from_unit])) { + while(list($key, $val) = each($to_array)) + { + if (strstr($key, '/')) + { + $to_units = explode('/', $key); + foreach ($to_units as $to_unit) + { + $this->bases[$from_unit][] = $to_unit; + + if (!is_array($val)) + { + $this->conversion_table[$from_unit."_".$to_unit] = array("ratio"=>$val, "offset"=>0); + } + else + { + $this->conversion_table[$from_unit."_".$to_unit] = + array( + "ratio"=>$val['ratio'], + "offset"=>(isset($val['offset']) ? $val['offset'] : 0) + ); + } + } + } + else + { + $this->bases[$from_unit][] = $key; + + if (!is_array($val)) + { + $this->conversion_table[$from_unit."_".$key] = array("ratio"=>$val, "offset"=>0); + } + else + { + $this->conversion_table[$from_unit."_".$key] = + array( + "ratio"=>$val['ratio'], + "offset"=>(isset($val['offset']) ? $val['offset'] : 0) + ); + } + } + } + return true; + } + return false; + + } // end func addConversion + + /** + * Converts from one unit to another using specified precision. + * + * @param double value to convert + * @param string name of the source unit from which to convert + * @param string name of the target unit to which we are converting + * @param integer double precision of the end result + * @return void + * @access public + */ + function convert($value, $from_unit, $to_unit, $precision) + { + if ($this->getConvSpecs($from_unit, $to_unit, $value, $converted )) + { + return number_format($converted , (int)$precision, $this->decimal_point, $this->thousand_separator); + } else { + return false; + } + } // end func + + /** + * CVH : changed this Function getConvSpecs in order to have it look up + * intermediary Conversions from the + * "base" unit being that one that has the highest hierarchical order in one + * "logical" Conversion_Array + * when taking $conv->addConversion('km', + * array('meter'=>1000, 'dmeter'=>10000, 'centimeter'=>100000, + * 'millimeter'=>1000000, 'mile'=>0.62137, 'naut.mile'=>0.53996, + * 'inch(es)/zoll'=>39370, 'ft/foot/feet'=>3280.8, 'yd/yard'=>1093.6)); + * "km" would be the logical base unit for all units of dinstance, thus, + * if the function fails to find a direct or reverse conversion in the table + * it is only logical to suspect that if there is a chance + * converting the value it only is via the "base" unit, and so + * there is not even a need for a recursive search keeping the perfomance + * acceptable and the ressource small... + * + * CVH check_key checks for a key in the Conversiontable and returns a value + */ + function check_key( $key) { + if ( array_key_exists ($key,$this->conversion_table)) { + if (! empty($this->conversion_table[$key])) { + return $this->conversion_table[$key]; + } + } + return false; + } + + /** + * Key function. Finds the conversion ratio and offset from one unit to another. + * + * @param string name of the source unit from which to convert + * @param string name of the target unit to which we are converting + * @param double conversion ratio found. Returned by reference. + * @param double offset which needs to be added (or subtracted, if negative) + * to the result to convert correctly. + * For temperature or some scientific conversions, + * i.e. Fahrenheit -> Celcius + * @return boolean true if ratio and offset are found for the supplied + * units, false otherwise + * @access private + */ + function getConvSpecs($from_unit, $to_unit, $value, &$converted) + { + $key = $from_unit."_".$to_unit; + $revkey = $to_unit."_".$from_unit; + $found = false; + if ($ct_arr = $this->check_key($key)) { + // Conversion Specs found directly + $ratio = (double)$ct_arr['ratio']; + $offset = $ct_arr['offset']; + $converted = (double)(($value * $ratio)+ $offset); + + return true; + } // not found in direct order, try reverse order + elseif ($ct_arr = $this->check_key($revkey)) { + $ratio = (double)(1/$ct_arr['ratio']); + $offset = -$ct_arr['offset']; + $converted = (double)(($value + $offset) * $ratio); + + return true; + } // not found test for intermediary conversion + else { + // return ratio = 1 if keyparts match + if ($key == $revkey) { + $ratio = 1; + $offset = 0; + $converted = $value; + return true; + } + // otherwise search intermediary + reset($this->conversion_table); + while (list($convk, $i1_value) = each($this->conversion_table)) { + // split the key into parts + $keyparts = preg_split("/_/",$convk); + // return ratio = 1 if keyparts match + + // Now test if either part matches the from or to unit + if ($keyparts[1] == $to_unit && ($i2_value = $this->check_key($keyparts[0]."_".$from_unit))) { + // an intermediary $keyparts[0] was found + // now let us put things together intermediary 1 and 2 + $converted = (double)(((($value - $i2_value['offset']) / $i2_value['ratio']) * $i1_value['ratio'])+ $i1_value['offset']); + + $found = true; + + } elseif ($keyparts[1] == $from_unit && ($i2_value = $this->check_key($keyparts[0]."_".$to_unit))) { + // an intermediary $keyparts[0] was found + // now let us put things together intermediary 2 and 1 + $converted = (double)(((($value - $i1_value['offset']) / $i1_value['ratio']) + $i2_value['offset']) * $i2_value['ratio']); + + $found = true; + } + } + return $found; + } + + } // end func getConvSpecs + +} // end class UnitConvertor +?> \ No newline at end of file From 28cdecea93aa9bfba41086b1c5cc60057f777033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Thu, 23 Jun 2022 05:52:43 +0200 Subject: [PATCH 060/677] Changes: - changed more double-quotes to single - `include` is not a function --- convert/convert.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/convert/convert.php b/convert/convert.php index 1385731c..54f7df4b 100644 --- a/convert/convert.php +++ b/convert/convert.php @@ -20,15 +20,15 @@ function convert_module() {} function convert_content($app) { -include("UnitConvertor.php"); +include 'UnitConvertor.php'; class TP_Converter extends UnitConvertor { - function TP_Converter($lang = "en") + function TP_Converter($lang = 'en') { if ($lang != 'en' ) { $dec_point = '.'; $thousand_sep = "'"; } else { - $dec_point = '.'; $thousand_sep = ","; + $dec_point = '.'; $thousand_sep = ','; } $this->UnitConvertor($dec_point , $thousand_sep ); @@ -50,13 +50,13 @@ include("UnitConvertor.php"); // A baseunit was found now lets convert from -> $base_unit - $cell ['value'] = $this->convert($value, $from_unit, $base_unit, $precision)." ".$base_unit; - $cell ['class'] = ($base_unit == $from_unit || $base_unit == $to_unit) ? "framedred": ""; + $cell ['value'] = $this->convert($value, $from_unit, $base_unit, $precision) . ' ' . $base_unit; + $cell ['class'] = ($base_unit == $from_unit || $base_unit == $to_unit) ? 'framedred' : ''; $cells[] = $cell; // We now have the base unit and value now lets produce the table; while (list($key,$val) = each($this->bases[$base_unit])) { - $cell ['value'] = $this->convert($value, $from_unit, $val, $precision)." ".$val; - $cell ['class'] = ($val == $from_unit || $val == $to_unit) ? "framedred": ""; + $cell ['value'] = $this->convert($value, $from_unit, $val, $precision) . ' ' . $val; + $cell ['class'] = ($val == $from_unit || $val == $to_unit) ? 'framedred' : ''; $cells[] = $cell; } @@ -181,9 +181,9 @@ while (list($key,$val) = each($conversions)) { if (isset($_POST['from_unit']) && isset($_POST['value'])) { $_POST['value'] = $_POST['value'] + 0; - $o .= ($conv->getTable($_POST['value'], $_POST['from_unit'], $_POST['to_unit'], 5))."

"; + $o .= ($conv->getTable($_POST['value'], $_POST['from_unit'], $_POST['to_unit'], 5)) . '

'; } else { - $o .= "

Select:

"; + $o .= '

Select:

'; } if (isset($_POST['value'])) { From 3bda8dfa32ebdc99f21c538ede14f788580b3550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Thu, 23 Jun 2022 06:04:05 +0200 Subject: [PATCH 061/677] Changes: - changed more double-quotes to single - cleaned up js_upload/file-uploader/server/php.php a lot - added some type-hints --- .../advancedcontentfilter.php | 28 +- blackout/blackout.php | 16 +- js_upload/file-uploader/server/php.php | 285 +++++++++--------- 3 files changed, 172 insertions(+), 157 deletions(-) diff --git a/advancedcontentfilter/advancedcontentfilter.php b/advancedcontentfilter/advancedcontentfilter.php index 9f6a7cff..45ab3f3e 100644 --- a/advancedcontentfilter/advancedcontentfilter.php +++ b/advancedcontentfilter/advancedcontentfilter.php @@ -64,7 +64,7 @@ function advancedcontentfilter_install(App $a) Hook::add('dbstructure_definition' , __FILE__, 'advancedcontentfilter_dbstructure_definition'); DBStructure::performUpdate(); - Logger::notice("installed advancedcontentfilter"); + Logger::notice('installed advancedcontentfilter'); } /* @@ -73,20 +73,20 @@ function advancedcontentfilter_install(App $a) function advancedcontentfilter_dbstructure_definition(App $a, &$database) { - $database["advancedcontentfilter_rules"] = [ - "comment" => "Advancedcontentfilter addon rules", - "fields" => [ - "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "Auto incremented rule id"], - "uid" => ["type" => "int unsigned", "not null" => "1", "comment" => "Owner user id"], - "name" => ["type" => "varchar(255)", "not null" => "1", "comment" => "Rule name"], - "expression" => ["type" => "mediumtext" , "not null" => "1", "comment" => "Expression text"], - "serialized" => ["type" => "mediumtext" , "not null" => "1", "comment" => "Serialized parsed expression"], - "active" => ["type" => "boolean" , "not null" => "1", "default" => "1", "comment" => "Whether the rule is active or not"], - "created" => ["type" => "datetime" , "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Creation date"], + $database['advancedcontentfilter_rules'] = [ + 'comment' => 'Advancedcontentfilter addon rules', + 'fields' => [ + 'id' => ['type' => 'int unsigned', 'not null' => '1', 'extra' => 'auto_increment', 'primary' => '1', 'comment' => 'Auto incremented rule id'], + 'uid' => ['type' => 'int unsigned', 'not null' => '1', 'comment' => 'Owner user id'], + 'name' => ['type' => 'varchar(255)', 'not null' => '1', 'comment' => 'Rule name'], + 'expression' => ['type' => 'mediumtext' , 'not null' => '1', 'comment' => 'Expression text'], + 'serialized' => ['type' => 'mediumtext' , 'not null' => '1', 'comment' => 'Serialized parsed expression'], + 'active' => ['type' => 'boolean' , 'not null' => '1', 'default' => '1', 'comment' => 'Whether the rule is active or not'], + 'created' => ['type' => 'datetime' , 'not null' => '1', 'default' => DBA::NULL_DATETIME, 'comment' => 'Creation date'], ], - "indexes" => [ - "PRIMARY" => ["id"], - "uid_active" => ["uid", "active"], + 'indexes' => [ + 'PRIMARY' => ['id'], + 'uid_active' => ['uid', 'active'], ] ]; } diff --git a/blackout/blackout.php b/blackout/blackout.php index 18e74570..ecb04c76 100644 --- a/blackout/blackout.php +++ b/blackout/blackout.php @@ -82,17 +82,17 @@ function blackout_redirect ($a, $b) { function blackout_addon_admin(&$a, &$o) { $mystart = DI::config()->get('blackout','begindate'); - if (! is_string($mystart)) { $mystart = "YYYY-MM-DD hh:mm"; } + if (! is_string($mystart)) { $mystart = 'YYYY-MM-DD hh:mm'; } $myend = DI::config()->get('blackout','enddate'); - if (! is_string($myend)) { $myend = "YYYY-MM-DD hh:mm"; } + if (! is_string($myend)) { $myend = 'YYYY-MM-DD hh:mm'; } $myurl = DI::config()->get('blackout','url'); - if (! is_string($myurl)) { $myurl = "https://www.example.com"; } - $t = Renderer::getMarkupTemplate( "admin.tpl", "addon/blackout/" ); + if (! is_string($myurl)) { $myurl = 'https://www.example.com'; } + $t = Renderer::getMarkupTemplate( 'admin.tpl', 'addon/blackout/' ); $date1 = DateTime::createFromFormat('Y-m-d G:i', $mystart); $date2 = DateTime::createFromFormat('Y-m-d G:i', $myend); // a note for the admin - $adminnote = ""; + $adminnote = ''; if ($date2 < $date1) { $adminnote = DI::l10n()->t("The end-date is prior to the start-date of the blackout, you should fix this."); } else { @@ -100,9 +100,9 @@ function blackout_addon_admin(&$a, &$o) { } $o = Renderer::replaceMacros($t, [ '$submit' => DI::l10n()->t('Save Settings'), - '$rurl' => ["rurl", DI::l10n()->t("Redirect URL"), $myurl, DI::l10n()->t("All your visitors from the web will be redirected to this URL."), "", "", "url"], - '$startdate' => ["startdate", DI::l10n()->t("Begin of the Blackout"), $mystart, DI::l10n()->t("Format is YYYY-MM-DD hh:mm; YYYY year, MM month, DD day, hh hour and mm minute.")], - '$enddate' => ["enddate", DI::l10n()->t("End of the Blackout"), $myend, ""], + '$rurl' => ['rurl', DI::l10n()->t("Redirect URL"), $myurl, DI::l10n()->t("All your visitors from the web will be redirected to this URL."), '', '', 'url'], + '$startdate' => ['startdate', DI::l10n()->t("Begin of the Blackout"), $mystart, DI::l10n()->t("Format is YYYY-MM-DD hh:mm; YYYY year, MM month, DD day, hh hour and mm minute.")], + '$enddate' => ['enddate', DI::l10n()->t("End of the Blackout"), $myend, ''], '$adminnote' => $adminnote, '$aboutredirect' => DI::l10n()->t("Note: The redirect will be active from the moment you press the submit button. Users currently logged in will not be thrown out but can't login again after logging out while the blackout is still in place."), ]); diff --git a/js_upload/file-uploader/server/php.php b/js_upload/file-uploader/server/php.php index 915c86c6..2248c8f0 100644 --- a/js_upload/file-uploader/server/php.php +++ b/js_upload/file-uploader/server/php.php @@ -4,155 +4,170 @@ * Handle file uploads via XMLHttpRequest */ class qqUploadedFileXhr { - /** - * Save the file to the specified path - * @return boolean TRUE on success - */ - function save($path) { - $input = fopen("php://input", "r"); - $temp = tmpfile(); - $realSize = stream_copy_to_stream($input, $temp); - fclose($input); - - if ($realSize != $this->getSize()){ - return false; - } - - $target = fopen($path, "w"); - fseek($temp, 0, SEEK_SET); - stream_copy_to_stream($temp, $target); - fclose($target); - - return true; - } - function getName() { - return $_GET['qqfile']; - } - function getSize() { - if (isset($_SERVER["CONTENT_LENGTH"])){ - return (int)$_SERVER["CONTENT_LENGTH"]; - } else { - throw new Exception('Getting content length is not supported.'); - } - } + /** + * Save the file to the specified path + * @return boolean TRUE on success + */ + public function save(string $path): bool + { + $input = fopen('php://input', 'r'); + $temp = tmpfile(); + $realSize = stream_copy_to_stream($input, $temp); + fclose($input); + + if ($realSize != $this->getSize()) { + return false; + } + + $target = fopen($path, 'w'); + fseek($temp, 0, SEEK_SET); + stream_copy_to_stream($temp, $target); + fclose($target); + + return true; + } + + public function getName(): string + { + return $_GET['qqfile']; + } + + public function getSize(): int + { + if (isset($_SERVER['CONTENT_LENGTH'])) { + return (int)$_SERVER['CONTENT_LENGTH']; + } else { + throw new Exception('Getting content length is not supported.'); + } + } } /** * Handle file uploads via regular form post (uses the $_FILES array) */ -class qqUploadedFileForm { - /** - * Save the file to the specified path - * @return boolean TRUE on success - */ - function save($path) { - if(!move_uploaded_file($_FILES['qqfile']['tmp_name'], $path)){ - return false; - } - return true; - } - function getName() { - return $_FILES['qqfile']['name']; - } - function getSize() { - return $_FILES['qqfile']['size']; - } +class qqUploadedFileForm { + /** + * Save the file to the specified path + * @return boolean TRUE on success + */ + public function save(string $path): bool + { + if(!move_uploaded_file($_FILES['qqfile']['tmp_name'], $path)) { + return false; + } + return true; + } + + public function getName(): string + { + return $_FILES['qqfile']['name']; + } + + public function getSize(): int + { + return $_FILES['qqfile']['size']; + } } class qqFileUploader { - private $allowedExtensions = array(); - private $sizeLimit = 10485760; - private $file; + private $allowedExtensions = []; + private $sizeLimit = 10485760; + private $file; - function __construct(array $allowedExtensions = array(), $sizeLimit = 10485760){ - $allowedExtensions = array_map("strtolower", $allowedExtensions); - - $this->allowedExtensions = $allowedExtensions; - $this->sizeLimit = $sizeLimit; - - $this->checkServerSettings(); + public function __construct(array $allowedExtensions = [], $sizeLimit = 10485760) + { + $allowedExtensions = array_map('strtolower', $allowedExtensions); + + $this->allowedExtensions = $allowedExtensions; + $this->sizeLimit = $sizeLimit; + + $this->checkServerSettings(); - if (isset($_GET['qqfile'])) { - $this->file = new qqUploadedFileXhr(); - } elseif (isset($_FILES['qqfile'])) { - $this->file = new qqUploadedFileForm(); - } else { - $this->file = false; - } - } - - private function checkServerSettings(){ - $postSize = $this->toBytes(ini_get('post_max_size')); - $uploadSize = $this->toBytes(ini_get('upload_max_filesize')); - - if ($postSize < $this->sizeLimit || $uploadSize < $this->sizeLimit){ - $size = max(1, $this->sizeLimit / 1024 / 1024) . 'M'; - die("{'error':'increase post_max_size and upload_max_filesize to $size'}"); - } - } - - private function toBytes($str){ - $val = trim($str); - $last = strtolower($str[strlen($str)-1]); - switch($last) { - case 'g': $val *= 1024; - case 'm': $val *= 1024; - case 'k': $val *= 1024; - } - return $val; - } - - /** - * Returns array('success'=>true) or array('error'=>'error message') - */ - function handleUpload($uploadDirectory, $replaceOldFile = FALSE){ - if (!is_writable($uploadDirectory)){ - return array('error' => "Server error. Upload directory isn't writable."); - } - - if (!$this->file){ - return array('error' => 'No files were uploaded.'); - } - - $size = $this->file->getSize(); - - if ($size == 0) { - return array('error' => 'File is empty'); - } - - if ($size > $this->sizeLimit) { - return array('error' => 'File is too large'); - } - - $pathinfo = pathinfo($this->file->getName()); - $filename = $pathinfo['filename']; - //$filename = md5(uniqid()); - $ext = $pathinfo['extension']; + if (isset($_GET['qqfile'])) { + $this->file = new qqUploadedFileXhr(); + } elseif (isset($_FILES['qqfile'])) { + $this->file = new qqUploadedFileForm(); + } else { + $this->file = false; + } + } - if($this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)){ - $these = implode(', ', $this->allowedExtensions); - return array('error' => 'File has an invalid extension, it should be one of '. $these . '.'); - } - - if(!$replaceOldFile){ - /// don't overwrite previous files that were uploaded - while (file_exists($uploadDirectory . $filename . '.' . $ext)) { - $filename .= rand(10, 99); - } - } - - if ($this->file->save($uploadDirectory . $filename . '.' . $ext)){ - return array('success'=>true); - } else { - return array('error'=> 'Could not save uploaded file.' . - 'The upload was cancelled, or server error encountered'); - } - - } + private function checkServerSettings() + { + $postSize = $this->toBytes(ini_get('post_max_size')); + $uploadSize = $this->toBytes(ini_get('upload_max_filesize')); + + if ($postSize < $this->sizeLimit || $uploadSize < $this->sizeLimit) { + $size = max(1, $this->sizeLimit / 1024 / 1024) . 'M'; + die("{'error':'increase post_max_size and upload_max_filesize to $size'}"); + } + } + + private function toBytes(string $str): int + { + $val = trim($str); + $last = strtolower($str[strlen($str) - 1]); + + switch($last) { + case 'g': $val *= 1024; + case 'm': $val *= 1024; + case 'k': $val *= 1024; + } + + return $val; + } + + /** + * Returns array('success'=>true) or array('error'=>'error message') + */ + public function handleUpload(string $uploadDirectory, bool $replaceOldFile = false): array + { + if (!is_writable($uploadDirectory)) { + return ['error' => "Server error. Upload directory isn't writable."]; + } + + if (!$this->file) { + return ['error' => 'No files were uploaded.']; + } + + $size = $this->file->getSize(); + + if ($size == 0) { + return ['error' => 'File is empty']; + } + + if ($size > $this->sizeLimit) { + return ['error' => 'File is too large']; + } + + $pathinfo = pathinfo($this->file->getName()); + $filename = $pathinfo['filename']; + //$filename = md5(uniqid()); + $ext = $pathinfo['extension']; + + if($this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)) { + $these = implode(', ', $this->allowedExtensions); + return ['error' => 'File has an invalid extension, it should be one of '. $these . '.']; + } + + if(!$replaceOldFile) { + /// don't overwrite previous files that were uploaded + while (file_exists($uploadDirectory . $filename . '.' . $ext)) { + $filename .= rand(10, 99); + } + } + + if ($this->file->save($uploadDirectory . $filename . '.' . $ext)) { + return ['success' => true]; + } else { + return ['error'=> 'Could not save uploaded file. The upload was cancelled, or server error encountered']; + } + } } // list of valid extensions, ex. array("jpeg", "xml", "bmp") -$allowedExtensions = array(); +$allowedExtensions = []; + // max file size in bytes $sizeLimit = 10 * 1024 * 1024; From 0ecd7729586c2f5eeeee9c8806f9aca979939c40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Thu, 23 Jun 2022 06:20:19 +0200 Subject: [PATCH 062/677] Changes: - added some type-hints - changed double-quotes to singl - cleaned up file (e.g. wrong place for curly braces) --- leistungsschutzrecht/leistungsschutzrecht.php | 75 +++++++++++-------- 1 file changed, 42 insertions(+), 33 deletions(-) diff --git a/leistungsschutzrecht/leistungsschutzrecht.php b/leistungsschutzrecht/leistungsschutzrecht.php index 7024c73a..23767f14 100644 --- a/leistungsschutzrecht/leistungsschutzrecht.php +++ b/leistungsschutzrecht/leistungsschutzrecht.php @@ -6,6 +6,7 @@ * Author: Michael Vogel */ +use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\DI; @@ -16,51 +17,54 @@ function leistungsschutzrecht_install() { Hook::register('page_info_data', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_getsiteinfo'); } -function leistungsschutzrecht_getsiteinfo($a, &$siteinfo) { - if (!isset($siteinfo["url"]) || empty($siteinfo['type'])) { +function leistungsschutzrecht_getsiteinfo(App $a,array &$siteinfo) { + if (!isset($siteinfo['url']) || empty($siteinfo['type'])) { return; } // Avoid any third party pictures, to avoid copyright issues if (!in_array($siteinfo['type'], ['photo', 'video']) && DI::config()->get('leistungsschutzrecht', 'suppress_photos', false)) { - unset($siteinfo["image"]); - unset($siteinfo["images"]); + unset($siteinfo['image']); + unset($siteinfo['images']); } - if (!leistungsschutzrecht_is_member_site($siteinfo["url"])) { + if (!leistungsschutzrecht_is_member_site($siteinfo['url'])) { return; } - if (!empty($siteinfo["text"])) { - $siteinfo["text"] = leistungsschutzrecht_cuttext($siteinfo["text"]); + if (!empty($siteinfo['text'])) { + $siteinfo['text'] = leistungsschutzrecht_cuttext($siteinfo['text']); } - unset($siteinfo["keywords"]); + unset($siteinfo['keywords']); } -function leistungsschutzrecht_cuttext($text) { - $text = str_replace(["\r", "\n"], [" ", " "], $text); +function leistungsschutzrecht_cuttext(string $text): string +{ + $text = str_replace(["\r", "\n"], [' ', ' '], $text); do { $oldtext = $text; - $text = str_replace(" ", " ", $text); + $text = str_replace(' ', ' ', $text); } while ($oldtext != $text); - $words = explode(" ", $text); + $words = explode(' ', $text); - $text = ""; + $text = ''; $count = 0; $limit = 7; foreach ($words as $word) { - if ($text != "") - $text .= " "; + if ($text != '') { + $text .= ' '; + } $text .= $word; if (++$count >= $limit) { - if (sizeof($words) > $limit) - $text .= " ..."; + if (sizeof($words) > $limit) { + $text .= ' ...'; + } break; } @@ -71,7 +75,7 @@ function leistungsschutzrecht_cuttext($text) { function leistungsschutzrecht_fetchsites() { // This list works - but question is how current it is - $url = "http://leistungsschutzrecht-stoppen.d-64.org/blacklist.txt"; + $url = 'https://leistungsschutzrecht-stoppen.d-64.org/blacklist.txt'; $sitelist = DI::httpClient()->fetch($url); $siteurls = explode(',', $sitelist); @@ -123,23 +127,27 @@ function leistungsschutzrecht_fetchsites() } } -function leistungsschutzrecht_is_member_site($url) { +function leistungsschutzrecht_is_member_site(string $url) +{ $sites = DI::config()->get('leistungsschutzrecht','sites'); - if ($sites == "") - return(false); + if ($sites == '') { + return false; + } - if (sizeof($sites) == 0) - return(false); + if (sizeof($sites) == 0) { + return false; + } $urldata = parse_url($url); - if (!isset($urldata["host"])) - return(false); + if (!isset($urldata['host'])) { + return false; + } - $cleanedurlpart = explode("%", $urldata["host"]); + $cleanedurlpart = explode('%', $urldata['host']); - $hostname = explode(".", $cleanedurlpart[0]); + $hostname = explode('.', $cleanedurlpart[0]); if (empty($hostname)) { return false; } @@ -148,21 +156,22 @@ function leistungsschutzrecht_is_member_site($url) { return false; } - $site = $hostname[sizeof($hostname) - 2].".".$hostname[sizeof($hostname) - 1]; + $site = $hostname[sizeof($hostname) - 2] . '.' . $hostname[sizeof($hostname) - 1]; return (isset($sites[$site])); } -function leistungsschutzrecht_cron($a,$b) { - $last = DI::config()->get('leistungsschutzrecht','last_poll'); +function leistungsschutzrecht_cron(App $a,$b) +{ + $last = DI::config()->get('leistungsschutzrecht', 'last_poll'); - if($last) { + if ($last) { $next = $last + 86400; - if($next > time()) { + if ($next > time()) { Logger::notice('poll intervall not reached'); return; } } leistungsschutzrecht_fetchsites(); - DI::config()->set('leistungsschutzrecht','last_poll', time()); + DI::config()->set('leistungsschutzrecht', 'last_poll', time()); } From a1e17968d1626f1091059e7ba64b8283c0e4908d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Thu, 23 Jun 2022 06:26:24 +0200 Subject: [PATCH 063/677] leistungsschutzrecht_is_member_site() returns boolean value --- leistungsschutzrecht/leistungsschutzrecht.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/leistungsschutzrecht/leistungsschutzrecht.php b/leistungsschutzrecht/leistungsschutzrecht.php index 23767f14..991b4f0f 100644 --- a/leistungsschutzrecht/leistungsschutzrecht.php +++ b/leistungsschutzrecht/leistungsschutzrecht.php @@ -11,13 +11,14 @@ use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\DI; -function leistungsschutzrecht_install() { +function leistungsschutzrecht_install() +{ Hook::register('cron', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_cron'); Hook::register('getsiteinfo', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_getsiteinfo'); Hook::register('page_info_data', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_getsiteinfo'); } -function leistungsschutzrecht_getsiteinfo(App $a,array &$siteinfo) { +function leistungsschutzrecht_getsiteinfo(App $a, array &$siteinfo) { if (!isset($siteinfo['url']) || empty($siteinfo['type'])) { return; } @@ -123,13 +124,13 @@ function leistungsschutzrecht_fetchsites() */ if (sizeof($sites)) { - DI::config()->set('leistungsschutzrecht','sites',$sites); + DI::config()->set('leistungsschutzrecht', 'sites',$sites); } } -function leistungsschutzrecht_is_member_site(string $url) +function leistungsschutzrecht_is_member_site(string $url): bool { - $sites = DI::config()->get('leistungsschutzrecht','sites'); + $sites = DI::config()->get('leistungsschutzrecht', 'sites'); if ($sites == '') { return false; @@ -158,10 +159,10 @@ function leistungsschutzrecht_is_member_site(string $url) $site = $hostname[sizeof($hostname) - 2] . '.' . $hostname[sizeof($hostname) - 1]; - return (isset($sites[$site])); + return isset($sites[$site]); } -function leistungsschutzrecht_cron(App $a,$b) +function leistungsschutzrecht_cron(App $a, $b) { $last = DI::config()->get('leistungsschutzrecht', 'last_poll'); From 04df7f6e058626c030c115fd9062156a981cb619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Thu, 23 Jun 2022 07:16:22 +0200 Subject: [PATCH 064/677] Changes: - added more type-hints - cleaned up some files (curly braces, spaces) --- birdavatar/birdavatar.php | 2 +- blackout/blackout.php | 15 +- blockbot/blockbot.php | 14 +- buglink/buglink.php | 2 +- calc/calc.php | 21 +- catavatar/catavatar.php | 2 +- convert/convert.php | 5 +- cookienotice/cookienotice.php | 4 +- curweather/curweather.php | 2 +- diaspora/diaspora.php | 4 +- fromapp/fromapp.php | 4 +- geocoordinates/geocoordinates.php | 7 +- gnot/gnot.php | 26 +-- googlemaps/googlemaps.php | 19 +- gravatar/gravatar.php | 15 +- group_text/group_text.php | 2 +- highlightjs/highlightjs.php | 4 +- ijpost/ijpost.php | 6 +- impressum/impressum.php | 163 ++++++++------- .../infiniteimprobabilitydrive.php | 6 +- irc/irc.php | 64 +++--- js_upload/js_upload.php | 6 +- keycloakpassword/keycloakpassword.php | 6 +- krynn/krynn.php | 4 +- langfilter/langfilter.php | 2 +- ldapauth/ldapauth.php | 5 +- libertree/libertree.php | 38 ++-- libravatar/libravatar.php | 7 +- ljpost/ljpost.php | 188 +++++++++--------- mailstream/mailstream.php | 6 +- markdown/markdown.php | 2 +- mathjax/mathjax.php | 4 +- membersince/membersince.php | 2 +- morechoice/morechoice.php | 7 +- morepokes/morepokes.php | 4 +- namethingy/namethingy.php | 26 ++- newmemberwidget/newmemberwidget.php | 7 +- nitter/nitter.php | 2 +- nominatim/nominatim.php | 7 +- notifyall/notifyall.php | 2 +- nsfw/nsfw.php | 2 +- numfriends/numfriends.php | 9 +- openstreetmap/openstreetmap.php | 17 +- opmlexport/opmlexport.php | 3 +- pageheader/pageheader.php | 2 +- piwik/piwik.php | 11 +- planets/planets.php | 12 +- public_server/public_server.php | 12 +- pumpio/pumpio.php | 12 +- pumpio/pumpio_sync.php | 4 +- qcomment/qcomment.php | 4 +- randplace/randplace.php | 82 ++++---- rendertime/rendertime.php | 13 +- s3_storage/s3_storage.php | 2 +- saml/saml.php | 18 +- showmore/showmore.php | 2 +- showmore_dyn/showmore_dyn.php | 4 +- .../lang/smiley_pack_es/smiley_pack_es.php | 4 +- .../lang/smiley_pack_fr/smiley_pack_fr.php | 17 +- smiley_pack/smiley_pack.php | 6 +- smileybutton/smileybutton.php | 2 +- smilies_adult/smilies_adult.php | 9 +- startpage/startpage.php | 4 +- statusnet/statusnet.php | 14 +- superblock/superblock.php | 15 +- testdrive/testdrive.php | 40 ++-- tictac/tictac.php | 18 +- tumblr/tumblr.php | 2 +- twitter/twitter.php | 18 +- unicode_smilies/unicode_smilies.php | 5 +- viewsrc/viewsrc.php | 6 +- webrtc/webrtc.php | 41 ++-- windowsphonepush/windowsphonepush.php | 2 +- wppost/wppost.php | 8 +- 74 files changed, 603 insertions(+), 529 deletions(-) diff --git a/birdavatar/birdavatar.php b/birdavatar/birdavatar.php index b162ea8d..d17a455c 100644 --- a/birdavatar/birdavatar.php +++ b/birdavatar/birdavatar.php @@ -117,7 +117,7 @@ function birdavatar_addon_settings_post(App $a, &$s) * @param $a array * @param &$b array */ -function birdavatar_lookup(App $a, &$b) +function birdavatar_lookup(App $a, array &$b) { $user = DBA::selectFirst('user', ['uid'], ['email' => $b['email']]); if (DBA::isResult($user)) { diff --git a/blackout/blackout.php b/blackout/blackout.php index ecb04c76..e8efecd2 100644 --- a/blackout/blackout.php +++ b/blackout/blackout.php @@ -44,6 +44,7 @@ * THE SOFTWARE. */ +use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; @@ -54,7 +55,8 @@ function blackout_install() { Hook::register('page_header', 'addon/blackout/blackout.php', 'blackout_redirect'); } -function blackout_redirect ($a, $b) { +function blackout_redirect (App $a, $b) +{ // if we have a logged in user, don't throw her out if (local_user()) { return true; @@ -67,20 +69,21 @@ function blackout_redirect ($a, $b) { $now = time(); $date1 = DateTime::createFromFormat('Y-m-d G:i', $mystart); $date2 = DateTime::createFromFormat('Y-m-d G:i', $myend); - if ( $date1 && $date2 ) { + if ($date1 && $date2) { $date1 = DateTime::createFromFormat('Y-m-d G:i', $mystart)->format('U'); $date2 = DateTime::createFromFormat('Y-m-d G:i', $myend)->format('U'); } else { - $date1 = 0; - $date2 = 0; + $date1 = 0; + $date2 = 0; } + if (( $date1 <= $now ) && ( $now <= $date2 )) { Logger::notice('redirecting user to blackout page'); System::externalRedirect($myurl); } } -function blackout_addon_admin(&$a, &$o) { +function blackout_addon_admin(App $a, &$o) { $mystart = DI::config()->get('blackout','begindate'); if (! is_string($mystart)) { $mystart = 'YYYY-MM-DD hh:mm'; } $myend = DI::config()->get('blackout','enddate'); @@ -107,7 +110,7 @@ function blackout_addon_admin(&$a, &$o) { '$aboutredirect' => DI::l10n()->t("Note: The redirect will be active from the moment you press the submit button. Users currently logged in will not be thrown out but can't login again after logging out while the blackout is still in place."), ]); } -function blackout_addon_admin_post (&$a) { +function blackout_addon_admin_post (App $a) { $begindate = trim($_POST['startdate']); $enddate = trim($_POST['enddate']); $url = trim($_POST['rurl']); diff --git a/blockbot/blockbot.php b/blockbot/blockbot.php index 5a9cc4e3..e22dc471 100644 --- a/blockbot/blockbot.php +++ b/blockbot/blockbot.php @@ -19,12 +19,14 @@ use Friendica\Network\HTTPException\ForbiddenException; require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; -function blockbot_install() { +function blockbot_install() +{ Hook::register('init_1', __FILE__, 'blockbot_init_1'); } -function blockbot_addon_admin(&$a, &$o) { - $t = Renderer::getMarkupTemplate("admin.tpl", "addon/blockbot/"); +function blockbot_addon_admin(App $a, &$o) +{ + $t = Renderer::getMarkupTemplate('admin.tpl', 'addon/blockbot/'); $o = Renderer::replaceMacros($t, [ '$submit' => DI::l10n()->t('Save Settings'), @@ -34,13 +36,15 @@ function blockbot_addon_admin(&$a, &$o) { ]); } -function blockbot_addon_admin_post(&$a) { +function blockbot_addon_admin_post(App $a) +{ DI::config()->set('blockbot', 'good_crawlers', $_POST['good_crawlers'] ?? false); DI::config()->set('blockbot', 'block_gab', $_POST['block_gab'] ?? false); DI::config()->set('blockbot', 'training', $_POST['training'] ?? false); } -function blockbot_init_1(App $a) { +function blockbot_init_1(App $a) +{ if (empty($_SERVER['HTTP_USER_AGENT'])) { return; } diff --git a/buglink/buglink.php b/buglink/buglink.php index 9ea20b56..973d08ed 100644 --- a/buglink/buglink.php +++ b/buglink/buglink.php @@ -15,7 +15,7 @@ function buglink_install() Hook::register('page_end', 'addon/buglink/buglink.php', 'buglink_active'); } -function buglink_active(App $a, &$b) +function buglink_active(App $a, array &$b) { $b .= ''; } diff --git a/calc/calc.php b/calc/calc.php index 7019a80f..48371dd3 100644 --- a/calc/calc.php +++ b/calc/calc.php @@ -5,6 +5,8 @@ * Version: 1.0 * Author: Mike Macgirvin */ + +use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; @@ -12,19 +14,19 @@ function calc_install() { Hook::register('app_menu', 'addon/calc/calc.php', 'calc_app_menu'); } -function calc_app_menu($a,&$b) { +function calc_app_menu(App $a, array &$b) +{ $b['app_menu'][] = ''; } -function calc_module() {} +function calc_module() +{ +} - - - -function calc_init($a) { - -$x = <<< EOT +function calc_init(App $a) +{ + $x = <<< EOT ' . "\r\n"; DI::page()['htmlhead'] .= $addScriptTag; @@ -54,7 +55,7 @@ function openstreetmap_alterheader($a, &$navHtml) * @param mixed $a * @param array& $item */ -function openstreetmap_location($a, &$item) +function openstreetmap_location(App $a, &$item) { if (!(strlen($item['location']) || strlen($item['coord']))) { return; @@ -104,7 +105,7 @@ function openstreetmap_location($a, &$item) $item['html'] = ''.$title.''; } -function openstreetmap_get_coordinates($a, &$b) +function openstreetmap_get_coordinates(App $a, array &$b) { $nomserver = DI::config()->get('openstreetmap', 'nomserver', OSM_NOM); @@ -132,7 +133,7 @@ function openstreetmap_get_coordinates($a, &$b) } } -function openstreetmap_generate_named_map(&$a, &$b) +function openstreetmap_generate_named_map(App $a, array &$b) { openstreetmap_get_coordinates($a, $b); @@ -141,7 +142,7 @@ function openstreetmap_generate_named_map(&$a, &$b) } } -function openstreetmap_generate_map(&$a, &$b) +function openstreetmap_generate_map(App $a, array &$b) { $tmsserver = DI::config()->get('openstreetmap', 'tmsserver', OSM_TMS); @@ -177,7 +178,7 @@ function openstreetmap_generate_map(&$a, &$b) Logger::debug('generate_map: ' . $b['html']); } -function openstreetmap_addon_admin(&$a, &$o) +function openstreetmap_addon_admin(App $a, &$o) { $t = Renderer::getMarkupTemplate("admin.tpl", "addon/openstreetmap/"); $tmsserver = DI::config()->get('openstreetmap', 'tmsserver', OSM_TMS); @@ -199,7 +200,7 @@ function openstreetmap_addon_admin(&$a, &$o) ]); } -function openstreetmap_addon_admin_post(&$a) +function openstreetmap_addon_admin_post(App $a) { $urltms = ($_POST['tmsserver'] ?? '') ?: OSM_TMS; $urlnom = ($_POST['nomserver'] ?? '') ?: OSM_NOM; diff --git a/opmlexport/opmlexport.php b/opmlexport/opmlexport.php index c92b5960..a868fe35 100644 --- a/opmlexport/opmlexport.php +++ b/opmlexport/opmlexport.php @@ -82,10 +82,11 @@ function opmlexport_addon_settings(App $a, array &$data) } -function opmlexport_addon_settings_post(App $a, &$b) +function opmlexport_addon_settings_post(App $a, array &$b) { if (!local_user() || empty($_POST['opmlexport-submit'])) { return; } + opmlexport($a); } diff --git a/pageheader/pageheader.php b/pageheader/pageheader.php index 9dfe3c02..5b1bb1b7 100644 --- a/pageheader/pageheader.php +++ b/pageheader/pageheader.php @@ -52,7 +52,7 @@ function pageheader_addon_admin_post(App $a) } } -function pageheader_fetch(App $a, &$b) +function pageheader_fetch(App $a, array &$b) { if(file_exists('pageheader.html')){ $s = file_get_contents('pageheader.html'); diff --git a/piwik/piwik.php b/piwik/piwik.php index 8c4f91df..78d737d1 100644 --- a/piwik/piwik.php +++ b/piwik/piwik.php @@ -31,6 +31,7 @@ * setting. */ +use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; @@ -44,13 +45,13 @@ function piwik_install() { Logger::notice("installed piwik addon"); } -function piwik_load_config(\Friendica\App $a, ConfigFileLoader $loader) +function piwik_load_config(App $a, ConfigFileLoader $loader) { $a->getConfigCache()->load($loader->loadAddonConfig('piwik')); } -function piwik_analytics($a,&$b) { - +function piwik_analytics(App $a, array &$b) +{ /* * styling of every HTML block added by this addon is done in the * associated CSS file. We just have to tell Friendica to get it @@ -90,7 +91,7 @@ function piwik_analytics($a,&$b) { $b .= ""; } } -function piwik_addon_admin (&$a, &$o) { +function piwik_addon_admin (App $a, &$o) { $t = Renderer::getMarkupTemplate( "admin.tpl", "addon/piwik/" ); $o = Renderer::replaceMacros( $t, [ '$submit' => DI::l10n()->t('Save Settings'), @@ -100,7 +101,7 @@ function piwik_addon_admin (&$a, &$o) { '$async' => ['async', DI::l10n()->t('Asynchronous tracking'), DI::config()->get('piwik','async' ), ''], ]); } -function piwik_addon_admin_post (&$a) { +function piwik_addon_admin_post (App $a) { $url = trim($_POST['baseurl'] ?? ''); $id = trim($_POST['siteid'] ?? ''); $optout = trim($_POST['optout'] ?? ''); diff --git a/planets/planets.php b/planets/planets.php index ef88db13..6b7c2527 100644 --- a/planets/planets.php +++ b/planets/planets.php @@ -38,7 +38,7 @@ function planets_install() { Logger::notice("installed planets"); } -function planets_post_hook($a, &$item) { +function planets_post_hook(App $a, &$item) { /** * @@ -96,11 +96,13 @@ function planets_post_hook($a, &$item) { * */ -function planets_settings_post($a,$post) { - if(! local_user()) +function planets_settings_post(App $a,$post) { + if (! local_user()) { return; - if($_POST['planets-submit']) - DI::pConfig()->set(local_user(),'planets','enable',intval($_POST['planets'])); + } + if ($_POST['planets-submit']) { + DI::pConfig()->set(local_user(), 'planets', 'enable' ,intval($_POST['planets'])); + } } diff --git a/public_server/public_server.php b/public_server/public_server.php index c6e3c364..7221e1b1 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -32,7 +32,7 @@ function public_server_load_config(App $a, ConfigFileLoader $loader) $a->getConfigCache()->load($loader->loadAddonConfig('public_server')); } -function public_server_register_account($a, $b) +function public_server_register_account(App $a, $b) { $uid = $b; @@ -46,7 +46,7 @@ function public_server_register_account($a, $b) DBA::update('user', $fields, ['uid' => $uid]); } -function public_server_cron($a, $b) +function public_server_cron(App $a, $b) { Logger::notice("public_server: cron start"); @@ -99,7 +99,7 @@ function public_server_cron($a, $b) Logger::notice("public_server: cron end"); } -function public_server_enotify(&$a, &$b) +function public_server_enotify(App $a, array &$b) { if (!empty($b['params']) && $b['params']['type'] == Notification\Type::SYSTEM && !empty($b['params']['system_type']) && $b['params']['system_type'] === 'public_server_expire') { @@ -110,7 +110,7 @@ function public_server_enotify(&$a, &$b) } } -function public_server_login($a, $b) +function public_server_login(App $a, $b) { $days = DI::config()->get('public_server', 'expiredays'); if (!$days) { @@ -122,7 +122,7 @@ function public_server_login($a, $b) DBA::update('user', $fields, $condition); } -function public_server_addon_admin_post(&$a) +function public_server_addon_admin_post(App $a) { BaseModule::checkFormSecurityTokenRedirectOnError('/admin/addons/publicserver', 'publicserver'); $expiredays = trim($_POST['expiredays'] ?? ''); @@ -139,7 +139,7 @@ function public_server_addon_admin_post(&$a) DI::config()->set('public_server', 'flagpostsexpire', $flagpostsexpire); } -function public_server_addon_admin(&$a, &$o) +function public_server_addon_admin(App $a, &$o) { $token = BaseModule::getFormSecurityToken("publicserver"); $t = Renderer::getMarkupTemplate("admin.tpl", "addon/public_server"); diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 1253d376..82a5ef9b 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -59,7 +59,7 @@ function pumpio_content(App $a) return ''; } - require_once("mod/settings.php"); + require_once 'mod/settings.php'; settings_init($a); if (isset(DI::args()->getArgv()[1])) { @@ -77,7 +77,7 @@ function pumpio_content(App $a) return $o; } -function pumpio_check_item_notification($a, &$notification_data) +function pumpio_check_item_notification(App $a, &$notification_data) { $hostname = DI::pConfig()->get($notification_data["uid"], 'pumpio', 'host'); $username = DI::pConfig()->get($notification_data["uid"], "pumpio", "user"); @@ -686,7 +686,7 @@ function pumpio_cron(App $a, $b) Worker::add(PRIORITY_MEDIUM,"addon/pumpio/pumpio_sync.php"); } -function pumpio_fetchtimeline(App $a, $uid) +function pumpio_fetchtimeline(App $a, int $uid) { $ckey = DI::pConfig()->get($uid, 'pumpio', 'consumer_key'); $csecret = DI::pConfig()->get($uid, 'pumpio', 'consumer_secret'); @@ -1195,7 +1195,7 @@ function pumpio_dopost(App $a, $client, $uid, $self, $post, $own_id, $threadcomp return $top_item; } -function pumpio_fetchinbox(App $a, $uid) +function pumpio_fetchinbox(App $a, int $uid) { $ckey = DI::pConfig()->get($uid, 'pumpio', 'consumer_key'); $csecret = DI::pConfig()->get($uid, 'pumpio', 'consumer_secret'); @@ -1254,14 +1254,14 @@ function pumpio_fetchinbox(App $a, $uid) } while ($item = DBA::fetch($lastitems)) { - pumpio_fetchallcomments($a, $uid, $item["uri"]); + pumpio_fetchallcomments($a, $uid, $item['uri']); } DBA::close($lastitems); DI::pConfig()->set($uid, 'pumpio', 'last_id', $last_id); } -function pumpio_getallusers(App &$a, $uid) +function pumpio_getallusers(App &$a, int $uid) { $ckey = DI::pConfig()->get($uid, 'pumpio', 'consumer_key'); $csecret = DI::pConfig()->get($uid, 'pumpio', 'consumer_secret'); diff --git a/pumpio/pumpio_sync.php b/pumpio/pumpio_sync.php index 53a8da11..892b6ad4 100644 --- a/pumpio/pumpio_sync.php +++ b/pumpio/pumpio_sync.php @@ -2,10 +2,10 @@ use Friendica\Core\Logger; use Friendica\DI; -function pumpio_sync_run($argv, $argc) { +function pumpio_sync_run(array $argv, int $argc) { $a = Friendica\DI::app(); - require_once("addon/pumpio/pumpio.php"); + require_once 'addon/pumpio/pumpio.php'; if (function_exists('sys_getloadavg')) { $load = sys_getloadavg(); diff --git a/qcomment/qcomment.php b/qcomment/qcomment.php index aec4e9bf..8f059b1f 100644 --- a/qcomment/qcomment.php +++ b/qcomment/qcomment.php @@ -31,7 +31,7 @@ function qcomment_install() Hook::register('footer' , __FILE__, 'qcomment_footer'); } -function qcomment_footer(App $a, &$b) +function qcomment_footer(App $a, array &$b) { DI::page()->registerFooterScript('addon/qcomment/qcomment.js'); } @@ -57,7 +57,7 @@ function qcomment_addon_settings(App &$a, array &$data) ]; } -function qcomment_addon_settings_post(&$a, &$b) +function qcomment_addon_settings_post(App $a, array &$b) { if (! local_user()) { return; diff --git a/randplace/randplace.php b/randplace/randplace.php index 69ad4d52..f421bbb4 100644 --- a/randplace/randplace.php +++ b/randplace/randplace.php @@ -25,75 +25,67 @@ use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; -function randplace_install() { - - /** - * +function randplace_install() +{ + /* * Our demo addon will attach in three places. * The first is just prior to storing a local post. - * */ - Hook::register('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook'); - /** - * + /* * Then we'll attach into the addon settings page, and also the * settings post hook so that we can create and update * user preferences. - * */ - Hook::register('addon_settings', 'addon/randplace/randplace.php', 'randplace_settings'); Hook::register('addon_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); Logger::notice("installed randplace"); } - -function randplace_uninstall() { - - /** - * +function randplace_uninstall() +{ + /* * This function should undo anything that was done in name_install() * * Except hooks, they are all unregistered automatically and don't need to be unregistered manually. - * */ - Logger::notice("removed randplace"); } - - -function randplace_post_hook($a, &$item) { - - /** - * +function randplace_post_hook(App $a, &$item) +{ + /* * An item was posted on the local system. * We are going to look for specific items: * - A status post by a profile owner * - The profile owner must have allowed our addon - * */ - Logger::notice('randplace invoked'); - if(! local_user()) /* non-zero if this is a logged in user of this system */ + if (!local_user()) { + /* non-zero if this is a logged in user of this system */ return; + } - if(local_user() != $item['uid']) /* Does this person own the post? */ + if (local_user() != $item['uid']) { + /* Does this person own the post? */ return; + } - if($item['parent']) /* If the item has a parent, this is a comment or something else, not a status post. */ + if ($item['parent']) { + /* If the item has a parent, this is a comment or something else, not a status post. */ return; + } /* Retrieve our personal config setting */ $active = DI::pConfig()->get(local_user(), 'randplace', 'enable'); - if(! $active) + if (!$active) { return; + } /** * @@ -107,47 +99,43 @@ function randplace_post_hook($a, &$item) { $cities = []; $zones = timezone_identifiers_list(); foreach($zones as $zone) { - if((strpos($zone,'/')) && (! stristr($zone,'US/')) && (! stristr($zone,'Etc/'))) - $cities[] = str_replace('_', ' ',substr($zone,strpos($zone,'/') + 1)); + if ((strpos($zone, '/')) && (! stristr($zone, 'US/')) && (! stristr($zone, 'Etc/'))) { + $cities[] = str_replace('_', ' ',substr($zone, strpos($zone, '/') + 1)); + } } - if(! count($cities)) + if (!count($cities)) { return; + } + $city = array_rand($cities,1); $item['location'] = $cities[$city]; return; } - - - /** - * * Callback from the settings post function. * $post contains the $_POST array. * We will make sure we've got a valid user account * and if so set our configuration setting for this person. - * */ - -function randplace_settings_post($a,$post) { - if(! local_user()) +function randplace_settings_post(App $a, $post) +{ + if (!local_user()) { return; - if($_POST['randplace-submit']) - DI::pConfig()->set(local_user(),'randplace','enable',intval($_POST['randplace'])); + } + + if ($_POST['randplace-submit']) { + DI::pConfig()->set(local_user(), 'randplace', 'enable', intval($_POST['randplace'])); + } } /** - * * Called from the Addon Setting form. * Add our own settings info to the page. - * */ - - - function randplace_settings(App &$a, array &$data) { if(! local_user()) { diff --git a/rendertime/rendertime.php b/rendertime/rendertime.php index f433c3a4..e87f495b 100644 --- a/rendertime/rendertime.php +++ b/rendertime/rendertime.php @@ -7,6 +7,7 @@ * */ +use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; use Friendica\DI; @@ -16,14 +17,17 @@ function rendertime_install() { DI::config()->set('system', 'profiler', true); } -function rendertime_uninstall() { +function rendertime_uninstall() +{ DI::config()->delete('system', 'profiler'); } -function rendertime_init_1(&$a) { +function rendertime_init_1(App $a) +{ } -function rendertime_addon_admin(&$a, &$o) { +function rendertime_addon_admin(App $a, &$o) +{ $t = Renderer::getMarkupTemplate("admin.tpl", "addon/rendertime/"); $o = Renderer::replaceMacros($t, [ @@ -33,7 +37,8 @@ function rendertime_addon_admin(&$a, &$o) { ]); } -function rendertime_addon_admin_post(&$a) { +function rendertime_addon_admin_post(App $a) +{ DI::config()->set('rendertime', 'callstack', $_POST['callstack'] ?? false); DI::config()->set('rendertime', 'minimal_time', $_POST['minimal_time'] ?? 0); } diff --git a/s3_storage/s3_storage.php b/s3_storage/s3_storage.php index a60ec077..c4f68da9 100644 --- a/s3_storage/s3_storage.php +++ b/s3_storage/s3_storage.php @@ -14,7 +14,7 @@ use Friendica\DI; require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; -function s3_storage_install($a) +function s3_storage_install(App $a) { Hook::register('storage_instance' , __FILE__, 's3_storage_instance'); Hook::register('storage_config' , __FILE__, 's3_storage_config'); diff --git a/saml/saml.php b/saml/saml.php index 25a4ad37..dc25ae6d 100755 --- a/saml/saml.php +++ b/saml/saml.php @@ -5,6 +5,8 @@ * Version: 1.0 * Author: Ryan */ + +use Friendica\App; use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Logger; @@ -14,6 +16,7 @@ use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\User; use Friendica\Util\Strings; +use OneLogin\Saml2\Utils; require_once(__DIR__ . '/vendor/autoload.php'); @@ -77,12 +80,12 @@ function saml_install() Hook::register('footer', __FILE__, 'saml_footer'); } -function saml_head(&$a, &$b) +function saml_head(App $a, array &$b) { DI::page()->registerStylesheet(__DIR__ . '/saml.css'); } -function saml_footer(&$a, &$b) +function saml_footer(App $a, array &$b) { $fragment = addslashes(BBCode::convert(DI::config()->get('saml', 'settings_statement'))); $b .= <<get('saml', 'idp_cert'); } -function saml_sso_initiate(&$a, &$b) +function saml_sso_initiate(App $a, array &$b) { if (!saml_is_configured()) { Logger::warning('SAML SSO tried to trigger, but the SAML addon is not configured yet!'); @@ -166,13 +169,12 @@ function saml_sso_reply($a) DI::auth()->setForUser($a, $user); } - if (isset($_POST['RelayState']) - && \OneLogin\Saml2\Utils::getSelfURL() != $_POST['RelayState']) { + if (isset($_POST['RelayState']) && Utils::getSelfURL() != $_POST['RelayState']) { $auth->redirectTo($_POST['RelayState']); } } -function saml_slo_initiate(&$a, &$b) +function saml_slo_initiate(App $a, array &$b) { if (!saml_is_configured()) { Logger::warning('SAML SLO tried to trigger, but the SAML addon is not configured yet!'); @@ -223,7 +225,7 @@ function saml_input($key, $label, $description) ]; } -function saml_addon_admin(&$a, &$o) +function saml_addon_admin(App $a, &$o) { $form = saml_input( @@ -279,7 +281,7 @@ function saml_addon_admin(&$a, &$o) $o = Renderer::replaceMacros($t, $form); } -function saml_addon_admin_post(&$a) +function saml_addon_admin_post(App $a) { $set = function ($key) { $val = (!empty($_POST[$key]) ? trim($_POST[$key]) : ''); diff --git a/showmore/showmore.php b/showmore/showmore.php index 945277ae..e7d53f8a 100644 --- a/showmore/showmore.php +++ b/showmore/showmore.php @@ -45,7 +45,7 @@ function showmore_addon_settings(App &$a, array &$data) ]; } -function showmore_addon_settings_post(&$a, &$b) +function showmore_addon_settings_post(App $a, array &$b) { if (!local_user()) { return; diff --git a/showmore_dyn/showmore_dyn.php b/showmore_dyn/showmore_dyn.php index 39dfa489..71ef0dc7 100644 --- a/showmore_dyn/showmore_dyn.php +++ b/showmore_dyn/showmore_dyn.php @@ -24,12 +24,12 @@ function showmore_dyn_install() Hook::register('addon_settings_post', __FILE__, 'showmore_dyn_settings_post'); } -function showmore_dyn_head(App $a, &$b) +function showmore_dyn_head(App $a, array &$b) { DI::page()->registerStylesheet(__DIR__ . '/showmore_dyn.css'); } -function showmore_dyn_footer(App $a, &$b) +function showmore_dyn_footer(App $a, array &$b) { DI::page()->registerFooterScript(__DIR__ . '/showmore_dyn.js'); } diff --git a/smiley_pack/lang/smiley_pack_es/smiley_pack_es.php b/smiley_pack/lang/smiley_pack_es/smiley_pack_es.php index 329b7282..34ee7697 100644 --- a/smiley_pack/lang/smiley_pack_es/smiley_pack_es.php +++ b/smiley_pack/lang/smiley_pack_es/smiley_pack_es.php @@ -6,6 +6,8 @@ * Author: Thomas Willingham (based on Mike Macgirvin's Adult Smile template) * All smileys from sites offering them as Public Domain */ + +use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; @@ -13,7 +15,7 @@ function smiley_pack_es_install() { Hook::register('smilie', 'addon/smiley_pack_es/smiley_pack_es.php', 'smiley_pack_smilies_es'); } -function smiley_pack_smilies_es(&$a,&$b) { +function smiley_pack_smilies_es(App $a, array &$b) { #Smileys are split into various directories by the intended range of emotions. This is in case we get too big and need to modularise things. We can then cut and paste the right lines, move the right directory, and just change the name of the addon to happy_smilies or whatever. diff --git a/smiley_pack/lang/smiley_pack_fr/smiley_pack_fr.php b/smiley_pack/lang/smiley_pack_fr/smiley_pack_fr.php index bcefa7c3..9bdce46e 100644 --- a/smiley_pack/lang/smiley_pack_fr/smiley_pack_fr.php +++ b/smiley_pack/lang/smiley_pack_fr/smiley_pack_fr.php @@ -3,19 +3,23 @@ * Name: Smiley Pack (Français) * Description: Pack of smileys that make master too AOLish. * Version: 1.01 - * Author: Thomas Willingham (based on Mike Macgirvin's Adult Smile template) + * Author: Thomas Willingham (based on Mike Macgirvin's Adult Smile template) * All smileys from sites offering them as Public Domain - * - * + * + * */ + +use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; -function smiley_pack_fr_install() { +function smiley_pack_fr_install() +{ Hook::register('smilie', 'addon/smiley_pack_fr/smiley_pack_fr.php', 'smiley_pack_fr_smilies'); } -function smiley_pack_fr_smilies(&$a,&$b) { +function smiley_pack_fr_smilies(App $a, array &$b) +{ #Smileys are split into various directories by the intended range of emotions. This is in case we get too big and need to modularise things. We can then cut and paste the right lines, move the right directory, and just change the name of the addon to happy_smilies or whatever. @@ -392,7 +396,7 @@ function smiley_pack_fr_smilies(&$a,&$b) { $b['texts'][] = ':cognetête'; $b['icons'][] = '' . ':cognetête' . ''; - $b['texts'][] = ':barbu'; + $b['texts'][] = ':barbu'; $b['icons'][] = '' . ':barbu' . ''; $b['texts'][] = ':barbeblanche'; @@ -400,5 +404,4 @@ function smiley_pack_fr_smilies(&$a,&$b) { $b['texts'][] = ':tête'; $b['icons'][] = '' . ':tête' . ''; - } diff --git a/smiley_pack/smiley_pack.php b/smiley_pack/smiley_pack.php index c8c19b96..d457ea8c 100644 --- a/smiley_pack/smiley_pack.php +++ b/smiley_pack/smiley_pack.php @@ -8,6 +8,7 @@ * All smileys from sites offering them as Public Domain */ +use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; @@ -15,8 +16,8 @@ function smiley_pack_install() { Hook::register('smilie', 'addon/smiley_pack/smiley_pack.php', 'smiley_pack_smilies'); } -function smiley_pack_smilies(&$a,&$b) { - +function smiley_pack_smilies(App $a, array &$b) +{ #Smileys are split into various directories by the intended range of emotions. This is in case we get too big and need to modularise things. We can then cut and paste the right lines, move the right directory, and just change the name of the addon to happy_smilies or whatever. #Be careful with invocation strings. If you have a smiley called foo, and another called foobar, typing :foobar will call foo. Avoid this with clever naming, using ~ instead of : @@ -538,5 +539,4 @@ function smiley_pack_smilies(&$a,&$b) { $b['texts'][] = ':twitch:'; $b['icons'][] = '' . ':twitch:' . ''; - } diff --git a/smileybutton/smileybutton.php b/smileybutton/smileybutton.php index 1a1f1d63..abb71d3d 100644 --- a/smileybutton/smileybutton.php +++ b/smileybutton/smileybutton.php @@ -16,7 +16,7 @@ function smileybutton_install() Hook::register('jot_tool', 'addon/smileybutton/smileybutton.php', 'smileybutton_jot_tool'); } -function smileybutton_jot_tool(Friendica\App $a, &$b) +function smileybutton_jot_tool(Friendica\App $a, array &$b) { // Disable if theme is quattro // TODO add style for quattro diff --git a/smilies_adult/smilies_adult.php b/smilies_adult/smilies_adult.php index b55a0a2f..1994d915 100644 --- a/smilies_adult/smilies_adult.php +++ b/smilies_adult/smilies_adult.php @@ -8,6 +8,8 @@ * This is a template for how to extend the "smily" code. * */ + +use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; @@ -15,8 +17,8 @@ function smilies_adult_install() { Hook::register('smilie', 'addon/smilies_adult/smilies_adult.php', 'smilies_adult_smilies'); } -function smilies_adult_smilies(&$a,&$b) { - +function smilies_adult_smilies(App $a, array &$b) +{ $b['texts'][] = '(o)(o)'; $b['icons'][] = '' . '(o)(o)' . ''; @@ -34,5 +36,4 @@ function smilies_adult_smilies(&$a,&$b) { $b['texts'][] = ':finger'; $b['icons'][] = '' . ':finger' . ''; - -} \ No newline at end of file +} diff --git a/startpage/startpage.php b/startpage/startpage.php index d72effde..1e5edeea 100644 --- a/startpage/startpage.php +++ b/startpage/startpage.php @@ -18,7 +18,7 @@ function startpage_install() { Hook::register('addon_settings_post', 'addon/startpage/startpage.php', 'startpage_settings_post'); } -function startpage_home_init($a, $b) +function startpage_home_init(App $a, $b) { if (!local_user()) { return; @@ -40,7 +40,7 @@ function startpage_home_init($a, $b) * */ -function startpage_settings_post($a, $post) +function startpage_settings_post(App $a, $post) { if (!local_user()) { return; diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 66648893..a6b5fec8 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -373,7 +373,7 @@ function statusnet_hook_fork(App $a, array &$b) } } -function statusnet_post_local(App $a, &$b) +function statusnet_post_local(App $a, array &$b) { if ($b['edit']) { return; @@ -430,7 +430,7 @@ function statusnet_action(App $a, $uid, $pid, $action) Logger::info('statusnet_action "' . $action . '" send, result: ' . print_r($result, true)); } -function statusnet_post_hook(App $a, &$b) +function statusnet_post_hook(App $a, array &$b) { /** * Post to GNU Social @@ -661,7 +661,7 @@ function statusnet_addon_admin(App $a, &$o) ]); } -function statusnet_prepare_body(App $a, &$b) +function statusnet_prepare_body(App $a, array &$b) { if ($b['item']['network'] != Protocol::STATUSNET) { return; @@ -753,7 +753,7 @@ function statusnet_cron(App $a, $b) DI::config()->set('statusnet', 'last_poll', time()); } -function statusnet_fetchtimeline(App $a, $uid) +function statusnet_fetchtimeline(App $a, int $uid) { $ckey = DI::pConfig()->get($uid, 'statusnet', 'consumerkey'); $csecret = DI::pConfig()->get($uid, 'statusnet', 'consumersecret'); @@ -1011,7 +1011,7 @@ function statusnet_fetchuser(App $a, $uid, $screen_name = '', $user_id = '') return $contact_id; } -function statusnet_createpost(App $a, $uid, $post, $self, $create_user, $only_existing_contact) +function statusnet_createpost(App $a, int $uid, $post, $self, $create_user, bool $only_existing_contact) { Logger::info('statusnet_createpost: start'); @@ -1415,7 +1415,7 @@ function statusnet_convertmsg(App $a, $body) return $body; } -function statusnet_fetch_own_contact(App $a, $uid) +function statusnet_fetch_own_contact(App $a, int $uid) { $ckey = DI::pConfig()->get($uid, 'statusnet', 'consumerkey'); $csecret = DI::pConfig()->get($uid, 'statusnet', 'consumersecret'); @@ -1450,7 +1450,7 @@ function statusnet_fetch_own_contact(App $a, $uid) return $contact_id; } -function statusnet_is_retweet(App $a, $uid, $body) +function statusnet_is_retweet(App $a, int $uid, string $body) { $body = trim($body); diff --git a/superblock/superblock.php b/superblock/superblock.php index 5c5cfcc3..3a1422ce 100644 --- a/superblock/superblock.php +++ b/superblock/superblock.php @@ -42,7 +42,7 @@ function superblock_addon_settings(App &$a, array &$data) ]; } -function superblock_addon_settings_post(&$a, &$b) +function superblock_addon_settings_post(App $a, array &$b) { if (!local_user()) { return; @@ -53,7 +53,8 @@ function superblock_addon_settings_post(&$a, &$b) } } -function superblock_enotify_store(&$a,&$b) { +function superblock_enotify_store(App $a, array &$b) +{ if (empty($b['uid'])) { return; } @@ -78,6 +79,7 @@ function superblock_enotify_store(&$a,&$b) { } } } + if ($found) { // Empty out the fields $b = []; @@ -85,7 +87,7 @@ function superblock_enotify_store(&$a,&$b) { } -function superblock_conversation_start(&$a, &$b) +function superblock_conversation_start(App $a, array &$b) { if (!local_user()) { return; @@ -95,8 +97,8 @@ function superblock_conversation_start(&$a, &$b) if ($words) { $a->data['superblock'] = explode(',', $words); } - DI::page()['htmlhead'] .= <<< EOT + DI::page()['htmlhead'] .= <<< EOT - EOT; } -function superblock_item_photo_menu(&$a, &$b) +function superblock_item_photo_menu(App $a, array &$b) { if (!local_user() || $b['item']['self']) { return; @@ -132,7 +133,7 @@ function superblock_item_photo_menu(&$a, &$b) function superblock_module() {} -function superblock_init(&$a) +function superblock_init(App $a) { if (!local_user()) { return; diff --git a/testdrive/testdrive.php b/testdrive/testdrive.php index 042edcc9..94e63dda 100644 --- a/testdrive/testdrive.php +++ b/testdrive/testdrive.php @@ -16,14 +16,13 @@ use Friendica\Model\User; use Friendica\Core\Config\Util\ConfigFileLoader; use Friendica\Util\DateTimeFormat; -function testdrive_install() { - +function testdrive_install() +{ Hook::register('load_config', 'addon/testdrive/testdrive.php', 'testdrive_load_config'); Hook::register('register_account', 'addon/testdrive/testdrive.php', 'testdrive_register_account'); Hook::register('cron', 'addon/testdrive/testdrive.php', 'testdrive_cron'); Hook::register('enotify','addon/testdrive/testdrive.php', 'testdrive_enotify'); Hook::register('globaldir_update','addon/testdrive/testdrive.php', 'testdrive_globaldir_update'); - } function testdrive_load_config(App $a, ConfigFileLoader $loader) @@ -31,26 +30,30 @@ function testdrive_load_config(App $a, ConfigFileLoader $loader) $a->getConfigCache()->load($loader->loadAddonConfig('testdrive')); } -function testdrive_globaldir_update($a,&$b) { +function testdrive_globaldir_update(App $a, array &$b) +{ $b['url'] = ''; } -function testdrive_register_account($a,$b) { - +function testdrive_register_account(App $a, $b) +{ $uid = $b; $days = DI::config()->get('testdrive','expiredays'); - if(! $days) + if (!$days) { return; + } DBA::update('user', ['account_expires_on' => DateTimeFormat::convert('now +' . $days . ' days')], ['uid' => $uid]); -}; +} -function testdrive_cron($a,$b) { +function testdrive_cron(App $a, $b) +{ $users = DBA::selectToArray('user', [], ["`account_expires_on` < ? AND `expire_notification_sent` <= ?", - DateTimeFormat::utc('now + 5 days'), DBA::NULL_DATETIME]); - foreach($users as $rr) { + DateTimeFormat::utc('now + 5 days'), DBA::NULL_DATETIME]); + + foreach ($users as $rr) { DI::notify()->createFromArray([ 'type' => Notification\Type::SYSTEM, 'uid' => $rr['uid'], @@ -69,12 +72,13 @@ function testdrive_cron($a,$b) { } } -function testdrive_enotify(&$a, &$b) { - if (!empty($b['params']) && $b['params']['type'] == Notification\Type::SYSTEM +function testdrive_enotify(App $a, array &$b) +{ + if (!empty($b['params']) && $b['params']['type'] == Notification\Type::SYSTEM && !empty($b['params']['system_type']) && $b['params']['system_type'] === 'testdrive_expire') { - $b['itemlink'] = DI::baseUrl()->get(); - $b['epreamble'] = $b['preamble'] = DI::l10n()->t('Your account on %s will expire in a few days.', DI::config()->get('system', 'sitename')); - $b['subject'] = DI::l10n()->t('Your Friendica test account is about to expire.'); - $b['body'] = DI::l10n()->t("Hi %1\$s,\n\nYour test account on %2\$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at https://friendi.ca.", $b['params']['to_name'], "[url=".DI::config()->get('system', 'url')."]".DI::config()->get('config', 'sitename')."[/url]", Search::getGlobalDirectory()); - } + $b['itemlink'] = DI::baseUrl()->get(); + $b['epreamble'] = $b['preamble'] = DI::l10n()->t('Your account on %s will expire in a few days.', DI::config()->get('system', 'sitename')); + $b['subject'] = DI::l10n()->t('Your Friendica test account is about to expire.'); + $b['body'] = DI::l10n()->t("Hi %1\$s,\n\nYour test account on %2\$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at https://friendi.ca.", $b['params']['to_name'], "[url=".DI::config()->get('system', 'url')."]".DI::config()->get('config', 'sitename')."[/url]", Search::getGlobalDirectory()); + } } diff --git a/tictac/tictac.php b/tictac/tictac.php index 4d3a46b4..fb746f94 100644 --- a/tictac/tictac.php +++ b/tictac/tictac.php @@ -5,27 +5,27 @@ * Version: 1.0 * Author: Mike Macgirvin */ + +use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; -function tictac_install() { +function tictac_install() +{ Hook::register('app_menu', 'addon/tictac/tictac.php', 'tictac_app_menu'); } -function tictac_app_menu($a,&$b) { +function tictac_app_menu(App $a, array &$b) +{ $b['app_menu'][] = ''; } - -function tictac_module() { +function tictac_module() +{ return; } - - - - -function tictac_content(&$a) { +function tictac_content(App $a) { $o = ''; diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index 5ae0dd1b..a66634d4 100644 --- a/tumblr/tumblr.php +++ b/tumblr/tumblr.php @@ -257,7 +257,7 @@ function tumblr_settings_post(App $a, array &$b) } } -function tumblr_hook_fork(&$a, &$b) +function tumblr_hook_fork(App $a, array &$b) { if ($b['name'] != 'notifier_normal') { return; diff --git a/twitter/twitter.php b/twitter/twitter.php index 458677ce..fe5ee4fd 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -1149,7 +1149,7 @@ function twitter_parse_link(App $a, array &$b) * * @return array item data to be posted */ -function twitter_do_mirrorpost(App $a, $uid, $post) +function twitter_do_mirrorpost(App $a, int $uid, $post) { $datarray['uid'] = $uid; $datarray['extid'] = 'twitter::' . $post->id; @@ -1196,7 +1196,7 @@ function twitter_do_mirrorpost(App $a, $uid, $post) return $datarray; } -function twitter_fetchtimeline(App $a, $uid) +function twitter_fetchtimeline(App $a, int $uid) { $ckey = DI::config()->get('twitter', 'consumerkey'); $csecret = DI::config()->get('twitter', 'consumersecret'); @@ -1740,7 +1740,7 @@ function twitter_media_entities($post, array &$postarray, int $uriid = -1) * @param integer $uriid URI Id used to store tags. 0 = create a new one; -1 = don't store tags for this post. * @return array item array */ -function twitter_createpost(App $a, $uid, $post, array $self, $create_user, $only_existing_contact, $noquote, int $uriid = 0) +function twitter_createpost(App $a, int $uid, $post, array $self, $create_user, bool $only_existing_contact, $noquote, int $uriid = 0) { $postarray = []; $postarray['network'] = Protocol::TWITTER; @@ -1951,7 +1951,7 @@ function twitter_store_tags(int $uriid, array $taglist) } } -function twitter_fetchparentposts(App $a, $uid, $post, TwitterOAuth $connection, array $self) +function twitter_fetchparentposts(App $a, int $uid, $post, TwitterOAuth $connection, array $self) { Logger::info('Fetching parent posts', ['user' => $uid, 'post' => $post->id_str]); @@ -2003,7 +2003,7 @@ function twitter_fetchparentposts(App $a, $uid, $post, TwitterOAuth $connection, } } -function twitter_fetchhometimeline(App $a, $uid) +function twitter_fetchhometimeline(App $a, int $uid) { $ckey = DI::config()->get('twitter', 'consumerkey'); $csecret = DI::config()->get('twitter', 'consumersecret'); @@ -2192,7 +2192,7 @@ function twitter_fetchhometimeline(App $a, $uid) Logger::info('Last mentions ID for user ' . $uid . ' is now ' . $lastid); } -function twitter_fetch_own_contact(App $a, $uid) +function twitter_fetch_own_contact(App $a, int $uid) { $ckey = DI::config()->get('twitter', 'consumerkey'); $csecret = DI::config()->get('twitter', 'consumersecret'); @@ -2228,7 +2228,7 @@ function twitter_fetch_own_contact(App $a, $uid) return $contact_id; } -function twitter_is_retweet(App $a, $uid, $body) +function twitter_is_retweet(App $a, int $uid, string $body) { $body = trim($body); @@ -2283,7 +2283,7 @@ function twitter_retweet(int $uid, int $id, int $item_id = 0) return !isset($result->errors); } -function twitter_update_mentions($body) +function twitter_update_mentions(string $body): string { $URLSearchString = '^\[\]'; $return = preg_replace_callback( @@ -2303,7 +2303,7 @@ function twitter_update_mentions($body) return $return; } -function twitter_convert_share(array $attributes, array $author_contact, $content, $is_quote_share) +function twitter_convert_share(array $attributes, array $author_contact, string $content, bool $is_quote_share): string { if (empty($author_contact)) { return $content . "\n\n" . $attributes['link']; diff --git a/unicode_smilies/unicode_smilies.php b/unicode_smilies/unicode_smilies.php index 45c2351a..1ff405ba 100644 --- a/unicode_smilies/unicode_smilies.php +++ b/unicode_smilies/unicode_smilies.php @@ -6,6 +6,8 @@ * Author: Michael Vogel * Author: Matthias Ebers */ + +use Friendica\App; use Friendica\Content\Smilies; use Friendica\Core\Hook; @@ -13,7 +15,8 @@ function unicode_smilies_install() { Hook::register('smilie', 'addon/unicode_smilies/unicode_smilies.php', 'unicode_smilies_smilies'); } -function unicode_smilies_smilies(&$a,&$b) { +function unicode_smilies_smilies(App $a, array &$b) +{ Smilies::add($b, ':-)', '😀'); Smilies::add($b, ':)', '😀'); Smilies::add($b, ':-(', '🙁'); diff --git a/viewsrc/viewsrc.php b/viewsrc/viewsrc.php index 445d8ee5..48029835 100644 --- a/viewsrc/viewsrc.php +++ b/viewsrc/viewsrc.php @@ -6,6 +6,8 @@ * Author: Mike Macgirvin * */ + +use Friendica\App; use Friendica\Core\Hook; use Friendica\DI; @@ -14,7 +16,7 @@ function viewsrc_install() { Hook::register('page_end', 'addon/viewsrc/viewsrc.php', 'viewsrc_page_end'); } -function viewsrc_page_end(&$a, &$o){ +function viewsrc_page_end(App $a, &$o){ DI::page()['htmlhead'] .= <<< EOS '); + } else { // js format + static::writeOutput(self::generateScript()); + } + static::resetStatic(); + } + } + + public function close(): void + { + self::resetStatic(); + } + + public function reset(): void + { + parent::reset(); + + self::resetStatic(); + } + + /** + * Forget all logged records + */ + public static function resetStatic(): void + { + static::$records = []; + } + + /** + * Wrapper for register_shutdown_function to allow overriding + */ + protected function registerShutdownFunction(): void + { + if (PHP_SAPI !== 'cli') { + register_shutdown_function(['Monolog\Handler\BrowserConsoleHandler', 'send']); + } + } + + /** + * Wrapper for echo to allow overriding + */ + protected static function writeOutput(string $str): void + { + echo $str; + } + + /** + * Checks the format of the response + * + * If Content-Type is set to application/javascript or text/javascript -> js + * If Content-Type is set to text/html, or is unset -> html + * If Content-Type is anything else -> unknown + * + * @return string One of 'js', 'html' or 'unknown' + * @phpstan-return self::FORMAT_* + */ + protected static function getResponseFormat(): string + { + // Check content type + foreach (headers_list() as $header) { + if (stripos($header, 'content-type:') === 0) { + return static::getResponseFormatFromContentType($header); + } + } + + return self::FORMAT_HTML; + } + + /** + * @return string One of 'js', 'html' or 'unknown' + * @phpstan-return self::FORMAT_* + */ + protected static function getResponseFormatFromContentType(string $contentType): string + { + // This handler only works with HTML and javascript outputs + // text/javascript is obsolete in favour of application/javascript, but still used + if (stripos($contentType, 'application/javascript') !== false || stripos($contentType, 'text/javascript') !== false) { + return self::FORMAT_JS; + } + + if (stripos($contentType, 'text/html') !== false) { + return self::FORMAT_HTML; + } + + return self::FORMAT_UNKNOWN; + } + + private static function generateScript(): string + { + $script = []; + foreach (static::$records as $record) { + $context = self::dump('Context', $record->context); + $extra = self::dump('Extra', $record->extra); + + if (\count($context) === 0 && \count($extra) === 0) { + $script[] = self::call_array('log', self::handleStyles($record->formatted)); + } else { + $script = array_merge( + $script, + [self::call_array('groupCollapsed', self::handleStyles($record->formatted))], + $context, + $extra, + [self::call('groupEnd')] + ); + } + } + + return "(function (c) {if (c && c.groupCollapsed) {\n" . implode("\n", $script) . "\n}})(console);"; + } + + /** + * @return string[] + */ + private static function handleStyles(string $formatted): array + { + $args = []; + $format = '%c' . $formatted; + preg_match_all('/\[\[(.*?)\]\]\{([^}]*)\}/s', $format, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + + foreach (array_reverse($matches) as $match) { + $args[] = '"font-weight: normal"'; + $args[] = self::quote(self::handleCustomStyles($match[2][0], $match[1][0])); + + $pos = $match[0][1]; + $format = Utils::substr($format, 0, $pos) . '%c' . $match[1][0] . '%c' . Utils::substr($format, $pos + strlen($match[0][0])); + } + + $args[] = self::quote('font-weight: normal'); + $args[] = self::quote($format); + + return array_reverse($args); + } + + private static function handleCustomStyles(string $style, string $string): string + { + static $colors = ['blue', 'green', 'red', 'magenta', 'orange', 'black', 'grey']; + static $labels = []; + + $style = preg_replace_callback('/macro\s*:(.*?)(?:;|$)/', function (array $m) use ($string, &$colors, &$labels) { + if (trim($m[1]) === 'autolabel') { + // Format the string as a label with consistent auto assigned background color + if (!isset($labels[$string])) { + $labels[$string] = $colors[count($labels) % count($colors)]; + } + $color = $labels[$string]; + + return "background-color: $color; color: white; border-radius: 3px; padding: 0 2px 0 2px"; + } + + return $m[1]; + }, $style); + + if (null === $style) { + $pcreErrorCode = preg_last_error(); + + throw new \RuntimeException('Failed to run preg_replace_callback: ' . $pcreErrorCode . ' / ' . Utils::pcreLastErrorMessage($pcreErrorCode)); + } + + return $style; + } + + /** + * @param mixed[] $dict + * @return mixed[] + */ + private static function dump(string $title, array $dict): array + { + $script = []; + $dict = array_filter($dict); + if (\count($dict) === 0) { + return $script; + } + $script[] = self::call('log', self::quote('%c%s'), self::quote('font-weight: bold'), self::quote($title)); + foreach ($dict as $key => $value) { + $value = json_encode($value); + if (empty($value)) { + $value = self::quote(''); + } + $script[] = self::call('log', self::quote('%s: %o'), self::quote((string) $key), $value); + } + + return $script; + } + + private static function quote(string $arg): string + { + return '"' . addcslashes($arg, "\"\n\\") . '"'; + } + + /** + * @param mixed $args + */ + private static function call(...$args): string + { + $method = array_shift($args); + if (!is_string($method)) { + throw new \UnexpectedValueException('Expected the first arg to be a string, got: '.var_export($method, true)); + } + + return self::call_array($method, $args); + } + + /** + * @param mixed[] $args + */ + private static function call_array(string $method, array $args): string + { + return 'c.' . $method . '(' . implode(', ', $args) . ');'; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php new file mode 100644 index 00000000..ff89faa8 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php @@ -0,0 +1,165 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\ResettableInterface; +use Monolog\Formatter\FormatterInterface; +use Monolog\LogRecord; + +/** + * Buffers all records until closing the handler and then pass them as batch. + * + * This is useful for a MailHandler to send only one mail per request instead of + * sending one per log message. + * + * @author Christophe Coevoet + */ +class BufferHandler extends AbstractHandler implements ProcessableHandlerInterface, FormattableHandlerInterface +{ + use ProcessableHandlerTrait; + + protected HandlerInterface $handler; + + protected int $bufferSize = 0; + + protected int $bufferLimit; + + protected bool $flushOnOverflow; + + /** @var LogRecord[] */ + protected array $buffer = []; + + protected bool $initialized = false; + + /** + * @param HandlerInterface $handler Handler. + * @param int $bufferLimit How many entries should be buffered at most, beyond that the oldest items are removed from the buffer. + * @param bool $flushOnOverflow If true, the buffer is flushed when the max size has been reached, by default oldest entries are discarded + */ + public function __construct(HandlerInterface $handler, int $bufferLimit = 0, int|string|Level $level = Level::Debug, bool $bubble = true, bool $flushOnOverflow = false) + { + parent::__construct($level, $bubble); + $this->handler = $handler; + $this->bufferLimit = $bufferLimit; + $this->flushOnOverflow = $flushOnOverflow; + } + + /** + * @inheritDoc + */ + public function handle(LogRecord $record): bool + { + if ($record->level->isLowerThan($this->level)) { + return false; + } + + if (!$this->initialized) { + // __destructor() doesn't get called on Fatal errors + register_shutdown_function([$this, 'close']); + $this->initialized = true; + } + + if ($this->bufferLimit > 0 && $this->bufferSize === $this->bufferLimit) { + if ($this->flushOnOverflow) { + $this->flush(); + } else { + array_shift($this->buffer); + $this->bufferSize--; + } + } + + if (\count($this->processors) > 0) { + $record = $this->processRecord($record); + } + + $this->buffer[] = $record; + $this->bufferSize++; + + return false === $this->bubble; + } + + public function flush(): void + { + if ($this->bufferSize === 0) { + return; + } + + $this->handler->handleBatch($this->buffer); + $this->clear(); + } + + public function __destruct() + { + // suppress the parent behavior since we already have register_shutdown_function() + // to call close(), and the reference contained there will prevent this from being + // GC'd until the end of the request + } + + /** + * @inheritDoc + */ + public function close(): void + { + $this->flush(); + + $this->handler->close(); + } + + /** + * Clears the buffer without flushing any messages down to the wrapped handler. + */ + public function clear(): void + { + $this->bufferSize = 0; + $this->buffer = []; + } + + public function reset(): void + { + $this->flush(); + + parent::reset(); + + $this->resetProcessors(); + + if ($this->handler instanceof ResettableInterface) { + $this->handler->reset(); + } + } + + /** + * @inheritDoc + */ + public function setFormatter(FormatterInterface $formatter): HandlerInterface + { + if ($this->handler instanceof FormattableHandlerInterface) { + $this->handler->setFormatter($formatter); + + return $this; + } + + throw new \UnexpectedValueException('The nested handler of type '.get_class($this->handler).' does not support formatters.'); + } + + /** + * @inheritDoc + */ + public function getFormatter(): FormatterInterface + { + if ($this->handler instanceof FormattableHandlerInterface) { + return $this->handler->getFormatter(); + } + + throw new \UnexpectedValueException('The nested handler of type '.get_class($this->handler).' does not support formatters.'); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php new file mode 100644 index 00000000..3742d47d --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php @@ -0,0 +1,189 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\ChromePHPFormatter; +use Monolog\Formatter\FormatterInterface; +use Monolog\Level; +use Monolog\Utils; +use Monolog\LogRecord; +use Monolog\DateTimeImmutable; + +/** + * Handler sending logs to the ChromePHP extension (http://www.chromephp.com/) + * + * This also works out of the box with Firefox 43+ + * + * @author Christophe Coevoet + */ +class ChromePHPHandler extends AbstractProcessingHandler +{ + use WebRequestRecognizerTrait; + + /** + * Version of the extension + */ + protected const VERSION = '4.0'; + + /** + * Header name + */ + protected const HEADER_NAME = 'X-ChromeLogger-Data'; + + /** + * Regular expression to detect supported browsers (matches any Chrome, or Firefox 43+) + */ + protected const USER_AGENT_REGEX = '{\b(?:Chrome/\d+(?:\.\d+)*|HeadlessChrome|Firefox/(?:4[3-9]|[5-9]\d|\d{3,})(?:\.\d)*)\b}'; + + protected static bool $initialized = false; + + /** + * Tracks whether we sent too much data + * + * Chrome limits the headers to 4KB, so when we sent 3KB we stop sending + */ + protected static bool $overflowed = false; + + /** @var mixed[] */ + protected static array $json = [ + 'version' => self::VERSION, + 'columns' => ['label', 'log', 'backtrace', 'type'], + 'rows' => [], + ]; + + protected static bool $sendHeaders = true; + + public function __construct(int|string|Level $level = Level::Debug, bool $bubble = true) + { + parent::__construct($level, $bubble); + if (!function_exists('json_encode')) { + throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s ChromePHPHandler'); + } + } + + /** + * @inheritDoc + */ + public function handleBatch(array $records): void + { + if (!$this->isWebRequest()) { + return; + } + + $messages = []; + + foreach ($records as $record) { + if ($record->level < $this->level) { + continue; + } + + $message = $this->processRecord($record); + $messages[] = $message; + } + + if (\count($messages) > 0) { + $messages = $this->getFormatter()->formatBatch($messages); + self::$json['rows'] = array_merge(self::$json['rows'], $messages); + $this->send(); + } + } + + /** + * @inheritDoc + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new ChromePHPFormatter(); + } + + /** + * Creates & sends header for a record + * + * @see sendHeader() + * @see send() + */ + protected function write(LogRecord $record): void + { + if (!$this->isWebRequest()) { + return; + } + + self::$json['rows'][] = $record->formatted; + + $this->send(); + } + + /** + * Sends the log header + * + * @see sendHeader() + */ + protected function send(): void + { + if (self::$overflowed || !self::$sendHeaders) { + return; + } + + if (!self::$initialized) { + self::$initialized = true; + + self::$sendHeaders = $this->headersAccepted(); + if (!self::$sendHeaders) { + return; + } + + self::$json['request_uri'] = $_SERVER['REQUEST_URI'] ?? ''; + } + + $json = Utils::jsonEncode(self::$json, Utils::DEFAULT_JSON_FLAGS & ~JSON_UNESCAPED_UNICODE, true); + $data = base64_encode($json); + if (strlen($data) > 3 * 1024) { + self::$overflowed = true; + + $record = new LogRecord( + message: 'Incomplete logs, chrome header size limit reached', + level: Level::Warning, + channel: 'monolog', + datetime: new DateTimeImmutable(true), + ); + self::$json['rows'][count(self::$json['rows']) - 1] = $this->getFormatter()->format($record); + $json = Utils::jsonEncode(self::$json, Utils::DEFAULT_JSON_FLAGS & ~JSON_UNESCAPED_UNICODE, true); + $data = base64_encode($json); + } + + if (trim($data) !== '') { + $this->sendHeader(static::HEADER_NAME, $data); + } + } + + /** + * Send header string to the client + */ + protected function sendHeader(string $header, string $content): void + { + if (!headers_sent() && self::$sendHeaders) { + header(sprintf('%s: %s', $header, $content)); + } + } + + /** + * Verifies if the headers are accepted by the current user agent + */ + protected function headersAccepted(): bool + { + if (!isset($_SERVER['HTTP_USER_AGENT'])) { + return false; + } + + return preg_match(static::USER_AGENT_REGEX, $_SERVER['HTTP_USER_AGENT']) === 1; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php new file mode 100644 index 00000000..8d9c10e7 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php @@ -0,0 +1,97 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FormatterInterface; +use Monolog\Formatter\JsonFormatter; +use Monolog\Level; +use Monolog\LogRecord; + +/** + * CouchDB handler + * + * @author Markus Bachmann + * @phpstan-type Options array{ + * host: string, + * port: int, + * dbname: string, + * username: string|null, + * password: string|null + * } + * @phpstan-type InputOptions array{ + * host?: string, + * port?: int, + * dbname?: string, + * username?: string|null, + * password?: string|null + * } + */ +class CouchDBHandler extends AbstractProcessingHandler +{ + /** + * @var mixed[] + * @phpstan-var Options + */ + private array $options; + + /** + * @param mixed[] $options + * + * @phpstan-param InputOptions $options + */ + public function __construct(array $options = [], int|string|Level $level = Level::Debug, bool $bubble = true) + { + $this->options = array_merge([ + 'host' => 'localhost', + 'port' => 5984, + 'dbname' => 'logger', + 'username' => null, + 'password' => null, + ], $options); + + parent::__construct($level, $bubble); + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + $basicAuth = null; + if (null !== $this->options['username'] && null !== $this->options['password']) { + $basicAuth = sprintf('%s:%s@', $this->options['username'], $this->options['password']); + } + + $url = 'http://'.$basicAuth.$this->options['host'].':'.$this->options['port'].'/'.$this->options['dbname']; + $context = stream_context_create([ + 'http' => [ + 'method' => 'POST', + 'content' => $record->formatted, + 'ignore_errors' => true, + 'max_redirects' => 0, + 'header' => 'Content-type: application/json', + ], + ]); + + if (false === @file_get_contents($url, false, $context)) { + throw new \RuntimeException(sprintf('Could not connect to %s', $url)); + } + } + + /** + * @inheritDoc + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new JsonFormatter(JsonFormatter::BATCH_MODE_JSON, false); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php new file mode 100644 index 00000000..8388f5ad --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php @@ -0,0 +1,167 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\Utils; +use Monolog\LogRecord; + +/** + * Logs to Cube. + * + * @link https://github.com/square/cube/wiki + * @author Wan Chen + * @deprecated Since 2.8.0 and 3.2.0, Cube appears abandoned and thus we will drop this handler in Monolog 4 + */ +class CubeHandler extends AbstractProcessingHandler +{ + private ?\Socket $udpConnection = null; + private ?\CurlHandle $httpConnection = null; + private string $scheme; + private string $host; + private int $port; + /** @var string[] */ + private array $acceptedSchemes = ['http', 'udp']; + + /** + * Create a Cube handler + * + * @throws \UnexpectedValueException when given url is not a valid url. + * A valid url must consist of three parts : protocol://host:port + * Only valid protocols used by Cube are http and udp + */ + public function __construct(string $url, int|string|Level $level = Level::Debug, bool $bubble = true) + { + $urlInfo = parse_url($url); + + if ($urlInfo === false || !isset($urlInfo['scheme'], $urlInfo['host'], $urlInfo['port'])) { + throw new \UnexpectedValueException('URL "'.$url.'" is not valid'); + } + + if (!in_array($urlInfo['scheme'], $this->acceptedSchemes, true)) { + throw new \UnexpectedValueException( + 'Invalid protocol (' . $urlInfo['scheme'] . ').' + . ' Valid options are ' . implode(', ', $this->acceptedSchemes) + ); + } + + $this->scheme = $urlInfo['scheme']; + $this->host = $urlInfo['host']; + $this->port = $urlInfo['port']; + + parent::__construct($level, $bubble); + } + + /** + * Establish a connection to an UDP socket + * + * @throws \LogicException when unable to connect to the socket + * @throws MissingExtensionException when there is no socket extension + */ + protected function connectUdp(): void + { + if (!extension_loaded('sockets')) { + throw new MissingExtensionException('The sockets extension is required to use udp URLs with the CubeHandler'); + } + + $udpConnection = socket_create(AF_INET, SOCK_DGRAM, 0); + if (false === $udpConnection) { + throw new \LogicException('Unable to create a socket'); + } + + $this->udpConnection = $udpConnection; + if (!socket_connect($this->udpConnection, $this->host, $this->port)) { + throw new \LogicException('Unable to connect to the socket at ' . $this->host . ':' . $this->port); + } + } + + /** + * Establish a connection to an http server + * + * @throws \LogicException when unable to connect to the socket + * @throws MissingExtensionException when no curl extension + */ + protected function connectHttp(): void + { + if (!extension_loaded('curl')) { + throw new MissingExtensionException('The curl extension is required to use http URLs with the CubeHandler'); + } + + $httpConnection = curl_init('http://'.$this->host.':'.$this->port.'/1.0/event/put'); + if (false === $httpConnection) { + throw new \LogicException('Unable to connect to ' . $this->host . ':' . $this->port); + } + + $this->httpConnection = $httpConnection; + curl_setopt($this->httpConnection, CURLOPT_CUSTOMREQUEST, "POST"); + curl_setopt($this->httpConnection, CURLOPT_RETURNTRANSFER, true); + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + $date = $record->datetime; + + $data = ['time' => $date->format('Y-m-d\TH:i:s.uO')]; + $context = $record->context; + + if (isset($context['type'])) { + $data['type'] = $context['type']; + unset($context['type']); + } else { + $data['type'] = $record->channel; + } + + $data['data'] = $context; + $data['data']['level'] = $record->level; + + if ($this->scheme === 'http') { + $this->writeHttp(Utils::jsonEncode($data)); + } else { + $this->writeUdp(Utils::jsonEncode($data)); + } + } + + private function writeUdp(string $data): void + { + if (null === $this->udpConnection) { + $this->connectUdp(); + } + + if (null === $this->udpConnection) { + throw new \LogicException('No UDP socket could be opened'); + } + + socket_send($this->udpConnection, $data, strlen($data), 0); + } + + private function writeHttp(string $data): void + { + if (null === $this->httpConnection) { + $this->connectHttp(); + } + + if (null === $this->httpConnection) { + throw new \LogicException('No connection could be established'); + } + + curl_setopt($this->httpConnection, CURLOPT_POSTFIELDS, '['.$data.']'); + curl_setopt($this->httpConnection, CURLOPT_HTTPHEADER, [ + 'Content-Type: application/json', + 'Content-Length: ' . strlen('['.$data.']'), + ]); + + Curl\Util::execute($this->httpConnection, 5, false); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php new file mode 100644 index 00000000..4decf0e6 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php @@ -0,0 +1,69 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler\Curl; + +use CurlHandle; + +/** + * This class is marked as internal and it is not under the BC promise of the package. + * + * @internal + */ +final class Util +{ + /** @var array */ + private static array $retriableErrorCodes = [ + CURLE_COULDNT_RESOLVE_HOST, + CURLE_COULDNT_CONNECT, + CURLE_HTTP_NOT_FOUND, + CURLE_READ_ERROR, + CURLE_OPERATION_TIMEOUTED, + CURLE_HTTP_POST_ERROR, + CURLE_SSL_CONNECT_ERROR, + ]; + + /** + * Executes a CURL request with optional retries and exception on failure + * + * @param CurlHandle $ch curl handler + * @return bool|string @see curl_exec + */ + public static function execute(CurlHandle $ch, int $retries = 5, bool $closeAfterDone = true) + { + while ($retries--) { + $curlResponse = curl_exec($ch); + if ($curlResponse === false) { + $curlErrno = curl_errno($ch); + + if (false === in_array($curlErrno, self::$retriableErrorCodes, true) || $retries === 0) { + $curlError = curl_error($ch); + + if ($closeAfterDone) { + curl_close($ch); + } + + throw new \RuntimeException(sprintf('Curl error (code %d): %s', $curlErrno, $curlError)); + } + + continue; + } + + if ($closeAfterDone) { + curl_close($ch); + } + + return $curlResponse; + } + + return false; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php new file mode 100644 index 00000000..35549121 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php @@ -0,0 +1,166 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\Logger; +use Psr\Log\LogLevel; +use Monolog\LogRecord; + +/** + * Simple handler wrapper that deduplicates log records across multiple requests + * + * It also includes the BufferHandler functionality and will buffer + * all messages until the end of the request or flush() is called. + * + * This works by storing all log records' messages above $deduplicationLevel + * to the file specified by $deduplicationStore. When further logs come in at the end of the + * request (or when flush() is called), all those above $deduplicationLevel are checked + * against the existing stored logs. If they match and the timestamps in the stored log is + * not older than $time seconds, the new log record is discarded. If no log record is new, the + * whole data set is discarded. + * + * This is mainly useful in combination with Mail handlers or things like Slack or HipChat handlers + * that send messages to people, to avoid spamming with the same message over and over in case of + * a major component failure like a database server being down which makes all requests fail in the + * same way. + * + * @author Jordi Boggiano + */ +class DeduplicationHandler extends BufferHandler +{ + protected string $deduplicationStore; + + protected Level $deduplicationLevel; + + protected int $time; + + private bool $gc = false; + + /** + * @param HandlerInterface $handler Handler. + * @param string $deduplicationStore The file/path where the deduplication log should be kept + * @param int|string|Level|LogLevel::* $deduplicationLevel The minimum logging level for log records to be looked at for deduplication purposes + * @param int $time The period (in seconds) during which duplicate entries should be suppressed after a given log is sent through + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + * + * @phpstan-param value-of|value-of|Level|LogLevel::* $deduplicationLevel + */ + public function __construct(HandlerInterface $handler, ?string $deduplicationStore = null, int|string|Level $deduplicationLevel = Level::Error, int $time = 60, bool $bubble = true) + { + parent::__construct($handler, 0, Level::Debug, $bubble, false); + + $this->deduplicationStore = $deduplicationStore === null ? sys_get_temp_dir() . '/monolog-dedup-' . substr(md5(__FILE__), 0, 20) .'.log' : $deduplicationStore; + $this->deduplicationLevel = Logger::toMonologLevel($deduplicationLevel); + $this->time = $time; + } + + public function flush(): void + { + if ($this->bufferSize === 0) { + return; + } + + $passthru = null; + + foreach ($this->buffer as $record) { + if ($record->level->value >= $this->deduplicationLevel->value) { + $passthru = $passthru === true || !$this->isDuplicate($record); + if ($passthru) { + $this->appendRecord($record); + } + } + } + + // default of null is valid as well as if no record matches duplicationLevel we just pass through + if ($passthru === true || $passthru === null) { + $this->handler->handleBatch($this->buffer); + } + + $this->clear(); + + if ($this->gc) { + $this->collectLogs(); + } + } + + private function isDuplicate(LogRecord $record): bool + { + if (!file_exists($this->deduplicationStore)) { + return false; + } + + $store = file($this->deduplicationStore, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + if (!is_array($store)) { + return false; + } + + $yesterday = time() - 86400; + $timestampValidity = $record->datetime->getTimestamp() - $this->time; + $expectedMessage = preg_replace('{[\r\n].*}', '', $record->message); + + for ($i = count($store) - 1; $i >= 0; $i--) { + list($timestamp, $level, $message) = explode(':', $store[$i], 3); + + if ($level === $record->level->getName() && $message === $expectedMessage && $timestamp > $timestampValidity) { + return true; + } + + if ($timestamp < $yesterday) { + $this->gc = true; + } + } + + return false; + } + + private function collectLogs(): void + { + if (!file_exists($this->deduplicationStore)) { + return; + } + + $handle = fopen($this->deduplicationStore, 'rw+'); + + if (false === $handle) { + throw new \RuntimeException('Failed to open file for reading and writing: ' . $this->deduplicationStore); + } + + flock($handle, LOCK_EX); + $validLogs = []; + + $timestampValidity = time() - $this->time; + + while (!feof($handle)) { + $log = fgets($handle); + if (is_string($log) && '' !== $log && substr($log, 0, 10) >= $timestampValidity) { + $validLogs[] = $log; + } + } + + ftruncate($handle, 0); + rewind($handle); + foreach ($validLogs as $log) { + fwrite($handle, $log); + } + + flock($handle, LOCK_UN); + fclose($handle); + + $this->gc = false; + } + + private function appendRecord(LogRecord $record): void + { + file_put_contents($this->deduplicationStore, $record->datetime->getTimestamp() . ':' . $record->level->getName() . ':' . preg_replace('{[\r\n].*}', '', $record->message) . "\n", FILE_APPEND); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php new file mode 100644 index 00000000..eab9f108 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php @@ -0,0 +1,47 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\Formatter\NormalizerFormatter; +use Monolog\Formatter\FormatterInterface; +use Doctrine\CouchDB\CouchDBClient; +use Monolog\LogRecord; + +/** + * CouchDB handler for Doctrine CouchDB ODM + * + * @author Markus Bachmann + */ +class DoctrineCouchDBHandler extends AbstractProcessingHandler +{ + private CouchDBClient $client; + + public function __construct(CouchDBClient $client, int|string|Level $level = Level::Debug, bool $bubble = true) + { + $this->client = $client; + parent::__construct($level, $bubble); + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + $this->client->postDocument($record->formatted); + } + + protected function getDefaultFormatter(): FormatterInterface + { + return new NormalizerFormatter; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php new file mode 100644 index 00000000..f1c5a959 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php @@ -0,0 +1,80 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Aws\Sdk; +use Aws\DynamoDb\DynamoDbClient; +use Monolog\Formatter\FormatterInterface; +use Aws\DynamoDb\Marshaler; +use Monolog\Formatter\ScalarFormatter; +use Monolog\Level; +use Monolog\LogRecord; + +/** + * Amazon DynamoDB handler (http://aws.amazon.com/dynamodb/) + * + * @link https://github.com/aws/aws-sdk-php/ + * @author Andrew Lawson + */ +class DynamoDbHandler extends AbstractProcessingHandler +{ + public const DATE_FORMAT = 'Y-m-d\TH:i:s.uO'; + + protected DynamoDbClient $client; + + protected string $table; + + protected Marshaler $marshaler; + + public function __construct(DynamoDbClient $client, string $table, int|string|Level $level = Level::Debug, bool $bubble = true) + { + $this->marshaler = new Marshaler; + + $this->client = $client; + $this->table = $table; + + parent::__construct($level, $bubble); + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + $filtered = $this->filterEmptyFields($record->formatted); + $formatted = $this->marshaler->marshalItem($filtered); + + $this->client->putItem([ + 'TableName' => $this->table, + 'Item' => $formatted, + ]); + } + + /** + * @param mixed[] $record + * @return mixed[] + */ + protected function filterEmptyFields(array $record): array + { + return array_filter($record, function ($value) { + return [] !== $value; + }); + } + + /** + * @inheritDoc + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new ScalarFormatter(self::DATE_FORMAT); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php new file mode 100644 index 00000000..d9b85b4d --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php @@ -0,0 +1,142 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Elastica\Document; +use Monolog\Formatter\FormatterInterface; +use Monolog\Formatter\ElasticaFormatter; +use Monolog\Level; +use Elastica\Client; +use Elastica\Exception\ExceptionInterface; +use Monolog\LogRecord; + +/** + * Elastic Search handler + * + * Usage example: + * + * $client = new \Elastica\Client(); + * $options = array( + * 'index' => 'elastic_index_name', + * 'type' => 'elastic_doc_type', Types have been removed in Elastica 7 + * ); + * $handler = new ElasticaHandler($client, $options); + * $log = new Logger('application'); + * $log->pushHandler($handler); + * + * @author Jelle Vink + * @phpstan-type Options array{ + * index: string, + * type: string, + * ignore_error: bool + * } + * @phpstan-type InputOptions array{ + * index?: string, + * type?: string, + * ignore_error?: bool + * } + */ +class ElasticaHandler extends AbstractProcessingHandler +{ + protected Client $client; + + /** + * @var mixed[] Handler config options + * @phpstan-var Options + */ + protected array $options; + + /** + * @param Client $client Elastica Client object + * @param mixed[] $options Handler configuration + * + * @phpstan-param InputOptions $options + */ + public function __construct(Client $client, array $options = [], int|string|Level $level = Level::Debug, bool $bubble = true) + { + parent::__construct($level, $bubble); + $this->client = $client; + $this->options = array_merge( + [ + 'index' => 'monolog', // Elastic index name + 'type' => 'record', // Elastic document type + 'ignore_error' => false, // Suppress Elastica exceptions + ], + $options + ); + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + $this->bulkSend([$record->formatted]); + } + + /** + * @inheritDoc + */ + public function setFormatter(FormatterInterface $formatter): HandlerInterface + { + if ($formatter instanceof ElasticaFormatter) { + return parent::setFormatter($formatter); + } + + throw new \InvalidArgumentException('ElasticaHandler is only compatible with ElasticaFormatter'); + } + + /** + * @return mixed[] + * + * @phpstan-return Options + */ + public function getOptions(): array + { + return $this->options; + } + + /** + * @inheritDoc + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new ElasticaFormatter($this->options['index'], $this->options['type']); + } + + /** + * @inheritDoc + */ + public function handleBatch(array $records): void + { + $documents = $this->getFormatter()->formatBatch($records); + $this->bulkSend($documents); + } + + /** + * Use Elasticsearch bulk API to send list of documents + * + * @param Document[] $documents + * + * @throws \RuntimeException + */ + protected function bulkSend(array $documents): void + { + try { + $this->client->addDocuments($documents); + } catch (ExceptionInterface $e) { + if (!$this->options['ignore_error']) { + throw new \RuntimeException("Error sending messages to Elasticsearch", 0, $e); + } + } + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php new file mode 100644 index 00000000..c288824a --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php @@ -0,0 +1,227 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Elastic\Elasticsearch\Response\Elasticsearch; +use Throwable; +use RuntimeException; +use Monolog\Level; +use Monolog\Formatter\FormatterInterface; +use Monolog\Formatter\ElasticsearchFormatter; +use InvalidArgumentException; +use Elasticsearch\Common\Exceptions\RuntimeException as ElasticsearchRuntimeException; +use Elasticsearch\Client; +use Monolog\LogRecord; +use Elastic\Elasticsearch\Exception\InvalidArgumentException as ElasticInvalidArgumentException; +use Elastic\Elasticsearch\Client as Client8; + +/** + * Elasticsearch handler + * + * @link https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/index.html + * + * Simple usage example: + * + * $client = \Elasticsearch\ClientBuilder::create() + * ->setHosts($hosts) + * ->build(); + * + * $options = array( + * 'index' => 'elastic_index_name', + * 'type' => 'elastic_doc_type', + * ); + * $handler = new ElasticsearchHandler($client, $options); + * $log = new Logger('application'); + * $log->pushHandler($handler); + * + * @author Avtandil Kikabidze + * @phpstan-type Options array{ + * index: string, + * type: string, + * ignore_error: bool + * } + * @phpstan-type InputOptions array{ + * index?: string, + * type?: string, + * ignore_error?: bool + * } + */ +class ElasticsearchHandler extends AbstractProcessingHandler +{ + protected Client|Client8 $client; + + /** + * @var mixed[] Handler config options + * @phpstan-var Options + */ + protected array $options; + + /** + * @var bool + */ + private $needsType; + + /** + * @param Client|Client8 $client Elasticsearch Client object + * @param mixed[] $options Handler configuration + * + * @phpstan-param InputOptions $options + */ + public function __construct(Client|Client8 $client, array $options = [], int|string|Level $level = Level::Debug, bool $bubble = true) + { + parent::__construct($level, $bubble); + $this->client = $client; + $this->options = array_merge( + [ + 'index' => 'monolog', // Elastic index name + 'type' => '_doc', // Elastic document type + 'ignore_error' => false, // Suppress Elasticsearch exceptions + ], + $options + ); + + if ($client instanceof Client8 || $client::VERSION[0] === '7') { + $this->needsType = false; + // force the type to _doc for ES8/ES7 + $this->options['type'] = '_doc'; + } else { + $this->needsType = true; + } + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + $this->bulkSend([$record->formatted]); + } + + /** + * @inheritDoc + */ + public function setFormatter(FormatterInterface $formatter): HandlerInterface + { + if ($formatter instanceof ElasticsearchFormatter) { + return parent::setFormatter($formatter); + } + + throw new InvalidArgumentException('ElasticsearchHandler is only compatible with ElasticsearchFormatter'); + } + + /** + * Getter options + * + * @return mixed[] + * + * @phpstan-return Options + */ + public function getOptions(): array + { + return $this->options; + } + + /** + * @inheritDoc + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new ElasticsearchFormatter($this->options['index'], $this->options['type']); + } + + /** + * @inheritDoc + */ + public function handleBatch(array $records): void + { + $documents = $this->getFormatter()->formatBatch($records); + $this->bulkSend($documents); + } + + /** + * Use Elasticsearch bulk API to send list of documents + * + * @param array> $records Records + _index/_type keys + * @throws \RuntimeException + */ + protected function bulkSend(array $records): void + { + try { + $params = [ + 'body' => [], + ]; + + foreach ($records as $record) { + $params['body'][] = [ + 'index' => $this->needsType ? [ + '_index' => $record['_index'], + '_type' => $record['_type'], + ] : [ + '_index' => $record['_index'], + ], + ]; + unset($record['_index'], $record['_type']); + + $params['body'][] = $record; + } + + /** @var Elasticsearch */ + $responses = $this->client->bulk($params); + + if ($responses['errors'] === true) { + throw $this->createExceptionFromResponses($responses); + } + } catch (Throwable $e) { + if (! $this->options['ignore_error']) { + throw new RuntimeException('Error sending messages to Elasticsearch', 0, $e); + } + } + } + + /** + * Creates elasticsearch exception from responses array + * + * Only the first error is converted into an exception. + * + * @param mixed[]|Elasticsearch $responses returned by $this->client->bulk() + */ + protected function createExceptionFromResponses($responses): Throwable + { + foreach ($responses['items'] ?? [] as $item) { + if (isset($item['index']['error'])) { + return $this->createExceptionFromError($item['index']['error']); + } + } + + if (class_exists(ElasticInvalidArgumentException::class)) { + return new ElasticInvalidArgumentException('Elasticsearch failed to index one or more records.'); + } + + return new ElasticsearchRuntimeException('Elasticsearch failed to index one or more records.'); + } + + /** + * Creates elasticsearch exception from error array + * + * @param mixed[] $error + */ + protected function createExceptionFromError(array $error): Throwable + { + $previous = isset($error['caused_by']) ? $this->createExceptionFromError($error['caused_by']) : null; + + if (class_exists(ElasticInvalidArgumentException::class)) { + return new ElasticInvalidArgumentException($error['type'] . ': ' . $error['reason'], 0, $previous); + } + + return new ElasticsearchRuntimeException($error['type'] . ': ' . $error['reason'], 0, $previous); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php new file mode 100644 index 00000000..477d7e45 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php @@ -0,0 +1,91 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\LineFormatter; +use Monolog\Formatter\FormatterInterface; +use Monolog\Level; +use Monolog\Utils; +use Monolog\LogRecord; + +/** + * Stores to PHP error_log() handler. + * + * @author Elan Ruusamäe + */ +class ErrorLogHandler extends AbstractProcessingHandler +{ + public const OPERATING_SYSTEM = 0; + public const SAPI = 4; + + protected int $messageType; + protected bool $expandNewlines; + + /** + * @param int $messageType Says where the error should go. + * @param bool $expandNewlines If set to true, newlines in the message will be expanded to be take multiple log entries + */ + public function __construct(int $messageType = self::OPERATING_SYSTEM, int|string|Level $level = Level::Debug, bool $bubble = true, bool $expandNewlines = false) + { + parent::__construct($level, $bubble); + + if (false === in_array($messageType, self::getAvailableTypes(), true)) { + $message = sprintf('The given message type "%s" is not supported', print_r($messageType, true)); + + throw new \InvalidArgumentException($message); + } + + $this->messageType = $messageType; + $this->expandNewlines = $expandNewlines; + } + + /** + * @return int[] With all available types + */ + public static function getAvailableTypes(): array + { + return [ + self::OPERATING_SYSTEM, + self::SAPI, + ]; + } + + /** + * @inheritDoc + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new LineFormatter('[%datetime%] %channel%.%level_name%: %message% %context% %extra%'); + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + if (!$this->expandNewlines) { + error_log((string) $record->formatted, $this->messageType); + + return; + } + + $lines = preg_split('{[\r\n]+}', (string) $record->formatted); + if ($lines === false) { + $pcreErrorCode = preg_last_error(); + + throw new \RuntimeException('Failed to preg_split formatted string: ' . $pcreErrorCode . ' / '. Utils::pcreLastErrorMessage($pcreErrorCode)); + } + foreach ($lines as $line) { + error_log($line, $this->messageType); + } + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php new file mode 100644 index 00000000..1776eb51 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php @@ -0,0 +1,68 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Throwable; +use Monolog\LogRecord; + +/** + * Forwards records to at most one handler + * + * If a handler fails, the exception is suppressed and the record is forwarded to the next handler. + * + * As soon as one handler handles a record successfully, the handling stops there. + */ +class FallbackGroupHandler extends GroupHandler +{ + /** + * @inheritDoc + */ + public function handle(LogRecord $record): bool + { + if (\count($this->processors) > 0) { + $record = $this->processRecord($record); + } + foreach ($this->handlers as $handler) { + try { + $handler->handle($record); + break; + } catch (Throwable $e) { + // What throwable? + } + } + + return false === $this->bubble; + } + + /** + * @inheritDoc + */ + public function handleBatch(array $records): void + { + if (\count($this->processors) > 0) { + $processed = []; + foreach ($records as $record) { + $processed[] = $this->processRecord($record); + } + $records = $processed; + } + + foreach ($this->handlers as $handler) { + try { + $handler->handleBatch($records); + break; + } catch (Throwable $e) { + // What throwable? + } + } + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php new file mode 100644 index 00000000..00381ab4 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php @@ -0,0 +1,201 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Closure; +use Monolog\Level; +use Monolog\Logger; +use Monolog\ResettableInterface; +use Monolog\Formatter\FormatterInterface; +use Psr\Log\LogLevel; +use Monolog\LogRecord; + +/** + * Simple handler wrapper that filters records based on a list of levels + * + * It can be configured with an exact list of levels to allow, or a min/max level. + * + * @author Hennadiy Verkh + * @author Jordi Boggiano + */ +class FilterHandler extends Handler implements ProcessableHandlerInterface, ResettableInterface, FormattableHandlerInterface +{ + use ProcessableHandlerTrait; + + /** + * Handler or factory Closure($record, $this) + * + * @phpstan-var (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface + */ + protected Closure|HandlerInterface $handler; + + /** + * Minimum level for logs that are passed to handler + * + * @var bool[] Map of Level value => true + * @phpstan-var array, true> + */ + protected array $acceptedLevels; + + /** + * Whether the messages that are handled can bubble up the stack or not + */ + protected bool $bubble; + + /** + * @phpstan-param (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface $handler + * + * @param Closure|HandlerInterface $handler Handler or factory Closure($record|null, $filterHandler). + * @param int|string|Level|array $minLevelOrList A list of levels to accept or a minimum level if maxLevel is provided + * @param int|string|Level|LogLevel::* $maxLevel Maximum level to accept, only used if $minLevelOrList is not an array + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + * + * @phpstan-param value-of|value-of|Level|LogLevel::*|array|value-of|Level|LogLevel::*> $minLevelOrList + * @phpstan-param value-of|value-of|Level|LogLevel::* $maxLevel + */ + public function __construct(Closure|HandlerInterface $handler, int|string|Level|array $minLevelOrList = Level::Debug, int|string|Level $maxLevel = Level::Emergency, bool $bubble = true) + { + $this->handler = $handler; + $this->bubble = $bubble; + $this->setAcceptedLevels($minLevelOrList, $maxLevel); + } + + /** + * @phpstan-return list List of levels + */ + public function getAcceptedLevels(): array + { + return array_map(fn (int $level) => Level::from($level), array_keys($this->acceptedLevels)); + } + + /** + * @param int|string|Level|LogLevel::*|array $minLevelOrList A list of levels to accept or a minimum level or level name if maxLevel is provided + * @param int|string|Level|LogLevel::* $maxLevel Maximum level or level name to accept, only used if $minLevelOrList is not an array + * + * @phpstan-param value-of|value-of|Level|LogLevel::*|array|value-of|Level|LogLevel::*> $minLevelOrList + * @phpstan-param value-of|value-of|Level|LogLevel::* $maxLevel + */ + public function setAcceptedLevels(int|string|Level|array $minLevelOrList = Level::Debug, int|string|Level $maxLevel = Level::Emergency): self + { + if (is_array($minLevelOrList)) { + $acceptedLevels = array_map(Logger::toMonologLevel(...), $minLevelOrList); + } else { + $minLevelOrList = Logger::toMonologLevel($minLevelOrList); + $maxLevel = Logger::toMonologLevel($maxLevel); + $acceptedLevels = array_values(array_filter(Level::cases(), fn (Level $level) => $level->value >= $minLevelOrList->value && $level->value <= $maxLevel->value)); + } + $this->acceptedLevels = []; + foreach ($acceptedLevels as $level) { + $this->acceptedLevels[$level->value] = true; + } + + return $this; + } + + /** + * @inheritDoc + */ + public function isHandling(LogRecord $record): bool + { + return isset($this->acceptedLevels[$record->level->value]); + } + + /** + * @inheritDoc + */ + public function handle(LogRecord $record): bool + { + if (!$this->isHandling($record)) { + return false; + } + + if (\count($this->processors) > 0) { + $record = $this->processRecord($record); + } + + $this->getHandler($record)->handle($record); + + return false === $this->bubble; + } + + /** + * @inheritDoc + */ + public function handleBatch(array $records): void + { + $filtered = []; + foreach ($records as $record) { + if ($this->isHandling($record)) { + $filtered[] = $record; + } + } + + if (count($filtered) > 0) { + $this->getHandler($filtered[count($filtered) - 1])->handleBatch($filtered); + } + } + + /** + * Return the nested handler + * + * If the handler was provided as a factory, this will trigger the handler's instantiation. + */ + public function getHandler(LogRecord $record = null): HandlerInterface + { + if (!$this->handler instanceof HandlerInterface) { + $handler = ($this->handler)($record, $this); + if (!$handler instanceof HandlerInterface) { + throw new \RuntimeException("The factory Closure should return a HandlerInterface"); + } + $this->handler = $handler; + } + + return $this->handler; + } + + /** + * @inheritDoc + */ + public function setFormatter(FormatterInterface $formatter): HandlerInterface + { + $handler = $this->getHandler(); + if ($handler instanceof FormattableHandlerInterface) { + $handler->setFormatter($formatter); + + return $this; + } + + throw new \UnexpectedValueException('The nested handler of type '.get_class($handler).' does not support formatters.'); + } + + /** + * @inheritDoc + */ + public function getFormatter(): FormatterInterface + { + $handler = $this->getHandler(); + if ($handler instanceof FormattableHandlerInterface) { + return $handler->getFormatter(); + } + + throw new \UnexpectedValueException('The nested handler of type '.get_class($handler).' does not support formatters.'); + } + + public function reset(): void + { + $this->resetProcessors(); + + if ($this->getHandler() instanceof ResettableInterface) { + $this->getHandler()->reset(); + } + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php new file mode 100644 index 00000000..e8a1b0b0 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler\FingersCrossed; + +use Monolog\LogRecord; + +/** + * Interface for activation strategies for the FingersCrossedHandler. + * + * @author Johannes M. Schmitt + */ +interface ActivationStrategyInterface +{ + /** + * Returns whether the given record activates the handler. + */ + public function isHandlerActivated(LogRecord $record): bool; +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php new file mode 100644 index 00000000..383e19af --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php @@ -0,0 +1,69 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler\FingersCrossed; + +use Monolog\Level; +use Monolog\Logger; +use Psr\Log\LogLevel; +use Monolog\LogRecord; + +/** + * Channel and Error level based monolog activation strategy. Allows to trigger activation + * based on level per channel. e.g. trigger activation on level 'ERROR' by default, except + * for records of the 'sql' channel; those should trigger activation on level 'WARN'. + * + * Example: + * + * + * $activationStrategy = new ChannelLevelActivationStrategy( + * Level::Critical, + * array( + * 'request' => Level::Alert, + * 'sensitive' => Level::Error, + * ) + * ); + * $handler = new FingersCrossedHandler(new StreamHandler('php://stderr'), $activationStrategy); + * + * + * @author Mike Meessen + */ +class ChannelLevelActivationStrategy implements ActivationStrategyInterface +{ + private Level $defaultActionLevel; + + /** + * @var array + */ + private array $channelToActionLevel; + + /** + * @param int|string|Level|LogLevel::* $defaultActionLevel The default action level to be used if the record's category doesn't match any + * @param array $channelToActionLevel An array that maps channel names to action levels. + * + * @phpstan-param value-of|value-of|Level|LogLevel::* $defaultActionLevel + * @phpstan-param array|value-of|Level|LogLevel::*> $channelToActionLevel + */ + public function __construct(int|string|Level $defaultActionLevel, array $channelToActionLevel = []) + { + $this->defaultActionLevel = Logger::toMonologLevel($defaultActionLevel); + $this->channelToActionLevel = array_map(Logger::toMonologLevel(...), $channelToActionLevel); + } + + public function isHandlerActivated(LogRecord $record): bool + { + if (isset($this->channelToActionLevel[$record->channel])) { + return $record->level->value >= $this->channelToActionLevel[$record->channel]->value; + } + + return $record->level->value >= $this->defaultActionLevel->value; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php new file mode 100644 index 00000000..c3ca2967 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler\FingersCrossed; + +use Monolog\Level; +use Monolog\LogRecord; +use Monolog\Logger; +use Psr\Log\LogLevel; + +/** + * Error level based activation strategy. + * + * @author Johannes M. Schmitt + */ +class ErrorLevelActivationStrategy implements ActivationStrategyInterface +{ + private Level $actionLevel; + + /** + * @param int|string|Level $actionLevel Level or name or value + * + * @phpstan-param value-of|value-of|Level|LogLevel::* $actionLevel + */ + public function __construct(int|string|Level $actionLevel) + { + $this->actionLevel = Logger::toMonologLevel($actionLevel); + } + + public function isHandlerActivated(LogRecord $record): bool + { + return $record->level->value >= $this->actionLevel->value; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php new file mode 100644 index 00000000..ce2a3a8e --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php @@ -0,0 +1,242 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Closure; +use Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy; +use Monolog\Handler\FingersCrossed\ActivationStrategyInterface; +use Monolog\Level; +use Monolog\Logger; +use Monolog\ResettableInterface; +use Monolog\Formatter\FormatterInterface; +use Psr\Log\LogLevel; +use Monolog\LogRecord; + +/** + * Buffers all records until a certain level is reached + * + * The advantage of this approach is that you don't get any clutter in your log files. + * Only requests which actually trigger an error (or whatever your actionLevel is) will be + * in the logs, but they will contain all records, not only those above the level threshold. + * + * You can then have a passthruLevel as well which means that at the end of the request, + * even if it did not get activated, it will still send through log records of e.g. at least a + * warning level. + * + * You can find the various activation strategies in the + * Monolog\Handler\FingersCrossed\ namespace. + * + * @author Jordi Boggiano + */ +class FingersCrossedHandler extends Handler implements ProcessableHandlerInterface, ResettableInterface, FormattableHandlerInterface +{ + use ProcessableHandlerTrait; + + /** + * Handler or factory Closure($record, $this) + * + * @phpstan-var (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface + */ + protected Closure|HandlerInterface $handler; + + protected ActivationStrategyInterface $activationStrategy; + + protected bool $buffering = true; + + protected int $bufferSize; + + /** @var LogRecord[] */ + protected array $buffer = []; + + protected bool $stopBuffering; + + protected Level|null $passthruLevel = null; + + protected bool $bubble; + + /** + * @phpstan-param (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface $handler + * + * @param Closure|HandlerInterface $handler Handler or factory Closure($record|null, $fingersCrossedHandler). + * @param int|string|Level|LogLevel::* $activationStrategy Strategy which determines when this handler takes action, or a level name/value at which the handler is activated + * @param int $bufferSize How many entries should be buffered at most, beyond that the oldest items are removed from the buffer. + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + * @param bool $stopBuffering Whether the handler should stop buffering after being triggered (default true) + * @param int|string|Level|LogLevel::*|null $passthruLevel Minimum level to always flush to handler on close, even if strategy not triggered + * + * @phpstan-param value-of|value-of|Level|LogLevel::*|ActivationStrategyInterface $activationStrategy + * @phpstan-param value-of|value-of|Level|LogLevel::* $passthruLevel + */ + public function __construct(Closure|HandlerInterface $handler, int|string|Level|ActivationStrategyInterface $activationStrategy = null, int $bufferSize = 0, bool $bubble = true, bool $stopBuffering = true, int|string|Level|null $passthruLevel = null) + { + if (null === $activationStrategy) { + $activationStrategy = new ErrorLevelActivationStrategy(Level::Warning); + } + + // convert simple int activationStrategy to an object + if (!$activationStrategy instanceof ActivationStrategyInterface) { + $activationStrategy = new ErrorLevelActivationStrategy($activationStrategy); + } + + $this->handler = $handler; + $this->activationStrategy = $activationStrategy; + $this->bufferSize = $bufferSize; + $this->bubble = $bubble; + $this->stopBuffering = $stopBuffering; + + if ($passthruLevel !== null) { + $this->passthruLevel = Logger::toMonologLevel($passthruLevel); + } + } + + /** + * @inheritDoc + */ + public function isHandling(LogRecord $record): bool + { + return true; + } + + /** + * Manually activate this logger regardless of the activation strategy + */ + public function activate(): void + { + if ($this->stopBuffering) { + $this->buffering = false; + } + + $this->getHandler(end($this->buffer) ?: null)->handleBatch($this->buffer); + $this->buffer = []; + } + + /** + * @inheritDoc + */ + public function handle(LogRecord $record): bool + { + if (\count($this->processors) > 0) { + $record = $this->processRecord($record); + } + + if ($this->buffering) { + $this->buffer[] = $record; + if ($this->bufferSize > 0 && count($this->buffer) > $this->bufferSize) { + array_shift($this->buffer); + } + if ($this->activationStrategy->isHandlerActivated($record)) { + $this->activate(); + } + } else { + $this->getHandler($record)->handle($record); + } + + return false === $this->bubble; + } + + /** + * @inheritDoc + */ + public function close(): void + { + $this->flushBuffer(); + + $this->getHandler()->close(); + } + + public function reset(): void + { + $this->flushBuffer(); + + $this->resetProcessors(); + + if ($this->getHandler() instanceof ResettableInterface) { + $this->getHandler()->reset(); + } + } + + /** + * Clears the buffer without flushing any messages down to the wrapped handler. + * + * It also resets the handler to its initial buffering state. + */ + public function clear(): void + { + $this->buffer = []; + $this->reset(); + } + + /** + * Resets the state of the handler. Stops forwarding records to the wrapped handler. + */ + private function flushBuffer(): void + { + if (null !== $this->passthruLevel) { + $level = $this->passthruLevel; + $this->buffer = array_filter($this->buffer, function ($record) use ($level) { + return $record->level >= $level; + }); + if (count($this->buffer) > 0) { + $this->getHandler(end($this->buffer))->handleBatch($this->buffer); + } + } + + $this->buffer = []; + $this->buffering = true; + } + + /** + * Return the nested handler + * + * If the handler was provided as a factory, this will trigger the handler's instantiation. + */ + public function getHandler(LogRecord $record = null): HandlerInterface + { + if (!$this->handler instanceof HandlerInterface) { + $handler = ($this->handler)($record, $this); + if (!$handler instanceof HandlerInterface) { + throw new \RuntimeException("The factory Closure should return a HandlerInterface"); + } + $this->handler = $handler; + } + + return $this->handler; + } + + /** + * @inheritDoc + */ + public function setFormatter(FormatterInterface $formatter): HandlerInterface + { + $handler = $this->getHandler(); + if ($handler instanceof FormattableHandlerInterface) { + $handler->setFormatter($formatter); + + return $this; + } + + throw new \UnexpectedValueException('The nested handler of type '.get_class($handler).' does not support formatters.'); + } + + /** + * @inheritDoc + */ + public function getFormatter(): FormatterInterface + { + $handler = $this->getHandler(); + if ($handler instanceof FormattableHandlerInterface) { + return $handler->getFormatter(); + } + + throw new \UnexpectedValueException('The nested handler of type '.get_class($handler).' does not support formatters.'); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php new file mode 100644 index 00000000..6b9e5103 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php @@ -0,0 +1,174 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\WildfireFormatter; +use Monolog\Formatter\FormatterInterface; +use Monolog\LogRecord; + +/** + * Simple FirePHP Handler (http://www.firephp.org/), which uses the Wildfire protocol. + * + * @author Eric Clemmons (@ericclemmons) + */ +class FirePHPHandler extends AbstractProcessingHandler +{ + use WebRequestRecognizerTrait; + + /** + * WildFire JSON header message format + */ + protected const PROTOCOL_URI = 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2'; + + /** + * FirePHP structure for parsing messages & their presentation + */ + protected const STRUCTURE_URI = 'http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1'; + + /** + * Must reference a "known" plugin, otherwise headers won't display in FirePHP + */ + protected const PLUGIN_URI = 'http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3'; + + /** + * Header prefix for Wildfire to recognize & parse headers + */ + protected const HEADER_PREFIX = 'X-Wf'; + + /** + * Whether or not Wildfire vendor-specific headers have been generated & sent yet + */ + protected static bool $initialized = false; + + /** + * Shared static message index between potentially multiple handlers + */ + protected static int $messageIndex = 1; + + protected static bool $sendHeaders = true; + + /** + * Base header creation function used by init headers & record headers + * + * @param array $meta Wildfire Plugin, Protocol & Structure Indexes + * @param string $message Log message + * + * @return array Complete header string ready for the client as key and message as value + * + * @phpstan-return non-empty-array + */ + protected function createHeader(array $meta, string $message): array + { + $header = sprintf('%s-%s', static::HEADER_PREFIX, join('-', $meta)); + + return [$header => $message]; + } + + /** + * Creates message header from record + * + * @return array + * + * @phpstan-return non-empty-array + * + * @see createHeader() + */ + protected function createRecordHeader(LogRecord $record): array + { + // Wildfire is extensible to support multiple protocols & plugins in a single request, + // but we're not taking advantage of that (yet), so we're using "1" for simplicity's sake. + return $this->createHeader( + [1, 1, 1, self::$messageIndex++], + $record->formatted + ); + } + + /** + * @inheritDoc + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new WildfireFormatter(); + } + + /** + * Wildfire initialization headers to enable message parsing + * + * @see createHeader() + * @see sendHeader() + * + * @return array + */ + protected function getInitHeaders(): array + { + // Initial payload consists of required headers for Wildfire + return array_merge( + $this->createHeader(['Protocol', 1], static::PROTOCOL_URI), + $this->createHeader([1, 'Structure', 1], static::STRUCTURE_URI), + $this->createHeader([1, 'Plugin', 1], static::PLUGIN_URI) + ); + } + + /** + * Send header string to the client + */ + protected function sendHeader(string $header, string $content): void + { + if (!headers_sent() && self::$sendHeaders) { + header(sprintf('%s: %s', $header, $content)); + } + } + + /** + * Creates & sends header for a record, ensuring init headers have been sent prior + * + * @see sendHeader() + * @see sendInitHeaders() + */ + protected function write(LogRecord $record): void + { + if (!self::$sendHeaders || !$this->isWebRequest()) { + return; + } + + // WildFire-specific headers must be sent prior to any messages + if (!self::$initialized) { + self::$initialized = true; + + self::$sendHeaders = $this->headersAccepted(); + if (!self::$sendHeaders) { + return; + } + + foreach ($this->getInitHeaders() as $header => $content) { + $this->sendHeader($header, $content); + } + } + + $header = $this->createRecordHeader($record); + if (trim(current($header)) !== '') { + $this->sendHeader(key($header), current($header)); + } + } + + /** + * Verifies if the headers are accepted by the current user agent + */ + protected function headersAccepted(): bool + { + if (isset($_SERVER['HTTP_USER_AGENT']) && 1 === preg_match('{\bFirePHP/\d+\.\d+\b}', $_SERVER['HTTP_USER_AGENT'])) { + return true; + } + + return isset($_SERVER['HTTP_X_FIREPHP_VERSION']); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php new file mode 100644 index 00000000..9f44ba71 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php @@ -0,0 +1,132 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FormatterInterface; +use Monolog\Formatter\LineFormatter; +use Monolog\Level; +use Monolog\LogRecord; + +/** + * Sends logs to Fleep.io using Webhook integrations + * + * You'll need a Fleep.io account to use this handler. + * + * @see https://fleep.io/integrations/webhooks/ Fleep Webhooks Documentation + * @author Ando Roots + */ +class FleepHookHandler extends SocketHandler +{ + protected const FLEEP_HOST = 'fleep.io'; + + protected const FLEEP_HOOK_URI = '/hook/'; + + /** + * @var string Webhook token (specifies the conversation where logs are sent) + */ + protected string $token; + + /** + * Construct a new Fleep.io Handler. + * + * For instructions on how to create a new web hook in your conversations + * see https://fleep.io/integrations/webhooks/ + * + * @param string $token Webhook token + * @throws MissingExtensionException + */ + public function __construct( + string $token, + $level = Level::Debug, + bool $bubble = true, + bool $persistent = false, + float $timeout = 0.0, + float $writingTimeout = 10.0, + ?float $connectionTimeout = null, + ?int $chunkSize = null + ) { + if (!extension_loaded('openssl')) { + throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FleepHookHandler'); + } + + $this->token = $token; + + $connectionString = 'ssl://' . static::FLEEP_HOST . ':443'; + parent::__construct( + $connectionString, + $level, + $bubble, + $persistent, + $timeout, + $writingTimeout, + $connectionTimeout, + $chunkSize + ); + } + + /** + * Returns the default formatter to use with this handler + * + * Overloaded to remove empty context and extra arrays from the end of the log message. + * + * @return LineFormatter + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new LineFormatter(null, null, true, true); + } + + /** + * Handles a log record + */ + public function write(LogRecord $record): void + { + parent::write($record); + $this->closeSocket(); + } + + /** + * @inheritDoc + */ + protected function generateDataStream(LogRecord $record): string + { + $content = $this->buildContent($record); + + return $this->buildHeader($content) . $content; + } + + /** + * Builds the header of the API Call + */ + private function buildHeader(string $content): string + { + $header = "POST " . static::FLEEP_HOOK_URI . $this->token . " HTTP/1.1\r\n"; + $header .= "Host: " . static::FLEEP_HOST . "\r\n"; + $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; + $header .= "Content-Length: " . strlen($content) . "\r\n"; + $header .= "\r\n"; + + return $header; + } + + /** + * Builds the body of API call + */ + private function buildContent(LogRecord $record): string + { + $dataArray = [ + 'message' => $record->formatted, + ]; + + return http_build_query($dataArray); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php new file mode 100644 index 00000000..13581548 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php @@ -0,0 +1,126 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\Utils; +use Monolog\Formatter\FlowdockFormatter; +use Monolog\Formatter\FormatterInterface; +use Monolog\LogRecord; + +/** + * Sends notifications through the Flowdock push API + * + * This must be configured with a FlowdockFormatter instance via setFormatter() + * + * Notes: + * API token - Flowdock API token + * + * @author Dominik Liebler + * @see https://www.flowdock.com/api/push + */ +class FlowdockHandler extends SocketHandler +{ + protected string $apiToken; + + /** + * @throws MissingExtensionException if OpenSSL is missing + */ + public function __construct( + string $apiToken, + $level = Level::Debug, + bool $bubble = true, + bool $persistent = false, + float $timeout = 0.0, + float $writingTimeout = 10.0, + ?float $connectionTimeout = null, + ?int $chunkSize = null + ) { + if (!extension_loaded('openssl')) { + throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FlowdockHandler'); + } + + parent::__construct( + 'ssl://api.flowdock.com:443', + $level, + $bubble, + $persistent, + $timeout, + $writingTimeout, + $connectionTimeout, + $chunkSize + ); + $this->apiToken = $apiToken; + } + + /** + * @inheritDoc + */ + public function setFormatter(FormatterInterface $formatter): HandlerInterface + { + if (!$formatter instanceof FlowdockFormatter) { + throw new \InvalidArgumentException('The FlowdockHandler requires an instance of Monolog\Formatter\FlowdockFormatter to function correctly'); + } + + return parent::setFormatter($formatter); + } + + /** + * Gets the default formatter. + */ + protected function getDefaultFormatter(): FormatterInterface + { + throw new \InvalidArgumentException('The FlowdockHandler must be configured (via setFormatter) with an instance of Monolog\Formatter\FlowdockFormatter to function correctly'); + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + parent::write($record); + + $this->closeSocket(); + } + + /** + * @inheritDoc + */ + protected function generateDataStream(LogRecord $record): string + { + $content = $this->buildContent($record); + + return $this->buildHeader($content) . $content; + } + + /** + * Builds the body of API call + */ + private function buildContent(LogRecord $record): string + { + return Utils::jsonEncode($record->formatted); + } + + /** + * Builds the header of the API Call + */ + private function buildHeader(string $content): string + { + $header = "POST /v1/messages/team_inbox/" . $this->apiToken . " HTTP/1.1\r\n"; + $header .= "Host: api.flowdock.com\r\n"; + $header .= "Content-Type: application/json\r\n"; + $header .= "Content-Length: " . strlen($content) . "\r\n"; + $header .= "\r\n"; + + return $header; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php new file mode 100644 index 00000000..72da59e1 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php @@ -0,0 +1,34 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FormatterInterface; + +/** + * Interface to describe loggers that have a formatter + * + * @author Jordi Boggiano + */ +interface FormattableHandlerInterface +{ + /** + * Sets the formatter. + * + * @return HandlerInterface self + */ + public function setFormatter(FormatterInterface $formatter): HandlerInterface; + + /** + * Gets the formatter. + */ + public function getFormatter(): FormatterInterface; +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php new file mode 100644 index 00000000..c044e078 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php @@ -0,0 +1,57 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FormatterInterface; +use Monolog\Formatter\LineFormatter; + +/** + * Helper trait for implementing FormattableInterface + * + * @author Jordi Boggiano + */ +trait FormattableHandlerTrait +{ + protected FormatterInterface|null $formatter = null; + + /** + * @inheritDoc + */ + public function setFormatter(FormatterInterface $formatter): HandlerInterface + { + $this->formatter = $formatter; + + return $this; + } + + /** + * @inheritDoc + */ + public function getFormatter(): FormatterInterface + { + if (null === $this->formatter) { + $this->formatter = $this->getDefaultFormatter(); + } + + return $this->formatter; + } + + /** + * Gets the default formatter. + * + * Overwrite this if the LineFormatter is not a good default for your handler. + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new LineFormatter(); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php new file mode 100644 index 00000000..ba5bb975 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Gelf\PublisherInterface; +use Monolog\Level; +use Monolog\Formatter\GelfMessageFormatter; +use Monolog\Formatter\FormatterInterface; +use Monolog\LogRecord; + +/** + * Handler to send messages to a Graylog2 (http://www.graylog2.org) server + * + * @author Matt Lehner + * @author Benjamin Zikarsky + */ +class GelfHandler extends AbstractProcessingHandler +{ + /** + * @var PublisherInterface the publisher object that sends the message to the server + */ + protected PublisherInterface $publisher; + + /** + * @param PublisherInterface $publisher a gelf publisher object + */ + public function __construct(PublisherInterface $publisher, int|string|Level $level = Level::Debug, bool $bubble = true) + { + parent::__construct($level, $bubble); + + $this->publisher = $publisher; + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + $this->publisher->publish($record->formatted); + } + + /** + * @inheritDoc + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new GelfMessageFormatter(); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php new file mode 100644 index 00000000..7ab8bd97 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php @@ -0,0 +1,128 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FormatterInterface; +use Monolog\ResettableInterface; +use Monolog\LogRecord; + +/** + * Forwards records to multiple handlers + * + * @author Lenar Lõhmus + */ +class GroupHandler extends Handler implements ProcessableHandlerInterface, ResettableInterface +{ + use ProcessableHandlerTrait; + + /** @var HandlerInterface[] */ + protected array $handlers; + protected bool $bubble; + + /** + * @param HandlerInterface[] $handlers Array of Handlers. + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + */ + public function __construct(array $handlers, bool $bubble = true) + { + foreach ($handlers as $handler) { + if (!$handler instanceof HandlerInterface) { + throw new \InvalidArgumentException('The first argument of the GroupHandler must be an array of HandlerInterface instances.'); + } + } + + $this->handlers = $handlers; + $this->bubble = $bubble; + } + + /** + * @inheritDoc + */ + public function isHandling(LogRecord $record): bool + { + foreach ($this->handlers as $handler) { + if ($handler->isHandling($record)) { + return true; + } + } + + return false; + } + + /** + * @inheritDoc + */ + public function handle(LogRecord $record): bool + { + if (\count($this->processors) > 0) { + $record = $this->processRecord($record); + } + + foreach ($this->handlers as $handler) { + $handler->handle($record); + } + + return false === $this->bubble; + } + + /** + * @inheritDoc + */ + public function handleBatch(array $records): void + { + if (\count($this->processors) > 0) { + $processed = []; + foreach ($records as $record) { + $processed[] = $this->processRecord($record); + } + $records = $processed; + } + + foreach ($this->handlers as $handler) { + $handler->handleBatch($records); + } + } + + public function reset(): void + { + $this->resetProcessors(); + + foreach ($this->handlers as $handler) { + if ($handler instanceof ResettableInterface) { + $handler->reset(); + } + } + } + + public function close(): void + { + parent::close(); + + foreach ($this->handlers as $handler) { + $handler->close(); + } + } + + /** + * @inheritDoc + */ + public function setFormatter(FormatterInterface $formatter): HandlerInterface + { + foreach ($this->handlers as $handler) { + if ($handler instanceof FormattableHandlerInterface) { + $handler->setFormatter($formatter); + } + } + + return $this; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/Handler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/Handler.php new file mode 100644 index 00000000..e89f969b --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/Handler.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +/** + * Base Handler class providing basic close() support as well as handleBatch + * + * @author Jordi Boggiano + */ +abstract class Handler implements HandlerInterface +{ + /** + * @inheritDoc + */ + public function handleBatch(array $records): void + { + foreach ($records as $record) { + $this->handle($record); + } + } + + /** + * @inheritDoc + */ + public function close(): void + { + } + + public function __destruct() + { + try { + $this->close(); + } catch (\Throwable $e) { + // do nothing + } + } + + public function __sleep() + { + $this->close(); + + $reflClass = new \ReflectionClass($this); + + $keys = []; + foreach ($reflClass->getProperties() as $reflProp) { + if (!$reflProp->isStatic()) { + $keys[] = $reflProp->getName(); + } + } + + return $keys; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php new file mode 100644 index 00000000..83905c32 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php @@ -0,0 +1,76 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\LogRecord; + +/** + * Interface that all Monolog Handlers must implement + * + * @author Jordi Boggiano + */ +interface HandlerInterface +{ + /** + * Checks whether the given record will be handled by this handler. + * + * This is mostly done for performance reasons, to avoid calling processors for nothing. + * + * Handlers should still check the record levels within handle(), returning false in isHandling() + * is no guarantee that handle() will not be called, and isHandling() might not be called + * for a given record. + * + * @param LogRecord $record Partial log record having only a level initialized + */ + public function isHandling(LogRecord $record): bool; + + /** + * Handles a record. + * + * All records may be passed to this method, and the handler should discard + * those that it does not want to handle. + * + * The return value of this function controls the bubbling process of the handler stack. + * Unless the bubbling is interrupted (by returning true), the Logger class will keep on + * calling further handlers in the stack with a given log record. + * + * @param LogRecord $record The record to handle + * @return bool true means that this handler handled the record, and that bubbling is not permitted. + * false means the record was either not processed or that this handler allows bubbling. + */ + public function handle(LogRecord $record): bool; + + /** + * Handles a set of records at once. + * + * @param array $records The records to handle + */ + public function handleBatch(array $records): void; + + /** + * Closes the handler. + * + * Ends a log cycle and frees all resources used by the handler. + * + * Closing a Handler means flushing all buffers and freeing any open resources/handles. + * + * Implementations have to be idempotent (i.e. it should be possible to call close several times without breakage) + * and ideally handlers should be able to reopen themselves on handle() after they have been closed. + * + * This is useful at the end of a request and will be called automatically when the object + * is destroyed if you extend Monolog\Handler\Handler. + * + * If you are thinking of calling this method yourself, most likely you should be + * calling ResettableInterface::reset instead. Have a look. + */ + public function close(): void; +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php new file mode 100644 index 00000000..541ec254 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php @@ -0,0 +1,134 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\ResettableInterface; +use Monolog\Formatter\FormatterInterface; +use Monolog\LogRecord; + +/** + * This simple wrapper class can be used to extend handlers functionality. + * + * Example: A custom filtering that can be applied to any handler. + * + * Inherit from this class and override handle() like this: + * + * public function handle(LogRecord $record) + * { + * if ($record meets certain conditions) { + * return false; + * } + * return $this->handler->handle($record); + * } + * + * @author Alexey Karapetov + */ +class HandlerWrapper implements HandlerInterface, ProcessableHandlerInterface, FormattableHandlerInterface, ResettableInterface +{ + protected HandlerInterface $handler; + + public function __construct(HandlerInterface $handler) + { + $this->handler = $handler; + } + + /** + * @inheritDoc + */ + public function isHandling(LogRecord $record): bool + { + return $this->handler->isHandling($record); + } + + /** + * @inheritDoc + */ + public function handle(LogRecord $record): bool + { + return $this->handler->handle($record); + } + + /** + * @inheritDoc + */ + public function handleBatch(array $records): void + { + $this->handler->handleBatch($records); + } + + /** + * @inheritDoc + */ + public function close(): void + { + $this->handler->close(); + } + + /** + * @inheritDoc + */ + public function pushProcessor(callable $callback): HandlerInterface + { + if ($this->handler instanceof ProcessableHandlerInterface) { + $this->handler->pushProcessor($callback); + + return $this; + } + + throw new \LogicException('The wrapped handler does not implement ' . ProcessableHandlerInterface::class); + } + + /** + * @inheritDoc + */ + public function popProcessor(): callable + { + if ($this->handler instanceof ProcessableHandlerInterface) { + return $this->handler->popProcessor(); + } + + throw new \LogicException('The wrapped handler does not implement ' . ProcessableHandlerInterface::class); + } + + /** + * @inheritDoc + */ + public function setFormatter(FormatterInterface $formatter): HandlerInterface + { + if ($this->handler instanceof FormattableHandlerInterface) { + $this->handler->setFormatter($formatter); + + return $this; + } + + throw new \LogicException('The wrapped handler does not implement ' . FormattableHandlerInterface::class); + } + + /** + * @inheritDoc + */ + public function getFormatter(): FormatterInterface + { + if ($this->handler instanceof FormattableHandlerInterface) { + return $this->handler->getFormatter(); + } + + throw new \LogicException('The wrapped handler does not implement ' . FormattableHandlerInterface::class); + } + + public function reset(): void + { + if ($this->handler instanceof ResettableInterface) { + $this->handler->reset(); + } + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php new file mode 100644 index 00000000..ee7f81f6 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php @@ -0,0 +1,73 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\Utils; +use Monolog\LogRecord; + +/** + * IFTTTHandler uses cURL to trigger IFTTT Maker actions + * + * Register a secret key and trigger/event name at https://ifttt.com/maker + * + * value1 will be the channel from monolog's Logger constructor, + * value2 will be the level name (ERROR, WARNING, ..) + * value3 will be the log record's message + * + * @author Nehal Patel + */ +class IFTTTHandler extends AbstractProcessingHandler +{ + private string $eventName; + private string $secretKey; + + /** + * @param string $eventName The name of the IFTTT Maker event that should be triggered + * @param string $secretKey A valid IFTTT secret key + */ + public function __construct(string $eventName, string $secretKey, int|string|Level $level = Level::Error, bool $bubble = true) + { + if (!extension_loaded('curl')) { + throw new MissingExtensionException('The curl extension is needed to use the IFTTTHandler'); + } + + $this->eventName = $eventName; + $this->secretKey = $secretKey; + + parent::__construct($level, $bubble); + } + + /** + * @inheritDoc + */ + public function write(LogRecord $record): void + { + $postData = [ + "value1" => $record->channel, + "value2" => $record["level_name"], + "value3" => $record->message, + ]; + $postString = Utils::jsonEncode($postData); + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, "https://maker.ifttt.com/trigger/" . $this->eventName . "/with/key/" . $this->secretKey); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $postString); + curl_setopt($ch, CURLOPT_HTTPHEADER, [ + "Content-Type: application/json", + ]); + + Curl\Util::execute($ch); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php new file mode 100644 index 00000000..abb2f88f --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php @@ -0,0 +1,74 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\LogRecord; + +/** + * Inspired on LogEntriesHandler. + * + * @author Robert Kaufmann III + * @author Gabriel Machado + */ +class InsightOpsHandler extends SocketHandler +{ + protected string $logToken; + + /** + * @param string $token Log token supplied by InsightOps + * @param string $region Region where InsightOps account is hosted. Could be 'us' or 'eu'. + * @param bool $useSSL Whether or not SSL encryption should be used + * + * @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing + */ + public function __construct( + string $token, + string $region = 'us', + bool $useSSL = true, + $level = Level::Debug, + bool $bubble = true, + bool $persistent = false, + float $timeout = 0.0, + float $writingTimeout = 10.0, + ?float $connectionTimeout = null, + ?int $chunkSize = null + ) { + if ($useSSL && !extension_loaded('openssl')) { + throw new MissingExtensionException('The OpenSSL PHP plugin is required to use SSL encrypted connection for InsightOpsHandler'); + } + + $endpoint = $useSSL + ? 'ssl://' . $region . '.data.logs.insight.rapid7.com:443' + : $region . '.data.logs.insight.rapid7.com:80'; + + parent::__construct( + $endpoint, + $level, + $bubble, + $persistent, + $timeout, + $writingTimeout, + $connectionTimeout, + $chunkSize + ); + $this->logToken = $token; + } + + /** + * @inheritDoc + */ + protected function generateDataStream(LogRecord $record): string + { + return $this->logToken . ' ' . $record->formatted; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php new file mode 100644 index 00000000..00259834 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php @@ -0,0 +1,68 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\LogRecord; + +/** + * @author Robert Kaufmann III + */ +class LogEntriesHandler extends SocketHandler +{ + protected string $logToken; + + /** + * @param string $token Log token supplied by LogEntries + * @param bool $useSSL Whether or not SSL encryption should be used. + * @param string $host Custom hostname to send the data to if needed + * + * @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing + */ + public function __construct( + string $token, + bool $useSSL = true, + $level = Level::Debug, + bool $bubble = true, + string $host = 'data.logentries.com', + bool $persistent = false, + float $timeout = 0.0, + float $writingTimeout = 10.0, + ?float $connectionTimeout = null, + ?int $chunkSize = null + ) { + if ($useSSL && !extension_loaded('openssl')) { + throw new MissingExtensionException('The OpenSSL PHP plugin is required to use SSL encrypted connection for LogEntriesHandler'); + } + + $endpoint = $useSSL ? 'ssl://' . $host . ':443' : $host . ':80'; + parent::__construct( + $endpoint, + $level, + $bubble, + $persistent, + $timeout, + $writingTimeout, + $connectionTimeout, + $chunkSize + ); + $this->logToken = $token; + } + + /** + * @inheritDoc + */ + protected function generateDataStream(LogRecord $record): string + { + return $this->logToken . ' ' . $record->formatted; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php new file mode 100644 index 00000000..2d8e66f1 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php @@ -0,0 +1,155 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\Formatter\FormatterInterface; +use Monolog\Formatter\LogglyFormatter; +use function array_key_exists; +use CurlHandle; +use Monolog\LogRecord; + +/** + * Sends errors to Loggly. + * + * @author Przemek Sobstel + * @author Adam Pancutt + * @author Gregory Barchard + */ +class LogglyHandler extends AbstractProcessingHandler +{ + protected const HOST = 'logs-01.loggly.com'; + protected const ENDPOINT_SINGLE = 'inputs'; + protected const ENDPOINT_BATCH = 'bulk'; + + /** + * Caches the curl handlers for every given endpoint. + * + * @var CurlHandle[] + */ + protected array $curlHandlers = []; + + protected string $token; + + /** @var string[] */ + protected array $tag = []; + + /** + * @param string $token API token supplied by Loggly + * + * @throws MissingExtensionException If the curl extension is missing + */ + public function __construct(string $token, int|string|Level $level = Level::Debug, bool $bubble = true) + { + if (!extension_loaded('curl')) { + throw new MissingExtensionException('The curl extension is needed to use the LogglyHandler'); + } + + $this->token = $token; + + parent::__construct($level, $bubble); + } + + /** + * Loads and returns the shared curl handler for the given endpoint. + */ + protected function getCurlHandler(string $endpoint): CurlHandle + { + if (!array_key_exists($endpoint, $this->curlHandlers)) { + $this->curlHandlers[$endpoint] = $this->loadCurlHandle($endpoint); + } + + return $this->curlHandlers[$endpoint]; + } + + /** + * Starts a fresh curl session for the given endpoint and returns its handler. + */ + private function loadCurlHandle(string $endpoint): CurlHandle + { + $url = sprintf("https://%s/%s/%s/", static::HOST, $endpoint, $this->token); + + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + + return $ch; + } + + /** + * @param string[]|string $tag + */ + public function setTag(string|array $tag): self + { + if ('' === $tag || [] === $tag) { + $this->tag = []; + } else { + $this->tag = is_array($tag) ? $tag : [$tag]; + } + + return $this; + } + + /** + * @param string[]|string $tag + */ + public function addTag(string|array $tag): self + { + if ('' !== $tag) { + $tag = is_array($tag) ? $tag : [$tag]; + $this->tag = array_unique(array_merge($this->tag, $tag)); + } + + return $this; + } + + protected function write(LogRecord $record): void + { + $this->send($record->formatted, static::ENDPOINT_SINGLE); + } + + public function handleBatch(array $records): void + { + $level = $this->level; + + $records = array_filter($records, function ($record) use ($level) { + return ($record->level >= $level); + }); + + if (\count($records) > 0) { + $this->send($this->getFormatter()->formatBatch($records), static::ENDPOINT_BATCH); + } + } + + protected function send(string $data, string $endpoint): void + { + $ch = $this->getCurlHandler($endpoint); + + $headers = ['Content-Type: application/json']; + + if (\count($this->tag) > 0) { + $headers[] = 'X-LOGGLY-TAG: '.implode(',', $this->tag); + } + + curl_setopt($ch, CURLOPT_POSTFIELDS, $data); + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + + Curl\Util::execute($ch, 5, false); + } + + protected function getDefaultFormatter(): FormatterInterface + { + return new LogglyFormatter(); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php new file mode 100644 index 00000000..876b1a95 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php @@ -0,0 +1,98 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\Formatter\FormatterInterface; +use Monolog\Formatter\LogmaticFormatter; +use Monolog\LogRecord; + +/** + * @author Julien Breux + */ +class LogmaticHandler extends SocketHandler +{ + private string $logToken; + + private string $hostname; + + private string $appName; + + /** + * @param string $token Log token supplied by Logmatic. + * @param string $hostname Host name supplied by Logmatic. + * @param string $appName Application name supplied by Logmatic. + * @param bool $useSSL Whether or not SSL encryption should be used. + * + * @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing + */ + public function __construct( + string $token, + string $hostname = '', + string $appName = '', + bool $useSSL = true, + $level = Level::Debug, + bool $bubble = true, + bool $persistent = false, + float $timeout = 0.0, + float $writingTimeout = 10.0, + ?float $connectionTimeout = null, + ?int $chunkSize = null + ) { + if ($useSSL && !extension_loaded('openssl')) { + throw new MissingExtensionException('The OpenSSL PHP extension is required to use SSL encrypted connection for LogmaticHandler'); + } + + $endpoint = $useSSL ? 'ssl://api.logmatic.io:10515' : 'api.logmatic.io:10514'; + $endpoint .= '/v1/'; + + parent::__construct( + $endpoint, + $level, + $bubble, + $persistent, + $timeout, + $writingTimeout, + $connectionTimeout, + $chunkSize + ); + + $this->logToken = $token; + $this->hostname = $hostname; + $this->appName = $appName; + } + + /** + * @inheritDoc + */ + protected function generateDataStream(LogRecord $record): string + { + return $this->logToken . ' ' . $record->formatted; + } + + /** + * @inheritDoc + */ + protected function getDefaultFormatter(): FormatterInterface + { + $formatter = new LogmaticFormatter(); + + if ($this->hostname !== '') { + $formatter->setHostname($this->hostname); + } + if ($this->appName !== '') { + $formatter->setAppName($this->appName); + } + + return $formatter; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php new file mode 100644 index 00000000..b6c82277 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php @@ -0,0 +1,91 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FormatterInterface; +use Monolog\Formatter\HtmlFormatter; +use Monolog\LogRecord; + +/** + * Base class for all mail handlers + * + * @author Gyula Sallai + */ +abstract class MailHandler extends AbstractProcessingHandler +{ + /** + * @inheritDoc + */ + public function handleBatch(array $records): void + { + $messages = []; + + foreach ($records as $record) { + if ($record->level->isLowerThan($this->level)) { + continue; + } + + $message = $this->processRecord($record); + $messages[] = $message; + } + + if (\count($messages) > 0) { + $this->send((string) $this->getFormatter()->formatBatch($messages), $messages); + } + } + + /** + * Send a mail with the given content + * + * @param string $content formatted email body to be sent + * @param array $records the array of log records that formed this content + * + * @phpstan-param non-empty-array $records + */ + abstract protected function send(string $content, array $records): void; + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + $this->send((string) $record->formatted, [$record]); + } + + /** + * @phpstan-param non-empty-array $records + */ + protected function getHighestRecord(array $records): LogRecord + { + $highestRecord = null; + foreach ($records as $record) { + if ($highestRecord === null || $record->level->isHigherThan($highestRecord->level)) { + $highestRecord = $record; + } + } + + return $highestRecord; + } + + protected function isHtmlBody(string $body): bool + { + return ($body[0] ?? null) === '<'; + } + + /** + * Gets the default formatter. + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new HtmlFormatter(); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php new file mode 100644 index 00000000..0f923bc5 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php @@ -0,0 +1,81 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Swift; +use Swift_Message; + +/** + * MandrillHandler uses cURL to send the emails to the Mandrill API + * + * @author Adam Nicholson + */ +class MandrillHandler extends MailHandler +{ + protected Swift_Message $message; + protected string $apiKey; + + /** + * @phpstan-param (Swift_Message|callable(): Swift_Message) $message + * + * @param string $apiKey A valid Mandrill API key + * @param callable|Swift_Message $message An example message for real messages, only the body will be replaced + */ + public function __construct(string $apiKey, callable|Swift_Message $message, int|string|Level $level = Level::Error, bool $bubble = true) + { + parent::__construct($level, $bubble); + + if (!$message instanceof Swift_Message) { + $message = $message(); + } + if (!$message instanceof Swift_Message) { + throw new \InvalidArgumentException('You must provide either a Swift_Message instance or a callable returning it'); + } + $this->message = $message; + $this->apiKey = $apiKey; + } + + /** + * @inheritDoc + */ + protected function send(string $content, array $records): void + { + $mime = 'text/plain'; + if ($this->isHtmlBody($content)) { + $mime = 'text/html'; + } + + $message = clone $this->message; + $message->setBody($content, $mime); + /** @phpstan-ignore-next-line */ + if (version_compare(Swift::VERSION, '6.0.0', '>=')) { + $message->setDate(new \DateTimeImmutable()); + } else { + /** @phpstan-ignore-next-line */ + $message->setDate(time()); + } + + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL, 'https://mandrillapp.com/api/1.0/messages/send-raw.json'); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ + 'key' => $this->apiKey, + 'raw_message' => (string) $message, + 'async' => false, + ])); + + Curl\Util::execute($ch); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php new file mode 100644 index 00000000..3965aeea --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +/** + * Exception can be thrown if an extension for a handler is missing + * + * @author Christian Bergau + */ +class MissingExtensionException extends \Exception +{ +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php new file mode 100644 index 00000000..33ab68c6 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php @@ -0,0 +1,82 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use MongoDB\Driver\BulkWrite; +use MongoDB\Driver\Manager; +use MongoDB\Client; +use Monolog\Level; +use Monolog\Formatter\FormatterInterface; +use Monolog\Formatter\MongoDBFormatter; +use Monolog\LogRecord; + +/** + * Logs to a MongoDB database. + * + * Usage example: + * + * $log = new \Monolog\Logger('application'); + * $client = new \MongoDB\Client('mongodb://localhost:27017'); + * $mongodb = new \Monolog\Handler\MongoDBHandler($client, 'logs', 'prod'); + * $log->pushHandler($mongodb); + * + * The above examples uses the MongoDB PHP library's client class; however, the + * MongoDB\Driver\Manager class from ext-mongodb is also supported. + */ +class MongoDBHandler extends AbstractProcessingHandler +{ + private \MongoDB\Collection $collection; + + private Client|Manager $manager; + + private string|null $namespace = null; + + /** + * Constructor. + * + * @param Client|Manager $mongodb MongoDB library or driver client + * @param string $database Database name + * @param string $collection Collection name + */ + public function __construct(Client|Manager $mongodb, string $database, string $collection, int|string|Level $level = Level::Debug, bool $bubble = true) + { + if ($mongodb instanceof Client) { + $this->collection = $mongodb->selectCollection($database, $collection); + } else { + $this->manager = $mongodb; + $this->namespace = $database . '.' . $collection; + } + + parent::__construct($level, $bubble); + } + + protected function write(LogRecord $record): void + { + if (isset($this->collection)) { + $this->collection->insertOne($record->formatted); + } + + if (isset($this->manager, $this->namespace)) { + $bulk = new BulkWrite; + $bulk->insert($record->formatted); + $this->manager->executeBulkWrite($this->namespace, $bulk); + } + } + + /** + * @inheritDoc + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new MongoDBFormatter; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php new file mode 100644 index 00000000..d4c9d801 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php @@ -0,0 +1,167 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\Formatter\LineFormatter; + +/** + * NativeMailerHandler uses the mail() function to send the emails + * + * @author Christophe Coevoet + * @author Mark Garrett + */ +class NativeMailerHandler extends MailHandler +{ + /** + * The email addresses to which the message will be sent + * @var string[] + */ + protected array $to; + + /** + * The subject of the email + */ + protected string $subject; + + /** + * Optional headers for the message + * @var string[] + */ + protected array $headers = []; + + /** + * Optional parameters for the message + * @var string[] + */ + protected array $parameters = []; + + /** + * The wordwrap length for the message + */ + protected int $maxColumnWidth; + + /** + * The Content-type for the message + */ + protected string|null $contentType = null; + + /** + * The encoding for the message + */ + protected string $encoding = 'utf-8'; + + /** + * @param string|string[] $to The receiver of the mail + * @param string $subject The subject of the mail + * @param string $from The sender of the mail + * @param int $maxColumnWidth The maximum column width that the message lines will have + */ + public function __construct(string|array $to, string $subject, string $from, int|string|Level $level = Level::Error, bool $bubble = true, int $maxColumnWidth = 70) + { + parent::__construct($level, $bubble); + $this->to = (array) $to; + $this->subject = $subject; + $this->addHeader(sprintf('From: %s', $from)); + $this->maxColumnWidth = $maxColumnWidth; + } + + /** + * Add headers to the message + * + * @param string|string[] $headers Custom added headers + */ + public function addHeader($headers): self + { + foreach ((array) $headers as $header) { + if (strpos($header, "\n") !== false || strpos($header, "\r") !== false) { + throw new \InvalidArgumentException('Headers can not contain newline characters for security reasons'); + } + $this->headers[] = $header; + } + + return $this; + } + + /** + * Add parameters to the message + * + * @param string|string[] $parameters Custom added parameters + */ + public function addParameter($parameters): self + { + $this->parameters = array_merge($this->parameters, (array) $parameters); + + return $this; + } + + /** + * @inheritDoc + */ + protected function send(string $content, array $records): void + { + $contentType = $this->getContentType() ?? ($this->isHtmlBody($content) ? 'text/html' : 'text/plain'); + + if ($contentType !== 'text/html') { + $content = wordwrap($content, $this->maxColumnWidth); + } + + $headers = ltrim(implode("\r\n", $this->headers) . "\r\n", "\r\n"); + $headers .= 'Content-type: ' . $contentType . '; charset=' . $this->getEncoding() . "\r\n"; + if ($contentType === 'text/html' && false === strpos($headers, 'MIME-Version:')) { + $headers .= 'MIME-Version: 1.0' . "\r\n"; + } + + $subjectFormatter = new LineFormatter($this->subject); + $subject = $subjectFormatter->format($this->getHighestRecord($records)); + + $parameters = implode(' ', $this->parameters); + foreach ($this->to as $to) { + mail($to, $subject, $content, $headers, $parameters); + } + } + + public function getContentType(): ?string + { + return $this->contentType; + } + + public function getEncoding(): string + { + return $this->encoding; + } + + /** + * @param string $contentType The content type of the email - Defaults to text/plain. Use text/html for HTML messages. + */ + public function setContentType(string $contentType): self + { + if (strpos($contentType, "\n") !== false || strpos($contentType, "\r") !== false) { + throw new \InvalidArgumentException('The content type can not contain newline characters to prevent email header injection'); + } + + $this->contentType = $contentType; + + return $this; + } + + public function setEncoding(string $encoding): self + { + if (strpos($encoding, "\n") !== false || strpos($encoding, "\r") !== false) { + throw new \InvalidArgumentException('The encoding can not contain newline characters to prevent email header injection'); + } + + $this->encoding = $encoding; + + return $this; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php new file mode 100644 index 00000000..b8cb3785 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php @@ -0,0 +1,180 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\Utils; +use Monolog\Formatter\NormalizerFormatter; +use Monolog\Formatter\FormatterInterface; +use Monolog\LogRecord; + +/** + * Class to record a log on a NewRelic application. + * Enabling New Relic High Security mode may prevent capture of useful information. + * + * This handler requires a NormalizerFormatter to function and expects an array in $record->formatted + * + * @see https://docs.newrelic.com/docs/agents/php-agent + * @see https://docs.newrelic.com/docs/accounts-partnerships/accounts/security/high-security + */ +class NewRelicHandler extends AbstractProcessingHandler +{ + /** + * @inheritDoc + */ + public function __construct( + int|string|Level $level = Level::Error, + bool $bubble = true, + + /** + * Name of the New Relic application that will receive logs from this handler. + */ + protected string|null $appName = null, + + /** + * Some context and extra data is passed into the handler as arrays of values. Do we send them as is + * (useful if we are using the API), or explode them for display on the NewRelic RPM website? + */ + protected bool $explodeArrays = false, + + /** + * Name of the current transaction + */ + protected string|null $transactionName = null + ) { + parent::__construct($level, $bubble); + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + if (!$this->isNewRelicEnabled()) { + throw new MissingExtensionException('The newrelic PHP extension is required to use the NewRelicHandler'); + } + + if (null !== ($appName = $this->getAppName($record->context))) { + $this->setNewRelicAppName($appName); + } + + if (null !== ($transactionName = $this->getTransactionName($record->context))) { + $this->setNewRelicTransactionName($transactionName); + unset($record->formatted['context']['transaction_name']); + } + + if (isset($record->context['exception']) && $record->context['exception'] instanceof \Throwable) { + newrelic_notice_error($record->message, $record->context['exception']); + unset($record->formatted['context']['exception']); + } else { + newrelic_notice_error($record->message); + } + + if (isset($record->formatted['context']) && is_array($record->formatted['context'])) { + foreach ($record->formatted['context'] as $key => $parameter) { + if (is_array($parameter) && $this->explodeArrays) { + foreach ($parameter as $paramKey => $paramValue) { + $this->setNewRelicParameter('context_' . $key . '_' . $paramKey, $paramValue); + } + } else { + $this->setNewRelicParameter('context_' . $key, $parameter); + } + } + } + + if (isset($record->formatted['extra']) && is_array($record->formatted['extra'])) { + foreach ($record->formatted['extra'] as $key => $parameter) { + if (is_array($parameter) && $this->explodeArrays) { + foreach ($parameter as $paramKey => $paramValue) { + $this->setNewRelicParameter('extra_' . $key . '_' . $paramKey, $paramValue); + } + } else { + $this->setNewRelicParameter('extra_' . $key, $parameter); + } + } + } + } + + /** + * Checks whether the NewRelic extension is enabled in the system. + */ + protected function isNewRelicEnabled(): bool + { + return extension_loaded('newrelic'); + } + + /** + * Returns the appname where this log should be sent. Each log can override the default appname, set in this + * handler's constructor, by providing the appname in it's context. + * + * @param mixed[] $context + */ + protected function getAppName(array $context): ?string + { + if (isset($context['appname'])) { + return $context['appname']; + } + + return $this->appName; + } + + /** + * Returns the name of the current transaction. Each log can override the default transaction name, set in this + * handler's constructor, by providing the transaction_name in it's context + * + * @param mixed[] $context + */ + protected function getTransactionName(array $context): ?string + { + if (isset($context['transaction_name'])) { + return $context['transaction_name']; + } + + return $this->transactionName; + } + + /** + * Sets the NewRelic application that should receive this log. + */ + protected function setNewRelicAppName(string $appName): void + { + newrelic_set_appname($appName); + } + + /** + * Overwrites the name of the current transaction + */ + protected function setNewRelicTransactionName(string $transactionName): void + { + newrelic_name_transaction($transactionName); + } + + /** + * @param mixed $value + */ + protected function setNewRelicParameter(string $key, $value): void + { + if (null === $value || is_scalar($value)) { + newrelic_add_custom_parameter($key, $value); + } else { + newrelic_add_custom_parameter($key, Utils::jsonEncode($value, null, true)); + } + } + + /** + * @inheritDoc + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new NormalizerFormatter(); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/NoopHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/NoopHandler.php new file mode 100644 index 00000000..d9fea180 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/NoopHandler.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\LogRecord; + +/** + * No-op + * + * This handler handles anything, but does nothing, and does not stop bubbling to the rest of the stack. + * This can be used for testing, or to disable a handler when overriding a configuration without + * influencing the rest of the stack. + * + * @author Roel Harbers + */ +class NoopHandler extends Handler +{ + /** + * @inheritDoc + */ + public function isHandling(LogRecord $record): bool + { + return true; + } + + /** + * @inheritDoc + */ + public function handle(LogRecord $record): bool + { + return false; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php new file mode 100644 index 00000000..1aa84e4f --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php @@ -0,0 +1,56 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Psr\Log\LogLevel; +use Monolog\Logger; +use Monolog\LogRecord; + +/** + * Blackhole + * + * Any record it can handle will be thrown away. This can be used + * to put on top of an existing stack to override it temporarily. + * + * @author Jordi Boggiano + */ +class NullHandler extends Handler +{ + private Level $level; + + /** + * @param string|int|Level $level The minimum logging level at which this handler will be triggered + * + * @phpstan-param value-of|value-of|Level|LogLevel::* $level + */ + public function __construct(string|int|Level $level = Level::Debug) + { + $this->level = Logger::toMonologLevel($level); + } + + /** + * @inheritDoc + */ + public function isHandling(LogRecord $record): bool + { + return $record->level->value >= $this->level->value; + } + + /** + * @inheritDoc + */ + public function handle(LogRecord $record): bool + { + return $record->level->value >= $this->level->value; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.php new file mode 100644 index 00000000..a72b7a11 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.php @@ -0,0 +1,139 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\Formatter\FormatterInterface; +use Monolog\LogRecord; + +/** + * Handler to only pass log messages when a certain threshold of number of messages is reached. + * + * This can be useful in cases of processing a batch of data, but you're for example only interested + * in case it fails catastrophically instead of a warning for 1 or 2 events. Worse things can happen, right? + * + * Usage example: + * + * ``` + * $log = new Logger('application'); + * $handler = new SomeHandler(...) + * + * // Pass all warnings to the handler when more than 10 & all error messages when more then 5 + * $overflow = new OverflowHandler($handler, [Level::Warning->value => 10, Level::Error->value => 5]); + * + * $log->pushHandler($overflow); + *``` + * + * @author Kris Buist + */ +class OverflowHandler extends AbstractHandler implements FormattableHandlerInterface +{ + private HandlerInterface $handler; + + /** @var array */ + private array $thresholdMap = []; + + /** + * Buffer of all messages passed to the handler before the threshold was reached + * + * @var mixed[][] + */ + private array $buffer = []; + + /** + * @param array $thresholdMap Dictionary of log level value => threshold + */ + public function __construct( + HandlerInterface $handler, + array $thresholdMap = [], + $level = Level::Debug, + bool $bubble = true + ) { + $this->handler = $handler; + foreach ($thresholdMap as $thresholdLevel => $threshold) { + $this->thresholdMap[$thresholdLevel] = $threshold; + } + parent::__construct($level, $bubble); + } + + /** + * Handles a record. + * + * All records may be passed to this method, and the handler should discard + * those that it does not want to handle. + * + * The return value of this function controls the bubbling process of the handler stack. + * Unless the bubbling is interrupted (by returning true), the Logger class will keep on + * calling further handlers in the stack with a given log record. + * + * @inheritDoc + */ + public function handle(LogRecord $record): bool + { + if ($record->level->isLowerThan($this->level)) { + return false; + } + + $level = $record->level->value; + + if (!isset($this->thresholdMap[$level])) { + $this->thresholdMap[$level] = 0; + } + + if ($this->thresholdMap[$level] > 0) { + // The overflow threshold is not yet reached, so we're buffering the record and lowering the threshold by 1 + $this->thresholdMap[$level]--; + $this->buffer[$level][] = $record; + + return false === $this->bubble; + } + + if ($this->thresholdMap[$level] == 0) { + // This current message is breaking the threshold. Flush the buffer and continue handling the current record + foreach ($this->buffer[$level] ?? [] as $buffered) { + $this->handler->handle($buffered); + } + $this->thresholdMap[$level]--; + unset($this->buffer[$level]); + } + + $this->handler->handle($record); + + return false === $this->bubble; + } + + /** + * @inheritDoc + */ + public function setFormatter(FormatterInterface $formatter): HandlerInterface + { + if ($this->handler instanceof FormattableHandlerInterface) { + $this->handler->setFormatter($formatter); + + return $this; + } + + throw new \UnexpectedValueException('The nested handler of type '.get_class($this->handler).' does not support formatters.'); + } + + /** + * @inheritDoc + */ + public function getFormatter(): FormatterInterface + { + if ($this->handler instanceof FormattableHandlerInterface) { + return $this->handler->getFormatter(); + } + + throw new \UnexpectedValueException('The nested handler of type '.get_class($this->handler).' does not support formatters.'); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php new file mode 100644 index 00000000..8aa78e4c --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php @@ -0,0 +1,303 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\LineFormatter; +use Monolog\Formatter\FormatterInterface; +use Monolog\Level; +use Monolog\Utils; +use PhpConsole\Connector; +use PhpConsole\Handler as VendorPhpConsoleHandler; +use PhpConsole\Helper; +use Monolog\LogRecord; +use PhpConsole\Storage; + +/** + * Monolog handler for Google Chrome extension "PHP Console" + * + * Display PHP error/debug log messages in Google Chrome console and notification popups, executes PHP code remotely + * + * Usage: + * 1. Install Google Chrome extension [now dead and removed from the chrome store] + * 2. See overview https://github.com/barbushin/php-console#overview + * 3. Install PHP Console library https://github.com/barbushin/php-console#installation + * 4. Example (result will looks like http://i.hizliresim.com/vg3Pz4.png) + * + * $logger = new \Monolog\Logger('all', array(new \Monolog\Handler\PHPConsoleHandler())); + * \Monolog\ErrorHandler::register($logger); + * echo $undefinedVar; + * $logger->debug('SELECT * FROM users', array('db', 'time' => 0.012)); + * PC::debug($_SERVER); // PHP Console debugger for any type of vars + * + * @author Sergey Barbushin https://www.linkedin.com/in/barbushin + * @phpstan-type Options array{ + * enabled: bool, + * classesPartialsTraceIgnore: string[], + * debugTagsKeysInContext: array, + * useOwnErrorsHandler: bool, + * useOwnExceptionsHandler: bool, + * sourcesBasePath: string|null, + * registerHelper: bool, + * serverEncoding: string|null, + * headersLimit: int|null, + * password: string|null, + * enableSslOnlyMode: bool, + * ipMasks: string[], + * enableEvalListener: bool, + * dumperDetectCallbacks: bool, + * dumperLevelLimit: int, + * dumperItemsCountLimit: int, + * dumperItemSizeLimit: int, + * dumperDumpSizeLimit: int, + * detectDumpTraceAndSource: bool, + * dataStorage: Storage|null + * } + * @phpstan-type InputOptions array{ + * enabled?: bool, + * classesPartialsTraceIgnore?: string[], + * debugTagsKeysInContext?: array, + * useOwnErrorsHandler?: bool, + * useOwnExceptionsHandler?: bool, + * sourcesBasePath?: string|null, + * registerHelper?: bool, + * serverEncoding?: string|null, + * headersLimit?: int|null, + * password?: string|null, + * enableSslOnlyMode?: bool, + * ipMasks?: string[], + * enableEvalListener?: bool, + * dumperDetectCallbacks?: bool, + * dumperLevelLimit?: int, + * dumperItemsCountLimit?: int, + * dumperItemSizeLimit?: int, + * dumperDumpSizeLimit?: int, + * detectDumpTraceAndSource?: bool, + * dataStorage?: Storage|null + * } + * + * @deprecated Since 2.8.0 and 3.2.0, PHPConsole is abandoned and thus we will drop this handler in Monolog 4 + */ +class PHPConsoleHandler extends AbstractProcessingHandler +{ + /** + * @phpstan-var Options + */ + private array $options = [ + 'enabled' => true, // bool Is PHP Console server enabled + 'classesPartialsTraceIgnore' => ['Monolog\\'], // array Hide calls of classes started with... + 'debugTagsKeysInContext' => [0, 'tag'], // bool Is PHP Console server enabled + 'useOwnErrorsHandler' => false, // bool Enable errors handling + 'useOwnExceptionsHandler' => false, // bool Enable exceptions handling + 'sourcesBasePath' => null, // string Base path of all project sources to strip in errors source paths + 'registerHelper' => true, // bool Register PhpConsole\Helper that allows short debug calls like PC::debug($var, 'ta.g.s') + 'serverEncoding' => null, // string|null Server internal encoding + 'headersLimit' => null, // int|null Set headers size limit for your web-server + 'password' => null, // string|null Protect PHP Console connection by password + 'enableSslOnlyMode' => false, // bool Force connection by SSL for clients with PHP Console installed + 'ipMasks' => [], // array Set IP masks of clients that will be allowed to connect to PHP Console: array('192.168.*.*', '127.0.0.1') + 'enableEvalListener' => false, // bool Enable eval request to be handled by eval dispatcher(if enabled, 'password' option is also required) + 'dumperDetectCallbacks' => false, // bool Convert callback items in dumper vars to (callback SomeClass::someMethod) strings + 'dumperLevelLimit' => 5, // int Maximum dumped vars array or object nested dump level + 'dumperItemsCountLimit' => 100, // int Maximum dumped var same level array items or object properties number + 'dumperItemSizeLimit' => 5000, // int Maximum length of any string or dumped array item + 'dumperDumpSizeLimit' => 500000, // int Maximum approximate size of dumped vars result formatted in JSON + 'detectDumpTraceAndSource' => false, // bool Autodetect and append trace data to debug + 'dataStorage' => null, // \PhpConsole\Storage|null Fixes problem with custom $_SESSION handler(see http://goo.gl/Ne8juJ) + ]; + + private Connector $connector; + + /** + * @param array $options See \Monolog\Handler\PHPConsoleHandler::$options for more details + * @param Connector|null $connector Instance of \PhpConsole\Connector class (optional) + * @throws \RuntimeException + * @phpstan-param InputOptions $options + */ + public function __construct(array $options = [], ?Connector $connector = null, int|string|Level $level = Level::Debug, bool $bubble = true) + { + if (!class_exists('PhpConsole\Connector')) { + throw new \RuntimeException('PHP Console library not found. See https://github.com/barbushin/php-console#installation'); + } + parent::__construct($level, $bubble); + $this->options = $this->initOptions($options); + $this->connector = $this->initConnector($connector); + } + + /** + * @param array $options + * @return array + * + * @phpstan-param InputOptions $options + * @phpstan-return Options + */ + private function initOptions(array $options): array + { + $wrongOptions = array_diff(array_keys($options), array_keys($this->options)); + if (\count($wrongOptions) > 0) { + throw new \RuntimeException('Unknown options: ' . implode(', ', $wrongOptions)); + } + + return array_replace($this->options, $options); + } + + private function initConnector(?Connector $connector = null): Connector + { + if (null === $connector) { + if ($this->options['dataStorage'] instanceof Storage) { + Connector::setPostponeStorage($this->options['dataStorage']); + } + $connector = Connector::getInstance(); + } + + if ($this->options['registerHelper'] && !Helper::isRegistered()) { + Helper::register(); + } + + if ($this->options['enabled'] && $connector->isActiveClient()) { + if ($this->options['useOwnErrorsHandler'] || $this->options['useOwnExceptionsHandler']) { + $handler = VendorPhpConsoleHandler::getInstance(); + $handler->setHandleErrors($this->options['useOwnErrorsHandler']); + $handler->setHandleExceptions($this->options['useOwnExceptionsHandler']); + $handler->start(); + } + if (null !== $this->options['sourcesBasePath']) { + $connector->setSourcesBasePath($this->options['sourcesBasePath']); + } + if (null !== $this->options['serverEncoding']) { + $connector->setServerEncoding($this->options['serverEncoding']); + } + if (null !== $this->options['password']) { + $connector->setPassword($this->options['password']); + } + if ($this->options['enableSslOnlyMode']) { + $connector->enableSslOnlyMode(); + } + if (\count($this->options['ipMasks']) > 0) { + $connector->setAllowedIpMasks($this->options['ipMasks']); + } + if (null !== $this->options['headersLimit'] && $this->options['headersLimit'] > 0) { + $connector->setHeadersLimit($this->options['headersLimit']); + } + if ($this->options['detectDumpTraceAndSource']) { + $connector->getDebugDispatcher()->detectTraceAndSource = true; + } + $dumper = $connector->getDumper(); + $dumper->levelLimit = $this->options['dumperLevelLimit']; + $dumper->itemsCountLimit = $this->options['dumperItemsCountLimit']; + $dumper->itemSizeLimit = $this->options['dumperItemSizeLimit']; + $dumper->dumpSizeLimit = $this->options['dumperDumpSizeLimit']; + $dumper->detectCallbacks = $this->options['dumperDetectCallbacks']; + if ($this->options['enableEvalListener']) { + $connector->startEvalRequestsListener(); + } + } + + return $connector; + } + + public function getConnector(): Connector + { + return $this->connector; + } + + /** + * @return array + */ + public function getOptions(): array + { + return $this->options; + } + + public function handle(LogRecord $record): bool + { + if ($this->options['enabled'] && $this->connector->isActiveClient()) { + return parent::handle($record); + } + + return !$this->bubble; + } + + /** + * Writes the record down to the log of the implementing handler + */ + protected function write(LogRecord $record): void + { + if ($record->level->isLowerThan(Level::Notice)) { + $this->handleDebugRecord($record); + } elseif (isset($record->context['exception']) && $record->context['exception'] instanceof \Throwable) { + $this->handleExceptionRecord($record); + } else { + $this->handleErrorRecord($record); + } + } + + private function handleDebugRecord(LogRecord $record): void + { + [$tags, $filteredContext] = $this->getRecordTags($record); + $message = $record->message; + if (\count($filteredContext) > 0) { + $message .= ' ' . Utils::jsonEncode($this->connector->getDumper()->dump(array_filter($filteredContext)), null, true); + } + $this->connector->getDebugDispatcher()->dispatchDebug($message, $tags, $this->options['classesPartialsTraceIgnore']); + } + + private function handleExceptionRecord(LogRecord $record): void + { + $this->connector->getErrorsDispatcher()->dispatchException($record->context['exception']); + } + + private function handleErrorRecord(LogRecord $record): void + { + $context = $record->context; + + $this->connector->getErrorsDispatcher()->dispatchError( + $context['code'] ?? null, + $context['message'] ?? $record->message, + $context['file'] ?? null, + $context['line'] ?? null, + $this->options['classesPartialsTraceIgnore'] + ); + } + + /** + * @return array{string, mixed[]} + */ + private function getRecordTags(LogRecord $record): array + { + $tags = null; + $filteredContext = []; + if ($record->context !== []) { + $filteredContext = $record->context; + foreach ($this->options['debugTagsKeysInContext'] as $key) { + if (isset($filteredContext[$key])) { + $tags = $filteredContext[$key]; + if ($key === 0) { + array_shift($filteredContext); + } else { + unset($filteredContext[$key]); + } + break; + } + } + } + + return [$tags ?? $record->level->toPsrLogLevel(), $filteredContext]; + } + + /** + * @inheritDoc + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new LineFormatter('%message%'); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/ProcessHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ProcessHandler.php new file mode 100644 index 00000000..9edc9ac5 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ProcessHandler.php @@ -0,0 +1,186 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\LogRecord; + +/** + * Stores to STDIN of any process, specified by a command. + * + * Usage example: + *
+ * $log = new Logger('myLogger');
+ * $log->pushHandler(new ProcessHandler('/usr/bin/php /var/www/monolog/someScript.php'));
+ * 
+ * + * @author Kolja Zuelsdorf + */ +class ProcessHandler extends AbstractProcessingHandler +{ + /** + * Holds the process to receive data on its STDIN. + * + * @var resource|bool|null + */ + private $process; + + private string $command; + + private ?string $cwd; + + /** + * @var resource[] + */ + private array $pipes = []; + + /** + * @var array + */ + protected const DESCRIPTOR_SPEC = [ + 0 => ['pipe', 'r'], // STDIN is a pipe that the child will read from + 1 => ['pipe', 'w'], // STDOUT is a pipe that the child will write to + 2 => ['pipe', 'w'], // STDERR is a pipe to catch the any errors + ]; + + /** + * @param string $command Command for the process to start. Absolute paths are recommended, + * especially if you do not use the $cwd parameter. + * @param string|null $cwd "Current working directory" (CWD) for the process to be executed in. + * @throws \InvalidArgumentException + */ + public function __construct(string $command, int|string|Level $level = Level::Debug, bool $bubble = true, ?string $cwd = null) + { + if ($command === '') { + throw new \InvalidArgumentException('The command argument must be a non-empty string.'); + } + if ($cwd === '') { + throw new \InvalidArgumentException('The optional CWD argument must be a non-empty string or null.'); + } + + parent::__construct($level, $bubble); + + $this->command = $command; + $this->cwd = $cwd; + } + + /** + * Writes the record down to the log of the implementing handler + * + * @throws \UnexpectedValueException + */ + protected function write(LogRecord $record): void + { + $this->ensureProcessIsStarted(); + + $this->writeProcessInput($record->formatted); + + $errors = $this->readProcessErrors(); + if ($errors !== '') { + throw new \UnexpectedValueException(sprintf('Errors while writing to process: %s', $errors)); + } + } + + /** + * Makes sure that the process is actually started, and if not, starts it, + * assigns the stream pipes, and handles startup errors, if any. + */ + private function ensureProcessIsStarted(): void + { + if (is_resource($this->process) === false) { + $this->startProcess(); + + $this->handleStartupErrors(); + } + } + + /** + * Starts the actual process and sets all streams to non-blocking. + */ + private function startProcess(): void + { + $this->process = proc_open($this->command, static::DESCRIPTOR_SPEC, $this->pipes, $this->cwd); + + foreach ($this->pipes as $pipe) { + stream_set_blocking($pipe, false); + } + } + + /** + * Selects the STDERR stream, handles upcoming startup errors, and throws an exception, if any. + * + * @throws \UnexpectedValueException + */ + private function handleStartupErrors(): void + { + $selected = $this->selectErrorStream(); + if (false === $selected) { + throw new \UnexpectedValueException('Something went wrong while selecting a stream.'); + } + + $errors = $this->readProcessErrors(); + + if (is_resource($this->process) === false || $errors !== '') { + throw new \UnexpectedValueException( + sprintf('The process "%s" could not be opened: ' . $errors, $this->command) + ); + } + } + + /** + * Selects the STDERR stream. + * + * @return int|bool + */ + protected function selectErrorStream() + { + $empty = []; + $errorPipes = [$this->pipes[2]]; + + return stream_select($errorPipes, $empty, $empty, 1); + } + + /** + * Reads the errors of the process, if there are any. + * + * @codeCoverageIgnore + * @return string Empty string if there are no errors. + */ + protected function readProcessErrors(): string + { + return (string) stream_get_contents($this->pipes[2]); + } + + /** + * Writes to the input stream of the opened process. + * + * @codeCoverageIgnore + */ + protected function writeProcessInput(string $string): void + { + fwrite($this->pipes[0], $string); + } + + /** + * @inheritDoc + */ + public function close(): void + { + if (is_resource($this->process)) { + foreach ($this->pipes as $pipe) { + fclose($pipe); + } + proc_close($this->process); + $this->process = null; + } + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php new file mode 100644 index 00000000..9fb290fa --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php @@ -0,0 +1,43 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Processor\ProcessorInterface; +use Monolog\LogRecord; + +/** + * Interface to describe loggers that have processors + * + * @author Jordi Boggiano + */ +interface ProcessableHandlerInterface +{ + /** + * Adds a processor in the stack. + * + * @phpstan-param ProcessorInterface|(callable(LogRecord): LogRecord) $callback + * + * @param ProcessorInterface|callable $callback + * @return HandlerInterface self + */ + public function pushProcessor(callable $callback): HandlerInterface; + + /** + * Removes the processor on top of the stack and returns it. + * + * @phpstan-return ProcessorInterface|(callable(LogRecord): LogRecord) $callback + * + * @throws \LogicException In case the processor stack is empty + * @return callable|ProcessorInterface + */ + public function popProcessor(): callable; +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php new file mode 100644 index 00000000..74eedddd --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php @@ -0,0 +1,70 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\ResettableInterface; +use Monolog\Processor\ProcessorInterface; +use Monolog\LogRecord; + +/** + * Helper trait for implementing ProcessableInterface + * + * @author Jordi Boggiano + */ +trait ProcessableHandlerTrait +{ + /** + * @var callable[] + * @phpstan-var array<(callable(LogRecord): LogRecord)|ProcessorInterface> + */ + protected array $processors = []; + + /** + * @inheritDoc + */ + public function pushProcessor(callable $callback): HandlerInterface + { + array_unshift($this->processors, $callback); + + return $this; + } + + /** + * @inheritDoc + */ + public function popProcessor(): callable + { + if (\count($this->processors) === 0) { + throw new \LogicException('You tried to pop from an empty processor stack.'); + } + + return array_shift($this->processors); + } + + protected function processRecord(LogRecord $record): LogRecord + { + foreach ($this->processors as $processor) { + $record = $processor($record); + } + + return $record; + } + + protected function resetProcessors(): void + { + foreach ($this->processors as $processor) { + if ($processor instanceof ResettableInterface) { + $processor->reset(); + } + } + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php new file mode 100644 index 00000000..6599a83b --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php @@ -0,0 +1,87 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Psr\Log\LoggerInterface; +use Monolog\Formatter\FormatterInterface; +use Monolog\LogRecord; + +/** + * Proxies log messages to an existing PSR-3 compliant logger. + * + * If a formatter is configured, the formatter's output MUST be a string and the + * formatted message will be fed to the wrapped PSR logger instead of the original + * log record's message. + * + * @author Michael Moussa + */ +class PsrHandler extends AbstractHandler implements FormattableHandlerInterface +{ + /** + * PSR-3 compliant logger + */ + protected LoggerInterface $logger; + + protected FormatterInterface|null $formatter = null; + + /** + * @param LoggerInterface $logger The underlying PSR-3 compliant logger to which messages will be proxied + */ + public function __construct(LoggerInterface $logger, int|string|Level $level = Level::Debug, bool $bubble = true) + { + parent::__construct($level, $bubble); + + $this->logger = $logger; + } + + /** + * @inheritDoc + */ + public function handle(LogRecord $record): bool + { + if (!$this->isHandling($record)) { + return false; + } + + if ($this->formatter !== null) { + $formatted = $this->formatter->format($record); + $this->logger->log($record->level->toPsrLogLevel(), (string) $formatted, $record->context); + } else { + $this->logger->log($record->level->toPsrLogLevel(), $record->message, $record->context); + } + + return false === $this->bubble; + } + + /** + * Sets the formatter. + */ + public function setFormatter(FormatterInterface $formatter): HandlerInterface + { + $this->formatter = $formatter; + + return $this; + } + + /** + * Gets the formatter. + */ + public function getFormatter(): FormatterInterface + { + if ($this->formatter === null) { + throw new \LogicException('No formatter has been set and this handler does not have a default formatter'); + } + + return $this->formatter; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php new file mode 100644 index 00000000..118f5760 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php @@ -0,0 +1,242 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\Logger; +use Monolog\Utils; +use Psr\Log\LogLevel; +use Monolog\LogRecord; + +/** + * Sends notifications through the pushover api to mobile phones + * + * @author Sebastian Göttschkes + * @see https://www.pushover.net/api + */ +class PushoverHandler extends SocketHandler +{ + private string $token; + + /** @var array */ + private array $users; + + private string $title; + + private string|int|null $user = null; + + private int $retry; + + private int $expire; + + private Level $highPriorityLevel; + + private Level $emergencyLevel; + + private bool $useFormattedMessage = false; + + /** + * All parameters that can be sent to Pushover + * @see https://pushover.net/api + * @var array + */ + private array $parameterNames = [ + 'token' => true, + 'user' => true, + 'message' => true, + 'device' => true, + 'title' => true, + 'url' => true, + 'url_title' => true, + 'priority' => true, + 'timestamp' => true, + 'sound' => true, + 'retry' => true, + 'expire' => true, + 'callback' => true, + ]; + + /** + * Sounds the api supports by default + * @see https://pushover.net/api#sounds + * @var string[] + */ + private array $sounds = [ + 'pushover', 'bike', 'bugle', 'cashregister', 'classical', 'cosmic', 'falling', 'gamelan', 'incoming', + 'intermission', 'magic', 'mechanical', 'pianobar', 'siren', 'spacealarm', 'tugboat', 'alien', 'climb', + 'persistent', 'echo', 'updown', 'none', + ]; + + /** + * @param string $token Pushover api token + * @param string|array $users Pushover user id or array of ids the message will be sent to + * @param string|null $title Title sent to the Pushover API + * @param bool $useSSL Whether to connect via SSL. Required when pushing messages to users that are not + * the pushover.net app owner. OpenSSL is required for this option. + * @param int $retry The retry parameter specifies how often (in seconds) the Pushover servers will + * send the same notification to the user. + * @param int $expire The expire parameter specifies how many seconds your notification will continue + * to be retried for (every retry seconds). + * + * @param int|string|Level|LogLevel::* $highPriorityLevel The minimum logging level at which this handler will start + * sending "high priority" requests to the Pushover API + * @param int|string|Level|LogLevel::* $emergencyLevel The minimum logging level at which this handler will start + * sending "emergency" requests to the Pushover API + * + * + * @phpstan-param string|array $users + * @phpstan-param value-of|value-of|Level|LogLevel::* $highPriorityLevel + * @phpstan-param value-of|value-of|Level|LogLevel::* $emergencyLevel + */ + public function __construct( + string $token, + $users, + ?string $title = null, + int|string|Level $level = Level::Critical, + bool $bubble = true, + bool $useSSL = true, + int|string|Level $highPriorityLevel = Level::Critical, + int|string|Level $emergencyLevel = Level::Emergency, + int $retry = 30, + int $expire = 25200, + bool $persistent = false, + float $timeout = 0.0, + float $writingTimeout = 10.0, + ?float $connectionTimeout = null, + ?int $chunkSize = null + ) { + $connectionString = $useSSL ? 'ssl://api.pushover.net:443' : 'api.pushover.net:80'; + parent::__construct( + $connectionString, + $level, + $bubble, + $persistent, + $timeout, + $writingTimeout, + $connectionTimeout, + $chunkSize + ); + + $this->token = $token; + $this->users = (array) $users; + $this->title = $title ?? (string) gethostname(); + $this->highPriorityLevel = Logger::toMonologLevel($highPriorityLevel); + $this->emergencyLevel = Logger::toMonologLevel($emergencyLevel); + $this->retry = $retry; + $this->expire = $expire; + } + + protected function generateDataStream(LogRecord $record): string + { + $content = $this->buildContent($record); + + return $this->buildHeader($content) . $content; + } + + private function buildContent(LogRecord $record): string + { + // Pushover has a limit of 512 characters on title and message combined. + $maxMessageLength = 512 - strlen($this->title); + + $message = ($this->useFormattedMessage) ? $record->formatted : $record->message; + $message = Utils::substr($message, 0, $maxMessageLength); + + $timestamp = $record->datetime->getTimestamp(); + + $dataArray = [ + 'token' => $this->token, + 'user' => $this->user, + 'message' => $message, + 'title' => $this->title, + 'timestamp' => $timestamp, + ]; + + if ($record->level->value >= $this->emergencyLevel->value) { + $dataArray['priority'] = 2; + $dataArray['retry'] = $this->retry; + $dataArray['expire'] = $this->expire; + } elseif ($record->level->value >= $this->highPriorityLevel->value) { + $dataArray['priority'] = 1; + } + + // First determine the available parameters + $context = array_intersect_key($record->context, $this->parameterNames); + $extra = array_intersect_key($record->extra, $this->parameterNames); + + // Least important info should be merged with subsequent info + $dataArray = array_merge($extra, $context, $dataArray); + + // Only pass sounds that are supported by the API + if (isset($dataArray['sound']) && !in_array($dataArray['sound'], $this->sounds, true)) { + unset($dataArray['sound']); + } + + return http_build_query($dataArray); + } + + private function buildHeader(string $content): string + { + $header = "POST /1/messages.json HTTP/1.1\r\n"; + $header .= "Host: api.pushover.net\r\n"; + $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; + $header .= "Content-Length: " . strlen($content) . "\r\n"; + $header .= "\r\n"; + + return $header; + } + + protected function write(LogRecord $record): void + { + foreach ($this->users as $user) { + $this->user = $user; + + parent::write($record); + $this->closeSocket(); + } + + $this->user = null; + } + + /** + * @param int|string|Level|LogLevel::* $level + * + * @phpstan-param value-of|value-of|Level|LogLevel::* $level + */ + public function setHighPriorityLevel(int|string|Level $level): self + { + $this->highPriorityLevel = Logger::toMonologLevel($level); + + return $this; + } + + /** + * @param int|string|Level|LogLevel::* $level + * + * @phpstan-param value-of|value-of|Level|LogLevel::* $level + */ + public function setEmergencyLevel(int|string|Level $level): self + { + $this->emergencyLevel = Logger::toMonologLevel($level); + + return $this; + } + + /** + * Use the formatted message? + */ + public function useFormattedMessage(bool $useFormattedMessage): self + { + $this->useFormattedMessage = $useFormattedMessage; + + return $this; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php new file mode 100644 index 00000000..5eee5dc6 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php @@ -0,0 +1,94 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\LineFormatter; +use Monolog\Formatter\FormatterInterface; +use Monolog\Level; +use Monolog\LogRecord; +use Predis\Client as Predis; +use Redis; + +/** + * Logs to a Redis key using rpush + * + * usage example: + * + * $log = new Logger('application'); + * $redis = new RedisHandler(new Predis\Client("tcp://localhost:6379"), "logs", "prod"); + * $log->pushHandler($redis); + * + * @author Thomas Tourlourat + */ +class RedisHandler extends AbstractProcessingHandler +{ + /** @var Predis|Redis */ + private Predis|Redis $redisClient; + private string $redisKey; + protected int $capSize; + + /** + * @param Predis|Redis $redis The redis instance + * @param string $key The key name to push records to + * @param int $capSize Number of entries to limit list size to, 0 = unlimited + */ + public function __construct(Predis|Redis $redis, string $key, int|string|Level $level = Level::Debug, bool $bubble = true, int $capSize = 0) + { + $this->redisClient = $redis; + $this->redisKey = $key; + $this->capSize = $capSize; + + parent::__construct($level, $bubble); + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + if ($this->capSize > 0) { + $this->writeCapped($record); + } else { + $this->redisClient->rpush($this->redisKey, $record->formatted); + } + } + + /** + * Write and cap the collection + * Writes the record to the redis list and caps its + */ + protected function writeCapped(LogRecord $record): void + { + if ($this->redisClient instanceof Redis) { + $mode = defined('Redis::MULTI') ? Redis::MULTI : 1; + $this->redisClient->multi($mode) + ->rPush($this->redisKey, $record->formatted) + ->ltrim($this->redisKey, -$this->capSize, -1) + ->exec(); + } else { + $redisKey = $this->redisKey; + $capSize = $this->capSize; + $this->redisClient->transaction(function ($tx) use ($record, $redisKey, $capSize) { + $tx->rpush($redisKey, $record->formatted); + $tx->ltrim($redisKey, -$capSize, -1); + }); + } + } + + /** + * @inheritDoc + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new LineFormatter(); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php new file mode 100644 index 00000000..fa8e9e9f --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php @@ -0,0 +1,65 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\LineFormatter; +use Monolog\Formatter\FormatterInterface; +use Monolog\Level; +use Monolog\LogRecord; +use Predis\Client as Predis; +use Redis; + +/** + * Sends the message to a Redis Pub/Sub channel using PUBLISH + * + * usage example: + * + * $log = new Logger('application'); + * $redis = new RedisPubSubHandler(new Predis\Client("tcp://localhost:6379"), "logs", Level::Warning); + * $log->pushHandler($redis); + * + * @author Gaëtan Faugère + */ +class RedisPubSubHandler extends AbstractProcessingHandler +{ + /** @var Predis|Redis */ + private Predis|Redis $redisClient; + private string $channelKey; + + /** + * @param Predis|Redis $redis The redis instance + * @param string $key The channel key to publish records to + */ + public function __construct(Predis|Redis $redis, string $key, int|string|Level $level = Level::Debug, bool $bubble = true) + { + $this->redisClient = $redis; + $this->channelKey = $key; + + parent::__construct($level, $bubble); + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + $this->redisClient->publish($this->channelKey, $record->formatted); + } + + /** + * @inheritDoc + */ + protected function getDefaultFormatter(): FormatterInterface + { + return new LineFormatter(); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php new file mode 100644 index 00000000..1d124723 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php @@ -0,0 +1,133 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Rollbar\RollbarLogger; +use Throwable; +use Monolog\LogRecord; + +/** + * Sends errors to Rollbar + * + * If the context data contains a `payload` key, that is used as an array + * of payload options to RollbarLogger's log method. + * + * Rollbar's context info will contain the context + extra keys from the log record + * merged, and then on top of that a few keys: + * + * - level (rollbar level name) + * - monolog_level (monolog level name, raw level, as rollbar only has 5 but monolog 8) + * - channel + * - datetime (unix timestamp) + * + * @author Paul Statezny + */ +class RollbarHandler extends AbstractProcessingHandler +{ + protected RollbarLogger $rollbarLogger; + + /** + * Records whether any log records have been added since the last flush of the rollbar notifier + */ + private bool $hasRecords = false; + + protected bool $initialized = false; + + /** + * @param RollbarLogger $rollbarLogger RollbarLogger object constructed with valid token + */ + public function __construct(RollbarLogger $rollbarLogger, int|string|Level $level = Level::Error, bool $bubble = true) + { + $this->rollbarLogger = $rollbarLogger; + + parent::__construct($level, $bubble); + } + + /** + * Translates Monolog log levels to Rollbar levels. + * + * @return 'debug'|'info'|'warning'|'error'|'critical' + */ + protected function toRollbarLevel(Level $level): string + { + return match ($level) { + Level::Debug => 'debug', + Level::Info => 'info', + Level::Notice => 'info', + Level::Warning => 'warning', + Level::Error => 'error', + Level::Critical => 'critical', + Level::Alert => 'critical', + Level::Emergency => 'critical', + }; + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + if (!$this->initialized) { + // __destructor() doesn't get called on Fatal errors + register_shutdown_function([$this, 'close']); + $this->initialized = true; + } + + $context = $record->context; + $context = array_merge($context, $record->extra, [ + 'level' => $this->toRollbarLevel($record->level), + 'monolog_level' => $record->level->getName(), + 'channel' => $record->channel, + 'datetime' => $record->datetime->format('U'), + ]); + + if (isset($context['exception']) && $context['exception'] instanceof Throwable) { + $exception = $context['exception']; + unset($context['exception']); + $toLog = $exception; + } else { + $toLog = $record->message; + } + + // @phpstan-ignore-next-line + $this->rollbarLogger->log($context['level'], $toLog, $context); + + $this->hasRecords = true; + } + + public function flush(): void + { + if ($this->hasRecords) { + $this->rollbarLogger->flush(); + $this->hasRecords = false; + } + } + + /** + * @inheritDoc + */ + public function close(): void + { + $this->flush(); + } + + /** + * @inheritDoc + */ + public function reset(): void + { + $this->flush(); + + parent::reset(); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php new file mode 100644 index 00000000..12ce6923 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php @@ -0,0 +1,201 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use InvalidArgumentException; +use Monolog\Level; +use Monolog\Utils; +use Monolog\LogRecord; + +/** + * Stores logs to files that are rotated every day and a limited number of files are kept. + * + * This rotation is only intended to be used as a workaround. Using logrotate to + * handle the rotation is strongly encouraged when you can use it. + * + * @author Christophe Coevoet + * @author Jordi Boggiano + */ +class RotatingFileHandler extends StreamHandler +{ + public const FILE_PER_DAY = 'Y-m-d'; + public const FILE_PER_MONTH = 'Y-m'; + public const FILE_PER_YEAR = 'Y'; + + protected string $filename; + protected int $maxFiles; + protected bool|null $mustRotate = null; + protected \DateTimeImmutable $nextRotation; + protected string $filenameFormat; + protected string $dateFormat; + + /** + * @param int $maxFiles The maximal amount of files to keep (0 means unlimited) + * @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write) + * @param bool $useLocking Try to lock log file before doing any writes + */ + public function __construct(string $filename, int $maxFiles = 0, int|string|Level $level = Level::Debug, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false) + { + $this->filename = Utils::canonicalizePath($filename); + $this->maxFiles = $maxFiles; + $this->nextRotation = new \DateTimeImmutable('tomorrow'); + $this->filenameFormat = '{filename}-{date}'; + $this->dateFormat = static::FILE_PER_DAY; + + parent::__construct($this->getTimedFilename(), $level, $bubble, $filePermission, $useLocking); + } + + /** + * @inheritDoc + */ + public function close(): void + { + parent::close(); + + if (true === $this->mustRotate) { + $this->rotate(); + } + } + + /** + * @inheritDoc + */ + public function reset(): void + { + parent::reset(); + + if (true === $this->mustRotate) { + $this->rotate(); + } + } + + public function setFilenameFormat(string $filenameFormat, string $dateFormat): self + { + if (0 === preg_match('{^[Yy](([/_.-]?m)([/_.-]?d)?)?$}', $dateFormat)) { + throw new InvalidArgumentException( + 'Invalid date format - format must be one of '. + 'RotatingFileHandler::FILE_PER_DAY ("Y-m-d"), RotatingFileHandler::FILE_PER_MONTH ("Y-m") '. + 'or RotatingFileHandler::FILE_PER_YEAR ("Y"), or you can set one of the '. + 'date formats using slashes, underscores and/or dots instead of dashes.' + ); + } + if (substr_count($filenameFormat, '{date}') === 0) { + throw new InvalidArgumentException( + 'Invalid filename format - format must contain at least `{date}`, because otherwise rotating is impossible.' + ); + } + $this->filenameFormat = $filenameFormat; + $this->dateFormat = $dateFormat; + $this->url = $this->getTimedFilename(); + $this->close(); + + return $this; + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + // on the first record written, if the log is new, we should rotate (once per day) + if (null === $this->mustRotate) { + $this->mustRotate = null === $this->url || !file_exists($this->url); + } + + if ($this->nextRotation <= $record->datetime) { + $this->mustRotate = true; + $this->close(); + } + + parent::write($record); + } + + /** + * Rotates the files. + */ + protected function rotate(): void + { + // update filename + $this->url = $this->getTimedFilename(); + $this->nextRotation = new \DateTimeImmutable('tomorrow'); + + // skip GC of old logs if files are unlimited + if (0 === $this->maxFiles) { + return; + } + + $logFiles = glob($this->getGlobPattern()); + if (false === $logFiles) { + // failed to glob + return; + } + + if ($this->maxFiles >= count($logFiles)) { + // no files to remove + return; + } + + // Sorting the files by name to remove the older ones + usort($logFiles, function ($a, $b) { + return strcmp($b, $a); + }); + + foreach (array_slice($logFiles, $this->maxFiles) as $file) { + if (is_writable($file)) { + // suppress errors here as unlink() might fail if two processes + // are cleaning up/rotating at the same time + set_error_handler(function (int $errno, string $errstr, string $errfile, int $errline): bool { + return false; + }); + unlink($file); + restore_error_handler(); + } + } + + $this->mustRotate = false; + } + + protected function getTimedFilename(): string + { + $fileInfo = pathinfo($this->filename); + $timedFilename = str_replace( + ['{filename}', '{date}'], + [$fileInfo['filename'], date($this->dateFormat)], + $fileInfo['dirname'] . '/' . $this->filenameFormat + ); + + if (isset($fileInfo['extension'])) { + $timedFilename .= '.'.$fileInfo['extension']; + } + + return $timedFilename; + } + + protected function getGlobPattern(): string + { + $fileInfo = pathinfo($this->filename); + $glob = str_replace( + ['{filename}', '{date}'], + [$fileInfo['filename'], str_replace( + ['Y', 'y', 'm', 'd'], + ['[0-9][0-9][0-9][0-9]', '[0-9][0-9]', '[0-9][0-9]', '[0-9][0-9]'], + $this->dateFormat) + ], + $fileInfo['dirname'] . '/' . $this->filenameFormat + ); + if (isset($fileInfo['extension'])) { + $glob .= '.'.$fileInfo['extension']; + } + + return $glob; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php new file mode 100644 index 00000000..511ec585 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php @@ -0,0 +1,121 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Closure; +use Monolog\Formatter\FormatterInterface; +use Monolog\LogRecord; + +/** + * Sampling handler + * + * A sampled event stream can be useful for logging high frequency events in + * a production environment where you only need an idea of what is happening + * and are not concerned with capturing every occurrence. Since the decision to + * handle or not handle a particular event is determined randomly, the + * resulting sampled log is not guaranteed to contain 1/N of the events that + * occurred in the application, but based on the Law of large numbers, it will + * tend to be close to this ratio with a large number of attempts. + * + * @author Bryan Davis + * @author Kunal Mehta + */ +class SamplingHandler extends AbstractHandler implements ProcessableHandlerInterface, FormattableHandlerInterface +{ + use ProcessableHandlerTrait; + + /** + * Handler or factory Closure($record, $this) + * + * @phpstan-var (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface + */ + protected Closure|HandlerInterface $handler; + + protected int $factor; + + /** + * @phpstan-param (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface $handler + * + * @param Closure|HandlerInterface $handler Handler or factory Closure($record|null, $samplingHandler). + * @param int $factor Sample factor (e.g. 10 means every ~10th record is sampled) + */ + public function __construct(Closure|HandlerInterface $handler, int $factor) + { + parent::__construct(); + $this->handler = $handler; + $this->factor = $factor; + } + + public function isHandling(LogRecord $record): bool + { + return $this->getHandler($record)->isHandling($record); + } + + public function handle(LogRecord $record): bool + { + if ($this->isHandling($record) && mt_rand(1, $this->factor) === 1) { + if (\count($this->processors) > 0) { + $record = $this->processRecord($record); + } + + $this->getHandler($record)->handle($record); + } + + return false === $this->bubble; + } + + /** + * Return the nested handler + * + * If the handler was provided as a factory, this will trigger the handler's instantiation. + */ + public function getHandler(LogRecord $record = null): HandlerInterface + { + if (!$this->handler instanceof HandlerInterface) { + $handler = ($this->handler)($record, $this); + if (!$handler instanceof HandlerInterface) { + throw new \RuntimeException("The factory Closure should return a HandlerInterface"); + } + $this->handler = $handler; + } + + return $this->handler; + } + + /** + * @inheritDoc + */ + public function setFormatter(FormatterInterface $formatter): HandlerInterface + { + $handler = $this->getHandler(); + if ($handler instanceof FormattableHandlerInterface) { + $handler->setFormatter($formatter); + + return $this; + } + + throw new \UnexpectedValueException('The nested handler of type '.get_class($handler).' does not support formatters.'); + } + + /** + * @inheritDoc + */ + public function getFormatter(): FormatterInterface + { + $handler = $this->getHandler(); + if ($handler instanceof FormattableHandlerInterface) { + return $handler->getFormatter(); + } + + throw new \UnexpectedValueException('The nested handler of type '.get_class($handler).' does not support formatters.'); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.php new file mode 100644 index 00000000..6228a02f --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.php @@ -0,0 +1,98 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; + +/** + * SendGridrHandler uses the SendGrid API v2 function to send Log emails, more information in https://sendgrid.com/docs/API_Reference/Web_API/mail.html + * + * @author Ricardo Fontanelli + */ +class SendGridHandler extends MailHandler +{ + /** + * The SendGrid API User + */ + protected string $apiUser; + + /** + * The SendGrid API Key + */ + protected string $apiKey; + + /** + * The email addresses to which the message will be sent + */ + protected string $from; + + /** + * The email addresses to which the message will be sent + * @var string[] + */ + protected array $to; + + /** + * The subject of the email + */ + protected string $subject; + + /** + * @param string $apiUser The SendGrid API User + * @param string $apiKey The SendGrid API Key + * @param string $from The sender of the email + * @param string|string[] $to The recipients of the email + * @param string $subject The subject of the mail + */ + public function __construct(string $apiUser, string $apiKey, string $from, string|array $to, string $subject, int|string|Level $level = Level::Error, bool $bubble = true) + { + if (!extension_loaded('curl')) { + throw new MissingExtensionException('The curl extension is needed to use the SendGridHandler'); + } + + parent::__construct($level, $bubble); + $this->apiUser = $apiUser; + $this->apiKey = $apiKey; + $this->from = $from; + $this->to = (array) $to; + $this->subject = $subject; + } + + /** + * @inheritDoc + */ + protected function send(string $content, array $records): void + { + $message = []; + $message['api_user'] = $this->apiUser; + $message['api_key'] = $this->apiKey; + $message['from'] = $this->from; + foreach ($this->to as $recipient) { + $message['to[]'] = $recipient; + } + $message['subject'] = $this->subject; + $message['date'] = date('r'); + + if ($this->isHtmlBody($content)) { + $message['html'] = $content; + } else { + $message['text'] = $content; + } + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, 'https://api.sendgrid.com/api/mail.send.json'); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($message)); + Curl\Util::execute($ch, 2); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php new file mode 100644 index 00000000..7e9cccc9 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php @@ -0,0 +1,367 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler\Slack; + +use Monolog\Level; +use Monolog\Utils; +use Monolog\Formatter\NormalizerFormatter; +use Monolog\Formatter\FormatterInterface; +use Monolog\LogRecord; + +/** + * Slack record utility helping to log to Slack webhooks or API. + * + * @author Greg Kedzierski + * @author Haralan Dobrev + * @see https://api.slack.com/incoming-webhooks + * @see https://api.slack.com/docs/message-attachments + */ +class SlackRecord +{ + public const COLOR_DANGER = 'danger'; + + public const COLOR_WARNING = 'warning'; + + public const COLOR_GOOD = 'good'; + + public const COLOR_DEFAULT = '#e3e4e6'; + + /** + * Slack channel (encoded ID or name) + */ + private string|null $channel; + + /** + * Name of a bot + */ + private string|null $username; + + /** + * User icon e.g. 'ghost', 'http://example.com/user.png' + */ + private string|null $userIcon; + + /** + * Whether the message should be added to Slack as attachment (plain text otherwise) + */ + private bool $useAttachment; + + /** + * Whether the the context/extra messages added to Slack as attachments are in a short style + */ + private bool $useShortAttachment; + + /** + * Whether the attachment should include context and extra data + */ + private bool $includeContextAndExtra; + + /** + * Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2'] + * @var string[] + */ + private array $excludeFields; + + private FormatterInterface|null $formatter; + + private NormalizerFormatter $normalizerFormatter; + + /** + * @param string[] $excludeFields + */ + public function __construct( + ?string $channel = null, + ?string $username = null, + bool $useAttachment = true, + ?string $userIcon = null, + bool $useShortAttachment = false, + bool $includeContextAndExtra = false, + array $excludeFields = [], + FormatterInterface $formatter = null + ) { + $this + ->setChannel($channel) + ->setUsername($username) + ->useAttachment($useAttachment) + ->setUserIcon($userIcon) + ->useShortAttachment($useShortAttachment) + ->includeContextAndExtra($includeContextAndExtra) + ->excludeFields($excludeFields) + ->setFormatter($formatter); + + if ($this->includeContextAndExtra) { + $this->normalizerFormatter = new NormalizerFormatter(); + } + } + + /** + * Returns required data in format that Slack + * is expecting. + * + * @phpstan-return mixed[] + */ + public function getSlackData(LogRecord $record): array + { + $dataArray = []; + + if ($this->username !== null) { + $dataArray['username'] = $this->username; + } + + if ($this->channel !== null) { + $dataArray['channel'] = $this->channel; + } + + if ($this->formatter !== null && !$this->useAttachment) { + $message = $this->formatter->format($record); + } else { + $message = $record->message; + } + + $recordData = $this->removeExcludedFields($record); + + if ($this->useAttachment) { + $attachment = [ + 'fallback' => $message, + 'text' => $message, + 'color' => $this->getAttachmentColor($record->level), + 'fields' => [], + 'mrkdwn_in' => ['fields'], + 'ts' => $recordData['datetime']->getTimestamp(), + 'footer' => $this->username, + 'footer_icon' => $this->userIcon, + ]; + + if ($this->useShortAttachment) { + $attachment['title'] = $recordData['level_name']; + } else { + $attachment['title'] = 'Message'; + $attachment['fields'][] = $this->generateAttachmentField('Level', $recordData['level_name']); + } + + if ($this->includeContextAndExtra) { + foreach (['extra', 'context'] as $key) { + if (!isset($recordData[$key]) || \count($recordData[$key]) === 0) { + continue; + } + + if ($this->useShortAttachment) { + $attachment['fields'][] = $this->generateAttachmentField( + $key, + $recordData[$key] + ); + } else { + // Add all extra fields as individual fields in attachment + $attachment['fields'] = array_merge( + $attachment['fields'], + $this->generateAttachmentFields($recordData[$key]) + ); + } + } + } + + $dataArray['attachments'] = [$attachment]; + } else { + $dataArray['text'] = $message; + } + + if ($this->userIcon !== null) { + if (false !== ($iconUrl = filter_var($this->userIcon, FILTER_VALIDATE_URL))) { + $dataArray['icon_url'] = $iconUrl; + } else { + $dataArray['icon_emoji'] = ":{$this->userIcon}:"; + } + } + + return $dataArray; + } + + /** + * Returns a Slack message attachment color associated with + * provided level. + */ + public function getAttachmentColor(Level $level): string + { + return match ($level) { + Level::Error, Level::Critical, Level::Alert, Level::Emergency => static::COLOR_DANGER, + Level::Warning => static::COLOR_WARNING, + Level::Info, Level::Notice => static::COLOR_GOOD, + Level::Debug => static::COLOR_DEFAULT + }; + } + + /** + * Stringifies an array of key/value pairs to be used in attachment fields + * + * @param mixed[] $fields + */ + public function stringify(array $fields): string + { + /** @var array $normalized */ + $normalized = $this->normalizerFormatter->normalizeValue($fields); + + $hasSecondDimension = \count(array_filter($normalized, 'is_array')) > 0; + $hasOnlyNonNumericKeys = \count(array_filter(array_keys($normalized), 'is_numeric')) === 0; + + return $hasSecondDimension || $hasOnlyNonNumericKeys + ? Utils::jsonEncode($normalized, JSON_PRETTY_PRINT|Utils::DEFAULT_JSON_FLAGS) + : Utils::jsonEncode($normalized, Utils::DEFAULT_JSON_FLAGS); + } + + /** + * Channel used by the bot when posting + * + * @param ?string $channel + * + * @return static + */ + public function setChannel(?string $channel = null): self + { + $this->channel = $channel; + + return $this; + } + + /** + * Username used by the bot when posting + * + * @param ?string $username + * + * @return static + */ + public function setUsername(?string $username = null): self + { + $this->username = $username; + + return $this; + } + + public function useAttachment(bool $useAttachment = true): self + { + $this->useAttachment = $useAttachment; + + return $this; + } + + public function setUserIcon(?string $userIcon = null): self + { + $this->userIcon = $userIcon; + + if (\is_string($userIcon)) { + $this->userIcon = trim($userIcon, ':'); + } + + return $this; + } + + public function useShortAttachment(bool $useShortAttachment = false): self + { + $this->useShortAttachment = $useShortAttachment; + + return $this; + } + + public function includeContextAndExtra(bool $includeContextAndExtra = false): self + { + $this->includeContextAndExtra = $includeContextAndExtra; + + if ($this->includeContextAndExtra) { + $this->normalizerFormatter = new NormalizerFormatter(); + } + + return $this; + } + + /** + * @param string[] $excludeFields + */ + public function excludeFields(array $excludeFields = []): self + { + $this->excludeFields = $excludeFields; + + return $this; + } + + public function setFormatter(?FormatterInterface $formatter = null): self + { + $this->formatter = $formatter; + + return $this; + } + + /** + * Generates attachment field + * + * @param string|mixed[] $value + * + * @return array{title: string, value: string, short: false} + */ + private function generateAttachmentField(string $title, $value): array + { + $value = is_array($value) + ? sprintf('```%s```', substr($this->stringify($value), 0, 1990)) + : $value; + + return [ + 'title' => ucfirst($title), + 'value' => $value, + 'short' => false, + ]; + } + + /** + * Generates a collection of attachment fields from array + * + * @param mixed[] $data + * + * @return array + */ + private function generateAttachmentFields(array $data): array + { + /** @var array $normalized */ + $normalized = $this->normalizerFormatter->normalizeValue($data); + + $fields = []; + foreach ($normalized as $key => $value) { + $fields[] = $this->generateAttachmentField((string) $key, $value); + } + + return $fields; + } + + /** + * Get a copy of record with fields excluded according to $this->excludeFields + * + * @return mixed[] + */ + private function removeExcludedFields(LogRecord $record): array + { + $recordData = $record->toArray(); + foreach ($this->excludeFields as $field) { + $keys = explode('.', $field); + $node = &$recordData; + $lastKey = end($keys); + foreach ($keys as $key) { + if (!isset($node[$key])) { + break; + } + if ($lastKey === $key) { + unset($node[$key]); + break; + } + $node = &$node[$key]; + } + } + + return $recordData; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php new file mode 100644 index 00000000..321d8660 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php @@ -0,0 +1,250 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FormatterInterface; +use Monolog\Level; +use Monolog\Utils; +use Monolog\Handler\Slack\SlackRecord; +use Monolog\LogRecord; + +/** + * Sends notifications through Slack API + * + * @author Greg Kedzierski + * @see https://api.slack.com/ + */ +class SlackHandler extends SocketHandler +{ + /** + * Slack API token + */ + private string $token; + + /** + * Instance of the SlackRecord util class preparing data for Slack API. + */ + private SlackRecord $slackRecord; + + /** + * @param string $token Slack API token + * @param string $channel Slack channel (encoded ID or name) + * @param string|null $username Name of a bot + * @param bool $useAttachment Whether the message should be added to Slack as attachment (plain text otherwise) + * @param string|null $iconEmoji The emoji name to use (or null) + * @param bool $useShortAttachment Whether the context/extra messages added to Slack as attachments are in a short style + * @param bool $includeContextAndExtra Whether the attachment should include context and extra data + * @param string[] $excludeFields Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2'] + * @throws MissingExtensionException If no OpenSSL PHP extension configured + */ + public function __construct( + string $token, + string $channel, + ?string $username = null, + bool $useAttachment = true, + ?string $iconEmoji = null, + $level = Level::Critical, + bool $bubble = true, + bool $useShortAttachment = false, + bool $includeContextAndExtra = false, + array $excludeFields = [], + bool $persistent = false, + float $timeout = 0.0, + float $writingTimeout = 10.0, + ?float $connectionTimeout = null, + ?int $chunkSize = null + ) { + if (!extension_loaded('openssl')) { + throw new MissingExtensionException('The OpenSSL PHP extension is required to use the SlackHandler'); + } + + parent::__construct( + 'ssl://slack.com:443', + $level, + $bubble, + $persistent, + $timeout, + $writingTimeout, + $connectionTimeout, + $chunkSize + ); + + $this->slackRecord = new SlackRecord( + $channel, + $username, + $useAttachment, + $iconEmoji, + $useShortAttachment, + $includeContextAndExtra, + $excludeFields + ); + + $this->token = $token; + } + + public function getSlackRecord(): SlackRecord + { + return $this->slackRecord; + } + + public function getToken(): string + { + return $this->token; + } + + /** + * @inheritDoc + */ + protected function generateDataStream(LogRecord $record): string + { + $content = $this->buildContent($record); + + return $this->buildHeader($content) . $content; + } + + /** + * Builds the body of API call + */ + private function buildContent(LogRecord $record): string + { + $dataArray = $this->prepareContentData($record); + + return http_build_query($dataArray); + } + + /** + * @return string[] + */ + protected function prepareContentData(LogRecord $record): array + { + $dataArray = $this->slackRecord->getSlackData($record); + $dataArray['token'] = $this->token; + + if (isset($dataArray['attachments']) && is_array($dataArray['attachments']) && \count($dataArray['attachments']) > 0) { + $dataArray['attachments'] = Utils::jsonEncode($dataArray['attachments']); + } + + return $dataArray; + } + + /** + * Builds the header of the API Call + */ + private function buildHeader(string $content): string + { + $header = "POST /api/chat.postMessage HTTP/1.1\r\n"; + $header .= "Host: slack.com\r\n"; + $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; + $header .= "Content-Length: " . strlen($content) . "\r\n"; + $header .= "\r\n"; + + return $header; + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + parent::write($record); + $this->finalizeWrite(); + } + + /** + * Finalizes the request by reading some bytes and then closing the socket + * + * If we do not read some but close the socket too early, slack sometimes + * drops the request entirely. + */ + protected function finalizeWrite(): void + { + $res = $this->getResource(); + if (is_resource($res)) { + @fread($res, 2048); + } + $this->closeSocket(); + } + + public function setFormatter(FormatterInterface $formatter): HandlerInterface + { + parent::setFormatter($formatter); + $this->slackRecord->setFormatter($formatter); + + return $this; + } + + public function getFormatter(): FormatterInterface + { + $formatter = parent::getFormatter(); + $this->slackRecord->setFormatter($formatter); + + return $formatter; + } + + /** + * Channel used by the bot when posting + */ + public function setChannel(string $channel): self + { + $this->slackRecord->setChannel($channel); + + return $this; + } + + /** + * Username used by the bot when posting + */ + public function setUsername(string $username): self + { + $this->slackRecord->setUsername($username); + + return $this; + } + + public function useAttachment(bool $useAttachment): self + { + $this->slackRecord->useAttachment($useAttachment); + + return $this; + } + + public function setIconEmoji(string $iconEmoji): self + { + $this->slackRecord->setUserIcon($iconEmoji); + + return $this; + } + + public function useShortAttachment(bool $useShortAttachment): self + { + $this->slackRecord->useShortAttachment($useShortAttachment); + + return $this; + } + + public function includeContextAndExtra(bool $includeContextAndExtra): self + { + $this->slackRecord->includeContextAndExtra($includeContextAndExtra); + + return $this; + } + + /** + * @param string[] $excludeFields + */ + public function excludeFields(array $excludeFields): self + { + $this->slackRecord->excludeFields($excludeFields); + + return $this; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php new file mode 100644 index 00000000..14ed6b1f --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php @@ -0,0 +1,129 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FormatterInterface; +use Monolog\Level; +use Monolog\Utils; +use Monolog\Handler\Slack\SlackRecord; +use Monolog\LogRecord; + +/** + * Sends notifications through Slack Webhooks + * + * @author Haralan Dobrev + * @see https://api.slack.com/incoming-webhooks + */ +class SlackWebhookHandler extends AbstractProcessingHandler +{ + /** + * Slack Webhook token + */ + private string $webhookUrl; + + /** + * Instance of the SlackRecord util class preparing data for Slack API. + */ + private SlackRecord $slackRecord; + + /** + * @param string $webhookUrl Slack Webhook URL + * @param string|null $channel Slack channel (encoded ID or name) + * @param string|null $username Name of a bot + * @param bool $useAttachment Whether the message should be added to Slack as attachment (plain text otherwise) + * @param string|null $iconEmoji The emoji name to use (or null) + * @param bool $useShortAttachment Whether the the context/extra messages added to Slack as attachments are in a short style + * @param bool $includeContextAndExtra Whether the attachment should include context and extra data + * @param string[] $excludeFields Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2'] + */ + public function __construct( + string $webhookUrl, + ?string $channel = null, + ?string $username = null, + bool $useAttachment = true, + ?string $iconEmoji = null, + bool $useShortAttachment = false, + bool $includeContextAndExtra = false, + $level = Level::Critical, + bool $bubble = true, + array $excludeFields = [] + ) { + if (!extension_loaded('curl')) { + throw new MissingExtensionException('The curl extension is needed to use the SlackWebhookHandler'); + } + + parent::__construct($level, $bubble); + + $this->webhookUrl = $webhookUrl; + + $this->slackRecord = new SlackRecord( + $channel, + $username, + $useAttachment, + $iconEmoji, + $useShortAttachment, + $includeContextAndExtra, + $excludeFields + ); + } + + public function getSlackRecord(): SlackRecord + { + return $this->slackRecord; + } + + public function getWebhookUrl(): string + { + return $this->webhookUrl; + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + $postData = $this->slackRecord->getSlackData($record); + $postString = Utils::jsonEncode($postData); + + $ch = curl_init(); + $options = [ + CURLOPT_URL => $this->webhookUrl, + CURLOPT_POST => true, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_HTTPHEADER => ['Content-type: application/json'], + CURLOPT_POSTFIELDS => $postString, + ]; + if (defined('CURLOPT_SAFE_UPLOAD')) { + $options[CURLOPT_SAFE_UPLOAD] = true; + } + + curl_setopt_array($ch, $options); + + Curl\Util::execute($ch); + } + + public function setFormatter(FormatterInterface $formatter): HandlerInterface + { + parent::setFormatter($formatter); + $this->slackRecord->setFormatter($formatter); + + return $this; + } + + public function getFormatter(): FormatterInterface + { + $formatter = parent::getFormatter(); + $this->slackRecord->setFormatter($formatter); + + return $formatter; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php new file mode 100644 index 00000000..c5f70888 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php @@ -0,0 +1,429 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\LogRecord; + +/** + * Stores to any socket - uses fsockopen() or pfsockopen(). + * + * @author Pablo de Leon Belloc + * @see http://php.net/manual/en/function.fsockopen.php + */ +class SocketHandler extends AbstractProcessingHandler +{ + private string $connectionString; + private float $connectionTimeout; + /** @var resource|null */ + private $resource; + private float $timeout; + private float $writingTimeout; + private int|null $lastSentBytes = null; + private int|null $chunkSize; + private bool $persistent; + private int|null $errno = null; + private string|null $errstr = null; + private float|null $lastWritingAt = null; + + /** + * @param string $connectionString Socket connection string + * @param bool $persistent Flag to enable/disable persistent connections + * @param float $timeout Socket timeout to wait until the request is being aborted + * @param float $writingTimeout Socket timeout to wait until the request should've been sent/written + * @param float|null $connectionTimeout Socket connect timeout to wait until the connection should've been + * established + * @param int|null $chunkSize Sets the chunk size. Only has effect during connection in the writing cycle + * + * @throws \InvalidArgumentException If an invalid timeout value (less than 0) is passed. + */ + public function __construct( + string $connectionString, + $level = Level::Debug, + bool $bubble = true, + bool $persistent = false, + float $timeout = 0.0, + float $writingTimeout = 10.0, + ?float $connectionTimeout = null, + ?int $chunkSize = null + ) { + parent::__construct($level, $bubble); + $this->connectionString = $connectionString; + + if ($connectionTimeout !== null) { + $this->validateTimeout($connectionTimeout); + } + + $this->connectionTimeout = $connectionTimeout ?? (float) ini_get('default_socket_timeout'); + $this->persistent = $persistent; + $this->validateTimeout($timeout); + $this->timeout = $timeout; + $this->validateTimeout($writingTimeout); + $this->writingTimeout = $writingTimeout; + $this->chunkSize = $chunkSize; + } + + /** + * Connect (if necessary) and write to the socket + * + * @inheritDoc + * + * @throws \UnexpectedValueException + * @throws \RuntimeException + */ + protected function write(LogRecord $record): void + { + $this->connectIfNotConnected(); + $data = $this->generateDataStream($record); + $this->writeToSocket($data); + } + + /** + * We will not close a PersistentSocket instance so it can be reused in other requests. + */ + public function close(): void + { + if (!$this->isPersistent()) { + $this->closeSocket(); + } + } + + /** + * Close socket, if open + */ + public function closeSocket(): void + { + if (is_resource($this->resource)) { + fclose($this->resource); + $this->resource = null; + } + } + + /** + * Set socket connection to be persistent. It only has effect before the connection is initiated. + */ + public function setPersistent(bool $persistent): self + { + $this->persistent = $persistent; + + return $this; + } + + /** + * Set connection timeout. Only has effect before we connect. + * + * @see http://php.net/manual/en/function.fsockopen.php + */ + public function setConnectionTimeout(float $seconds): self + { + $this->validateTimeout($seconds); + $this->connectionTimeout = $seconds; + + return $this; + } + + /** + * Set write timeout. Only has effect before we connect. + * + * @see http://php.net/manual/en/function.stream-set-timeout.php + */ + public function setTimeout(float $seconds): self + { + $this->validateTimeout($seconds); + $this->timeout = $seconds; + + return $this; + } + + /** + * Set writing timeout. Only has effect during connection in the writing cycle. + * + * @param float $seconds 0 for no timeout + */ + public function setWritingTimeout(float $seconds): self + { + $this->validateTimeout($seconds); + $this->writingTimeout = $seconds; + + return $this; + } + + /** + * Set chunk size. Only has effect during connection in the writing cycle. + */ + public function setChunkSize(int $bytes): self + { + $this->chunkSize = $bytes; + + return $this; + } + + /** + * Get current connection string + */ + public function getConnectionString(): string + { + return $this->connectionString; + } + + /** + * Get persistent setting + */ + public function isPersistent(): bool + { + return $this->persistent; + } + + /** + * Get current connection timeout setting + */ + public function getConnectionTimeout(): float + { + return $this->connectionTimeout; + } + + /** + * Get current in-transfer timeout + */ + public function getTimeout(): float + { + return $this->timeout; + } + + /** + * Get current local writing timeout + */ + public function getWritingTimeout(): float + { + return $this->writingTimeout; + } + + /** + * Get current chunk size + */ + public function getChunkSize(): ?int + { + return $this->chunkSize; + } + + /** + * Check to see if the socket is currently available. + * + * UDP might appear to be connected but might fail when writing. See http://php.net/fsockopen for details. + */ + public function isConnected(): bool + { + return is_resource($this->resource) + && !feof($this->resource); // on TCP - other party can close connection. + } + + /** + * Wrapper to allow mocking + * + * @return resource|false + */ + protected function pfsockopen() + { + return @pfsockopen($this->connectionString, -1, $this->errno, $this->errstr, $this->connectionTimeout); + } + + /** + * Wrapper to allow mocking + * + * @return resource|false + */ + protected function fsockopen() + { + return @fsockopen($this->connectionString, -1, $this->errno, $this->errstr, $this->connectionTimeout); + } + + /** + * Wrapper to allow mocking + * + * @see http://php.net/manual/en/function.stream-set-timeout.php + */ + protected function streamSetTimeout(): bool + { + $seconds = floor($this->timeout); + $microseconds = round(($this->timeout - $seconds) * 1e6); + + if (!is_resource($this->resource)) { + throw new \LogicException('streamSetTimeout called but $this->resource is not a resource'); + } + + return stream_set_timeout($this->resource, (int) $seconds, (int) $microseconds); + } + + /** + * Wrapper to allow mocking + * + * @see http://php.net/manual/en/function.stream-set-chunk-size.php + * + * @return int|false + */ + protected function streamSetChunkSize(): int|bool + { + if (!is_resource($this->resource)) { + throw new \LogicException('streamSetChunkSize called but $this->resource is not a resource'); + } + + if (null === $this->chunkSize) { + throw new \LogicException('streamSetChunkSize called but $this->chunkSize is not set'); + } + + return stream_set_chunk_size($this->resource, $this->chunkSize); + } + + /** + * Wrapper to allow mocking + * + * @return int|false + */ + protected function fwrite(string $data): int|bool + { + if (!is_resource($this->resource)) { + throw new \LogicException('fwrite called but $this->resource is not a resource'); + } + + return @fwrite($this->resource, $data); + } + + /** + * Wrapper to allow mocking + * + * @return mixed[]|bool + */ + protected function streamGetMetadata(): array|bool + { + if (!is_resource($this->resource)) { + throw new \LogicException('streamGetMetadata called but $this->resource is not a resource'); + } + + return stream_get_meta_data($this->resource); + } + + private function validateTimeout(float $value): void + { + if ($value < 0) { + throw new \InvalidArgumentException("Timeout must be 0 or a positive float (got $value)"); + } + } + + private function connectIfNotConnected(): void + { + if ($this->isConnected()) { + return; + } + $this->connect(); + } + + protected function generateDataStream(LogRecord $record): string + { + return (string) $record->formatted; + } + + /** + * @return resource|null + */ + protected function getResource() + { + return $this->resource; + } + + private function connect(): void + { + $this->createSocketResource(); + $this->setSocketTimeout(); + $this->setStreamChunkSize(); + } + + private function createSocketResource(): void + { + if ($this->isPersistent()) { + $resource = $this->pfsockopen(); + } else { + $resource = $this->fsockopen(); + } + if (is_bool($resource)) { + throw new \UnexpectedValueException("Failed connecting to $this->connectionString ($this->errno: $this->errstr)"); + } + $this->resource = $resource; + } + + private function setSocketTimeout(): void + { + if (!$this->streamSetTimeout()) { + throw new \UnexpectedValueException("Failed setting timeout with stream_set_timeout()"); + } + } + + private function setStreamChunkSize(): void + { + if (null !== $this->chunkSize && false === $this->streamSetChunkSize()) { + throw new \UnexpectedValueException("Failed setting chunk size with stream_set_chunk_size()"); + } + } + + private function writeToSocket(string $data): void + { + $length = strlen($data); + $sent = 0; + $this->lastSentBytes = $sent; + while ($this->isConnected() && $sent < $length) { + if (0 == $sent) { + $chunk = $this->fwrite($data); + } else { + $chunk = $this->fwrite(substr($data, $sent)); + } + if ($chunk === false) { + throw new \RuntimeException("Could not write to socket"); + } + $sent += $chunk; + $socketInfo = $this->streamGetMetadata(); + if (is_array($socketInfo) && (bool) $socketInfo['timed_out']) { + throw new \RuntimeException("Write timed-out"); + } + + if ($this->writingIsTimedOut($sent)) { + throw new \RuntimeException("Write timed-out, no data sent for `{$this->writingTimeout}` seconds, probably we got disconnected (sent $sent of $length)"); + } + } + if (!$this->isConnected() && $sent < $length) { + throw new \RuntimeException("End-of-file reached, probably we got disconnected (sent $sent of $length)"); + } + } + + private function writingIsTimedOut(int $sent): bool + { + // convert to ms + if (0.0 == $this->writingTimeout) { + return false; + } + + if ($sent !== $this->lastSentBytes) { + $this->lastWritingAt = microtime(true); + $this->lastSentBytes = $sent; + + return false; + } else { + usleep(100); + } + + if ((microtime(true) - (float) $this->lastWritingAt) >= $this->writingTimeout) { + $this->closeSocket(); + + return true; + } + + return false; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.php new file mode 100644 index 00000000..b4512a60 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.php @@ -0,0 +1,61 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Aws\Sqs\SqsClient; +use Monolog\Level; +use Monolog\Utils; +use Monolog\LogRecord; + +/** + * Writes to any sqs queue. + * + * @author Martijn van Calker + */ +class SqsHandler extends AbstractProcessingHandler +{ + /** 256 KB in bytes - maximum message size in SQS */ + protected const MAX_MESSAGE_SIZE = 262144; + /** 100 KB in bytes - head message size for new error log */ + protected const HEAD_MESSAGE_SIZE = 102400; + + private SqsClient $client; + private string $queueUrl; + + public function __construct(SqsClient $sqsClient, string $queueUrl, int|string|Level $level = Level::Debug, bool $bubble = true) + { + parent::__construct($level, $bubble); + + $this->client = $sqsClient; + $this->queueUrl = $queueUrl; + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + if (!isset($record->formatted) || 'string' !== gettype($record->formatted)) { + throw new \InvalidArgumentException('SqsHandler accepts only formatted records as a string' . Utils::getRecordMessageForException($record)); + } + + $messageBody = $record->formatted; + if (strlen($messageBody) >= static::MAX_MESSAGE_SIZE) { + $messageBody = Utils::substr($messageBody, 0, static::HEAD_MESSAGE_SIZE); + } + + $this->client->sendMessage([ + 'QueueUrl' => $this->queueUrl, + 'MessageBody' => $messageBody, + ]); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php new file mode 100644 index 00000000..027a7217 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php @@ -0,0 +1,202 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\Utils; +use Monolog\LogRecord; + +/** + * Stores to any stream resource + * + * Can be used to store into php://stderr, remote and local files, etc. + * + * @author Jordi Boggiano + */ +class StreamHandler extends AbstractProcessingHandler +{ + protected const MAX_CHUNK_SIZE = 2147483647; + /** 10MB */ + protected const DEFAULT_CHUNK_SIZE = 10 * 1024 * 1024; + protected int $streamChunkSize; + /** @var resource|null */ + protected $stream; + protected string|null $url = null; + private string|null $errorMessage = null; + protected int|null $filePermission; + protected bool $useLocking; + /** @var true|null */ + private bool|null $dirCreated = null; + + /** + * @param resource|string $stream If a missing path can't be created, an UnexpectedValueException will be thrown on first write + * @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write) + * @param bool $useLocking Try to lock log file before doing any writes + * + * @throws \InvalidArgumentException If stream is not a resource or string + */ + public function __construct($stream, int|string|Level $level = Level::Debug, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false) + { + parent::__construct($level, $bubble); + + if (($phpMemoryLimit = Utils::expandIniShorthandBytes(ini_get('memory_limit'))) !== false) { + if ($phpMemoryLimit > 0) { + // use max 10% of allowed memory for the chunk size, and at least 100KB + $this->streamChunkSize = min(static::MAX_CHUNK_SIZE, max((int) ($phpMemoryLimit / 10), 100 * 1024)); + } else { + // memory is unlimited, set to the default 10MB + $this->streamChunkSize = static::DEFAULT_CHUNK_SIZE; + } + } else { + // no memory limit information, set to the default 10MB + $this->streamChunkSize = static::DEFAULT_CHUNK_SIZE; + } + + if (is_resource($stream)) { + $this->stream = $stream; + + stream_set_chunk_size($this->stream, $this->streamChunkSize); + } elseif (is_string($stream)) { + $this->url = Utils::canonicalizePath($stream); + } else { + throw new \InvalidArgumentException('A stream must either be a resource or a string.'); + } + + $this->filePermission = $filePermission; + $this->useLocking = $useLocking; + } + + /** + * @inheritDoc + */ + public function close(): void + { + if (null !== $this->url && is_resource($this->stream)) { + fclose($this->stream); + } + $this->stream = null; + $this->dirCreated = null; + } + + /** + * Return the currently active stream if it is open + * + * @return resource|null + */ + public function getStream() + { + return $this->stream; + } + + /** + * Return the stream URL if it was configured with a URL and not an active resource + */ + public function getUrl(): ?string + { + return $this->url; + } + + public function getStreamChunkSize(): int + { + return $this->streamChunkSize; + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + if (!is_resource($this->stream)) { + $url = $this->url; + if (null === $url || '' === $url) { + throw new \LogicException('Missing stream url, the stream can not be opened. This may be caused by a premature call to close().' . Utils::getRecordMessageForException($record)); + } + $this->createDir($url); + $this->errorMessage = null; + set_error_handler([$this, 'customErrorHandler']); + $stream = fopen($url, 'a'); + if ($this->filePermission !== null) { + @chmod($url, $this->filePermission); + } + restore_error_handler(); + if (!is_resource($stream)) { + $this->stream = null; + + throw new \UnexpectedValueException(sprintf('The stream or file "%s" could not be opened in append mode: '.$this->errorMessage, $url) . Utils::getRecordMessageForException($record)); + } + stream_set_chunk_size($stream, $this->streamChunkSize); + $this->stream = $stream; + } + + $stream = $this->stream; + if ($this->useLocking) { + // ignoring errors here, there's not much we can do about them + flock($stream, LOCK_EX); + } + + $this->streamWrite($stream, $record); + + if ($this->useLocking) { + flock($stream, LOCK_UN); + } + } + + /** + * Write to stream + * @param resource $stream + */ + protected function streamWrite($stream, LogRecord $record): void + { + fwrite($stream, (string) $record->formatted); + } + + private function customErrorHandler(int $code, string $msg): bool + { + $this->errorMessage = preg_replace('{^(fopen|mkdir)\(.*?\): }', '', $msg); + + return true; + } + + private function getDirFromStream(string $stream): ?string + { + $pos = strpos($stream, '://'); + if ($pos === false) { + return dirname($stream); + } + + if ('file://' === substr($stream, 0, 7)) { + return dirname(substr($stream, 7)); + } + + return null; + } + + private function createDir(string $url): void + { + // Do not try to create dir if it has already been tried. + if (true === $this->dirCreated) { + return; + } + + $dir = $this->getDirFromStream($url); + if (null !== $dir && !is_dir($dir)) { + $this->errorMessage = null; + set_error_handler([$this, 'customErrorHandler']); + $status = mkdir($dir, 0777, true); + restore_error_handler(); + if (false === $status && !is_dir($dir) && strpos((string) $this->errorMessage, 'File exists') === false) { + throw new \UnexpectedValueException(sprintf('There is no existing directory at "%s" and it could not be created: '.$this->errorMessage, $dir)); + } + } + $this->dirCreated = true; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/SymfonyMailerHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SymfonyMailerHandler.php new file mode 100644 index 00000000..842b6577 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SymfonyMailerHandler.php @@ -0,0 +1,109 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Closure; +use Monolog\Level; +use Monolog\Logger; +use Monolog\LogRecord; +use Monolog\Utils; +use Monolog\Formatter\FormatterInterface; +use Monolog\Formatter\LineFormatter; +use Symfony\Component\Mailer\MailerInterface; +use Symfony\Component\Mailer\Transport\TransportInterface; +use Symfony\Component\Mime\Email; + +/** + * SymfonyMailerHandler uses Symfony's Mailer component to send the emails + * + * @author Jordi Boggiano + */ +class SymfonyMailerHandler extends MailHandler +{ + protected MailerInterface|TransportInterface $mailer; + /** @var Email|Closure(string, LogRecord[]): Email */ + private Email|Closure $emailTemplate; + + /** + * @phpstan-param Email|Closure(string, LogRecord[]): Email $email + * + * @param MailerInterface|TransportInterface $mailer The mailer to use + * @param Closure|Email $email An email template, the subject/body will be replaced + */ + public function __construct($mailer, Email|Closure $email, int|string|Level $level = Level::Error, bool $bubble = true) + { + parent::__construct($level, $bubble); + + $this->mailer = $mailer; + $this->emailTemplate = $email; + } + + /** + * {@inheritDoc} + */ + protected function send(string $content, array $records): void + { + $this->mailer->send($this->buildMessage($content, $records)); + } + + /** + * Gets the formatter for the Swift_Message subject. + * + * @param string|null $format The format of the subject + */ + protected function getSubjectFormatter(?string $format): FormatterInterface + { + return new LineFormatter($format); + } + + /** + * Creates instance of Email to be sent + * + * @param string $content formatted email body to be sent + * @param LogRecord[] $records Log records that formed the content + */ + protected function buildMessage(string $content, array $records): Email + { + $message = null; + if ($this->emailTemplate instanceof Email) { + $message = clone $this->emailTemplate; + } elseif (is_callable($this->emailTemplate)) { + $message = ($this->emailTemplate)($content, $records); + } + + if (!$message instanceof Email) { + $record = reset($records); + throw new \InvalidArgumentException('Could not resolve message as instance of Email or a callable returning it' . ($record instanceof LogRecord ? Utils::getRecordMessageForException($record) : '')); + } + + if (\count($records) > 0) { + $subjectFormatter = $this->getSubjectFormatter($message->getSubject()); + $message->subject($subjectFormatter->format($this->getHighestRecord($records))); + } + + if ($this->isHtmlBody($content)) { + if (null !== ($charset = $message->getHtmlCharset())) { + $message->html($content, $charset); + } else { + $message->html($content); + } + } else { + if (null !== ($charset = $message->getTextCharset())) { + $message->text($content, $charset); + } else { + $message->text($content); + } + } + + return $message->date(new \DateTimeImmutable()); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php new file mode 100644 index 00000000..0816a011 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php @@ -0,0 +1,66 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\Utils; +use Monolog\LogRecord; + +/** + * Logs to syslog service. + * + * usage example: + * + * $log = new Logger('application'); + * $syslog = new SyslogHandler('myfacility', 'local6'); + * $formatter = new LineFormatter("%channel%.%level_name%: %message% %extra%"); + * $syslog->setFormatter($formatter); + * $log->pushHandler($syslog); + * + * @author Sven Paulus + */ +class SyslogHandler extends AbstractSyslogHandler +{ + protected string $ident; + protected int $logopts; + + /** + * @param string|int $facility Either one of the names of the keys in $this->facilities, or a LOG_* facility constant + * @param int $logopts Option flags for the openlog() call, defaults to LOG_PID + */ + public function __construct(string $ident, string|int $facility = LOG_USER, int|string|Level $level = Level::Debug, bool $bubble = true, int $logopts = LOG_PID) + { + parent::__construct($facility, $level, $bubble); + + $this->ident = $ident; + $this->logopts = $logopts; + } + + /** + * @inheritDoc + */ + public function close(): void + { + closelog(); + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + if (!openlog($this->ident, $this->logopts, $this->facility)) { + throw new \LogicException('Can\'t open syslog for ident "'.$this->ident.'" and facility "'.$this->facility.'"' . Utils::getRecordMessageForException($record)); + } + syslog($this->toSyslogPriority($record->level), (string) $record->formatted); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php new file mode 100644 index 00000000..6a483345 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php @@ -0,0 +1,77 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler\SyslogUdp; + +use Monolog\Utils; +use Socket; + +class UdpSocket +{ + protected const DATAGRAM_MAX_LENGTH = 65023; + + protected string $ip; + protected int $port; + protected ?Socket $socket = null; + + public function __construct(string $ip, int $port = 514) + { + $this->ip = $ip; + $this->port = $port; + } + + public function write(string $line, string $header = ""): void + { + $this->send($this->assembleMessage($line, $header)); + } + + public function close(): void + { + if ($this->socket instanceof Socket) { + socket_close($this->socket); + $this->socket = null; + } + } + + protected function getSocket(): Socket + { + if (null !== $this->socket) { + return $this->socket; + } + + $domain = AF_INET; + $protocol = SOL_UDP; + // Check if we are using unix sockets. + if ($this->port === 0) { + $domain = AF_UNIX; + $protocol = IPPROTO_IP; + } + + $socket = socket_create($domain, SOCK_DGRAM, $protocol); + if ($socket instanceof Socket) { + return $this->socket = $socket; + } + + throw new \RuntimeException('The UdpSocket to '.$this->ip.':'.$this->port.' could not be opened via socket_create'); + } + + protected function send(string $chunk): void + { + socket_sendto($this->getSocket(), $chunk, strlen($chunk), $flags = 0, $this->ip, $this->port); + } + + protected function assembleMessage(string $line, string $header): string + { + $chunkSize = static::DATAGRAM_MAX_LENGTH - strlen($header); + + return $header . Utils::substr($line, 0, $chunkSize); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php new file mode 100644 index 00000000..abb8be9b --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php @@ -0,0 +1,152 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use DateTimeInterface; +use Monolog\Handler\SyslogUdp\UdpSocket; +use Monolog\Level; +use Monolog\LogRecord; +use Monolog\Utils; + +/** + * A Handler for logging to a remote syslogd server. + * + * @author Jesper Skovgaard Nielsen + * @author Dominik Kukacka + */ +class SyslogUdpHandler extends AbstractSyslogHandler +{ + const RFC3164 = 0; + const RFC5424 = 1; + const RFC5424e = 2; + + /** @var array */ + private array $dateFormats = [ + self::RFC3164 => 'M d H:i:s', + self::RFC5424 => \DateTime::RFC3339, + self::RFC5424e => \DateTime::RFC3339_EXTENDED, + ]; + + protected UdpSocket $socket; + protected string $ident; + /** @var self::RFC* */ + protected int $rfc; + + /** + * @param string $host Either IP/hostname or a path to a unix socket (port must be 0 then) + * @param int $port Port number, or 0 if $host is a unix socket + * @param string|int $facility Either one of the names of the keys in $this->facilities, or a LOG_* facility constant + * @param bool $bubble Whether the messages that are handled can bubble up the stack or not + * @param string $ident Program name or tag for each log message. + * @param int $rfc RFC to format the message for. + * @throws MissingExtensionException + * + * @phpstan-param self::RFC* $rfc + */ + public function __construct(string $host, int $port = 514, string|int $facility = LOG_USER, int|string|Level $level = Level::Debug, bool $bubble = true, string $ident = 'php', int $rfc = self::RFC5424) + { + if (!extension_loaded('sockets')) { + throw new MissingExtensionException('The sockets extension is required to use the SyslogUdpHandler'); + } + + parent::__construct($facility, $level, $bubble); + + $this->ident = $ident; + $this->rfc = $rfc; + + $this->socket = new UdpSocket($host, $port); + } + + protected function write(LogRecord $record): void + { + $lines = $this->splitMessageIntoLines($record->formatted); + + $header = $this->makeCommonSyslogHeader($this->toSyslogPriority($record->level), $record->datetime); + + foreach ($lines as $line) { + $this->socket->write($line, $header); + } + } + + public function close(): void + { + $this->socket->close(); + } + + /** + * @param string|string[] $message + * @return string[] + */ + private function splitMessageIntoLines($message): array + { + if (is_array($message)) { + $message = implode("\n", $message); + } + + $lines = preg_split('/$\R?^/m', (string) $message, -1, PREG_SPLIT_NO_EMPTY); + if (false === $lines) { + $pcreErrorCode = preg_last_error(); + + throw new \RuntimeException('Could not preg_split: ' . $pcreErrorCode . ' / ' . Utils::pcreLastErrorMessage($pcreErrorCode)); + } + + return $lines; + } + + /** + * Make common syslog header (see rfc5424 or rfc3164) + */ + protected function makeCommonSyslogHeader(int $severity, DateTimeInterface $datetime): string + { + $priority = $severity + $this->facility; + + $pid = getmypid(); + if (false === $pid) { + $pid = '-'; + } + + $hostname = gethostname(); + if (false === $hostname) { + $hostname = '-'; + } + + if ($this->rfc === self::RFC3164) { + // see https://github.com/phpstan/phpstan/issues/5348 + // @phpstan-ignore-next-line + $dateNew = $datetime->setTimezone(new \DateTimeZone('UTC')); + $date = $dateNew->format($this->dateFormats[$this->rfc]); + + return "<$priority>" . + $date . " " . + $hostname . " " . + $this->ident . "[" . $pid . "]: "; + } + + $date = $datetime->format($this->dateFormats[$this->rfc]); + + return "<$priority>1 " . + $date . " " . + $hostname . " " . + $this->ident . " " . + $pid . " - - "; + } + + /** + * Inject your own socket, mainly used for testing + */ + public function setSocket(UdpSocket $socket): self + { + $this->socket = $socket; + + return $this; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php new file mode 100644 index 00000000..2e1be9f6 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php @@ -0,0 +1,259 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use RuntimeException; +use Monolog\Level; +use Monolog\Utils; +use Monolog\LogRecord; + +/** + * Handler send logs to Telegram using Telegram Bot API. + * + * How to use: + * 1) Create telegram bot with https://telegram.me/BotFather + * 2) Create a telegram channel where logs will be recorded. + * 3) Add created bot from step 1 to the created channel from step 2. + * + * Use telegram bot API key from step 1 and channel name with '@' prefix from step 2 to create instance of TelegramBotHandler + * + * @link https://core.telegram.org/bots/api + * + * @author Mazur Alexandr + */ +class TelegramBotHandler extends AbstractProcessingHandler +{ + private const BOT_API = 'https://api.telegram.org/bot'; + + /** + * The available values of parseMode according to the Telegram api documentation + */ + private const AVAILABLE_PARSE_MODES = [ + 'HTML', + 'MarkdownV2', + 'Markdown', // legacy mode without underline and strikethrough, use MarkdownV2 instead + ]; + + /** + * The maximum number of characters allowed in a message according to the Telegram api documentation + */ + private const MAX_MESSAGE_LENGTH = 4096; + + /** + * Telegram bot access token provided by BotFather. + * Create telegram bot with https://telegram.me/BotFather and use access token from it. + */ + private string $apiKey; + + /** + * Telegram channel name. + * Since to start with '@' symbol as prefix. + */ + private string $channel; + + /** + * The kind of formatting that is used for the message. + * See available options at https://core.telegram.org/bots/api#formatting-options + * or in AVAILABLE_PARSE_MODES + */ + private string|null $parseMode; + + /** + * Disables link previews for links in the message. + */ + private bool|null $disableWebPagePreview; + + /** + * Sends the message silently. Users will receive a notification with no sound. + */ + private bool|null $disableNotification; + + /** + * True - split a message longer than MAX_MESSAGE_LENGTH into parts and send in multiple messages. + * False - truncates a message that is too long. + */ + private bool $splitLongMessages; + + /** + * Adds 1-second delay between sending a split message (according to Telegram API to avoid 429 Too Many Requests). + */ + private bool $delayBetweenMessages; + + /** + * @param string $apiKey Telegram bot access token provided by BotFather + * @param string $channel Telegram channel name + * @param bool $splitLongMessages Split a message longer than MAX_MESSAGE_LENGTH into parts and send in multiple messages + * @param bool $delayBetweenMessages Adds delay between sending a split message according to Telegram API + * @throws MissingExtensionException + */ + public function __construct( + string $apiKey, + string $channel, + $level = Level::Debug, + bool $bubble = true, + string $parseMode = null, + bool $disableWebPagePreview = null, + bool $disableNotification = null, + bool $splitLongMessages = false, + bool $delayBetweenMessages = false + ) { + if (!extension_loaded('curl')) { + throw new MissingExtensionException('The curl extension is needed to use the TelegramBotHandler'); + } + + parent::__construct($level, $bubble); + + $this->apiKey = $apiKey; + $this->channel = $channel; + $this->setParseMode($parseMode); + $this->disableWebPagePreview($disableWebPagePreview); + $this->disableNotification($disableNotification); + $this->splitLongMessages($splitLongMessages); + $this->delayBetweenMessages($delayBetweenMessages); + } + + public function setParseMode(string $parseMode = null): self + { + if ($parseMode !== null && !in_array($parseMode, self::AVAILABLE_PARSE_MODES, true)) { + throw new \InvalidArgumentException('Unknown parseMode, use one of these: ' . implode(', ', self::AVAILABLE_PARSE_MODES) . '.'); + } + + $this->parseMode = $parseMode; + + return $this; + } + + public function disableWebPagePreview(bool $disableWebPagePreview = null): self + { + $this->disableWebPagePreview = $disableWebPagePreview; + + return $this; + } + + public function disableNotification(bool $disableNotification = null): self + { + $this->disableNotification = $disableNotification; + + return $this; + } + + /** + * True - split a message longer than MAX_MESSAGE_LENGTH into parts and send in multiple messages. + * False - truncates a message that is too long. + * @return $this + */ + public function splitLongMessages(bool $splitLongMessages = false): self + { + $this->splitLongMessages = $splitLongMessages; + + return $this; + } + + /** + * Adds 1-second delay between sending a split message (according to Telegram API to avoid 429 Too Many Requests). + * @return $this + */ + public function delayBetweenMessages(bool $delayBetweenMessages = false): self + { + $this->delayBetweenMessages = $delayBetweenMessages; + + return $this; + } + + /** + * @inheritDoc + */ + public function handleBatch(array $records): void + { + $messages = []; + + foreach ($records as $record) { + if (!$this->isHandling($record)) { + continue; + } + + if (\count($this->processors) > 0) { + $record = $this->processRecord($record); + } + + $messages[] = $record; + } + + if (\count($messages) > 0) { + $this->send((string) $this->getFormatter()->formatBatch($messages)); + } + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + $this->send($record->formatted); + } + + /** + * Send request to @link https://api.telegram.org/bot on SendMessage action. + */ + protected function send(string $message): void + { + $messages = $this->handleMessageLength($message); + + foreach ($messages as $key => $msg) { + if ($this->delayBetweenMessages && $key > 0) { + sleep(1); + } + + $this->sendCurl($msg); + } + } + + protected function sendCurl(string $message): void + { + $ch = curl_init(); + $url = self::BOT_API . $this->apiKey . '/SendMessage'; + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ + 'text' => $message, + 'chat_id' => $this->channel, + 'parse_mode' => $this->parseMode, + 'disable_web_page_preview' => $this->disableWebPagePreview, + 'disable_notification' => $this->disableNotification, + ])); + + $result = Curl\Util::execute($ch); + if (!is_string($result)) { + throw new RuntimeException('Telegram API error. Description: No response'); + } + $result = json_decode($result, true); + + if ($result['ok'] === false) { + throw new RuntimeException('Telegram API error. Description: ' . $result['description']); + } + } + + /** + * Handle a message that is too long: truncates or splits into several + * @return string[] + */ + private function handleMessageLength(string $message): array + { + $truncatedMarker = ' (...truncated)'; + if (!$this->splitLongMessages && strlen($message) > self::MAX_MESSAGE_LENGTH) { + return [Utils::substr($message, 0, self::MAX_MESSAGE_LENGTH - strlen($truncatedMarker)) . $truncatedMarker]; + } + + return str_split($message, self::MAX_MESSAGE_LENGTH); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php new file mode 100644 index 00000000..1884f83f --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php @@ -0,0 +1,195 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Level; +use Monolog\Logger; +use Psr\Log\LogLevel; +use Monolog\LogRecord; + +/** + * Used for testing purposes. + * + * It records all records and gives you access to them for verification. + * + * @author Jordi Boggiano + * + * @method bool hasEmergency($record) + * @method bool hasAlert($record) + * @method bool hasCritical($record) + * @method bool hasError($record) + * @method bool hasWarning($record) + * @method bool hasNotice($record) + * @method bool hasInfo($record) + * @method bool hasDebug($record) + * + * @method bool hasEmergencyRecords() + * @method bool hasAlertRecords() + * @method bool hasCriticalRecords() + * @method bool hasErrorRecords() + * @method bool hasWarningRecords() + * @method bool hasNoticeRecords() + * @method bool hasInfoRecords() + * @method bool hasDebugRecords() + * + * @method bool hasEmergencyThatContains($message) + * @method bool hasAlertThatContains($message) + * @method bool hasCriticalThatContains($message) + * @method bool hasErrorThatContains($message) + * @method bool hasWarningThatContains($message) + * @method bool hasNoticeThatContains($message) + * @method bool hasInfoThatContains($message) + * @method bool hasDebugThatContains($message) + * + * @method bool hasEmergencyThatMatches($message) + * @method bool hasAlertThatMatches($message) + * @method bool hasCriticalThatMatches($message) + * @method bool hasErrorThatMatches($message) + * @method bool hasWarningThatMatches($message) + * @method bool hasNoticeThatMatches($message) + * @method bool hasInfoThatMatches($message) + * @method bool hasDebugThatMatches($message) + * + * @method bool hasEmergencyThatPasses($message) + * @method bool hasAlertThatPasses($message) + * @method bool hasCriticalThatPasses($message) + * @method bool hasErrorThatPasses($message) + * @method bool hasWarningThatPasses($message) + * @method bool hasNoticeThatPasses($message) + * @method bool hasInfoThatPasses($message) + * @method bool hasDebugThatPasses($message) + */ +class TestHandler extends AbstractProcessingHandler +{ + /** @var LogRecord[] */ + protected array $records = []; + /** @phpstan-var array, LogRecord[]> */ + protected array $recordsByLevel = []; + private bool $skipReset = false; + + /** + * @return array + */ + public function getRecords(): array + { + return $this->records; + } + + public function clear(): void + { + $this->records = []; + $this->recordsByLevel = []; + } + + public function reset(): void + { + if (!$this->skipReset) { + $this->clear(); + } + } + + public function setSkipReset(bool $skipReset): void + { + $this->skipReset = $skipReset; + } + + /** + * @param int|string|Level|LogLevel::* $level Logging level value or name + * + * @phpstan-param value-of|value-of|Level|LogLevel::* $level + */ + public function hasRecords(int|string|Level $level): bool + { + return isset($this->recordsByLevel[Logger::toMonologLevel($level)->value]); + } + + /** + * @param string|array $recordAssertions Either a message string or an array containing message and optionally context keys that will be checked against all records + * + * @phpstan-param array{message: string, context?: mixed[]}|string $recordAssertions + */ + public function hasRecord(string|array $recordAssertions, Level $level): bool + { + if (is_string($recordAssertions)) { + $recordAssertions = ['message' => $recordAssertions]; + } + + return $this->hasRecordThatPasses(function (LogRecord $rec) use ($recordAssertions) { + if ($rec->message !== $recordAssertions['message']) { + return false; + } + if (isset($recordAssertions['context']) && $rec->context !== $recordAssertions['context']) { + return false; + } + + return true; + }, $level); + } + + public function hasRecordThatContains(string $message, Level $level): bool + { + return $this->hasRecordThatPasses(fn (LogRecord $rec) => str_contains($rec->message, $message), $level); + } + + public function hasRecordThatMatches(string $regex, Level $level): bool + { + return $this->hasRecordThatPasses(fn (LogRecord $rec) => preg_match($regex, $rec->message) > 0, $level); + } + + /** + * @phpstan-param callable(LogRecord, int): mixed $predicate + */ + public function hasRecordThatPasses(callable $predicate, Level $level): bool + { + $level = Logger::toMonologLevel($level); + + if (!isset($this->recordsByLevel[$level->value])) { + return false; + } + + foreach ($this->recordsByLevel[$level->value] as $i => $rec) { + if ((bool) $predicate($rec, $i)) { + return true; + } + } + + return false; + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + $this->recordsByLevel[$record->level->value][] = $record; + $this->records[] = $record; + } + + /** + * @param mixed[] $args + */ + public function __call(string $method, array $args): bool + { + if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) { + $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3]; + $level = constant(Level::class.'::' . $matches[2]); + $callback = [$this, $genericMethod]; + if (is_callable($callback)) { + $args[] = $level; + + return call_user_func_array($callback, $args); + } + } + + throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()'); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php new file mode 100644 index 00000000..9c12c3d5 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php @@ -0,0 +1,23 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +trait WebRequestRecognizerTrait +{ + /** + * Checks if PHP's serving a web request + */ + protected function isWebRequest(): bool + { + return 'cli' !== \PHP_SAPI && 'phpdbg' !== \PHP_SAPI; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php new file mode 100644 index 00000000..2dbc5fe8 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php @@ -0,0 +1,66 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\LogRecord; +use Throwable; + +/** + * Forwards records to multiple handlers suppressing failures of each handler + * and continuing through to give every handler a chance to succeed. + * + * @author Craig D'Amelio + */ +class WhatFailureGroupHandler extends GroupHandler +{ + /** + * @inheritDoc + */ + public function handle(LogRecord $record): bool + { + if (\count($this->processors) > 0) { + $record = $this->processRecord($record); + } + + foreach ($this->handlers as $handler) { + try { + $handler->handle($record); + } catch (Throwable) { + // What failure? + } + } + + return false === $this->bubble; + } + + /** + * @inheritDoc + */ + public function handleBatch(array $records): void + { + if (\count($this->processors) > 0) { + $processed = []; + foreach ($records as $record) { + $processed[] = $this->processRecord($record); + } + $records = $processed; + } + + foreach ($this->handlers as $handler) { + try { + $handler->handleBatch($records); + } catch (Throwable) { + // What failure? + } + } + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php new file mode 100644 index 00000000..1e71194b --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php @@ -0,0 +1,90 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Formatter\FormatterInterface; +use Monolog\Formatter\NormalizerFormatter; +use Monolog\Level; +use Monolog\LogRecord; + +/** + * Handler sending logs to Zend Monitor + * + * @author Christian Bergau + * @author Jason Davis + */ +class ZendMonitorHandler extends AbstractProcessingHandler +{ + /** + * @throws MissingExtensionException + */ + public function __construct(int|string|Level $level = Level::Debug, bool $bubble = true) + { + if (!function_exists('zend_monitor_custom_event')) { + throw new MissingExtensionException( + 'You must have Zend Server installed with Zend Monitor enabled in order to use this handler' + ); + } + + parent::__construct($level, $bubble); + } + + /** + * Translates Monolog log levels to ZendMonitor levels. + */ + protected function toZendMonitorLevel(Level $level): int + { + return match ($level) { + Level::Debug => \ZEND_MONITOR_EVENT_SEVERITY_INFO, + Level::Info => \ZEND_MONITOR_EVENT_SEVERITY_INFO, + Level::Notice => \ZEND_MONITOR_EVENT_SEVERITY_INFO, + Level::Warning => \ZEND_MONITOR_EVENT_SEVERITY_WARNING, + Level::Error => \ZEND_MONITOR_EVENT_SEVERITY_ERROR, + Level::Critical => \ZEND_MONITOR_EVENT_SEVERITY_ERROR, + Level::Alert => \ZEND_MONITOR_EVENT_SEVERITY_ERROR, + Level::Emergency => \ZEND_MONITOR_EVENT_SEVERITY_ERROR, + }; + } + + /** + * @inheritDoc + */ + protected function write(LogRecord $record): void + { + $this->writeZendMonitorCustomEvent( + $record->level->getName(), + $record->message, + $record->formatted, + $this->toZendMonitorLevel($record->level) + ); + } + + /** + * Write to Zend Monitor Events + * @param string $type Text displayed in "Class Name (custom)" field + * @param string $message Text displayed in "Error String" + * @param array $formatted Displayed in Custom Variables tab + * @param int $severity Set the event severity level (-1,0,1) + */ + protected function writeZendMonitorCustomEvent(string $type, string $message, array $formatted, int $severity): void + { + zend_monitor_custom_event($type, $message, $formatted, $severity); + } + + /** + * @inheritDoc + */ + public function getDefaultFormatter(): FormatterInterface + { + return new NormalizerFormatter(); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Level.php b/monolog/vendor/monolog/monolog/src/Monolog/Level.php new file mode 100644 index 00000000..ab04cf4d --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Level.php @@ -0,0 +1,209 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog; + +use Psr\Log\LogLevel; + +/** + * Represents the log levels + * + * Monolog supports the logging levels described by RFC 5424 {@see https://datatracker.ietf.org/doc/html/rfc5424} + * but due to BC the severity values used internally are not 0-7. + * + * To get the level name out of a Level there are three options: + * + * - Use ->getName() to get the standard Monolog name which is full uppercased (e.g. "DEBUG") + * - Use ->toPsrLogLevel() to get the standard PSR-3 name which is full lowercased (e.g. "debug") + * - Use ->toRFC5424Level() to get the standard RFC 5424 value (e.g. 7 for debug, 0 for emergency) + * - Use ->name to get the enum case's name which is capitalized (e.g. "Debug") + * + * To get the value for filtering, if the includes/isLowerThan/isHigherThan methods are + * not enough, you can use ->value to get the enum case's integer value. + */ +enum Level: int +{ + /** + * Detailed debug information + */ + case Debug = 100; + + /** + * Interesting events + * + * Examples: User logs in, SQL logs. + */ + case Info = 200; + + /** + * Uncommon events + */ + case Notice = 250; + + /** + * Exceptional occurrences that are not errors + * + * Examples: Use of deprecated APIs, poor use of an API, + * undesirable things that are not necessarily wrong. + */ + case Warning = 300; + + /** + * Runtime errors + */ + case Error = 400; + + /** + * Critical conditions + * + * Example: Application component unavailable, unexpected exception. + */ + case Critical = 500; + + /** + * Action must be taken immediately + * + * Example: Entire website down, database unavailable, etc. + * This should trigger the SMS alerts and wake you up. + */ + case Alert = 550; + + /** + * Urgent alert. + */ + case Emergency = 600; + + /** + * @param value-of|LogLevel::*|'Debug'|'Info'|'Notice'|'Warning'|'Error'|'Critical'|'Alert'|'Emergency' $name + * @return static + */ + public static function fromName(string $name): self + { + return match ($name) { + 'debug', 'Debug', 'DEBUG' => self::Debug, + 'info', 'Info', 'INFO' => self::Info, + 'notice', 'Notice', 'NOTICE' => self::Notice, + 'warning', 'Warning', 'WARNING' => self::Warning, + 'error', 'Error', 'ERROR' => self::Error, + 'critical', 'Critical', 'CRITICAL' => self::Critical, + 'alert', 'Alert', 'ALERT' => self::Alert, + 'emergency', 'Emergency', 'EMERGENCY' => self::Emergency, + }; + } + + /** + * @param value-of $value + * @return static + */ + public static function fromValue(int $value): self + { + return self::from($value); + } + + /** + * Returns true if the passed $level is higher or equal to $this + */ + public function includes(Level $level): bool + { + return $this->value <= $level->value; + } + + public function isHigherThan(Level $level): bool + { + return $this->value > $level->value; + } + + public function isLowerThan(Level $level): bool + { + return $this->value < $level->value; + } + + /** + * Returns the monolog standardized all-capitals name of the level + * + * Use this instead of $level->name which returns the enum case name (e.g. Debug vs DEBUG if you use getName()) + * + * @return value-of + */ + public function getName(): string + { + return match ($this) { + self::Debug => 'DEBUG', + self::Info => 'INFO', + self::Notice => 'NOTICE', + self::Warning => 'WARNING', + self::Error => 'ERROR', + self::Critical => 'CRITICAL', + self::Alert => 'ALERT', + self::Emergency => 'EMERGENCY', + }; + } + + /** + * Returns the PSR-3 level matching this instance + * + * @phpstan-return \Psr\Log\LogLevel::* + */ + public function toPsrLogLevel(): string + { + return match ($this) { + self::Debug => LogLevel::DEBUG, + self::Info => LogLevel::INFO, + self::Notice => LogLevel::NOTICE, + self::Warning => LogLevel::WARNING, + self::Error => LogLevel::ERROR, + self::Critical => LogLevel::CRITICAL, + self::Alert => LogLevel::ALERT, + self::Emergency => LogLevel::EMERGENCY, + }; + } + + /** + * Returns the RFC 5424 level matching this instance + * + * @phpstan-return int<0, 7> + */ + public function toRFC5424Level(): int + { + return match ($this) { + self::Debug => 7, + self::Info => 6, + self::Notice => 5, + self::Warning => 4, + self::Error => 3, + self::Critical => 2, + self::Alert => 1, + self::Emergency => 0, + }; + } + + public const VALUES = [ + 100, + 200, + 250, + 300, + 400, + 500, + 550, + 600, + ]; + + public const NAMES = [ + 'DEBUG', + 'INFO', + 'NOTICE', + 'WARNING', + 'ERROR', + 'CRITICAL', + 'ALERT', + 'EMERGENCY', + ]; +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/LogRecord.php b/monolog/vendor/monolog/monolog/src/Monolog/LogRecord.php new file mode 100644 index 00000000..df758c58 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/LogRecord.php @@ -0,0 +1,124 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog; + +use ArrayAccess; + +/** + * Monolog log record + * + * @author Jordi Boggiano + * @template-implements ArrayAccess<'message'|'level'|'context'|'level_name'|'channel'|'datetime'|'extra', int|string|\DateTimeImmutable|array> + */ +class LogRecord implements ArrayAccess +{ + private const MODIFIABLE_FIELDS = [ + 'extra' => true, + 'formatted' => true, + ]; + + public function __construct( + public readonly \DateTimeImmutable $datetime, + public readonly string $channel, + public readonly Level $level, + public readonly string $message, + /** @var array */ + public readonly array $context = [], + /** @var array */ + public array $extra = [], + public mixed $formatted = null, + ) { + } + + public function offsetSet(mixed $offset, mixed $value): void + { + if ($offset === 'extra') { + if (!is_array($value)) { + throw new \InvalidArgumentException('extra must be an array'); + } + + $this->extra = $value; + + return; + } + + if ($offset === 'formatted') { + $this->formatted = $value; + + return; + } + + throw new \LogicException('Unsupported operation: setting '.$offset); + } + + public function offsetExists(mixed $offset): bool + { + if ($offset === 'level_name') { + return true; + } + + return isset($this->{$offset}); + } + + public function offsetUnset(mixed $offset): void + { + throw new \LogicException('Unsupported operation'); + } + + public function &offsetGet(mixed $offset): mixed + { + if ($offset === 'level_name' || $offset === 'level') { + // avoid returning readonly props by ref as this is illegal + if ($offset === 'level_name') { + $copy = $this->level->getName(); + } else { + $copy = $this->level->value; + } + + return $copy; + } + + if (isset(self::MODIFIABLE_FIELDS[$offset])) { + return $this->{$offset}; + } + + // avoid returning readonly props by ref as this is illegal + $copy = $this->{$offset}; + + return $copy; + } + + /** + * @phpstan-return array{message: string, context: mixed[], level: value-of, level_name: value-of, channel: string, datetime: \DateTimeImmutable, extra: mixed[]} + */ + public function toArray(): array + { + return [ + 'message' => $this->message, + 'context' => $this->context, + 'level' => $this->level->value, + 'level_name' => $this->level->getName(), + 'channel' => $this->channel, + 'datetime' => $this->datetime, + 'extra' => $this->extra, + ]; + } + + public function with(mixed ...$args): self + { + foreach (['message', 'context', 'level', 'channel', 'datetime', 'extra'] as $prop) { + $args[$prop] ??= $this->{$prop}; + } + + return new self(...$args); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Logger.php b/monolog/vendor/monolog/monolog/src/Monolog/Logger.php new file mode 100644 index 00000000..5aacc6f8 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Logger.php @@ -0,0 +1,686 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog; + +use Closure; +use DateTimeZone; +use Monolog\Handler\HandlerInterface; +use Monolog\Processor\ProcessorInterface; +use Psr\Log\LoggerInterface; +use Psr\Log\InvalidArgumentException; +use Psr\Log\LogLevel; +use Throwable; +use Stringable; + +/** + * Monolog log channel + * + * It contains a stack of Handlers and a stack of Processors, + * and uses them to store records that are added to it. + * + * @author Jordi Boggiano + * @final + */ +class Logger implements LoggerInterface, ResettableInterface +{ + /** + * Detailed debug information + * + * @deprecated Use \Monolog\Level::Debug + */ + public const DEBUG = 100; + + /** + * Interesting events + * + * Examples: User logs in, SQL logs. + * + * @deprecated Use \Monolog\Level::Info + */ + public const INFO = 200; + + /** + * Uncommon events + * + * @deprecated Use \Monolog\Level::Notice + */ + public const NOTICE = 250; + + /** + * Exceptional occurrences that are not errors + * + * Examples: Use of deprecated APIs, poor use of an API, + * undesirable things that are not necessarily wrong. + * + * @deprecated Use \Monolog\Level::Warning + */ + public const WARNING = 300; + + /** + * Runtime errors + * + * @deprecated Use \Monolog\Level::Error + */ + public const ERROR = 400; + + /** + * Critical conditions + * + * Example: Application component unavailable, unexpected exception. + * + * @deprecated Use \Monolog\Level::Critical + */ + public const CRITICAL = 500; + + /** + * Action must be taken immediately + * + * Example: Entire website down, database unavailable, etc. + * This should trigger the SMS alerts and wake you up. + * + * @deprecated Use \Monolog\Level::Alert + */ + public const ALERT = 550; + + /** + * Urgent alert. + * + * @deprecated Use \Monolog\Level::Emergency + */ + public const EMERGENCY = 600; + + /** + * Monolog API version + * + * This is only bumped when API breaks are done and should + * follow the major version of the library + */ + public const API = 3; + + /** + * Mapping between levels numbers defined in RFC 5424 and Monolog ones + * + * @phpstan-var array $rfc_5424_levels + */ + private const RFC_5424_LEVELS = [ + 7 => Level::Debug, + 6 => Level::Info, + 5 => Level::Notice, + 4 => Level::Warning, + 3 => Level::Error, + 2 => Level::Critical, + 1 => Level::Alert, + 0 => Level::Emergency, + ]; + + protected string $name; + + /** + * The handler stack + * + * @var list + */ + protected array $handlers; + + /** + * Processors that will process all log records + * + * To process records of a single handler instead, add the processor on that specific handler + * + * @var array<(callable(LogRecord): LogRecord)|ProcessorInterface> + */ + protected array $processors; + + protected bool $microsecondTimestamps = true; + + protected DateTimeZone $timezone; + + protected Closure|null $exceptionHandler = null; + + /** + * Keeps track of depth to prevent infinite logging loops + */ + private int $logDepth = 0; + + /** + * Whether to detect infinite logging loops + * + * This can be disabled via {@see useLoggingLoopDetection} if you have async handlers that do not play well with this + */ + private bool $detectCycles = true; + + /** + * @param string $name The logging channel, a simple descriptive name that is attached to all log records + * @param HandlerInterface[] $handlers Optional stack of handlers, the first one in the array is called first, etc. + * @param callable[] $processors Optional array of processors + * @param DateTimeZone|null $timezone Optional timezone, if not provided date_default_timezone_get() will be used + * + * @phpstan-param array<(callable(LogRecord): LogRecord)|ProcessorInterface> $processors + */ + public function __construct(string $name, array $handlers = [], array $processors = [], DateTimeZone|null $timezone = null) + { + $this->name = $name; + $this->setHandlers($handlers); + $this->processors = $processors; + $this->timezone = $timezone ?? new DateTimeZone(date_default_timezone_get()); + } + + public function getName(): string + { + return $this->name; + } + + /** + * Return a new cloned instance with the name changed + */ + public function withName(string $name): self + { + $new = clone $this; + $new->name = $name; + + return $new; + } + + /** + * Pushes a handler on to the stack. + */ + public function pushHandler(HandlerInterface $handler): self + { + array_unshift($this->handlers, $handler); + + return $this; + } + + /** + * Pops a handler from the stack + * + * @throws \LogicException If empty handler stack + */ + public function popHandler(): HandlerInterface + { + if (0 === \count($this->handlers)) { + throw new \LogicException('You tried to pop from an empty handler stack.'); + } + + return array_shift($this->handlers); + } + + /** + * Set handlers, replacing all existing ones. + * + * If a map is passed, keys will be ignored. + * + * @param list $handlers + */ + public function setHandlers(array $handlers): self + { + $this->handlers = []; + foreach (array_reverse($handlers) as $handler) { + $this->pushHandler($handler); + } + + return $this; + } + + /** + * @return list + */ + public function getHandlers(): array + { + return $this->handlers; + } + + /** + * Adds a processor on to the stack. + * + * @phpstan-param ProcessorInterface|(callable(LogRecord): LogRecord) $callback + */ + public function pushProcessor(ProcessorInterface|callable $callback): self + { + array_unshift($this->processors, $callback); + + return $this; + } + + /** + * Removes the processor on top of the stack and returns it. + * + * @phpstan-return ProcessorInterface|(callable(LogRecord): LogRecord) + * @throws \LogicException If empty processor stack + */ + public function popProcessor(): callable + { + if (0 === \count($this->processors)) { + throw new \LogicException('You tried to pop from an empty processor stack.'); + } + + return array_shift($this->processors); + } + + /** + * @return callable[] + * @phpstan-return array + */ + public function getProcessors(): array + { + return $this->processors; + } + + /** + * Control the use of microsecond resolution timestamps in the 'datetime' + * member of new records. + * + * As of PHP7.1 microseconds are always included by the engine, so + * there is no performance penalty and Monolog 2 enabled microseconds + * by default. This function lets you disable them though in case you want + * to suppress microseconds from the output. + * + * @param bool $micro True to use microtime() to create timestamps + */ + public function useMicrosecondTimestamps(bool $micro): self + { + $this->microsecondTimestamps = $micro; + + return $this; + } + + public function useLoggingLoopDetection(bool $detectCycles): self + { + $this->detectCycles = $detectCycles; + + return $this; + } + + /** + * Adds a log record. + * + * @param int $level The logging level (a Monolog or RFC 5424 level) + * @param string $message The log message + * @param mixed[] $context The log context + * @param DateTimeImmutable $datetime Optional log date to log into the past or future + * @return bool Whether the record has been processed + * + * @phpstan-param value-of|Level $level + */ + public function addRecord(int|Level $level, string $message, array $context = [], DateTimeImmutable $datetime = null): bool + { + if (is_int($level) && isset(self::RFC_5424_LEVELS[$level])) { + $level = self::RFC_5424_LEVELS[$level]; + } + + if ($this->detectCycles) { + $this->logDepth += 1; + } + if ($this->logDepth === 3) { + $this->warning('A possible infinite logging loop was detected and aborted. It appears some of your handler code is triggering logging, see the previous log record for a hint as to what may be the cause.'); + return false; + } elseif ($this->logDepth >= 5) { // log depth 4 is let through so we can log the warning above + return false; + } + + try { + $recordInitialized = count($this->processors) === 0; + + $record = new LogRecord( + message: $message, + context: $context, + level: self::toMonologLevel($level), + channel: $this->name, + datetime: $datetime ?? new DateTimeImmutable($this->microsecondTimestamps, $this->timezone), + extra: [], + ); + $handled = false; + + foreach ($this->handlers as $handler) { + if (false === $recordInitialized) { + // skip initializing the record as long as no handler is going to handle it + if (!$handler->isHandling($record)) { + continue; + } + + try { + foreach ($this->processors as $processor) { + $record = $processor($record); + } + $recordInitialized = true; + } catch (Throwable $e) { + $this->handleException($e, $record); + + return true; + } + } + + // once the record is initialized, send it to all handlers as long as the bubbling chain is not interrupted + try { + $handled = true; + if (true === $handler->handle($record)) { + break; + } + } catch (Throwable $e) { + $this->handleException($e, $record); + + return true; + } + } + + return $handled; + } finally { + if ($this->detectCycles) { + $this->logDepth--; + } + } + } + + /** + * Ends a log cycle and frees all resources used by handlers. + * + * Closing a Handler means flushing all buffers and freeing any open resources/handles. + * Handlers that have been closed should be able to accept log records again and re-open + * themselves on demand, but this may not always be possible depending on implementation. + * + * This is useful at the end of a request and will be called automatically on every handler + * when they get destructed. + */ + public function close(): void + { + foreach ($this->handlers as $handler) { + $handler->close(); + } + } + + /** + * Ends a log cycle and resets all handlers and processors to their initial state. + * + * Resetting a Handler or a Processor means flushing/cleaning all buffers, resetting internal + * state, and getting it back to a state in which it can receive log records again. + * + * This is useful in case you want to avoid logs leaking between two requests or jobs when you + * have a long running process like a worker or an application server serving multiple requests + * in one process. + */ + public function reset(): void + { + foreach ($this->handlers as $handler) { + if ($handler instanceof ResettableInterface) { + $handler->reset(); + } + } + + foreach ($this->processors as $processor) { + if ($processor instanceof ResettableInterface) { + $processor->reset(); + } + } + } + + /** + * Gets the name of the logging level as a string. + * + * This still returns a string instead of a Level for BC, but new code should not rely on this method. + * + * @throws \Psr\Log\InvalidArgumentException If level is not defined + * + * @phpstan-param value-of|Level $level + * @phpstan-return value-of + * + * @deprecated Since 3.0, use {@see toMonologLevel} or {@see \Monolog\Level->getName()} instead + */ + public static function getLevelName(int|Level $level): string + { + return self::toMonologLevel($level)->getName(); + } + + /** + * Converts PSR-3 levels to Monolog ones if necessary + * + * @param int|string|Level|LogLevel::* $level Level number (monolog) or name (PSR-3) + * @throws \Psr\Log\InvalidArgumentException If level is not defined + * + * @phpstan-param value-of|value-of|Level|LogLevel::* $level + */ + public static function toMonologLevel(string|int|Level $level): Level + { + if ($level instanceof Level) { + return $level; + } + + if (\is_string($level)) { + if (\is_numeric($level)) { + $levelEnum = Level::tryFrom((int) $level); + if ($levelEnum === null) { + throw new InvalidArgumentException('Level "'.$level.'" is not defined, use one of: '.implode(', ', Level::NAMES + Level::VALUES)); + } + + return $levelEnum; + } + + // Contains first char of all log levels and avoids using strtoupper() which may have + // strange results depending on locale (for example, "i" will become "İ" in Turkish locale) + $upper = strtr(substr($level, 0, 1), 'dinweca', 'DINWECA') . strtolower(substr($level, 1)); + if (defined(Level::class.'::'.$upper)) { + return constant(Level::class . '::' . $upper); + } + + throw new InvalidArgumentException('Level "'.$level.'" is not defined, use one of: '.implode(', ', Level::NAMES + Level::VALUES)); + } + + $levelEnum = Level::tryFrom($level); + if ($levelEnum === null) { + throw new InvalidArgumentException('Level "'.var_export($level, true).'" is not defined, use one of: '.implode(', ', Level::NAMES + Level::VALUES)); + } + + return $levelEnum; + } + + /** + * Checks whether the Logger has a handler that listens on the given level + * + * @phpstan-param value-of|value-of|Level|LogLevel::* $level + */ + public function isHandling(int|string|Level $level): bool + { + $record = new LogRecord( + datetime: new DateTimeImmutable($this->microsecondTimestamps, $this->timezone), + channel: $this->name, + message: '', + level: self::toMonologLevel($level), + ); + + foreach ($this->handlers as $handler) { + if ($handler->isHandling($record)) { + return true; + } + } + + return false; + } + + /** + * Set a custom exception handler that will be called if adding a new record fails + * + * The Closure will receive an exception object and the record that failed to be logged + */ + public function setExceptionHandler(Closure|null $callback): self + { + $this->exceptionHandler = $callback; + + return $this; + } + + public function getExceptionHandler(): Closure|null + { + return $this->exceptionHandler; + } + + /** + * Adds a log record at an arbitrary level. + * + * This method allows for compatibility with common interfaces. + * + * @param mixed $level The log level (a Monolog, PSR-3 or RFC 5424 level) + * @param string|Stringable $message The log message + * @param mixed[] $context The log context + * + * @phpstan-param Level|LogLevel::* $level + */ + public function log($level, string|\Stringable $message, array $context = []): void + { + if (!$level instanceof Level) { + if (!is_string($level) && !is_int($level)) { + throw new \InvalidArgumentException('$level is expected to be a string, int or '.Level::class.' instance'); + } + + if (isset(self::RFC_5424_LEVELS[$level])) { + $level = self::RFC_5424_LEVELS[$level]; + } + + $level = static::toMonologLevel($level); + } + + $this->addRecord($level, (string) $message, $context); + } + + /** + * Adds a log record at the DEBUG level. + * + * This method allows for compatibility with common interfaces. + * + * @param string|Stringable $message The log message + * @param mixed[] $context The log context + */ + public function debug(string|\Stringable $message, array $context = []): void + { + $this->addRecord(Level::Debug, (string) $message, $context); + } + + /** + * Adds a log record at the INFO level. + * + * This method allows for compatibility with common interfaces. + * + * @param string|Stringable $message The log message + * @param mixed[] $context The log context + */ + public function info(string|\Stringable $message, array $context = []): void + { + $this->addRecord(Level::Info, (string) $message, $context); + } + + /** + * Adds a log record at the NOTICE level. + * + * This method allows for compatibility with common interfaces. + * + * @param string|Stringable $message The log message + * @param mixed[] $context The log context + */ + public function notice(string|\Stringable $message, array $context = []): void + { + $this->addRecord(Level::Notice, (string) $message, $context); + } + + /** + * Adds a log record at the WARNING level. + * + * This method allows for compatibility with common interfaces. + * + * @param string|Stringable $message The log message + * @param mixed[] $context The log context + */ + public function warning(string|\Stringable $message, array $context = []): void + { + $this->addRecord(Level::Warning, (string) $message, $context); + } + + /** + * Adds a log record at the ERROR level. + * + * This method allows for compatibility with common interfaces. + * + * @param string|Stringable $message The log message + * @param mixed[] $context The log context + */ + public function error(string|\Stringable $message, array $context = []): void + { + $this->addRecord(Level::Error, (string) $message, $context); + } + + /** + * Adds a log record at the CRITICAL level. + * + * This method allows for compatibility with common interfaces. + * + * @param string|Stringable $message The log message + * @param mixed[] $context The log context + */ + public function critical(string|\Stringable $message, array $context = []): void + { + $this->addRecord(Level::Critical, (string) $message, $context); + } + + /** + * Adds a log record at the ALERT level. + * + * This method allows for compatibility with common interfaces. + * + * @param string|Stringable $message The log message + * @param mixed[] $context The log context + */ + public function alert(string|\Stringable $message, array $context = []): void + { + $this->addRecord(Level::Alert, (string) $message, $context); + } + + /** + * Adds a log record at the EMERGENCY level. + * + * This method allows for compatibility with common interfaces. + * + * @param string|Stringable $message The log message + * @param mixed[] $context The log context + */ + public function emergency(string|\Stringable $message, array $context = []): void + { + $this->addRecord(Level::Emergency, (string) $message, $context); + } + + /** + * Sets the timezone to be used for the timestamp of log records. + */ + public function setTimezone(DateTimeZone $tz): self + { + $this->timezone = $tz; + + return $this; + } + + /** + * Returns the timezone to be used for the timestamp of log records. + */ + public function getTimezone(): DateTimeZone + { + return $this->timezone; + } + + /** + * Delegates exception management to the custom exception handler, + * or throws the exception if no custom handler is set. + */ + protected function handleException(Throwable $e, LogRecord $record): void + { + if (null === $this->exceptionHandler) { + throw $e; + } + + ($this->exceptionHandler)($e, $record); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php b/monolog/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php new file mode 100644 index 00000000..4cbd9c84 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php @@ -0,0 +1,75 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\Level; +use Monolog\Logger; +use Psr\Log\LogLevel; +use Monolog\LogRecord; + +/** + * Injects Git branch and Git commit SHA in all records + * + * @author Nick Otter + * @author Jordi Boggiano + */ +class GitProcessor implements ProcessorInterface +{ + private Level $level; + /** @var array{branch: string, commit: string}|array|null */ + private static $cache = null; + + /** + * @param int|string|Level|LogLevel::* $level The minimum logging level at which this Processor will be triggered + * + * @phpstan-param value-of|value-of|Level|LogLevel::* $level + */ + public function __construct(int|string|Level $level = Level::Debug) + { + $this->level = Logger::toMonologLevel($level); + } + + /** + * @inheritDoc + */ + public function __invoke(LogRecord $record): LogRecord + { + // return if the level is not high enough + if ($record->level < $this->level) { + return $record; + } + + $record->extra['git'] = self::getGitInfo(); + + return $record; + } + + /** + * @return array{branch: string, commit: string}|array + */ + private static function getGitInfo(): array + { + if (self::$cache !== null) { + return self::$cache; + } + + $branches = shell_exec('git branch -v --no-abbrev'); + if (is_string($branches) && 1 === preg_match('{^\* (.+?)\s+([a-f0-9]{40})(?:\s|$)}m', $branches, $matches)) { + return self::$cache = [ + 'branch' => $matches[1], + 'commit' => $matches[2], + ]; + } + + return self::$cache = []; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php b/monolog/vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php new file mode 100644 index 00000000..cba6e096 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\LogRecord; + +/** + * Injects value of gethostname in all records + */ +class HostnameProcessor implements ProcessorInterface +{ + private static string $host; + + public function __construct() + { + self::$host = (string) gethostname(); + } + + /** + * @inheritDoc + */ + public function __invoke(LogRecord $record): LogRecord + { + $record->extra['hostname'] = self::$host; + + return $record; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php b/monolog/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php new file mode 100644 index 00000000..30e7dfed --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php @@ -0,0 +1,122 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\Level; +use Monolog\Logger; +use Psr\Log\LogLevel; +use Monolog\LogRecord; + +/** + * Injects line/file:class/function where the log message came from + * + * Warning: This only works if the handler processes the logs directly. + * If you put the processor on a handler that is behind a FingersCrossedHandler + * for example, the processor will only be called once the trigger level is reached, + * and all the log records will have the same file/line/.. data from the call that + * triggered the FingersCrossedHandler. + * + * @author Jordi Boggiano + */ +class IntrospectionProcessor implements ProcessorInterface +{ + private Level $level; + + /** @var string[] */ + private array $skipClassesPartials; + + private int $skipStackFramesCount; + + private const SKIP_FUNCTIONS = [ + 'call_user_func', + 'call_user_func_array', + ]; + + /** + * @param string|int|Level $level The minimum logging level at which this Processor will be triggered + * @param string[] $skipClassesPartials + * + * @phpstan-param value-of|value-of|Level|LogLevel::* $level + */ + public function __construct(int|string|Level $level = Level::Debug, array $skipClassesPartials = [], int $skipStackFramesCount = 0) + { + $this->level = Logger::toMonologLevel($level); + $this->skipClassesPartials = array_merge(['Monolog\\'], $skipClassesPartials); + $this->skipStackFramesCount = $skipStackFramesCount; + } + + /** + * @inheritDoc + */ + public function __invoke(LogRecord $record): LogRecord + { + // return if the level is not high enough + if ($record->level->isLowerThan($this->level)) { + return $record; + } + + $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); + + // skip first since it's always the current method + array_shift($trace); + // the call_user_func call is also skipped + array_shift($trace); + + $i = 0; + + while ($this->isTraceClassOrSkippedFunction($trace, $i)) { + if (isset($trace[$i]['class'])) { + foreach ($this->skipClassesPartials as $part) { + if (strpos($trace[$i]['class'], $part) !== false) { + $i++; + + continue 2; + } + } + } elseif (in_array($trace[$i]['function'], self::SKIP_FUNCTIONS, true)) { + $i++; + + continue; + } + + break; + } + + $i += $this->skipStackFramesCount; + + // we should have the call source now + $record->extra = array_merge( + $record->extra, + [ + 'file' => isset($trace[$i - 1]['file']) ? $trace[$i - 1]['file'] : null, + 'line' => isset($trace[$i - 1]['line']) ? $trace[$i - 1]['line'] : null, + 'class' => isset($trace[$i]['class']) ? $trace[$i]['class'] : null, + 'callType' => isset($trace[$i]['type']) ? $trace[$i]['type'] : null, + 'function' => isset($trace[$i]['function']) ? $trace[$i]['function'] : null, + ] + ); + + return $record; + } + + /** + * @param array $trace + */ + private function isTraceClassOrSkippedFunction(array $trace, int $index): bool + { + if (!isset($trace[$index])) { + return false; + } + + return isset($trace[$index]['class']) || in_array($trace[$index]['function'], self::SKIP_FUNCTIONS, true); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php b/monolog/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php new file mode 100644 index 00000000..adc32c65 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php @@ -0,0 +1,39 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\LogRecord; + +/** + * Injects memory_get_peak_usage in all records + * + * @see Monolog\Processor\MemoryProcessor::__construct() for options + * @author Rob Jensen + */ +class MemoryPeakUsageProcessor extends MemoryProcessor +{ + /** + * @inheritDoc + */ + public function __invoke(LogRecord $record): LogRecord + { + $usage = memory_get_peak_usage($this->realUsage); + + if ($this->useFormatting) { + $usage = $this->formatBytes($usage); + } + + $record->extra['memory_peak_usage'] = $usage; + + return $record; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php b/monolog/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php new file mode 100644 index 00000000..f808e51b --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php @@ -0,0 +1,60 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +/** + * Some methods that are common for all memory processors + * + * @author Rob Jensen + */ +abstract class MemoryProcessor implements ProcessorInterface +{ + /** + * @var bool If true, get the real size of memory allocated from system. Else, only the memory used by emalloc() is reported. + */ + protected bool $realUsage; + + /** + * @var bool If true, then format memory size to human readable string (MB, KB, B depending on size) + */ + protected bool $useFormatting; + + /** + * @param bool $realUsage Set this to true to get the real size of memory allocated from system. + * @param bool $useFormatting If true, then format memory size to human readable string (MB, KB, B depending on size) + */ + public function __construct(bool $realUsage = true, bool $useFormatting = true) + { + $this->realUsage = $realUsage; + $this->useFormatting = $useFormatting; + } + + /** + * Formats bytes into a human readable string if $this->useFormatting is true, otherwise return $bytes as is + * + * @return string|int Formatted string if $this->useFormatting is true, otherwise return $bytes as int + */ + protected function formatBytes(int $bytes) + { + if (!$this->useFormatting) { + return $bytes; + } + + if ($bytes > 1024 * 1024) { + return round($bytes / 1024 / 1024, 2).' MB'; + } elseif ($bytes > 1024) { + return round($bytes / 1024, 2).' KB'; + } + + return $bytes . ' B'; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php b/monolog/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php new file mode 100644 index 00000000..a814b1df --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php @@ -0,0 +1,39 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\LogRecord; + +/** + * Injects memory_get_usage in all records + * + * @see Monolog\Processor\MemoryProcessor::__construct() for options + * @author Rob Jensen + */ +class MemoryUsageProcessor extends MemoryProcessor +{ + /** + * @inheritDoc + */ + public function __invoke(LogRecord $record): LogRecord + { + $usage = memory_get_usage($this->realUsage); + + if ($this->useFormatting) { + $usage = $this->formatBytes($usage); + } + + $record->extra['memory_usage'] = $usage; + + return $record; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php b/monolog/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php new file mode 100644 index 00000000..47b1e64f --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php @@ -0,0 +1,75 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\Level; +use Monolog\Logger; +use Psr\Log\LogLevel; +use Monolog\LogRecord; + +/** + * Injects Hg branch and Hg revision number in all records + * + * @author Jonathan A. Schweder + */ +class MercurialProcessor implements ProcessorInterface +{ + private Level $level; + /** @var array{branch: string, revision: string}|array|null */ + private static $cache = null; + + /** + * @param int|string|Level $level The minimum logging level at which this Processor will be triggered + * + * @phpstan-param value-of|value-of|Level|LogLevel::* $level + */ + public function __construct(int|string|Level $level = Level::Debug) + { + $this->level = Logger::toMonologLevel($level); + } + + /** + * @inheritDoc + */ + public function __invoke(LogRecord $record): LogRecord + { + // return if the level is not high enough + if ($record->level->isLowerThan($this->level)) { + return $record; + } + + $record->extra['hg'] = self::getMercurialInfo(); + + return $record; + } + + /** + * @return array{branch: string, revision: string}|array + */ + private static function getMercurialInfo(): array + { + if (self::$cache !== null) { + return self::$cache; + } + + $result = explode(' ', trim((string) shell_exec('hg id -nb'))); + + if (count($result) >= 3) { + return self::$cache = [ + 'branch' => $result[1], + 'revision' => $result[2], + ]; + } + + return self::$cache = []; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php b/monolog/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php new file mode 100644 index 00000000..bb9a5224 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\LogRecord; + +/** + * Adds value of getmypid into records + * + * @author Andreas Hörnicke + */ +class ProcessIdProcessor implements ProcessorInterface +{ + /** + * @inheritDoc + */ + public function __invoke(LogRecord $record): LogRecord + { + $record->extra['process_id'] = getmypid(); + + return $record; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php b/monolog/vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php new file mode 100644 index 00000000..ebe41fc2 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\LogRecord; + +/** + * An optional interface to allow labelling Monolog processors. + * + * @author Nicolas Grekas + */ +interface ProcessorInterface +{ + /** + * @return LogRecord The processed record + */ + public function __invoke(LogRecord $record); +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php b/monolog/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php new file mode 100644 index 00000000..f2407d56 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php @@ -0,0 +1,85 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\Utils; +use Monolog\LogRecord; + +/** + * Processes a record's message according to PSR-3 rules + * + * It replaces {foo} with the value from $context['foo'] + * + * @author Jordi Boggiano + */ +class PsrLogMessageProcessor implements ProcessorInterface +{ + public const SIMPLE_DATE = "Y-m-d\TH:i:s.uP"; + + private ?string $dateFormat; + + private bool $removeUsedContextFields; + + /** + * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format + * @param bool $removeUsedContextFields If set to true the fields interpolated into message gets unset + */ + public function __construct(?string $dateFormat = null, bool $removeUsedContextFields = false) + { + $this->dateFormat = $dateFormat; + $this->removeUsedContextFields = $removeUsedContextFields; + } + + /** + * @inheritDoc + */ + public function __invoke(LogRecord $record): LogRecord + { + if (false === strpos($record->message, '{')) { + return $record; + } + + $replacements = []; + $context = $record->context; + + foreach ($context as $key => $val) { + $placeholder = '{' . $key . '}'; + if (strpos($record->message, $placeholder) === false) { + continue; + } + + if (null === $val || is_scalar($val) || (is_object($val) && method_exists($val, "__toString"))) { + $replacements[$placeholder] = $val; + } elseif ($val instanceof \DateTimeInterface) { + if (null === $this->dateFormat && $val instanceof \Monolog\DateTimeImmutable) { + // handle monolog dates using __toString if no specific dateFormat was asked for + // so that it follows the useMicroseconds flag + $replacements[$placeholder] = (string) $val; + } else { + $replacements[$placeholder] = $val->format($this->dateFormat ?? static::SIMPLE_DATE); + } + } elseif (is_object($val)) { + $replacements[$placeholder] = '[object '.Utils::getClass($val).']'; + } elseif (is_array($val)) { + $replacements[$placeholder] = 'array'.Utils::jsonEncode($val, null, true); + } else { + $replacements[$placeholder] = '['.gettype($val).']'; + } + + if ($this->removeUsedContextFields) { + unset($context[$key]); + } + } + + return $record->with(message: strtr($record->message, $replacements), context: $context); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php b/monolog/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php new file mode 100644 index 00000000..4543ccf6 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php @@ -0,0 +1,63 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\LogRecord; + +/** + * Adds a tags array into record + * + * @author Martijn Riemers + */ +class TagProcessor implements ProcessorInterface +{ + /** @var string[] */ + private array $tags; + + /** + * @param string[] $tags + */ + public function __construct(array $tags = []) + { + $this->setTags($tags); + } + + /** + * @param string[] $tags + */ + public function addTags(array $tags = []): self + { + $this->tags = array_merge($this->tags, $tags); + + return $this; + } + + /** + * @param string[] $tags + */ + public function setTags(array $tags = []): self + { + $this->tags = $tags; + + return $this; + } + + /** + * @inheritDoc + */ + public function __invoke(LogRecord $record): LogRecord + { + $record->extra['tags'] = $this->tags; + + return $record; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php b/monolog/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php new file mode 100644 index 00000000..3a0c128c --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php @@ -0,0 +1,67 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\ResettableInterface; +use Monolog\LogRecord; + +/** + * Adds a unique identifier into records + * + * @author Simon Mönch + */ +class UidProcessor implements ProcessorInterface, ResettableInterface +{ + /** @var non-empty-string */ + private string $uid; + + /** + * @param int<1, 32> $length + */ + public function __construct(int $length = 7) + { + if ($length > 32 || $length < 1) { + throw new \InvalidArgumentException('The uid length must be an integer between 1 and 32'); + } + + $this->uid = $this->generateUid($length); + } + + /** + * @inheritDoc + */ + public function __invoke(LogRecord $record): LogRecord + { + $record->extra['uid'] = $this->uid; + + return $record; + } + + public function getUid(): string + { + return $this->uid; + } + + public function reset(): void + { + $this->uid = $this->generateUid(strlen($this->uid)); + } + + /** + * @param positive-int $length + * @return non-empty-string + */ + private function generateUid(int $length): string + { + return substr(bin2hex(random_bytes((int) ceil($length / 2))), 0, $length); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php b/monolog/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php new file mode 100644 index 00000000..2088b180 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php @@ -0,0 +1,112 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use ArrayAccess; +use Monolog\LogRecord; + +/** + * Injects url/method and remote IP of the current web request in all records + * + * @author Jordi Boggiano + */ +class WebProcessor implements ProcessorInterface +{ + /** + * @var array|ArrayAccess + */ + protected array|ArrayAccess $serverData; + + /** + * Default fields + * + * Array is structured as [key in record.extra => key in $serverData] + * + * @var array + */ + protected array $extraFields = [ + 'url' => 'REQUEST_URI', + 'ip' => 'REMOTE_ADDR', + 'http_method' => 'REQUEST_METHOD', + 'server' => 'SERVER_NAME', + 'referrer' => 'HTTP_REFERER', + 'user_agent' => 'HTTP_USER_AGENT', + ]; + + /** + * @param array|ArrayAccess|null $serverData Array or object w/ ArrayAccess that provides access to the $_SERVER data + * @param array|array|null $extraFields Field names and the related key inside $serverData to be added (or just a list of field names to use the default configured $serverData mapping). If not provided it defaults to: [url, ip, http_method, server, referrer] + unique_id if present in server data + */ + public function __construct(array|ArrayAccess|null $serverData = null, array|null $extraFields = null) + { + if (null === $serverData) { + $this->serverData = &$_SERVER; + } else { + $this->serverData = $serverData; + } + + $defaultEnabled = ['url', 'ip', 'http_method', 'server', 'referrer']; + if (isset($this->serverData['UNIQUE_ID'])) { + $this->extraFields['unique_id'] = 'UNIQUE_ID'; + $defaultEnabled[] = 'unique_id'; + } + + if (null === $extraFields) { + $extraFields = $defaultEnabled; + } + if (isset($extraFields[0])) { + foreach (array_keys($this->extraFields) as $fieldName) { + if (!in_array($fieldName, $extraFields, true)) { + unset($this->extraFields[$fieldName]); + } + } + } else { + $this->extraFields = $extraFields; + } + } + + /** + * @inheritDoc + */ + public function __invoke(LogRecord $record): LogRecord + { + // skip processing if for some reason request data + // is not present (CLI or wonky SAPIs) + if (!isset($this->serverData['REQUEST_URI'])) { + return $record; + } + + $record->extra = $this->appendExtraFields($record->extra); + + return $record; + } + + public function addExtraField(string $extraName, string $serverName): self + { + $this->extraFields[$extraName] = $serverName; + + return $this; + } + + /** + * @param mixed[] $extra + * @return mixed[] + */ + private function appendExtraFields(array $extra): array + { + foreach ($this->extraFields as $extraName => $serverName) { + $extra[$extraName] = $this->serverData[$serverName] ?? null; + } + + return $extra; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Registry.php b/monolog/vendor/monolog/monolog/src/Monolog/Registry.php new file mode 100644 index 00000000..2ef2edce --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Registry.php @@ -0,0 +1,133 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog; + +use InvalidArgumentException; + +/** + * Monolog log registry + * + * Allows to get `Logger` instances in the global scope + * via static method calls on this class. + * + * + * $application = new Monolog\Logger('application'); + * $api = new Monolog\Logger('api'); + * + * Monolog\Registry::addLogger($application); + * Monolog\Registry::addLogger($api); + * + * function testLogger() + * { + * Monolog\Registry::api()->error('Sent to $api Logger instance'); + * Monolog\Registry::application()->error('Sent to $application Logger instance'); + * } + * + * + * @author Tomas Tatarko + */ +class Registry +{ + /** + * List of all loggers in the registry (by named indexes) + * + * @var Logger[] + */ + private static array $loggers = []; + + /** + * Adds new logging channel to the registry + * + * @param Logger $logger Instance of the logging channel + * @param string|null $name Name of the logging channel ($logger->getName() by default) + * @param bool $overwrite Overwrite instance in the registry if the given name already exists? + * @throws \InvalidArgumentException If $overwrite set to false and named Logger instance already exists + */ + public static function addLogger(Logger $logger, ?string $name = null, bool $overwrite = false): void + { + $name = $name ?? $logger->getName(); + + if (isset(self::$loggers[$name]) && !$overwrite) { + throw new InvalidArgumentException('Logger with the given name already exists'); + } + + self::$loggers[$name] = $logger; + } + + /** + * Checks if such logging channel exists by name or instance + * + * @param string|Logger $logger Name or logger instance + */ + public static function hasLogger($logger): bool + { + if ($logger instanceof Logger) { + $index = array_search($logger, self::$loggers, true); + + return false !== $index; + } + + return isset(self::$loggers[$logger]); + } + + /** + * Removes instance from registry by name or instance + * + * @param string|Logger $logger Name or logger instance + */ + public static function removeLogger($logger): void + { + if ($logger instanceof Logger) { + if (false !== ($idx = array_search($logger, self::$loggers, true))) { + unset(self::$loggers[$idx]); + } + } else { + unset(self::$loggers[$logger]); + } + } + + /** + * Clears the registry + */ + public static function clear(): void + { + self::$loggers = []; + } + + /** + * Gets Logger instance from the registry + * + * @param string $name Name of the requested Logger instance + * @throws \InvalidArgumentException If named Logger instance is not in the registry + */ + public static function getInstance(string $name): Logger + { + if (!isset(self::$loggers[$name])) { + throw new InvalidArgumentException(sprintf('Requested "%s" logger instance is not in the registry', $name)); + } + + return self::$loggers[$name]; + } + + /** + * Gets Logger instance from the registry via static method call + * + * @param string $name Name of the requested Logger instance + * @param mixed[] $arguments Arguments passed to static method call + * @throws \InvalidArgumentException If named Logger instance is not in the registry + * @return Logger Requested instance of Logger + */ + public static function __callStatic(string $name, array $arguments): Logger + { + return self::getInstance($name); + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/ResettableInterface.php b/monolog/vendor/monolog/monolog/src/Monolog/ResettableInterface.php new file mode 100644 index 00000000..4983a6b3 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/ResettableInterface.php @@ -0,0 +1,31 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog; + +/** + * Handler or Processor implementing this interface will be reset when Logger::reset() is called. + * + * Resetting ends a log cycle gets them back to their initial state. + * + * Resetting a Handler or a Processor means flushing/cleaning all buffers, resetting internal + * state, and getting it back to a state in which it can receive log records again. + * + * This is useful in case you want to avoid logs leaking between two requests or jobs when you + * have a long running process like a worker or an application server serving multiple requests + * in one process. + * + * @author Grégoire Pineau + */ +interface ResettableInterface +{ + public function reset(): void; +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/SignalHandler.php b/monolog/vendor/monolog/monolog/src/Monolog/SignalHandler.php new file mode 100644 index 00000000..e6b02b08 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/SignalHandler.php @@ -0,0 +1,112 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog; + +use Psr\Log\LoggerInterface; +use Psr\Log\LogLevel; +use ReflectionExtension; + +/** + * Monolog POSIX signal handler + * + * @author Robert Gust-Bardon + */ +class SignalHandler +{ + private LoggerInterface $logger; + + /** @var array SIG_DFL, SIG_IGN or previous callable */ + private array $previousSignalHandler = []; + /** @var array */ + private array $signalLevelMap = []; + /** @var array */ + private array $signalRestartSyscalls = []; + + public function __construct(LoggerInterface $logger) + { + $this->logger = $logger; + } + + /** + * @param int|string|Level $level Level or level name + * @return $this + * + * @phpstan-param value-of|value-of|Level|LogLevel::* $level + */ + public function registerSignalHandler(int $signo, int|string|Level $level = LogLevel::CRITICAL, bool $callPrevious = true, bool $restartSyscalls = true, ?bool $async = true): self + { + if (!extension_loaded('pcntl') || !function_exists('pcntl_signal')) { + return $this; + } + + $level = Logger::toMonologLevel($level)->toPsrLogLevel(); + + if ($callPrevious) { + $handler = pcntl_signal_get_handler($signo); + $this->previousSignalHandler[$signo] = $handler; + } else { + unset($this->previousSignalHandler[$signo]); + } + $this->signalLevelMap[$signo] = $level; + $this->signalRestartSyscalls[$signo] = $restartSyscalls; + + if ($async !== null) { + pcntl_async_signals($async); + } + + pcntl_signal($signo, [$this, 'handleSignal'], $restartSyscalls); + + return $this; + } + + /** + * @param mixed $siginfo + */ + public function handleSignal(int $signo, $siginfo = null): void + { + static $signals = []; + + if (!$signals && extension_loaded('pcntl')) { + $pcntl = new ReflectionExtension('pcntl'); + foreach ($pcntl->getConstants() as $name => $value) { + if (substr($name, 0, 3) === 'SIG' && $name[3] !== '_' && is_int($value)) { + $signals[$value] = $name; + } + } + } + + $level = $this->signalLevelMap[$signo] ?? LogLevel::CRITICAL; + $signal = $signals[$signo] ?? $signo; + $context = $siginfo ?? []; + $this->logger->log($level, sprintf('Program received signal %s', $signal), $context); + + if (!isset($this->previousSignalHandler[$signo])) { + return; + } + + if ($this->previousSignalHandler[$signo] === SIG_DFL) { + if (extension_loaded('pcntl') && function_exists('pcntl_signal') && function_exists('pcntl_sigprocmask') && function_exists('pcntl_signal_dispatch') + && extension_loaded('posix') && function_exists('posix_getpid') && function_exists('posix_kill') + ) { + $restartSyscalls = $this->signalRestartSyscalls[$signo] ?? true; + pcntl_signal($signo, SIG_DFL, $restartSyscalls); + pcntl_sigprocmask(SIG_UNBLOCK, [$signo], $oldset); + posix_kill(posix_getpid(), $signo); + pcntl_signal_dispatch(); + pcntl_sigprocmask(SIG_SETMASK, $oldset); + pcntl_signal($signo, [$this, 'handleSignal'], $restartSyscalls); + } + } elseif (is_callable($this->previousSignalHandler[$signo])) { + $this->previousSignalHandler[$signo]($signo, $siginfo); + } + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Test/TestCase.php b/monolog/vendor/monolog/monolog/src/Monolog/Test/TestCase.php new file mode 100644 index 00000000..98204a95 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Test/TestCase.php @@ -0,0 +1,82 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Test; + +use Monolog\Level; +use Monolog\Logger; +use Monolog\LogRecord; +use Monolog\DateTimeImmutable; +use Monolog\Formatter\FormatterInterface; +use Psr\Log\LogLevel; + +/** + * Lets you easily generate log records and a dummy formatter for testing purposes + * + * @author Jordi Boggiano + * + * @internal feel free to reuse this to test your own handlers, this is marked internal to avoid issues with PHPStorm https://github.com/Seldaek/monolog/issues/1677 + */ +class TestCase extends \PHPUnit\Framework\TestCase +{ + public function tearDown(): void + { + parent::tearDown(); + + if (isset($this->handler)) { + unset($this->handler); + } + } + + /** + * @param array $context + * @param array $extra + * + * @phpstan-param value-of|value-of|Level|LogLevel::* $level + */ + protected function getRecord(int|string|Level $level = Level::Warning, string|\Stringable $message = 'test', array $context = [], string $channel = 'test', \DateTimeImmutable $datetime = new DateTimeImmutable(true), array $extra = []): LogRecord + { + return new LogRecord( + message: (string) $message, + context: $context, + level: Logger::toMonologLevel($level), + channel: $channel, + datetime: $datetime, + extra: $extra, + ); + } + + /** + * @phpstan-return list + */ + protected function getMultipleRecords(): array + { + return [ + $this->getRecord(Level::Debug, 'debug message 1'), + $this->getRecord(Level::Debug, 'debug message 2'), + $this->getRecord(Level::Info, 'information'), + $this->getRecord(Level::Warning, 'warning'), + $this->getRecord(Level::Error, 'error'), + ]; + } + + protected function getIdentityFormatter(): FormatterInterface + { + $formatter = $this->createMock(FormatterInterface::class); + $formatter->expects(self::any()) + ->method('format') + ->will(self::returnCallback(function ($record) { + return $record->message; + })); + + return $formatter; + } +} diff --git a/monolog/vendor/monolog/monolog/src/Monolog/Utils.php b/monolog/vendor/monolog/monolog/src/Monolog/Utils.php new file mode 100644 index 00000000..9dae2535 --- /dev/null +++ b/monolog/vendor/monolog/monolog/src/Monolog/Utils.php @@ -0,0 +1,274 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog; + +final class Utils +{ + const DEFAULT_JSON_FLAGS = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION | JSON_INVALID_UTF8_SUBSTITUTE | JSON_PARTIAL_OUTPUT_ON_ERROR; + + public static function getClass(object $object): string + { + $class = \get_class($object); + + if (false === ($pos = \strpos($class, "@anonymous\0"))) { + return $class; + } + + if (false === ($parent = \get_parent_class($class))) { + return \substr($class, 0, $pos + 10); + } + + return $parent . '@anonymous'; + } + + public static function substr(string $string, int $start, ?int $length = null): string + { + if (extension_loaded('mbstring')) { + return mb_strcut($string, $start, $length); + } + + return substr($string, $start, (null === $length) ? strlen($string) : $length); + } + + /** + * Makes sure if a relative path is passed in it is turned into an absolute path + * + * @param string $streamUrl stream URL or path without protocol + */ + public static function canonicalizePath(string $streamUrl): string + { + $prefix = ''; + if ('file://' === substr($streamUrl, 0, 7)) { + $streamUrl = substr($streamUrl, 7); + $prefix = 'file://'; + } + + // other type of stream, not supported + if (false !== strpos($streamUrl, '://')) { + return $streamUrl; + } + + // already absolute + if (substr($streamUrl, 0, 1) === '/' || substr($streamUrl, 1, 1) === ':' || substr($streamUrl, 0, 2) === '\\\\') { + return $prefix.$streamUrl; + } + + $streamUrl = getcwd() . '/' . $streamUrl; + + return $prefix.$streamUrl; + } + + /** + * Return the JSON representation of a value + * + * @param mixed $data + * @param int $encodeFlags flags to pass to json encode, defaults to DEFAULT_JSON_FLAGS + * @param bool $ignoreErrors whether to ignore encoding errors or to throw on error, when ignored and the encoding fails, "null" is returned which is valid json for null + * @throws \RuntimeException if encoding fails and errors are not ignored + * @return string when errors are ignored and the encoding fails, "null" is returned which is valid json for null + */ + public static function jsonEncode($data, ?int $encodeFlags = null, bool $ignoreErrors = false): string + { + if (null === $encodeFlags) { + $encodeFlags = self::DEFAULT_JSON_FLAGS; + } + + if ($ignoreErrors) { + $json = @json_encode($data, $encodeFlags); + if (false === $json) { + return 'null'; + } + + return $json; + } + + $json = json_encode($data, $encodeFlags); + if (false === $json) { + $json = self::handleJsonError(json_last_error(), $data); + } + + return $json; + } + + /** + * Handle a json_encode failure. + * + * If the failure is due to invalid string encoding, try to clean the + * input and encode again. If the second encoding attempt fails, the + * initial error is not encoding related or the input can't be cleaned then + * raise a descriptive exception. + * + * @param int $code return code of json_last_error function + * @param mixed $data data that was meant to be encoded + * @param int $encodeFlags flags to pass to json encode, defaults to JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION + * @throws \RuntimeException if failure can't be corrected + * @return string JSON encoded data after error correction + */ + public static function handleJsonError(int $code, $data, ?int $encodeFlags = null): string + { + if ($code !== JSON_ERROR_UTF8) { + self::throwEncodeError($code, $data); + } + + if (is_string($data)) { + self::detectAndCleanUtf8($data); + } elseif (is_array($data)) { + array_walk_recursive($data, ['Monolog\Utils', 'detectAndCleanUtf8']); + } else { + self::throwEncodeError($code, $data); + } + + if (null === $encodeFlags) { + $encodeFlags = self::DEFAULT_JSON_FLAGS; + } + + $json = json_encode($data, $encodeFlags); + + if ($json === false) { + self::throwEncodeError(json_last_error(), $data); + } + + return $json; + } + + /** + * @internal + */ + public static function pcreLastErrorMessage(int $code): string + { + if (PHP_VERSION_ID >= 80000) { + return preg_last_error_msg(); + } + + $constants = (get_defined_constants(true))['pcre']; + $constants = array_filter($constants, function ($key) { + return substr($key, -6) == '_ERROR'; + }, ARRAY_FILTER_USE_KEY); + + $constants = array_flip($constants); + + return $constants[$code] ?? 'UNDEFINED_ERROR'; + } + + /** + * Throws an exception according to a given code with a customized message + * + * @param int $code return code of json_last_error function + * @param mixed $data data that was meant to be encoded + * @throws \RuntimeException + */ + private static function throwEncodeError(int $code, $data): never + { + $msg = match ($code) { + JSON_ERROR_DEPTH => 'Maximum stack depth exceeded', + JSON_ERROR_STATE_MISMATCH => 'Underflow or the modes mismatch', + JSON_ERROR_CTRL_CHAR => 'Unexpected control character found', + JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded', + default => 'Unknown error', + }; + + throw new \RuntimeException('JSON encoding failed: '.$msg.'. Encoding: '.var_export($data, true)); + } + + /** + * Detect invalid UTF-8 string characters and convert to valid UTF-8. + * + * Valid UTF-8 input will be left unmodified, but strings containing + * invalid UTF-8 codepoints will be reencoded as UTF-8 with an assumed + * original encoding of ISO-8859-15. This conversion may result in + * incorrect output if the actual encoding was not ISO-8859-15, but it + * will be clean UTF-8 output and will not rely on expensive and fragile + * detection algorithms. + * + * Function converts the input in place in the passed variable so that it + * can be used as a callback for array_walk_recursive. + * + * @param mixed $data Input to check and convert if needed, passed by ref + */ + private static function detectAndCleanUtf8(&$data): void + { + if (is_string($data) && preg_match('//u', $data) !== 1) { + $data = preg_replace_callback( + '/[\x80-\xFF]+/', + function ($m) { + return function_exists('mb_convert_encoding') ? mb_convert_encoding($m[0], 'UTF-8', 'ISO-8859-1') : utf8_encode($m[0]); + }, + $data + ); + if (!is_string($data)) { + $pcreErrorCode = preg_last_error(); + + throw new \RuntimeException('Failed to preg_replace_callback: ' . $pcreErrorCode . ' / ' . self::pcreLastErrorMessage($pcreErrorCode)); + } + $data = str_replace( + ['¤', '¦', '¨', '´', '¸', '¼', '½', '¾'], + ['€', 'Š', 'š', 'Ž', 'ž', 'Œ', 'œ', 'Ÿ'], + $data + ); + } + } + + /** + * Converts a string with a valid 'memory_limit' format, to bytes. + * + * @param string|false $val + * @return int|false Returns an integer representing bytes. Returns FALSE in case of error. + */ + public static function expandIniShorthandBytes($val) + { + if (!is_string($val)) { + return false; + } + + // support -1 + if ((int) $val < 0) { + return (int) $val; + } + + if (preg_match('/^\s*(?\d+)(?:\.\d+)?\s*(?[gmk]?)\s*$/i', $val, $match) !== 1) { + return false; + } + + $val = (int) $match['val']; + switch (strtolower($match['unit'] ?? '')) { + case 'g': + $val *= 1024; + // no break + case 'm': + $val *= 1024; + // no break + case 'k': + $val *= 1024; + } + + return $val; + } + + public static function getRecordMessageForException(LogRecord $record): string + { + $context = ''; + $extra = ''; + + try { + if (\count($record->context) > 0) { + $context = "\nContext: " . json_encode($record->context, JSON_THROW_ON_ERROR); + } + if (\count($record->extra) > 0) { + $extra = "\nExtra: " . json_encode($record->extra, JSON_THROW_ON_ERROR); + } + } catch (\Throwable $e) { + // noop + } + + return "\nThe exception occurred while attempting to log: " . $record->message . $context . $extra; + } +} diff --git a/monolog/vendor/psr/log/LICENSE b/monolog/vendor/psr/log/LICENSE new file mode 100644 index 00000000..474c952b --- /dev/null +++ b/monolog/vendor/psr/log/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2012 PHP Framework Interoperability Group + +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/monolog/vendor/psr/log/README.md b/monolog/vendor/psr/log/README.md new file mode 100644 index 00000000..a9f20c43 --- /dev/null +++ b/monolog/vendor/psr/log/README.md @@ -0,0 +1,58 @@ +PSR Log +======= + +This repository holds all interfaces/classes/traits related to +[PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md). + +Note that this is not a logger of its own. It is merely an interface that +describes a logger. See the specification for more details. + +Installation +------------ + +```bash +composer require psr/log +``` + +Usage +----- + +If you need a logger, you can use the interface like this: + +```php +logger = $logger; + } + + public function doSomething() + { + if ($this->logger) { + $this->logger->info('Doing work'); + } + + try { + $this->doSomethingElse(); + } catch (Exception $exception) { + $this->logger->error('Oh no!', array('exception' => $exception)); + } + + // do something useful + } +} +``` + +You can then pick one of the implementations of the interface to get a logger. + +If you want to implement the interface, you can require this package and +implement `Psr\Log\LoggerInterface` in your code. Please read the +[specification text](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md) +for details. diff --git a/monolog/vendor/psr/log/composer.json b/monolog/vendor/psr/log/composer.json new file mode 100644 index 00000000..879fc6f5 --- /dev/null +++ b/monolog/vendor/psr/log/composer.json @@ -0,0 +1,26 @@ +{ + "name": "psr/log", + "description": "Common interface for logging libraries", + "keywords": ["psr", "psr-3", "log"], + "homepage": "https://github.com/php-fig/log", + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "require": { + "php": ">=8.0.0" + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + } +} diff --git a/monolog/vendor/psr/log/src/AbstractLogger.php b/monolog/vendor/psr/log/src/AbstractLogger.php new file mode 100644 index 00000000..d60a091a --- /dev/null +++ b/monolog/vendor/psr/log/src/AbstractLogger.php @@ -0,0 +1,15 @@ +logger = $logger; + } +} diff --git a/monolog/vendor/psr/log/src/LoggerInterface.php b/monolog/vendor/psr/log/src/LoggerInterface.php new file mode 100644 index 00000000..b3a24b5f --- /dev/null +++ b/monolog/vendor/psr/log/src/LoggerInterface.php @@ -0,0 +1,125 @@ +log(LogLevel::EMERGENCY, $message, $context); + } + + /** + * Action must be taken immediately. + * + * Example: Entire website down, database unavailable, etc. This should + * trigger the SMS alerts and wake you up. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function alert(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::ALERT, $message, $context); + } + + /** + * Critical conditions. + * + * Example: Application component unavailable, unexpected exception. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function critical(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::CRITICAL, $message, $context); + } + + /** + * Runtime errors that do not require immediate action but should typically + * be logged and monitored. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function error(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::ERROR, $message, $context); + } + + /** + * Exceptional occurrences that are not errors. + * + * Example: Use of deprecated APIs, poor use of an API, undesirable things + * that are not necessarily wrong. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function warning(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::WARNING, $message, $context); + } + + /** + * Normal but significant events. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function notice(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::NOTICE, $message, $context); + } + + /** + * Interesting events. + * + * Example: User logs in, SQL logs. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function info(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::INFO, $message, $context); + } + + /** + * Detailed debug information. + * + * @param string|\Stringable $message + * @param array $context + * + * @return void + */ + public function debug(string|\Stringable $message, array $context = []): void + { + $this->log(LogLevel::DEBUG, $message, $context); + } + + /** + * Logs with an arbitrary level. + * + * @param mixed $level + * @param string|\Stringable $message + * @param array $context + * + * @return void + * + * @throws \Psr\Log\InvalidArgumentException + */ + abstract public function log($level, string|\Stringable $message, array $context = []): void; +} diff --git a/monolog/vendor/psr/log/src/NullLogger.php b/monolog/vendor/psr/log/src/NullLogger.php new file mode 100644 index 00000000..c1cc3c06 --- /dev/null +++ b/monolog/vendor/psr/log/src/NullLogger.php @@ -0,0 +1,30 @@ +logger) { }` + * blocks. + */ +class NullLogger extends AbstractLogger +{ + /** + * Logs with an arbitrary level. + * + * @param mixed $level + * @param string|\Stringable $message + * @param array $context + * + * @return void + * + * @throws \Psr\Log\InvalidArgumentException + */ + public function log($level, string|\Stringable $message, array $context = []): void + { + // noop + } +} From 897dbb30cfbf1b7faff81492f9a0f80795bba771 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 17 Oct 2022 20:17:25 +0000 Subject: [PATCH 104/677] Remove "notice" with new function --- birdavatar/birdavatar.php | 6 +++--- catavatar/catavatar.php | 6 +++--- curweather/curweather.php | 2 +- forumdirectory/forumdirectory.php | 4 ++-- notifyall/notifyall.php | 4 ++-- pumpio/pumpio.php | 2 +- securemail/securemail.php | 4 ++-- statusnet/statusnet.php | 4 ++-- tumblr/tumblr.php | 2 +- twitter/twitter.php | 8 ++++---- 10 files changed, 21 insertions(+), 21 deletions(-) diff --git a/birdavatar/birdavatar.php b/birdavatar/birdavatar.php index 79753110..2fe1fa37 100644 --- a/birdavatar/birdavatar.php +++ b/birdavatar/birdavatar.php @@ -73,7 +73,7 @@ function birdavatar_addon_settings_post(App $a, &$s) $self = DBA::selectFirst('contact', ['id'], ['uid' => local_user(), 'self' => true]); if (!DBA::isResult($self)) { - notice(DI::l10n()->t("The bird has not found itself.")); + DI::sysmsg()->addNotice(DI::l10n()->t("The bird has not found itself.")); return; } @@ -82,7 +82,7 @@ function birdavatar_addon_settings_post(App $a, &$s) $condition = ['uid' => local_user(), 'contact-id' => $self['id']]; $photo = DBA::selectFirst('photo', ['resource-id'], $condition); if (!DBA::isResult($photo)) { - notice(DI::l10n()->t('There was an error, the bird flew away.')); + DI::sysmsg()->addNotice(DI::l10n()->t('There was an error, the bird flew away.')); return; } @@ -98,7 +98,7 @@ function birdavatar_addon_settings_post(App $a, &$s) // Update global directory in background Profile::publishUpdate(local_user()); - info(DI::l10n()->t('Meow!')); + DI::sysmsg()->addInfo(DI::l10n()->t('Meow!')); return; } diff --git a/catavatar/catavatar.php b/catavatar/catavatar.php index ce1fc78b..7a2bdc2e 100644 --- a/catavatar/catavatar.php +++ b/catavatar/catavatar.php @@ -74,7 +74,7 @@ function catavatar_addon_settings_post(App $a, &$s) $self = DBA::selectFirst('contact', ['id'], ['uid' => local_user(), 'self' => true]); if (!DBA::isResult($self)) { - notice(DI::l10n()->t("The cat hadn't found itself.")); + DI::sysmsg()->addNotice(DI::l10n()->t("The cat hadn't found itself.")); return; } @@ -83,7 +83,7 @@ function catavatar_addon_settings_post(App $a, &$s) $condition = ['uid' => local_user(), 'contact-id' => $self['id']]; $photo = DBA::selectFirst('photo', ['resource-id'], $condition); if (!DBA::isResult($photo)) { - notice(DI::l10n()->t('There was an error, the cat ran away.')); + DI::sysmsg()->addNotice(DI::l10n()->t('There was an error, the cat ran away.')); return; } @@ -99,7 +99,7 @@ function catavatar_addon_settings_post(App $a, &$s) // Update global directory in background Profile::publishUpdate(local_user()); - info(DI::l10n()->t('Meow!')); + DI::sysmsg()->addInfo(DI::l10n()->t('Meow!')); return; } diff --git a/curweather/curweather.php b/curweather/curweather.php index dc634b59..27d6f940 100644 --- a/curweather/curweather.php +++ b/curweather/curweather.php @@ -44,7 +44,7 @@ function getWeather($loc, $units = 'metric', $lang = 'en', $appid = '', $cacheti $res = new SimpleXMLElement(DI::httpClient()->fetch($url)); } catch (Exception $e) { if (empty($_SESSION['curweather_notice_shown'])) { - notice(DI::l10n()->t('Error fetching weather data. Error was: ' . $e->getMessage())); + DI::sysmsg()->addNotice(DI::l10n()->t('Error fetching weather data. Error was: ' . $e->getMessage())); $_SESSION['curweather_notice_shown'] = true; } diff --git a/forumdirectory/forumdirectory.php b/forumdirectory/forumdirectory.php index 42cc4c54..b04d3a46 100644 --- a/forumdirectory/forumdirectory.php +++ b/forumdirectory/forumdirectory.php @@ -63,7 +63,7 @@ function forumdirectory_content(App $a) global $forumdirectory_search; if ((DI::config()->get('system', 'block_public')) && (!local_user()) && (!remote_user())) { - notice(DI::l10n()->t('Public access denied.') . EOL); + DI::sysmsg()->addNotice(DI::l10n()->t('Public access denied.') . EOL); return; } @@ -135,7 +135,7 @@ function forumdirectory_content(App $a) } DBA::close($r); } else { - notice(DI::l10n()->t("No entries \x28some entries may be hidden\x29.")); + DI::sysmsg()->addNotice(DI::l10n()->t("No entries \x28some entries may be hidden\x29.")); } $tpl = Renderer::getMarkupTemplate('directory_header.tpl'); diff --git a/notifyall/notifyall.php b/notifyall/notifyall.php index ef8e6470..52d75e10 100644 --- a/notifyall/notifyall.php +++ b/notifyall/notifyall.php @@ -51,7 +51,7 @@ function notifyall_post(App $a) $recipients = DBA::p("SELECT DISTINCT `email` FROM `user` WHERE `verified` AND NOT `account_removed` AND NOT `account_expired` $sql_extra"); if (! $recipients) { - notice(DI::l10n()->t('No recipients found.') . EOL); + DI::sysmsg()->addNotice(DI::l10n()->t('No recipients found.') . EOL); return; } @@ -61,7 +61,7 @@ function notifyall_post(App $a) DI::emailer()->send($notifyEmail->withRecipient($recipient['email'])); } - info(DI::l10n()->t('Emails sent')); + DI::sysmsg()->addInfo(DI::l10n()->t('Emails sent')); DI::baseUrl()->redirect('admin'); } diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index a88b0d32..4fbc3de5 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -60,7 +60,7 @@ function pumpio_module() {} function pumpio_content(App $a) { if (!local_user()) { - notice(DI::l10n()->t('Permission denied.') . EOL); + DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.') . EOL); return ''; } diff --git a/securemail/securemail.php b/securemail/securemail.php index 62673eb1..a8a04df1 100644 --- a/securemail/securemail.php +++ b/securemail/securemail.php @@ -90,9 +90,9 @@ function securemail_settings_post(App &$a, array &$b) DI::pConfig()->set(local_user(), 'securemail', 'enable', $enable); if ($res) { - info(DI::l10n()->t('Test email sent') . EOL); + DI::sysmsg()->addInfo(DI::l10n()->t('Test email sent') . EOL); } else { - notice(DI::l10n()->t('There was an error sending the test email') . EOL); + DI::sysmsg()->addNotice(DI::l10n()->t('There was an error sending the test email') . EOL); } } } diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 4f5abfc8..4cf3f77a 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -146,7 +146,7 @@ function statusnet_settings_post(App $a, $post) DI::pConfig()->set(local_user(), 'statusnet', 'baseapi', $asn['apiurl']); //DI::pConfig()->set(local_user(), 'statusnet', 'application_name', $asn['applicationname'] ); } else { - notice(DI::l10n()->t('Please contact your site administrator.
The provided API URL is not valid.') . EOL . $asn['apiurl'] . EOL); + DI::sysmsg()->addNotice(DI::l10n()->t('Please contact your site administrator.
The provided API URL is not valid.') . EOL . $asn['apiurl'] . EOL); } } } @@ -174,7 +174,7 @@ function statusnet_settings_post(App $a, $post) DI::pConfig()->set(local_user(), 'statusnet', 'baseapi', $apibase); } else { // still not the correct API base, let's do noting - notice(DI::l10n()->t('We could not contact the GNU Social API with the Path you entered.') . EOL); + DI::sysmsg()->addNotice(DI::l10n()->t('We could not contact the GNU Social API with the Path you entered.') . EOL); } } } else { diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index de980598..33cc581f 100644 --- a/tumblr/tumblr.php +++ b/tumblr/tumblr.php @@ -39,7 +39,7 @@ function tumblr_module() {} function tumblr_content(App $a) { if (!local_user()) { - notice(DI::l10n()->t('Permission denied.') . EOL); + DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.') . EOL); return ''; } diff --git a/twitter/twitter.php b/twitter/twitter.php index a4acb3f1..d2847a18 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -269,9 +269,9 @@ function twitter_settings_post(App $a) DI::pConfig()->set(local_user(), 'twitter', 'oauthsecret', $token['oauth_token_secret']); DI::pConfig()->set(local_user(), 'twitter', 'post', 1); } catch(Exception $e) { - notice($e->getMessage()); + DI::sysmsg()->addNotice($e->getMessage()); } catch(TwitterOAuthException $e) { - notice($e->getMessage()); + DI::sysmsg()->addNotice($e->getMessage()); } } else { // if no PIN is supplied in the POST variables, the user has changed the setting @@ -551,14 +551,14 @@ function twitter_item_by_link(App $a, array &$hookData) empty(DI::pConfig()->get($hookData['uid'], 'twitter', 'oauthtoken')) || empty(DI::pConfig()->get($hookData['uid'], 'twitter', 'oauthsecret')) ) { - notice(DI::l10n()->t('Please connect a Twitter account in your Social Network settings to import Twitter posts.')); + DI::sysmsg()->addNotice(DI::l10n()->t('Please connect a Twitter account in your Social Network settings to import Twitter posts.')); return; } $status = twitter_statuses_show($matches[1]); if (empty($status->id_str)) { - notice(DI::l10n()->t('Twitter post not found.')); + DI::sysmsg()->addNotice(DI::l10n()->t('Twitter post not found.')); return; } From 101a22c0cd501b90792784471a0266f83eaeece8 Mon Sep 17 00:00:00 2001 From: Philipp Date: Mon, 17 Oct 2022 22:38:08 +0200 Subject: [PATCH 105/677] Adhere feedback --- monolog/composer.json | 7 ++++++- monolog/monolog.php | 2 +- monolog/src/DevelopHandler.php | 2 +- monolog/src/IntrospectionProcessor.php | 2 +- monolog/vendor/composer/autoload_classmap.php | 2 ++ monolog/vendor/composer/autoload_psr4.php | 1 + monolog/vendor/composer/autoload_static.php | 10 ++++++++++ 7 files changed, 22 insertions(+), 4 deletions(-) diff --git a/monolog/composer.json b/monolog/composer.json index d87f551f..d4614bb4 100644 --- a/monolog/composer.json +++ b/monolog/composer.json @@ -10,8 +10,13 @@ "role": "Developer" } ], + "autoload": { + "psr-4": { + "Friendica\\Addon\\Monolog\\": "src/" + } + }, "require": { - "php": ">=7.0", + "php": ">=7.0", "monolog/monolog": "^3.2" }, "license": "3-clause BSD license", diff --git a/monolog/monolog.php b/monolog/monolog.php index a0e88596..b2a1667f 100644 --- a/monolog/monolog.php +++ b/monolog/monolog.php @@ -8,7 +8,7 @@ use Friendica\App; use Friendica\Core\Hook; -use Friendica\Addon\monolog\src\IntrospectionProcessor; +use Friendica\Addon\Monolog\IntrospectionProcessor; use Friendica\DI; use Psr\Log\LogLevel; diff --git a/monolog/src/DevelopHandler.php b/monolog/src/DevelopHandler.php index 1c6f0bf1..cab297ae 100644 --- a/monolog/src/DevelopHandler.php +++ b/monolog/src/DevelopHandler.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Addon\monolog\src; +namespace Friendica\Addon\Monolog; use Friendica\App\Request; use Monolog\Handler; diff --git a/monolog/src/IntrospectionProcessor.php b/monolog/src/IntrospectionProcessor.php index bb5428af..b82bd67a 100644 --- a/monolog/src/IntrospectionProcessor.php +++ b/monolog/src/IntrospectionProcessor.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Addon\monolog\src; +namespace Friendica\Addon\Monolog; use Friendica\Core\Logger\Util\Introspection; use Monolog\Logger; diff --git a/monolog/vendor/composer/autoload_classmap.php b/monolog/vendor/composer/autoload_classmap.php index 70609203..6a85d4b5 100644 --- a/monolog/vendor/composer/autoload_classmap.php +++ b/monolog/vendor/composer/autoload_classmap.php @@ -6,6 +6,8 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( + 'Friendica\\Addon\\Monolog\\DevelopHandler' => $baseDir . '/src/DevelopHandler.php', + 'Friendica\\Addon\\Monolog\\IntrospectionProcessor' => $baseDir . '/src/IntrospectionProcessor.php', 'Monolog\\Attribute\\AsMonologProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php', 'Monolog\\DateTimeImmutable' => $vendorDir . '/monolog/monolog/src/Monolog/DateTimeImmutable.php', 'Monolog\\ErrorHandler' => $vendorDir . '/monolog/monolog/src/Monolog/ErrorHandler.php', diff --git a/monolog/vendor/composer/autoload_psr4.php b/monolog/vendor/composer/autoload_psr4.php index afcfb31e..551ee81e 100644 --- a/monolog/vendor/composer/autoload_psr4.php +++ b/monolog/vendor/composer/autoload_psr4.php @@ -8,4 +8,5 @@ $baseDir = dirname($vendorDir); return array( 'Psr\\Log\\' => array($vendorDir . '/psr/log/src'), 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), + 'Friendica\\Addon\\Monolog\\' => array($baseDir . '/src'), ); diff --git a/monolog/vendor/composer/autoload_static.php b/monolog/vendor/composer/autoload_static.php index 85bd86fd..e871958a 100644 --- a/monolog/vendor/composer/autoload_static.php +++ b/monolog/vendor/composer/autoload_static.php @@ -15,6 +15,10 @@ class ComposerStaticInitMonologAddon array ( 'Monolog\\' => 8, ), + 'F' => + array ( + 'Friendica\\Addon\\Monolog\\' => 24, + ), ); public static $prefixDirsPsr4 = array ( @@ -26,9 +30,15 @@ class ComposerStaticInitMonologAddon array ( 0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog', ), + 'Friendica\\Addon\\Monolog\\' => + array ( + 0 => __DIR__ . '/../..' . '/src', + ), ); public static $classMap = array ( + 'Friendica\\Addon\\Monolog\\DevelopHandler' => __DIR__ . '/../..' . '/src/DevelopHandler.php', + 'Friendica\\Addon\\Monolog\\IntrospectionProcessor' => __DIR__ . '/../..' . '/src/IntrospectionProcessor.php', 'Monolog\\Attribute\\AsMonologProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php', 'Monolog\\DateTimeImmutable' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/DateTimeImmutable.php', 'Monolog\\ErrorHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/ErrorHandler.php', From 2e854ee108fc54af040f92409df95436fc19490a Mon Sep 17 00:00:00 2001 From: Philipp Date: Mon, 17 Oct 2022 22:39:10 +0200 Subject: [PATCH 106/677] Replace Separator constant --- monolog/monolog.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monolog/monolog.php b/monolog/monolog.php index b2a1667f..0df9ac0b 100644 --- a/monolog/monolog.php +++ b/monolog/monolog.php @@ -12,7 +12,7 @@ use Friendica\Addon\Monolog\IntrospectionProcessor; use Friendica\DI; use Psr\Log\LogLevel; -require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; +require_once __DIR__ . '/vendor/autoload.php'; function monolog_install(App $a) { From 592374b7953ace98be0849ce24340ce5d805869e Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 17 Oct 2022 21:00:03 +0000 Subject: [PATCH 107/677] Some useless EOL removed --- forumdirectory/forumdirectory.php | 2 +- notifyall/notifyall.php | 2 +- pumpio/pumpio.php | 2 +- securemail/securemail.php | 4 ++-- statusnet/statusnet.php | 4 ++-- tumblr/tumblr.php | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/forumdirectory/forumdirectory.php b/forumdirectory/forumdirectory.php index b04d3a46..7dae270a 100644 --- a/forumdirectory/forumdirectory.php +++ b/forumdirectory/forumdirectory.php @@ -63,7 +63,7 @@ function forumdirectory_content(App $a) global $forumdirectory_search; if ((DI::config()->get('system', 'block_public')) && (!local_user()) && (!remote_user())) { - DI::sysmsg()->addNotice(DI::l10n()->t('Public access denied.') . EOL); + DI::sysmsg()->addNotice(DI::l10n()->t('Public access denied.')); return; } diff --git a/notifyall/notifyall.php b/notifyall/notifyall.php index 52d75e10..270557c4 100644 --- a/notifyall/notifyall.php +++ b/notifyall/notifyall.php @@ -51,7 +51,7 @@ function notifyall_post(App $a) $recipients = DBA::p("SELECT DISTINCT `email` FROM `user` WHERE `verified` AND NOT `account_removed` AND NOT `account_expired` $sql_extra"); if (! $recipients) { - DI::sysmsg()->addNotice(DI::l10n()->t('No recipients found.') . EOL); + DI::sysmsg()->addNotice(DI::l10n()->t('No recipients found.')); return; } diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 4fbc3de5..759b11fd 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -60,7 +60,7 @@ function pumpio_module() {} function pumpio_content(App $a) { if (!local_user()) { - DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.') . EOL); + DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.')); return ''; } diff --git a/securemail/securemail.php b/securemail/securemail.php index a8a04df1..82c5aec7 100644 --- a/securemail/securemail.php +++ b/securemail/securemail.php @@ -90,9 +90,9 @@ function securemail_settings_post(App &$a, array &$b) DI::pConfig()->set(local_user(), 'securemail', 'enable', $enable); if ($res) { - DI::sysmsg()->addInfo(DI::l10n()->t('Test email sent') . EOL); + DI::sysmsg()->addInfo(DI::l10n()->t('Test email sent')); } else { - DI::sysmsg()->addNotice(DI::l10n()->t('There was an error sending the test email') . EOL); + DI::sysmsg()->addNotice(DI::l10n()->t('There was an error sending the test email')); } } } diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 4cf3f77a..f82c1aa7 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -146,7 +146,7 @@ function statusnet_settings_post(App $a, $post) DI::pConfig()->set(local_user(), 'statusnet', 'baseapi', $asn['apiurl']); //DI::pConfig()->set(local_user(), 'statusnet', 'application_name', $asn['applicationname'] ); } else { - DI::sysmsg()->addNotice(DI::l10n()->t('Please contact your site administrator.
The provided API URL is not valid.') . EOL . $asn['apiurl'] . EOL); + DI::sysmsg()->addNotice(DI::l10n()->t('Please contact your site administrator.
The provided API URL is not valid.') . EOL . $asn['apiurl']); } } } @@ -174,7 +174,7 @@ function statusnet_settings_post(App $a, $post) DI::pConfig()->set(local_user(), 'statusnet', 'baseapi', $apibase); } else { // still not the correct API base, let's do noting - DI::sysmsg()->addNotice(DI::l10n()->t('We could not contact the GNU Social API with the Path you entered.') . EOL); + DI::sysmsg()->addNotice(DI::l10n()->t('We could not contact the GNU Social API with the Path you entered.')); } } } else { diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index 33cc581f..6a552b7b 100644 --- a/tumblr/tumblr.php +++ b/tumblr/tumblr.php @@ -39,7 +39,7 @@ function tumblr_module() {} function tumblr_content(App $a) { if (!local_user()) { - DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.') . EOL); + DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.')); return ''; } From e93260593ad5582ae2b38a52a3bb1a89ed9fa17f Mon Sep 17 00:00:00 2001 From: Philipp Date: Tue, 18 Oct 2022 08:10:44 +0200 Subject: [PATCH 108/677] fix space --- monolog/composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monolog/composer.json b/monolog/composer.json index d4614bb4..f9d8d4b3 100644 --- a/monolog/composer.json +++ b/monolog/composer.json @@ -12,7 +12,7 @@ ], "autoload": { "psr-4": { - "Friendica\\Addon\\Monolog\\": "src/" + "Friendica\\Addon\\Monolog\\": "src/" } }, "require": { From b3195504f1a4f6bcf9f831f1cb830b1886154eef Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 18 Oct 2022 12:28:46 +0000 Subject: [PATCH 109/677] The EOL constant is removed --- newmemberwidget/newmemberwidget.php | 10 +++++----- statusnet/statusnet.php | 2 +- wppost/wppost.php | 3 +-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/newmemberwidget/newmemberwidget.php b/newmemberwidget/newmemberwidget.php index 10968935..15fb333d 100644 --- a/newmemberwidget/newmemberwidget.php +++ b/newmemberwidget/newmemberwidget.php @@ -25,16 +25,16 @@ function newmemberwidget_network_mod_init (App $a, $b) return; } - $t = '
'.EOL; - $t .= '

'.DI::l10n()->t('New Member').'

'.EOL; - $t .= '' . DI::l10n()->t('Tips for New Members') . '
'.EOL; + $t = '
'; + $t .= '

'.DI::l10n()->t('New Member').'

'; + $t .= '' . DI::l10n()->t('Tips for New Members') . '
'; if (DI::config()->get('newmemberwidget','linkglobalsupport', false)) { - $t .= ''.DI::l10n()->t('Global Support Forum').'
'.EOL; + $t .= ''.DI::l10n()->t('Global Support Forum').'
'; } if (DI::config()->get('newmemberwidget','linklocalsupport', false)) { - $t .= ''.DI::l10n()->t('Local Support Forum').'
'.EOL; + $t .= ''.DI::l10n()->t('Local Support Forum').'
'; } $ft = DI::config()->get('newmemberwidget','freetext', ''); diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index f82c1aa7..9c6fb7f0 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -146,7 +146,7 @@ function statusnet_settings_post(App $a, $post) DI::pConfig()->set(local_user(), 'statusnet', 'baseapi', $asn['apiurl']); //DI::pConfig()->set(local_user(), 'statusnet', 'application_name', $asn['applicationname'] ); } else { - DI::sysmsg()->addNotice(DI::l10n()->t('Please contact your site administrator.
The provided API URL is not valid.') . EOL . $asn['apiurl']); + DI::sysmsg()->addNotice(DI::l10n()->t('Please contact your site administrator.
The provided API URL is not valid.') . '
' . $asn['apiurl']); } } } diff --git a/wppost/wppost.php b/wppost/wppost.php index 4cd5acc6..ab172016 100644 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -248,8 +248,7 @@ function wppost_send(App $a, array &$b) $wp_backlink = intval(DI::pConfig()->get($b['uid'],'wppost','backlink')); if($wp_backlink && $b['plink']) { - $post .= EOL . EOL . '' - . $wp_backlink_text . '' . EOL . EOL; + $post .= '

' . $wp_backlink_text . '

'; } $post = XML::escape($post); From 47d54e82df9919858f4c9c732369c57dad2157e7 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Tue, 18 Oct 2022 14:58:11 +0200 Subject: [PATCH 110/677] Update wppost/wppost.php Co-authored-by: Hypolite Petovan --- wppost/wppost.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wppost/wppost.php b/wppost/wppost.php index ab172016..5c110038 100644 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -248,7 +248,7 @@ function wppost_send(App $a, array &$b) $wp_backlink = intval(DI::pConfig()->get($b['uid'],'wppost','backlink')); if($wp_backlink && $b['plink']) { - $post .= '

' . $wp_backlink_text . '

'; + $post .= '

' . $wp_backlink_text . '

'; } $post = XML::escape($post); From 346ad9a3e29ca323ae1a905a917f1f6912e2ef1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20H=C3=A4der?= Date: Mon, 12 Sep 2022 23:15:08 +0200 Subject: [PATCH 111/677] Changed: - moved constants GRAVITY_* from boot.php to Friendica\Model\Item --- pumpio/pumpio.php | 2 +- twitter/twitter.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 759b11fd..470c1f27 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -919,7 +919,7 @@ function pumpio_dolike(App $a, int $uid, array $self, $post, string $own_id, $th $likedata = []; $likedata['parent'] = $orig_post['id']; $likedata['verb'] = Activity::LIKE; - $likedata['gravity'] = GRAVITY_ACTIVITY; + $likedata['gravity'] = Item::GRAVITY_ACTIVITY; $likedata['uid'] = $uid; $likedata['wall'] = 0; $likedata['network'] = Protocol::PUMPIO; diff --git a/twitter/twitter.php b/twitter/twitter.php index d2847a18..5f0d8c84 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -1827,7 +1827,7 @@ function twitter_createpost(App $a, int $uid, $post, array $self, $create_user, $item = Post::selectFirst(['uri'], ['uri' => $thr_parent, 'uid' => $uid]); if (!DBA::isResult($item)) { - $item = Post::selectFirst(['uri'], ['extid' => $thr_parent, 'uid' => $uid, 'gravity' => GRAVITY_COMMENT]); + $item = Post::selectFirst(['uri'], ['extid' => $thr_parent, 'uid' => $uid, 'gravity' => Item::GRAVITY_COMMENT]); } if (DBA::isResult($item)) { @@ -1948,7 +1948,7 @@ function twitter_createpost(App $a, int $uid, $post, array $self, $create_user, // CHange the other post into a reshare activity $postarray['verb'] = Activity::ANNOUNCE; - $postarray['gravity'] = GRAVITY_ACTIVITY; + $postarray['gravity'] = Item::GRAVITY_ACTIVITY; $postarray['object-type'] = Activity\ObjectType::NOTE; $postarray['thr-parent'] = $retweet['uri']; From 1eb1b1034812f7d656f1337e89536c37e2f26490 Mon Sep 17 00:00:00 2001 From: Philipp Date: Tue, 18 Oct 2022 21:10:36 +0200 Subject: [PATCH 112/677] Move Core\Session::get() to DI::session()->get() --- curweather/curweather.php | 2 +- diaspora/diaspora.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/curweather/curweather.php b/curweather/curweather.php index 27d6f940..4e92cc09 100644 --- a/curweather/curweather.php +++ b/curweather/curweather.php @@ -107,7 +107,7 @@ function curweather_network_mod_init(App $a, string &$body) $rpt = DI::pConfig()->get(local_user(), 'curweather', 'curweather_loc'); // Set the language to the browsers language or default and use metric units - $lang = Session::get('language', DI::config()->get('system', 'language')); + $lang = DI::session()->get('language', DI::config()->get('system', 'language')); $units = DI::pConfig()->get( local_user(), 'curweather', 'curweather_units'); $appid = DI::config()->get('curweather', 'appid'); $cachetime = intval(DI::config()->get('curweather', 'cachetime')); diff --git a/diaspora/diaspora.php b/diaspora/diaspora.php index fc29fdc6..8ede995c 100644 --- a/diaspora/diaspora.php +++ b/diaspora/diaspora.php @@ -63,10 +63,10 @@ function diaspora_settings(App $a, array &$data) $info = ''; $error = ''; - if (Session::get('my_address')) { - $info = DI::l10n()->t('Please remember: You can always be reached from Diaspora with your Friendica handle %s. ', Session::get('my_address')); + if (DI::session()->get('my_address')) { + $info = DI::l10n()->t('Please remember: You can always be reached from Diaspora with your Friendica handle %s. ', DI::session()->get('my_address')); $info .= DI::l10n()->t('This connector is only meant if you still want to use your old Diaspora account for some time. '); - $info .= DI::l10n()->t('However, it is preferred that you tell your Diaspora contacts the new handle %s instead.', Session::get('my_address')); + $info .= DI::l10n()->t('However, it is preferred that you tell your Diaspora contacts the new handle %s instead.', DI::session()->get('my_address')); } $aspect_select = ''; From 5d8129600d2848901c88805b21fee09456d90a36 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 18 Oct 2022 20:42:46 +0000 Subject: [PATCH 113/677] Replace all functions from boot.php --- .../advancedcontentfilter.php | 51 ++++---- birdavatar/birdavatar.php | 31 ++--- blackout/blackout.php | 3 +- blockem/blockem.php | 27 ++-- catavatar/catavatar.php | 31 ++--- curweather/curweather.php | 26 ++-- diaspora/diaspora.php | 36 +++--- discourse/discourse.php | 9 +- dwpost/dwpost.php | 29 ++--- forumdirectory/forumdirectory.php | 6 +- fromapp/fromapp.php | 21 ++-- geonames/geonames.php | 15 +-- gnot/gnot.php | 9 +- group_text/group_text.php | 9 +- ifttt/ifttt.php | 9 +- ijpost/ijpost.php | 29 ++--- irc/irc.php | 21 ++-- keycloakpassword/keycloakpassword.php | 3 +- krynn/krynn.php | 15 +-- langfilter/langfilter.php | 31 ++--- libertree/libertree.php | 31 ++--- ljpost/ljpost.php | 29 ++--- mailstream/mailstream.php | 27 ++-- markdown/markdown.php | 11 +- mathjax/mathjax.php | 11 +- nsfw/nsfw.php | 19 +-- numfriends/numfriends.php | 9 +- opmlexport/opmlexport.php | 9 +- planets/planets.php | 15 +-- public_server/public_server.php | 3 +- pumpio/pumpio.php | 95 ++++++++------- qcomment/qcomment.php | 9 +- randplace/randplace.php | 15 +-- securemail/SecureTestEmail.php | 7 +- securemail/securemail.php | 15 +-- showmore/showmore.php | 17 +-- showmore_dyn/showmore_dyn.php | 13 +- startpage/startpage.php | 13 +- statusnet/statusnet.php | 115 +++++++++--------- superblock/superblock.php | 21 ++-- tumblr/tumblr.php | 37 +++--- twitter/twitter.php | 81 ++++++------ viewsrc/viewsrc.php | 3 +- windowsphonepush/windowsphonepush.php | 51 ++++---- wppost/wppost.php | 45 +++---- 45 files changed, 577 insertions(+), 535 deletions(-) diff --git a/advancedcontentfilter/advancedcontentfilter.php b/advancedcontentfilter/advancedcontentfilter.php index 6925f816..c33d1248 100644 --- a/advancedcontentfilter/advancedcontentfilter.php +++ b/advancedcontentfilter/advancedcontentfilter.php @@ -39,6 +39,7 @@ use Friendica\Content\Text\Markdown; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\Database\DBStructure; use Friendica\DI; @@ -123,21 +124,21 @@ function advancedcontentfilter_prepare_body_content_filter(App $a, &$hook_data) $expressionLanguage = new ExpressionLanguage\ExpressionLanguage(); } - if (!local_user()) { + if (!Session::getLocalUser()) { return; } $vars = advancedcontentfilter_get_filter_fields($hook_data['item']); - $rules = DI::cache()->get('rules_' . local_user()); + $rules = DI::cache()->get('rules_' . Session::getLocalUser()); if (!isset($rules)) { $rules = DBA::toArray(DBA::select( 'advancedcontentfilter_rules', ['name', 'expression', 'serialized'], - ['uid' => local_user(), 'active' => true] + ['uid' => Session::getLocalUser(), 'active' => true] )); - DI::cache()->set('rules_' . local_user(), $rules); + DI::cache()->set('rules_' . Session::getLocalUser(), $rules); } if ($rules) { @@ -165,7 +166,7 @@ function advancedcontentfilter_prepare_body_content_filter(App $a, &$hook_data) function advancedcontentfilter_addon_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } @@ -203,12 +204,12 @@ function advancedcontentfilter_init(App $a) function advancedcontentfilter_content(App $a) { - if (!local_user()) { + if (!Session::getLocalUser()) { return Login::form('/' . implode('/', DI::args()->getArgv())); } if (DI::args()->getArgc() > 1 && DI::args()->getArgv()[1] == 'help') { - $user = User::getById(local_user()); + $user = User::getById(Session::getLocalUser()); $lang = $user['language']; @@ -272,9 +273,9 @@ function advancedcontentfilter_build_fields($data) if (!empty($data['expression'])) { // Using a dummy item to validate the field existence - $condition = ["(`uid` = ? OR `uid` = 0)", local_user()]; + $condition = ["(`uid` = ? OR `uid` = 0)", Session::getLocalUser()]; $params = ['order' => ['uid' => true]]; - $item_row = Post::selectFirstForUser(local_user(), [], $condition, $params); + $item_row = Post::selectFirstForUser(Session::getLocalUser(), [], $condition, $params); if (!DBA::isResult($item_row)) { throw new HTTPException\NotFoundException(DI::l10n()->t('This addon requires this node having at least one post')); @@ -307,29 +308,29 @@ function advancedcontentfilter_build_fields($data) function advancedcontentfilter_get_rules() { - if (!local_user()) { + if (!Session::getLocalUser()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method')); } - $rules = DBA::toArray(DBA::select('advancedcontentfilter_rules', [], ['uid' => local_user()])); + $rules = DBA::toArray(DBA::select('advancedcontentfilter_rules', [], ['uid' => Session::getLocalUser()])); return json_encode($rules); } function advancedcontentfilter_get_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args) { - if (!local_user()) { + if (!Session::getLocalUser()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method')); } - $rule = DBA::selectFirst('advancedcontentfilter_rules', [], ['id' => $args['id'], 'uid' => local_user()]); + $rule = DBA::selectFirst('advancedcontentfilter_rules', [], ['id' => $args['id'], 'uid' => Session::getLocalUser()]); return json_encode($rule); } function advancedcontentfilter_post_rules(ServerRequestInterface $request) { - if (!local_user()) { + if (!Session::getLocalUser()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method')); } @@ -349,7 +350,7 @@ function advancedcontentfilter_post_rules(ServerRequestInterface $request) throw new HTTPException\BadRequestException(DI::l10n()->t('The rule name and expression are required.')); } - $fields['uid'] = local_user(); + $fields['uid'] = Session::getLocalUser(); $fields['created'] = DateTimeFormat::utcNow(); if (!DBA::insert('advancedcontentfilter_rules', $fields)) { @@ -358,14 +359,14 @@ function advancedcontentfilter_post_rules(ServerRequestInterface $request) $rule = DBA::selectFirst('advancedcontentfilter_rules', [], ['id' => DBA::lastInsertId()]); - DI::cache()->delete('rules_' . local_user()); + DI::cache()->delete('rules_' . Session::getLocalUser()); return json_encode(['message' => DI::l10n()->t('Rule successfully added'), 'rule' => $rule]); } function advancedcontentfilter_put_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args) { - if (!local_user()) { + if (!Session::getLocalUser()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method')); } @@ -373,7 +374,7 @@ function advancedcontentfilter_put_rules_id(ServerRequestInterface $request, Res throw new HTTPException\BadRequestException(DI::l10n()->t('Invalid form security token, please refresh the page.')); } - if (!DBA::exists('advancedcontentfilter_rules', ['id' => $args['id'], 'uid' => local_user()])) { + if (!DBA::exists('advancedcontentfilter_rules', ['id' => $args['id'], 'uid' => Session::getLocalUser()])) { throw new HTTPException\NotFoundException(DI::l10n()->t('Rule doesn\'t exist or doesn\'t belong to you.')); } @@ -389,14 +390,14 @@ function advancedcontentfilter_put_rules_id(ServerRequestInterface $request, Res throw new HTTPException\ServiceUnavailableException(DBA::errorMessage()); } - DI::cache()->delete('rules_' . local_user()); + DI::cache()->delete('rules_' . Session::getLocalUser()); return json_encode(['message' => DI::l10n()->t('Rule successfully updated')]); } function advancedcontentfilter_delete_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args) { - if (!local_user()) { + if (!Session::getLocalUser()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method')); } @@ -404,7 +405,7 @@ function advancedcontentfilter_delete_rules_id(ServerRequestInterface $request, throw new HTTPException\BadRequestException(DI::l10n()->t('Invalid form security token, please refresh the page.')); } - if (!DBA::exists('advancedcontentfilter_rules', ['id' => $args['id'], 'uid' => local_user()])) { + if (!DBA::exists('advancedcontentfilter_rules', ['id' => $args['id'], 'uid' => Session::getLocalUser()])) { throw new HTTPException\NotFoundException(DI::l10n()->t('Rule doesn\'t exist or doesn\'t belong to you.')); } @@ -412,14 +413,14 @@ function advancedcontentfilter_delete_rules_id(ServerRequestInterface $request, throw new HTTPException\ServiceUnavailableException(DBA::errorMessage()); } - DI::cache()->delete('rules_' . local_user()); + DI::cache()->delete('rules_' . Session::getLocalUser()); return json_encode(['message' => DI::l10n()->t('Rule successfully deleted')]); } function advancedcontentfilter_get_variables_guid(ServerRequestInterface $request, ResponseInterface $response, $args) { - if (!local_user()) { + if (!Session::getLocalUser()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method')); } @@ -427,9 +428,9 @@ function advancedcontentfilter_get_variables_guid(ServerRequestInterface $reques throw new HTTPException\BadRequestException(DI::l10n()->t('Missing argument: guid.')); } - $condition = ["`guid` = ? AND (`uid` = ? OR `uid` = 0)", $args['guid'], local_user()]; + $condition = ["`guid` = ? AND (`uid` = ? OR `uid` = 0)", $args['guid'], Session::getLocalUser()]; $params = ['order' => ['uid' => true]]; - $item_row = Post::selectFirstForUser(local_user(), [], $condition, $params); + $item_row = Post::selectFirstForUser(Session::getLocalUser(), [], $condition, $params); if (!DBA::isResult($item_row)) { throw new HTTPException\NotFoundException(DI::l10n()->t('Unknown post with guid: %s', $args['guid'])); diff --git a/birdavatar/birdavatar.php b/birdavatar/birdavatar.php index 2fe1fa37..12d150a4 100644 --- a/birdavatar/birdavatar.php +++ b/birdavatar/birdavatar.php @@ -10,6 +10,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; @@ -36,14 +37,14 @@ function birdavatar_install() */ function birdavatar_addon_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/birdavatar/'); $html = Renderer::replaceMacros($t, [ '$uncache' => time(), - '$uid' => local_user(), + '$uid' => Session::getLocalUser(), '$setrandomize' => DI::l10n()->t('Set default profile avatar or randomize the bird.'), ]); @@ -54,7 +55,7 @@ function birdavatar_addon_settings(App $a, array &$data) 'submit' => [ 'birdavatar-usebird' => DI::l10n()->t('Use Bird as Avatar'), 'birdavatar-morebird' => DI::l10n()->t('More Random Bird!'), - 'birdavatar-emailbird' => DI::pConfig()->get(local_user(), 'birdavatar', 'seed', false) ? DI::l10n()->t('Reset to email Bird') : null, + 'birdavatar-emailbird' => DI::pConfig()->get(Session::getLocalUser(), 'birdavatar', 'seed', false) ? DI::l10n()->t('Reset to email Bird') : null, ], ]; } @@ -64,50 +65,50 @@ function birdavatar_addon_settings(App $a, array &$data) */ function birdavatar_addon_settings_post(App $a, &$s) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } if (!empty($_POST['birdavatar-usebird'])) { - $url = DI::baseUrl()->get() . '/birdavatar/' . local_user() . '?ts=' . time(); + $url = DI::baseUrl()->get() . '/birdavatar/' . Session::getLocalUser() . '?ts=' . time(); - $self = DBA::selectFirst('contact', ['id'], ['uid' => local_user(), 'self' => true]); + $self = DBA::selectFirst('contact', ['id'], ['uid' => Session::getLocalUser(), 'self' => true]); if (!DBA::isResult($self)) { DI::sysmsg()->addNotice(DI::l10n()->t("The bird has not found itself.")); return; } - Photo::importProfilePhoto($url, local_user(), $self['id']); + Photo::importProfilePhoto($url, Session::getLocalUser(), $self['id']); - $condition = ['uid' => local_user(), 'contact-id' => $self['id']]; + $condition = ['uid' => Session::getLocalUser(), 'contact-id' => $self['id']]; $photo = DBA::selectFirst('photo', ['resource-id'], $condition); if (!DBA::isResult($photo)) { DI::sysmsg()->addNotice(DI::l10n()->t('There was an error, the bird flew away.')); return; } - DBA::update('photo', ['profile' => false], ['profile' => true, 'uid' => local_user()]); + DBA::update('photo', ['profile' => false], ['profile' => true, 'uid' => Session::getLocalUser()]); $fields = ['profile' => true, 'album' => DI::l10n()->t('Profile Photos'), 'contact-id' => 0]; - DBA::update('photo', $fields, ['uid' => local_user(), 'resource-id' => $photo['resource-id']]); + DBA::update('photo', $fields, ['uid' => Session::getLocalUser(), 'resource-id' => $photo['resource-id']]); - Photo::importProfilePhoto($url, local_user(), $self['id']); + Photo::importProfilePhoto($url, Session::getLocalUser(), $self['id']); - Contact::updateSelfFromUserID(local_user(), true); + Contact::updateSelfFromUserID(Session::getLocalUser(), true); // Update global directory in background - Profile::publishUpdate(local_user()); + Profile::publishUpdate(Session::getLocalUser()); DI::sysmsg()->addInfo(DI::l10n()->t('Meow!')); return; } if (!empty($_POST['birdavatar-morebird'])) { - DI::pConfig()->set(local_user(), 'birdavatar', 'seed', time()); + DI::pConfig()->set(Session::getLocalUser(), 'birdavatar', 'seed', time()); } if (!empty($_POST['birdavatar-emailbird'])) { - DI::pConfig()->delete(local_user(), 'birdavatar', 'seed'); + DI::pConfig()->delete(Session::getLocalUser(), 'birdavatar', 'seed'); } } diff --git a/blackout/blackout.php b/blackout/blackout.php index f2fb588b..f291413f 100644 --- a/blackout/blackout.php +++ b/blackout/blackout.php @@ -48,6 +48,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Core\System; use Friendica\DI; @@ -58,7 +59,7 @@ function blackout_install() { function blackout_redirect (App $a, $b) { // if we have a logged in user, don't throw her out - if (local_user()) { + if (Session::getLocalUser()) { return true; } diff --git a/blockem/blockem.php b/blockem/blockem.php index 951385b1..618f21a5 100644 --- a/blockem/blockem.php +++ b/blockem/blockem.php @@ -10,6 +10,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; use Friendica\Util\Strings; @@ -28,11 +29,11 @@ function blockem_install() function blockem_addon_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $words = DI::pConfig()->get(local_user(), 'blockem', 'words', ''); + $words = DI::pConfig()->get(Session::getLocalUser(), 'blockem', 'words', ''); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/blockem/'); $html = Renderer::replaceMacros($t, [ @@ -49,12 +50,12 @@ function blockem_addon_settings(App $a, array &$data) function blockem_addon_settings_post(App $a, array &$b) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } if (!empty($_POST['blockem-submit'])) { - DI::pConfig()->set(local_user(), 'blockem', 'words', trim($_POST['blockem-words'])); + DI::pConfig()->set(Session::getLocalUser(), 'blockem', 'words', trim($_POST['blockem-words'])); } } @@ -91,14 +92,14 @@ function blockem_enotify_store(App $a, array &$b) function blockem_prepare_body_content_filter(App $a, array &$hook_data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } $profiles_string = null; - if (local_user()) { - $profiles_string = DI::pConfig()->get(local_user(), 'blockem', 'words'); + if (Session::getLocalUser()) { + $profiles_string = DI::pConfig()->get(Session::getLocalUser(), 'blockem', 'words'); } if ($profiles_string) { @@ -132,11 +133,11 @@ function blockem_conversation_start(App $a, array &$b) { global $blockem_words; - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $words = DI::pConfig()->get(local_user(), 'blockem', 'words'); + $words = DI::pConfig()->get(Session::getLocalUser(), 'blockem', 'words'); if ($words) { $blockem_words = explode(',', $words); @@ -164,7 +165,7 @@ function blockem_item_photo_menu(App $a, array &$b) { global $blockem_words; - if (!local_user() || $b['item']['self']) { + if (!Session::getLocalUser() || $b['item']['self']) { return; } @@ -195,11 +196,11 @@ function blockem_module() {} function blockem_init(App $a) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $words = DI::pConfig()->get(local_user(), 'blockem', 'words'); + $words = DI::pConfig()->get(Session::getLocalUser(), 'blockem', 'words'); if (array_key_exists('block', $_GET) && $_GET['block']) { if (strlen($words)) { @@ -224,6 +225,6 @@ function blockem_init(App $a) $words = implode(',', $newarr); } - DI::pConfig()->set(local_user(), 'blockem', 'words', $words); + DI::pConfig()->set(Session::getLocalUser(), 'blockem', 'words', $words); exit(); } diff --git a/catavatar/catavatar.php b/catavatar/catavatar.php index 7a2bdc2e..5b0b8bd6 100644 --- a/catavatar/catavatar.php +++ b/catavatar/catavatar.php @@ -10,6 +10,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\DI; @@ -37,14 +38,14 @@ function catavatar_install() */ function catavatar_addon_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/catavatar/'); $html = Renderer::replaceMacros($t, [ '$uncache' => time(), - '$uid' => local_user(), + '$uid' => Session::getLocalUser(), '$setrandomize' => DI::l10n()->t('Set default profile avatar or randomize the cat.'), ]); @@ -55,7 +56,7 @@ function catavatar_addon_settings(App $a, array &$data) 'submit' => [ 'catavatar-usecat' => DI::l10n()->t('Use Cat as Avatar'), 'catavatar-morecat' => DI::l10n()->t('Another random Cat!'), - 'catavatar-emailcat' => DI::pConfig()->get(local_user(), 'catavatar', 'seed', false) ? DI::l10n()->t('Reset to email Cat') : null, + 'catavatar-emailcat' => DI::pConfig()->get(Session::getLocalUser(), 'catavatar', 'seed', false) ? DI::l10n()->t('Reset to email Cat') : null, ], ]; } @@ -65,50 +66,50 @@ function catavatar_addon_settings(App $a, array &$data) */ function catavatar_addon_settings_post(App $a, &$s) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } if (!empty($_POST['catavatar-usecat'])) { - $url = DI::baseUrl()->get() . '/catavatar/' . local_user() . '?ts=' . time(); + $url = DI::baseUrl()->get() . '/catavatar/' . Session::getLocalUser() . '?ts=' . time(); - $self = DBA::selectFirst('contact', ['id'], ['uid' => local_user(), 'self' => true]); + $self = DBA::selectFirst('contact', ['id'], ['uid' => Session::getLocalUser(), 'self' => true]); if (!DBA::isResult($self)) { DI::sysmsg()->addNotice(DI::l10n()->t("The cat hadn't found itself.")); return; } - Photo::importProfilePhoto($url, local_user(), $self['id']); + Photo::importProfilePhoto($url, Session::getLocalUser(), $self['id']); - $condition = ['uid' => local_user(), 'contact-id' => $self['id']]; + $condition = ['uid' => Session::getLocalUser(), 'contact-id' => $self['id']]; $photo = DBA::selectFirst('photo', ['resource-id'], $condition); if (!DBA::isResult($photo)) { DI::sysmsg()->addNotice(DI::l10n()->t('There was an error, the cat ran away.')); return; } - DBA::update('photo', ['profile' => false], ['profile' => true, 'uid' => local_user()]); + DBA::update('photo', ['profile' => false], ['profile' => true, 'uid' => Session::getLocalUser()]); $fields = ['profile' => true, 'album' => DI::l10n()->t('Profile Photos'), 'contact-id' => 0]; - DBA::update('photo', $fields, ['uid' => local_user(), 'resource-id' => $photo['resource-id']]); + DBA::update('photo', $fields, ['uid' => Session::getLocalUser(), 'resource-id' => $photo['resource-id']]); - Photo::importProfilePhoto($url, local_user(), $self['id']); + Photo::importProfilePhoto($url, Session::getLocalUser(), $self['id']); - Contact::updateSelfFromUserID(local_user(), true); + Contact::updateSelfFromUserID(Session::getLocalUser(), true); // Update global directory in background - Profile::publishUpdate(local_user()); + Profile::publishUpdate(Session::getLocalUser()); DI::sysmsg()->addInfo(DI::l10n()->t('Meow!')); return; } if (!empty($_POST['catavatar-morecat'])) { - DI::pConfig()->set(local_user(), 'catavatar', 'seed', time()); + DI::pConfig()->set(Session::getLocalUser(), 'catavatar', 'seed', time()); } if (!empty($_POST['catavatar-emailcat'])) { - DI::pConfig()->delete(local_user(), 'catavatar', 'seed'); + DI::pConfig()->delete(Session::getLocalUser(), 'catavatar', 'seed'); } } diff --git a/curweather/curweather.php b/curweather/curweather.php index 4e92cc09..88e3b18c 100644 --- a/curweather/curweather.php +++ b/curweather/curweather.php @@ -32,7 +32,7 @@ function getWeather($loc, $units = 'metric', $lang = 'en', $appid = '', $cacheti $now = new DateTime(); if (!is_null($cached)) { - $cdate = DI::pConfig()->get(local_user(), 'curweather', 'last'); + $cdate = DI::pConfig()->get(Session::getLocalUser(), 'curweather', 'last'); $cached = unserialize($cached); if ($cdate + $cachetime > $now->getTimestamp()) { @@ -81,7 +81,7 @@ function getWeather($loc, $units = 'metric', $lang = 'en', $appid = '', $cacheti 'icon' => (string) $res->weather['icon'], ]; - DI::pConfig()->set(local_user(), 'curweather', 'last', $now->getTimestamp()); + DI::pConfig()->set(Session::getLocalUser(), 'curweather', 'last', $now->getTimestamp()); DI::cache()->set('curweather'.md5($url), serialize($r), Duration::HOUR); return $r; @@ -89,7 +89,7 @@ function getWeather($loc, $units = 'metric', $lang = 'en', $appid = '', $cacheti function curweather_network_mod_init(App $a, string &$body) { - if (!intval(DI::pConfig()->get(local_user(), 'curweather', 'curweather_enable'))) { + if (!intval(DI::pConfig()->get(Session::getLocalUser(), 'curweather', 'curweather_enable'))) { return; } @@ -104,11 +104,11 @@ function curweather_network_mod_init(App $a, string &$body) // those parameters will be used to get: cloud status, temperature, preassure // and relative humidity for display, also the relevent area of the map is // linked from lat/log of the reply of OWMp - $rpt = DI::pConfig()->get(local_user(), 'curweather', 'curweather_loc'); + $rpt = DI::pConfig()->get(Session::getLocalUser(), 'curweather', 'curweather_loc'); // Set the language to the browsers language or default and use metric units $lang = DI::session()->get('language', DI::config()->get('system', 'language')); - $units = DI::pConfig()->get( local_user(), 'curweather', 'curweather_units'); + $units = DI::pConfig()->get(Session::getLocalUser(), 'curweather', 'curweather_units'); $appid = DI::config()->get('curweather', 'appid'); $cachetime = intval(DI::config()->get('curweather', 'cachetime')); @@ -155,23 +155,23 @@ function curweather_network_mod_init(App $a, string &$body) function curweather_addon_settings_post(App $a, $post) { - if (!local_user() || empty($_POST['curweather-settings-submit'])) { + if (!Session::getLocalUser() || empty($_POST['curweather-settings-submit'])) { return; } - DI::pConfig()->set(local_user(), 'curweather', 'curweather_loc' , trim($_POST['curweather_loc'])); - DI::pConfig()->set(local_user(), 'curweather', 'curweather_enable', intval($_POST['curweather_enable'])); - DI::pConfig()->set(local_user(), 'curweather', 'curweather_units' , trim($_POST['curweather_units'])); + DI::pConfig()->set(Session::getLocalUser(), 'curweather', 'curweather_loc' , trim($_POST['curweather_loc'])); + DI::pConfig()->set(Session::getLocalUser(), 'curweather', 'curweather_enable', intval($_POST['curweather_enable'])); + DI::pConfig()->set(Session::getLocalUser(), 'curweather', 'curweather_units' , trim($_POST['curweather_units'])); } function curweather_addon_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $curweather_loc = DI::pConfig()->get(local_user(), 'curweather', 'curweather_loc'); - $curweather_units = DI::pConfig()->get(local_user(), 'curweather', 'curweather_units'); + $curweather_loc = DI::pConfig()->get(Session::getLocalUser(), 'curweather', 'curweather_loc'); + $curweather_units = DI::pConfig()->get(Session::getLocalUser(), 'curweather', 'curweather_units'); $appid = DI::config()->get('curweather', 'appid'); if ($appid == '') { @@ -180,7 +180,7 @@ function curweather_addon_settings(App $a, array &$data) $noappidtext = ''; } - $enabled = intval(DI::pConfig()->get(local_user(), 'curweather', 'curweather_enable')); + $enabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'curweather', 'curweather_enable')); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/curweather/'); $html = Renderer::replaceMacros($t, [ diff --git a/diaspora/diaspora.php b/diaspora/diaspora.php index 8ede995c..d548fef3 100644 --- a/diaspora/diaspora.php +++ b/diaspora/diaspora.php @@ -32,17 +32,17 @@ function diaspora_install() function diaspora_jot_nets(App $a, array &$jotnets_fields) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - if (DI::pConfig()->get(local_user(), 'diaspora', 'post')) { + if (DI::pConfig()->get(Session::getLocalUser(), 'diaspora', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'diaspora_enable', DI::l10n()->t('Post to Diaspora'), - DI::pConfig()->get(local_user(), 'diaspora', 'post_by_default') + DI::pConfig()->get(Session::getLocalUser(), 'diaspora', 'post_by_default') ] ]; } @@ -50,16 +50,16 @@ function diaspora_jot_nets(App $a, array &$jotnets_fields) function diaspora_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enabled = DI::pConfig()->get(local_user(), 'diaspora', 'post', false); - $def_enabled = DI::pConfig()->get(local_user(), 'diaspora', 'post_by_default'); + $enabled = DI::pConfig()->get(Session::getLocalUser(), 'diaspora', 'post', false); + $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'diaspora', 'post_by_default'); - $handle = DI::pConfig()->get(local_user(), 'diaspora', 'handle'); - $password = DI::pConfig()->get(local_user(), 'diaspora', 'password'); - $aspect = DI::pConfig()->get(local_user(), 'diaspora', 'aspect'); + $handle = DI::pConfig()->get(Session::getLocalUser(), 'diaspora', 'handle'); + $password = DI::pConfig()->get(Session::getLocalUser(), 'diaspora', 'password'); + $aspect = DI::pConfig()->get(Session::getLocalUser(), 'diaspora', 'aspect'); $info = ''; $error = ''; @@ -121,18 +121,18 @@ function diaspora_settings(App $a, array &$data) function diaspora_settings_post(App $a, array &$b) { if (!empty($_POST['diaspora-submit'])) { - DI::pConfig()->set(local_user(),'diaspora', 'post' , intval($_POST['enabled'])); + DI::pConfig()->set(Session::getLocalUser(),'diaspora', 'post' , intval($_POST['enabled'])); if (intval($_POST['enabled'])) { if (isset($_POST['handle'])) { - DI::pConfig()->set(local_user(),'diaspora', 'handle' , trim($_POST['handle'])); - DI::pConfig()->set(local_user(),'diaspora', 'password' , trim($_POST['password'])); + DI::pConfig()->set(Session::getLocalUser(),'diaspora', 'handle' , trim($_POST['handle'])); + DI::pConfig()->set(Session::getLocalUser(),'diaspora', 'password' , trim($_POST['password'])); } if (!empty($_POST['aspect'])) { - DI::pConfig()->set(local_user(),'diaspora', 'aspect' , trim($_POST['aspect'])); - DI::pConfig()->set(local_user(),'diaspora', 'post_by_default', intval($_POST['post_by_default'])); + DI::pConfig()->set(Session::getLocalUser(),'diaspora', 'aspect' , trim($_POST['aspect'])); + DI::pConfig()->set(Session::getLocalUser(),'diaspora', 'post_by_default', intval($_POST['post_by_default'])); } } else { - DI::pConfig()->delete(local_user(), 'diaspora', 'password'); + DI::pConfig()->delete(Session::getLocalUser(), 'diaspora', 'password'); } } } @@ -158,7 +158,7 @@ function diaspora_post_local(App $a, array &$b) return; } - if (!local_user() || (local_user() != $b['uid'])) { + if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { return; } @@ -166,11 +166,11 @@ function diaspora_post_local(App $a, array &$b) return; } - $diaspora_post = intval(DI::pConfig()->get(local_user(),'diaspora','post')); + $diaspora_post = intval(DI::pConfig()->get(Session::getLocalUser(),'diaspora','post')); $diaspora_enable = (($diaspora_post && !empty($_REQUEST['diaspora_enable'])) ? intval($_REQUEST['diaspora_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(local_user(),'diaspora','post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(),'diaspora','post_by_default'))) { $diaspora_enable = 1; } diff --git a/discourse/discourse.php b/discourse/discourse.php index 3d085d92..2069ce7d 100644 --- a/discourse/discourse.php +++ b/discourse/discourse.php @@ -14,6 +14,7 @@ use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; @@ -38,11 +39,11 @@ function discourse_install() function discourse_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enabled = intval(DI::pConfig()->get(local_user(), 'discourse', 'enabled')); + $enabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'discourse', 'enabled')); $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/discourse/'); $html = Renderer::replaceMacros($t, [ @@ -60,11 +61,11 @@ function discourse_settings(App $a, array &$data) function discourse_settings_post(App $a) { - if (!local_user() || empty($_POST['discourse-submit'])) { + if (!Session::getLocalUser() || empty($_POST['discourse-submit'])) { return; } - DI::pConfig()->set(local_user(), 'discourse', 'enabled', intval($_POST['enabled'])); + DI::pConfig()->set(Session::getLocalUser(), 'discourse', 'enabled', intval($_POST['enabled'])); } function discourse_email_getmessage(App $a, &$message) diff --git a/dwpost/dwpost.php b/dwpost/dwpost.php index 286d8012..ed7ac492 100644 --- a/dwpost/dwpost.php +++ b/dwpost/dwpost.php @@ -13,6 +13,7 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; use Friendica\Model\Post; use Friendica\Model\Tag; @@ -31,17 +32,17 @@ function dwpost_install() function dwpost_jot_nets(App $a, array &$jotnets_fields) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - if (DI::pConfig()->get(local_user(), 'dwpost', 'post')) { + if (DI::pConfig()->get(Session::getLocalUser(), 'dwpost', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'dwpost_enable', DI::l10n()->t('Post to Dreamwidth'), - DI::pConfig()->get(local_user(), 'dwpost', 'post_by_default') + DI::pConfig()->get(Session::getLocalUser(), 'dwpost', 'post_by_default') ] ]; } @@ -50,13 +51,13 @@ function dwpost_jot_nets(App $a, array &$jotnets_fields) function dwpost_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enabled = DI::pConfig()->get(local_user(), 'dwpost', 'post', false); - $dw_username = DI::pConfig()->get(local_user(), 'dwpost', 'dw_username'); - $def_enabled = DI::pConfig()->get(local_user(), 'dwpost', 'post_by_default'); + $enabled = DI::pConfig()->get(Session::getLocalUser(), 'dwpost', 'post', false); + $dw_username = DI::pConfig()->get(Session::getLocalUser(), 'dwpost', 'dw_username'); + $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'dwpost', 'post_by_default'); $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/dwpost/'); $html = Renderer::replaceMacros($t, [ @@ -79,10 +80,10 @@ function dwpost_settings(App $a, array &$data) function dwpost_settings_post(App $a, array &$b) { if (!empty($_POST['dwpost-submit'])) { - DI::pConfig()->set(local_user(), 'dwpost', 'post', intval($_POST['dwpost'])); - DI::pConfig()->set(local_user(), 'dwpost', 'post_by_default', intval($_POST['dw_bydefault'])); - DI::pConfig()->set(local_user(), 'dwpost', 'dw_username', trim($_POST['dw_username'])); - DI::pConfig()->set(local_user(), 'dwpost', 'dw_password', trim($_POST['dw_password'])); + DI::pConfig()->set(Session::getLocalUser(), 'dwpost', 'post', intval($_POST['dwpost'])); + DI::pConfig()->set(Session::getLocalUser(), 'dwpost', 'post_by_default', intval($_POST['dw_bydefault'])); + DI::pConfig()->set(Session::getLocalUser(), 'dwpost', 'dw_username', trim($_POST['dw_username'])); + DI::pConfig()->set(Session::getLocalUser(), 'dwpost', 'dw_password', trim($_POST['dw_password'])); } } @@ -93,7 +94,7 @@ function dwpost_post_local(App $a, array &$b) return; } - if ((!local_user()) || (local_user() != $b['uid'])) { + if ((!Session::getLocalUser()) || (Session::getLocalUser() != $b['uid'])) { return; } @@ -101,11 +102,11 @@ function dwpost_post_local(App $a, array &$b) return; } - $dw_post = intval(DI::pConfig()->get(local_user(),'dwpost','post')); + $dw_post = intval(DI::pConfig()->get(Session::getLocalUser(),'dwpost','post')); $dw_enable = (($dw_post && !empty($_REQUEST['dwpost_enable'])) ? intval($_REQUEST['dwpost_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(local_user(),'dwpost','post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(),'dwpost','post_by_default'))) { $dw_enable = 1; } diff --git a/forumdirectory/forumdirectory.php b/forumdirectory/forumdirectory.php index 7dae270a..da6e059c 100644 --- a/forumdirectory/forumdirectory.php +++ b/forumdirectory/forumdirectory.php @@ -12,11 +12,11 @@ use Friendica\Content\Pager; use Friendica\Content\Widget; use Friendica\Core\Hook; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Profile; use Friendica\Model\User; -use Friendica\Util\Strings; global $forumdirectory_search; @@ -44,7 +44,7 @@ function forumdirectory_app_menu(App $a, array &$b) function forumdirectory_init(App $a) { - if (local_user()) { + if (Session::getLocalUser()) { DI::page()['aside'] .= Widget::findPeople(); } } @@ -62,7 +62,7 @@ function forumdirectory_content(App $a) { global $forumdirectory_search; - if ((DI::config()->get('system', 'block_public')) && (!local_user()) && (!remote_user())) { + if (DI::config()->get('system', 'block_public') && !Session::getLocalUser() && !Session::getRemoteUser()) { DI::sysmsg()->addNotice(DI::l10n()->t('Public access denied.')); return; } diff --git a/fromapp/fromapp.php b/fromapp/fromapp.php index 33791ea7..b5ad9c39 100644 --- a/fromapp/fromapp.php +++ b/fromapp/fromapp.php @@ -11,6 +11,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; function fromapp_install() @@ -23,22 +24,22 @@ function fromapp_install() function fromapp_settings_post(App $a, $post) { - if (!local_user() || empty($_POST['fromapp-submit'])) { + if (!Session::getLocalUser() || empty($_POST['fromapp-submit'])) { return; } - DI::pConfig()->set(local_user(), 'fromapp', 'app', $_POST['fromapp-input']); - DI::pConfig()->set(local_user(), 'fromapp', 'force', intval($_POST['fromapp-force'])); + DI::pConfig()->set(Session::getLocalUser(), 'fromapp', 'app', $_POST['fromapp-input']); + DI::pConfig()->set(Session::getLocalUser(), 'fromapp', 'force', intval($_POST['fromapp-force'])); } function fromapp_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $fromapp = DI::pConfig()->get(local_user(), 'fromapp', 'app', ''); - $force = intval(DI::pConfig()->get(local_user(), 'fromapp', 'force')); + $fromapp = DI::pConfig()->get(Session::getLocalUser(), 'fromapp', 'app', ''); + $force = intval(DI::pConfig()->get(Session::getLocalUser(), 'fromapp', 'force')); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/fromapp/'); $html = Renderer::replaceMacros($t, [ @@ -55,16 +56,16 @@ function fromapp_settings(App &$a, array &$data) function fromapp_post_hook(App $a, &$item) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - if (local_user() != $item['uid']) { + if (Session::getLocalUser() != $item['uid']) { return; } - $app = DI::pConfig()->get(local_user(), 'fromapp', 'app'); - $force = intval(DI::pConfig()->get(local_user(), 'fromapp', 'force')); + $app = DI::pConfig()->get(Session::getLocalUser(), 'fromapp', 'app'); + $force = intval(DI::pConfig()->get(Session::getLocalUser(), 'fromapp', 'force')); if (is_null($app) || (! strlen($app))) { return; diff --git a/geonames/geonames.php b/geonames/geonames.php index a595a0f0..819d9eca 100644 --- a/geonames/geonames.php +++ b/geonames/geonames.php @@ -12,6 +12,7 @@ use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; use Friendica\Core\Config\Util\ConfigFileLoader; +use Friendica\Core\Session; use Friendica\Util\XML; function geonames_install() @@ -48,11 +49,11 @@ function geonames_post_hook(App $a, array &$item) Logger::notice('geonames invoked'); - if (!local_user()) { /* non-zero if this is a logged in user of this system */ + if (!Session::getLocalUser()) { /* non-zero if this is a logged in user of this system */ return; } - if (local_user() != $item['uid']) { /* Does this person own the post? */ + if (Session::getLocalUser() != $item['uid']) { /* Does this person own the post? */ return; } @@ -63,7 +64,7 @@ function geonames_post_hook(App $a, array &$item) /* Retrieve our personal config setting */ $geo_account = DI::config()->get('geonames', 'username'); - $active = DI::pConfig()->get(local_user(), 'geonames', 'enable'); + $active = DI::pConfig()->get(Session::getLocalUser(), 'geonames', 'enable'); if (!$geo_account || !$active) { return; @@ -102,11 +103,11 @@ function geonames_post_hook(App $a, array &$item) */ function geonames_addon_settings_post(App $a, array $post) { - if (!local_user() || empty($_POST['geonames-submit'])) { + if (!Session::getLocalUser() || empty($_POST['geonames-submit'])) { return; } - DI::pConfig()->set(local_user(), 'geonames', 'enable', intval($_POST['geonames-enable'])); + DI::pConfig()->set(Session::getLocalUser(), 'geonames', 'enable', intval($_POST['geonames-enable'])); } /** @@ -119,7 +120,7 @@ function geonames_addon_settings_post(App $a, array $post) */ function geonames_addon_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } @@ -128,7 +129,7 @@ function geonames_addon_settings(App $a, array &$data) return; } - $enabled = intval(DI::pConfig()->get(local_user(), 'geonames', 'enable')); + $enabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'geonames', 'enable')); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/geonames/'); $html = Renderer::replaceMacros($t, [ diff --git a/gnot/gnot.php b/gnot/gnot.php index 483f47f1..fa311ded 100644 --- a/gnot/gnot.php +++ b/gnot/gnot.php @@ -12,6 +12,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; use Friendica\Model\Notification; @@ -31,10 +32,10 @@ function gnot_install() * and if so set our configuration setting for this person. */ function gnot_settings_post(App $a, $post) { - if(! local_user() || empty($_POST['gnot-submit'])) + if(! Session::getLocalUser() || empty($_POST['gnot-submit'])) return; - DI::pConfig()->set(local_user(),'gnot','enable',intval($_POST['gnot'])); + DI::pConfig()->set(Session::getLocalUser(),'gnot','enable',intval($_POST['gnot'])); } /** @@ -43,11 +44,11 @@ function gnot_settings_post(App $a, $post) { */ function gnot_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $gnot = intval(DI::pConfig()->get(local_user(), 'gnot', 'enable')); + $gnot = intval(DI::pConfig()->get(Session::getLocalUser(), 'gnot', 'enable')); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/gnot/'); $html = Renderer::replaceMacros($t, [ diff --git a/group_text/group_text.php b/group_text/group_text.php index 00e60040..0c088f99 100644 --- a/group_text/group_text.php +++ b/group_text/group_text.php @@ -10,6 +10,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; function group_text_install() { @@ -30,9 +31,9 @@ function group_text_install() { */ function group_text_settings_post(App $a, $post) { - if(! local_user() || empty($_POST['group_text-submit'])) + if(! Session::getLocalUser() || empty($_POST['group_text-submit'])) return; - DI::pConfig()->set(local_user(),'system','groupedit_image_limit',intval($_POST['group_text'])); + DI::pConfig()->set(Session::getLocalUser(),'system','groupedit_image_limit',intval($_POST['group_text'])); } @@ -47,11 +48,11 @@ function group_text_settings_post(App $a, $post) { function group_text_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enabled = DI::pConfig()->get(local_user(),'system','groupedit_image_limit'); + $enabled = DI::pConfig()->get(Session::getLocalUser(),'system','groupedit_image_limit'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/group_text/'); $html = Renderer::replaceMacros($t, [ diff --git a/ifttt/ifttt.php b/ifttt/ifttt.php index 9ad16007..a5db28bd 100644 --- a/ifttt/ifttt.php +++ b/ifttt/ifttt.php @@ -12,6 +12,7 @@ use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\DI; @@ -36,14 +37,14 @@ function ifttt_content() {} function ifttt_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $key = DI::pConfig()->get(local_user(), 'ifttt', 'key'); + $key = DI::pConfig()->get(Session::getLocalUser(), 'ifttt', 'key'); if (!$key) { $key = Strings::getRandomHex(20); - DI::pConfig()->set(local_user(), 'ifttt', 'key', $key); + DI::pConfig()->set(Session::getLocalUser(), 'ifttt', 'key', $key); } $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/ifttt/'); @@ -75,7 +76,7 @@ function ifttt_settings(App $a, array &$data) function ifttt_settings_post() { if (!empty($_POST['ifttt-submit'])) { - DI::pConfig()->delete(local_user(), 'ifttt', 'key'); + DI::pConfig()->delete(Session::getLocalUser(), 'ifttt', 'key'); } } diff --git a/ijpost/ijpost.php b/ijpost/ijpost.php index 36ae99c3..1c9a899a 100644 --- a/ijpost/ijpost.php +++ b/ijpost/ijpost.php @@ -13,6 +13,7 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; use Friendica\Model\Tag; use Friendica\Model\User; @@ -30,17 +31,17 @@ function ijpost_install() function ijpost_jot_nets(App &$a, array &$jotnets_fields) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - if (DI::pConfig()->get(local_user(), 'ijpost', 'post')) { + if (DI::pConfig()->get(Session::getLocalUser(), 'ijpost', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'ijpost_enable', DI::l10n()->t('Post to Insanejournal'), - DI::pConfig()->get(local_user(), 'ijpost', 'post_by_default') + DI::pConfig()->get(Session::getLocalUser(), 'ijpost', 'post_by_default') ] ]; } @@ -48,13 +49,13 @@ function ijpost_jot_nets(App &$a, array &$jotnets_fields) function ijpost_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enabled = DI::pConfig()->get(local_user(), 'ijpost', 'post', false); - $ij_username = DI::pConfig()->get(local_user(), 'ijpost', 'ij_username'); - $def_enabled = DI::pConfig()->get(local_user(), 'ijpost', 'post_by_default'); + $enabled = DI::pConfig()->get(Session::getLocalUser(), 'ijpost', 'post', false); + $ij_username = DI::pConfig()->get(Session::getLocalUser(), 'ijpost', 'ij_username'); + $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'ijpost', 'post_by_default'); $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/ijpost/'); $html = Renderer::replaceMacros($t, [ @@ -76,10 +77,10 @@ function ijpost_settings(App &$a, array &$data) function ijpost_settings_post(App $a, array &$b) { if (!empty($_POST['ijpost-submit'])) { - DI::pConfig()->set(local_user(), 'ijpost', 'post', intval($_POST['ijpost'])); - DI::pConfig()->set(local_user(), 'ijpost', 'post_by_default', intval($_POST['ij_bydefault'])); - DI::pConfig()->set(local_user(), 'ijpost', 'ij_username', trim($_POST['ij_username'])); - DI::pConfig()->set(local_user(), 'ijpost', 'ij_password', trim($_POST['ij_password'])); + DI::pConfig()->set(Session::getLocalUser(), 'ijpost', 'post', intval($_POST['ijpost'])); + DI::pConfig()->set(Session::getLocalUser(), 'ijpost', 'post_by_default', intval($_POST['ij_bydefault'])); + DI::pConfig()->set(Session::getLocalUser(), 'ijpost', 'ij_username', trim($_POST['ij_username'])); + DI::pConfig()->set(Session::getLocalUser(), 'ijpost', 'ij_password', trim($_POST['ij_password'])); } } @@ -91,7 +92,7 @@ function ijpost_post_local(App $a, array &$b) return; } - if (!local_user() || (local_user() != $b['uid'])) { + if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { return; } @@ -99,11 +100,11 @@ function ijpost_post_local(App $a, array &$b) return; } - $ij_post = intval(DI::pConfig()->get(local_user(), 'ijpost', 'post')); + $ij_post = intval(DI::pConfig()->get(Session::getLocalUser(), 'ijpost', 'post')); $ij_enable = (($ij_post && !empty($_REQUEST['ijpost_enable'])) ? intval($_REQUEST['ijpost_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(local_user(), 'ijpost', 'post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(), 'ijpost', 'post_by_default'))) { $ij_enable = 1; } diff --git a/irc/irc.php b/irc/irc.php index 206b1e7f..656c85c8 100644 --- a/irc/irc.php +++ b/irc/irc.php @@ -10,6 +10,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; function irc_install() @@ -21,12 +22,12 @@ function irc_install() function irc_addon_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $sitechats = DI::pConfig()->get(local_user(), 'irc', 'sitechats'); /* popular channels */ - $autochans = DI::pConfig()->get(local_user(), 'irc', 'autochans'); /* auto connect chans */ + $sitechats = DI::pConfig()->get(Session::getLocalUser(), 'irc', 'sitechats'); /* popular channels */ + $autochans = DI::pConfig()->get(Session::getLocalUser(), 'irc', 'autochans'); /* auto connect chans */ $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/irc/'); $html = Renderer::replaceMacros($t, [ @@ -44,16 +45,16 @@ function irc_addon_settings(App &$a, array &$data) function irc_addon_settings_post(App $a, array &$b) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } if (!empty($_POST['irc-submit'])) { if (isset($_POST['autochans'])) { - DI::pConfig()->set(local_user(), 'irc', 'autochans', trim(($_POST['autochans']))); + DI::pConfig()->set(Session::getLocalUser(), 'irc', 'autochans', trim(($_POST['autochans']))); } if (isset($_POST['sitechats'])) { - DI::pConfig()->set(local_user(), 'irc', 'sitechats', trim($_POST['sitechats'])); + DI::pConfig()->set(Session::getLocalUser(), 'irc', 'sitechats', trim($_POST['sitechats'])); } /* upid pop-up thing */ } @@ -77,8 +78,8 @@ function irc_content(App $a) $o = ''; /* set the list of popular channels */ - if (local_user()) { - $sitechats = DI::pConfig()->get( local_user(), 'irc', 'sitechats'); + if (Session::getLocalUser()) { + $sitechats = DI::pConfig()->get( Session::getLocalUser(), 'irc', 'sitechats'); if (!$sitechats) { $sitechats = DI::config()->get('irc', 'sitechats'); } @@ -100,8 +101,8 @@ function irc_content(App $a) DI::page()['aside'] .= '
'; /* setting the channel(s) to auto connect */ - if (local_user()) { - $autochans = DI::pConfig()->get(local_user(), 'irc', 'autochans'); + if (Session::getLocalUser()) { + $autochans = DI::pConfig()->get(Session::getLocalUser(), 'irc', 'autochans'); if (!$autochans) $autochans = DI::config()->get('irc','autochans'); } else { diff --git a/keycloakpassword/keycloakpassword.php b/keycloakpassword/keycloakpassword.php index 67376315..69720f14 100644 --- a/keycloakpassword/keycloakpassword.php +++ b/keycloakpassword/keycloakpassword.php @@ -10,6 +10,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\User; @@ -142,7 +143,7 @@ function keycloakpassword_addon_admin(App $a, string &$o) function keycloakpassword_addon_admin_post(App $a) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } diff --git a/krynn/krynn.php b/krynn/krynn.php index 5ea23ef7..6c179002 100644 --- a/krynn/krynn.php +++ b/krynn/krynn.php @@ -14,6 +14,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; function krynn_install() @@ -43,12 +44,12 @@ function krynn_post_hook(App $a, &$item) * - A status post by a profile owner * - The profile owner must have allowed our addon */ - if (!local_user()) { + if (!Session::getLocalUser()) { /* non-zero if this is a logged in user of this system */ return; } - if (local_user() != $item['uid']) { + if (Session::getLocalUser() != $item['uid']) { /* Does this person own the post? */ return; } @@ -59,7 +60,7 @@ function krynn_post_hook(App $a, &$item) } /* Retrieve our personal config setting */ - $active = DI::pConfig()->get(local_user(), 'krynn', 'enable'); + $active = DI::pConfig()->get(Session::getLocalUser(), 'krynn', 'enable'); if (!$active) { return; @@ -90,12 +91,12 @@ function krynn_post_hook(App $a, &$item) */ function krynn_settings_post(App $a, $post) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } if ($_POST['krynn-submit']) { - DI::pConfig()->set(local_user(),'krynn','enable',intval($_POST['krynn'])); + DI::pConfig()->set(Session::getLocalUser(),'krynn','enable',intval($_POST['krynn'])); } } @@ -105,11 +106,11 @@ function krynn_settings_post(App $a, $post) */ function krynn_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enabled = DI::pConfig()->get(local_user(),'krynn','enable'); + $enabled = DI::pConfig()->get(Session::getLocalUser(),'krynn','enable'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/krynn/'); $html = Renderer::replaceMacros($t, [ diff --git a/langfilter/langfilter.php b/langfilter/langfilter.php index fe4cb5ea..eee7faf0 100644 --- a/langfilter/langfilter.php +++ b/langfilter/langfilter.php @@ -11,6 +11,7 @@ use Friendica\App; use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; /* Define the hooks we want to use @@ -33,16 +34,16 @@ function langfilter_install() function langfilter_addon_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enabled = DI::pConfig()->get(local_user(), 'langfilter', 'enable', - !DI::pConfig()->get(local_user(), 'langfilter', 'disable')); + $enabled = DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'enable', + !DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'disable')); - $languages = DI::pConfig()->get(local_user(), 'langfilter', 'languages'); - $minconfidence = DI::pConfig()->get(local_user(), 'langfilter', 'minconfidence', 0) * 100; - $minlength = DI::pConfig()->get(local_user(), 'langfilter', 'minlength', 32); + $languages = DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'languages'); + $minconfidence = DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'minconfidence', 0) * 100; + $minlength = DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'minlength', 32); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/langfilter/'); $html = Renderer::replaceMacros($t, [ @@ -69,7 +70,7 @@ function langfilter_addon_settings(App $a, array &$data) function langfilter_addon_settings_post(App $a, array &$b) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } @@ -82,10 +83,10 @@ function langfilter_addon_settings_post(App $a, array &$b) $minlength = 32; } - DI::pConfig()->set(local_user(), 'langfilter', 'enable' , $enable); - DI::pConfig()->set(local_user(), 'langfilter', 'languages' , $languages); - DI::pConfig()->set(local_user(), 'langfilter', 'minconfidence', $minconfidence); - DI::pConfig()->set(local_user(), 'langfilter', 'minlength' , $minlength); + DI::pConfig()->set(Session::getLocalUser(), 'langfilter', 'enable' , $enable); + DI::pConfig()->set(Session::getLocalUser(), 'langfilter', 'languages' , $languages); + DI::pConfig()->set(Session::getLocalUser(), 'langfilter', 'minconfidence', $minconfidence); + DI::pConfig()->set(Session::getLocalUser(), 'langfilter', 'minlength' , $minlength); } } @@ -100,7 +101,7 @@ function langfilter_addon_settings_post(App $a, array &$b) function langfilter_prepare_body_content_filter(App $a, &$hook_data) { - $logged_user = local_user(); + $logged_user = Session::getLocalUser(); if (!$logged_user) { return; } @@ -128,7 +129,7 @@ function langfilter_prepare_body_content_filter(App $a, &$hook_data) $naked_body = preg_replace('#\s+#', ' ', trim($naked_body)); // Don't filter if body lenght is below minimum - $minlen = DI::pConfig()->get(local_user(), 'langfilter', 'minlength', 32); + $minlen = DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'minlength', 32); if (!$minlen) { $minlen = 32; } @@ -137,8 +138,8 @@ function langfilter_prepare_body_content_filter(App $a, &$hook_data) return; } - $read_languages_string = DI::pConfig()->get(local_user(), 'langfilter', 'languages'); - $minconfidence = DI::pConfig()->get(local_user(), 'langfilter', 'minconfidence'); + $read_languages_string = DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'languages'); + $minconfidence = DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'minconfidence'); // Don't filter if no spoken languages are configured if (!$read_languages_string) { diff --git a/libertree/libertree.php b/libertree/libertree.php index a2b2d7fa..7847f60e 100644 --- a/libertree/libertree.php +++ b/libertree/libertree.php @@ -11,6 +11,7 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Post; @@ -27,17 +28,17 @@ function libertree_install() function libertree_jot_nets(App &$a, array &$jotnets_fields) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - if (DI::pConfig()->get(local_user(), 'libertree', 'post')) { + if (DI::pConfig()->get(Session::getLocalUser(), 'libertree', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'libertree_enable', DI::l10n()->t('Post to libertree'), - DI::pConfig()->get(local_user(), 'libertree', 'post_by_default'), + DI::pConfig()->get(Session::getLocalUser(), 'libertree', 'post_by_default'), ], ]; } @@ -45,14 +46,14 @@ function libertree_jot_nets(App &$a, array &$jotnets_fields) function libertree_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enabled = DI::pConfig()->get(local_user(), 'libertree', 'post', false); - $ltree_api_token = DI::pConfig()->get(local_user(), 'libertree', 'libertree_api_token'); - $ltree_url = DI::pConfig()->get(local_user(), 'libertree', 'libertree_url'); - $def_enabled = DI::pConfig()->get(local_user(), 'libertree', 'post_by_default'); + $enabled = DI::pConfig()->get(Session::getLocalUser(), 'libertree', 'post', false); + $ltree_api_token = DI::pConfig()->get(Session::getLocalUser(), 'libertree', 'libertree_api_token'); + $ltree_url = DI::pConfig()->get(Session::getLocalUser(), 'libertree', 'libertree_url'); + $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'libertree', 'post_by_default'); $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/libertree/'); $html = Renderer::replaceMacros($t, [ @@ -74,10 +75,10 @@ function libertree_settings(App $a, array &$data) function libertree_settings_post(App $a, array &$b) { if (!empty($_POST['libertree-submit'])) { - DI::pConfig()->set(local_user(),'libertree','post',intval($_POST['libertree'])); - DI::pConfig()->set(local_user(),'libertree','post_by_default',intval($_POST['libertree_bydefault'])); - DI::pConfig()->set(local_user(),'libertree','libertree_api_token',trim($_POST['libertree_api_token'])); - DI::pConfig()->set(local_user(),'libertree','libertree_url',trim($_POST['libertree_url'])); + DI::pConfig()->set(Session::getLocalUser(),'libertree','post',intval($_POST['libertree'])); + DI::pConfig()->set(Session::getLocalUser(),'libertree','post_by_default',intval($_POST['libertree_bydefault'])); + DI::pConfig()->set(Session::getLocalUser(),'libertree','libertree_api_token',trim($_POST['libertree_api_token'])); + DI::pConfig()->set(Session::getLocalUser(),'libertree','libertree_url',trim($_POST['libertree_url'])); } @@ -107,7 +108,7 @@ function libertree_post_local(App $a, array &$b) return; } - if ((!local_user()) || (local_user() != $b['uid'])) { + if ((!Session::getLocalUser()) || (Session::getLocalUser() != $b['uid'])) { return; } @@ -115,11 +116,11 @@ function libertree_post_local(App $a, array &$b) return; } - $ltree_post = intval(DI::pConfig()->get(local_user(),'libertree','post')); + $ltree_post = intval(DI::pConfig()->get(Session::getLocalUser(),'libertree','post')); $ltree_enable = (($ltree_post && !empty($_REQUEST['libertree_enable'])) ? intval($_REQUEST['libertree_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(local_user(),'libertree','post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(),'libertree','post_by_default'))) { $ltree_enable = 1; } diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index 170bab1a..fcba7bb3 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -13,6 +13,7 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; use Friendica\Model\Post; use Friendica\Model\Tag; @@ -31,17 +32,17 @@ function ljpost_install() function ljpost_jot_nets(App &$a, array &$jotnets_fields) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - if (DI::pConfig()->get(local_user(),'ljpost','post')) { + if (DI::pConfig()->get(Session::getLocalUser(),'ljpost','post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'ljpost_enable', DI::l10n()->t('Post to LiveJournal'), - DI::pConfig()->get(local_user(), 'ljpost', 'post_by_default'), + DI::pConfig()->get(Session::getLocalUser(), 'ljpost', 'post_by_default'), ], ]; } @@ -49,13 +50,13 @@ function ljpost_jot_nets(App &$a, array &$jotnets_fields) function ljpost_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enabled = DI::pConfig()->get(local_user(), 'ljpost', 'post', false); - $ij_username = DI::pConfig()->get(local_user(), 'ljpost', 'ij_username'); - $def_enabled = DI::pConfig()->get(local_user(), 'ljpost', 'post_by_default'); + $enabled = DI::pConfig()->get(Session::getLocalUser(), 'ljpost', 'post', false); + $ij_username = DI::pConfig()->get(Session::getLocalUser(), 'ljpost', 'ij_username'); + $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'ljpost', 'post_by_default'); $t= Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/ljpost/'); $html = Renderer::replaceMacros($t, [ @@ -77,10 +78,10 @@ function ljpost_settings(App &$a, array &$data) function ljpost_settings_post(App $a, array &$b) { if (!empty($_POST['ljpost-submit'])) { - DI::pConfig()->set(local_user(), 'ljpost', 'post', intval($_POST['ljpost'])); - DI::pConfig()->set(local_user(), 'ljpost', 'post_by_default', intval($_POST['lj_bydefault'])); - DI::pConfig()->set(local_user(), 'ljpost', 'lj_username', trim($_POST['lj_username'])); - DI::pConfig()->set(local_user(), 'ljpost', 'lj_password', trim($_POST['lj_password'])); + DI::pConfig()->set(Session::getLocalUser(), 'ljpost', 'post', intval($_POST['ljpost'])); + DI::pConfig()->set(Session::getLocalUser(), 'ljpost', 'post_by_default', intval($_POST['lj_bydefault'])); + DI::pConfig()->set(Session::getLocalUser(), 'ljpost', 'lj_username', trim($_POST['lj_username'])); + DI::pConfig()->set(Session::getLocalUser(), 'ljpost', 'lj_password', trim($_POST['lj_password'])); } } @@ -91,7 +92,7 @@ function ljpost_post_local(App $a, array &$b) return; } - if ((!local_user()) || (local_user() != $b['uid'])) { + if ((!Session::getLocalUser()) || (Session::getLocalUser() != $b['uid'])) { return; } @@ -99,10 +100,10 @@ function ljpost_post_local(App $a, array &$b) return; } - $lj_post = intval(DI::pConfig()->get(local_user(),'ljpost','post')); + $lj_post = intval(DI::pConfig()->get(Session::getLocalUser(),'ljpost','post')); $lj_enable = (($lj_post && !empty($_REQUEST['ljpost_enable'])) ? intval($_REQUEST['ljpost_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(local_user(), 'ljpost', 'post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(), 'ljpost', 'post_by_default'))) { $lj_enable = 1; } diff --git a/mailstream/mailstream.php b/mailstream/mailstream.php index a7d1dec5..7b5090fd 100644 --- a/mailstream/mailstream.php +++ b/mailstream/mailstream.php @@ -11,6 +11,7 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Core\System; use Friendica\Core\Worker; use Friendica\Database\DBA; @@ -481,10 +482,10 @@ function mailstream_convert_table_entries() */ function mailstream_addon_settings(App &$a, array &$data) { - $enabled = DI::pConfig()->get(local_user(), 'mailstream', 'enabled'); - $address = DI::pConfig()->get(local_user(), 'mailstream', 'address'); - $nolikes = DI::pConfig()->get(local_user(), 'mailstream', 'nolikes'); - $attachimg = DI::pConfig()->get(local_user(), 'mailstream', 'attachimg'); + $enabled = DI::pConfig()->get(Session::getLocalUser(), 'mailstream', 'enabled'); + $address = DI::pConfig()->get(Session::getLocalUser(), 'mailstream', 'address'); + $nolikes = DI::pConfig()->get(Session::getLocalUser(), 'mailstream', 'nolikes'); + $attachimg = DI::pConfig()->get(Session::getLocalUser(), 'mailstream', 'attachimg'); $template = Renderer::getMarkupTemplate('settings.tpl', 'addon/mailstream/'); $html = Renderer::replaceMacros($template, [ @@ -529,28 +530,28 @@ function mailstream_addon_settings(App &$a, array &$data) */ function mailstream_addon_settings_post(App $a, array $post) { - if (!local_user() || empty($post['mailstream-submit'])) { + if (!Session::getLocalUser() || empty($post['mailstream-submit'])) { return; } if ($post['mailstream_address'] != "") { - DI::pConfig()->set(local_user(), 'mailstream', 'address', $post['mailstream_address']); + DI::pConfig()->set(Session::getLocalUser(), 'mailstream', 'address', $post['mailstream_address']); } else { - DI::pConfig()->delete(local_user(), 'mailstream', 'address'); + DI::pConfig()->delete(Session::getLocalUser(), 'mailstream', 'address'); } if ($post['mailstream_nolikes']) { - DI::pConfig()->set(local_user(), 'mailstream', 'nolikes', $post['mailstream_enabled']); + DI::pConfig()->set(Session::getLocalUser(), 'mailstream', 'nolikes', $post['mailstream_enabled']); } else { - DI::pConfig()->delete(local_user(), 'mailstream', 'nolikes'); + DI::pConfig()->delete(Session::getLocalUser(), 'mailstream', 'nolikes'); } if ($post['mailstream_enabled']) { - DI::pConfig()->set(local_user(), 'mailstream', 'enabled', $post['mailstream_enabled']); + DI::pConfig()->set(Session::getLocalUser(), 'mailstream', 'enabled', $post['mailstream_enabled']); } else { - DI::pConfig()->delete(local_user(), 'mailstream', 'enabled'); + DI::pConfig()->delete(Session::getLocalUser(), 'mailstream', 'enabled'); } if ($post['mailstream_attachimg']) { - DI::pConfig()->set(local_user(), 'mailstream', 'attachimg', $post['mailstream_attachimg']); + DI::pConfig()->set(Session::getLocalUser(), 'mailstream', 'attachimg', $post['mailstream_attachimg']); } else { - DI::pConfig()->delete(local_user(), 'mailstream', 'attachimg'); + DI::pConfig()->delete(Session::getLocalUser(), 'mailstream', 'attachimg'); } } diff --git a/markdown/markdown.php b/markdown/markdown.php index 8cedcf56..faa1b356 100644 --- a/markdown/markdown.php +++ b/markdown/markdown.php @@ -9,6 +9,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Content\Text\Markdown; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; function markdown_install() { @@ -19,11 +20,11 @@ function markdown_install() { function markdown_addon_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enabled = intval(DI::pConfig()->get(local_user(), 'markdown', 'enabled')); + $enabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'markdown', 'enabled')); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/markdown/'); $html = Renderer::replaceMacros($t, [ @@ -39,15 +40,15 @@ function markdown_addon_settings(App $a, array &$data) function markdown_addon_settings_post(App $a, array &$b) { - if (!local_user() || empty($_POST['markdown-submit'])) { + if (!Session::getLocalUser() || empty($_POST['markdown-submit'])) { return; } - DI::pConfig()->set(local_user(), 'markdown', 'enabled', intval($_POST['enabled'])); + DI::pConfig()->set(Session::getLocalUser(), 'markdown', 'enabled', intval($_POST['enabled'])); } function markdown_post_local_start(App $a, &$request) { - if (empty($request['body']) || !DI::pConfig()->get(local_user(), 'markdown', 'enabled')) { + if (empty($request['body']) || !DI::pConfig()->get(Session::getLocalUser(), 'markdown', 'enabled')) { return; } diff --git a/mathjax/mathjax.php b/mathjax/mathjax.php index 7c3d9582..92ece931 100644 --- a/mathjax/mathjax.php +++ b/mathjax/mathjax.php @@ -11,6 +11,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; function mathjax_install() @@ -22,20 +23,20 @@ function mathjax_install() function mathjax_settings_post(App $a) { - if (!local_user() || empty($_POST['mathjax-submit'])) { + if (!Session::getLocalUser() || empty($_POST['mathjax-submit'])) { return; } - DI::pConfig()->set(local_user(), 'mathjax', 'use', intval($_POST['mathjax_use'])); + DI::pConfig()->set(Session::getLocalUser(), 'mathjax', 'use', intval($_POST['mathjax_use'])); } function mathjax_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $use = DI::pConfig()->get(local_user(), 'mathjax', 'use', false); + $use = DI::pConfig()->get(Session::getLocalUser(), 'mathjax', 'use', false); $tpl = Renderer::getMarkupTemplate('settings.tpl', 'addon/mathjax'); $html = Renderer::replaceMacros($tpl, [ @@ -54,7 +55,7 @@ function mathjax_footer(App $a, string &$body) { // if the visitor of the page is not a local_user, use MathJax // otherwise check the users settings. - if (!local_user() || DI::pConfig()->get(local_user(), 'mathjax', 'use', false)) { + if (!Session::getLocalUser() || DI::pConfig()->get(Session::getLocalUser(), 'mathjax', 'use', false)) { DI::page()->registerFooterScript(__DIR__ . '/asset/MathJax.js?config=TeX-MML-AM_CHTML'); DI::page()->registerFooterScript(__DIR__ . '/mathjax.js'); } diff --git a/nsfw/nsfw.php b/nsfw/nsfw.php index ae98d106..da45df3e 100644 --- a/nsfw/nsfw.php +++ b/nsfw/nsfw.php @@ -11,6 +11,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; function nsfw_install() @@ -53,12 +54,12 @@ function nsfw_extract_photos($body) function nsfw_addon_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enabled = !DI::pConfig()->get(local_user(), 'nsfw', 'disable'); - $words = DI::pConfig()->get(local_user(), 'nsfw', 'words', 'nsfw,'); + $enabled = !DI::pConfig()->get(Session::getLocalUser(), 'nsfw', 'disable'); + $words = DI::pConfig()->get(Session::getLocalUser(), 'nsfw', 'words', 'nsfw,'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/nsfw/'); $html = Renderer::replaceMacros($t, [ @@ -76,27 +77,27 @@ function nsfw_addon_settings(App &$a, array &$data) function nsfw_addon_settings_post(App $a, array &$b) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } if (!empty($_POST['nsfw-submit'])) { - DI::pConfig()->set(local_user(), 'nsfw', 'words', trim($_POST['nsfw-words'])); + DI::pConfig()->set(Session::getLocalUser(), 'nsfw', 'words', trim($_POST['nsfw-words'])); $enable = (!empty($_POST['nsfw-enable']) ? intval($_POST['nsfw-enable']) : 0); $disable = 1 - $enable; - DI::pConfig()->set(local_user(), 'nsfw', 'disable', $disable); + DI::pConfig()->set(Session::getLocalUser(), 'nsfw', 'disable', $disable); } } function nsfw_prepare_body_content_filter(App $a, &$hook_data) { $words = null; - if (DI::pConfig()->get(local_user(), 'nsfw', 'disable')) { + if (DI::pConfig()->get(Session::getLocalUser(), 'nsfw', 'disable')) { return; } - if (local_user()) { - $words = DI::pConfig()->get(local_user(), 'nsfw', 'words'); + if (Session::getLocalUser()) { + $words = DI::pConfig()->get(Session::getLocalUser(), 'nsfw', 'words'); } if ($words) { diff --git a/numfriends/numfriends.php b/numfriends/numfriends.php index d7734234..beba8bfd 100644 --- a/numfriends/numfriends.php +++ b/numfriends/numfriends.php @@ -10,6 +10,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; function numfriends_install() { @@ -29,11 +30,11 @@ function numfriends_install() { * */ function numfriends_settings_post(App $a, $post) { - if (! local_user() || empty($_POST['numfriends-submit'])) { + if (! Session::getLocalUser() || empty($_POST['numfriends-submit'])) { return; } - DI::pConfig()->set(local_user(), 'system', 'display_friend_count', intval($_POST['numfriends'])); + DI::pConfig()->set(Session::getLocalUser(), 'system', 'display_friend_count', intval($_POST['numfriends'])); } @@ -45,11 +46,11 @@ function numfriends_settings_post(App $a, $post) { */ function numfriends_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $numfriends = DI::pConfig()->get(local_user(), 'system', 'display_friend_count', 24); + $numfriends = DI::pConfig()->get(Session::getLocalUser(), 'system', 'display_friend_count', 24); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/numfriends/'); $html = Renderer::replaceMacros($t, [ diff --git a/opmlexport/opmlexport.php b/opmlexport/opmlexport.php index a868fe35..d32d4c77 100644 --- a/opmlexport/opmlexport.php +++ b/opmlexport/opmlexport.php @@ -15,6 +15,7 @@ use Friendica\Network\HTTPException; use Friendica\Database\DBA; use Friendica\Core\Renderer; use Friendica\Core\Protocol; +use Friendica\Core\Session; use Friendica\Model\Contact; use Friendica\Model\User; @@ -29,7 +30,7 @@ function opmlexport_install() function opmlexport(App $a) { $condition = [ - 'uid' => local_user(), + 'uid' => Session::getLocalUser(), 'self' => false, 'deleted' => false, 'archive' => false, @@ -38,7 +39,7 @@ function opmlexport(App $a) 'network' => Protocol::FEED ]; $data = Contact::selectToArray([], $condition, ['order' => ['name']]); - $user = User::getById(local_user()); + $user = User::getById(Session::getLocalUser()); $xml = new \DOMDocument( '1.0', 'utf-8' ); $opml = $xml->createElement('opml'); @@ -70,7 +71,7 @@ function opmlexport(App $a) function opmlexport_addon_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } @@ -84,7 +85,7 @@ function opmlexport_addon_settings(App $a, array &$data) function opmlexport_addon_settings_post(App $a, array &$b) { - if (!local_user() || empty($_POST['opmlexport-submit'])) { + if (!Session::getLocalUser() || empty($_POST['opmlexport-submit'])) { return; } diff --git a/planets/planets.php b/planets/planets.php index 8fa7c3ff..8cee996d 100644 --- a/planets/planets.php +++ b/planets/planets.php @@ -11,6 +11,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; function planets_install() @@ -42,12 +43,12 @@ function planets_post_hook(App $a, &$item) { Logger::notice('planets invoked'); - if (!local_user()) { + if (!Session::getLocalUser()) { /* non-zero if this is a logged in user of this system */ return; } - if (local_user() != $item['uid']) { + if (Session::getLocalUser() != $item['uid']) { /* Does this person own the post? */ return; } @@ -58,7 +59,7 @@ function planets_post_hook(App $a, &$item) } /* Retrieve our personal config setting */ - $active = DI::pConfig()->get(local_user(), 'planets', 'enable'); + $active = DI::pConfig()->get(Session::getLocalUser(), 'planets', 'enable'); if (!$active) { return; @@ -95,11 +96,11 @@ function planets_post_hook(App $a, &$item) function planets_settings_post(App $a, $post) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } if ($_POST['planets-submit']) { - DI::pConfig()->set(local_user(), 'planets', 'enable' ,intval($_POST['planets'])); + DI::pConfig()->set(Session::getLocalUser(), 'planets', 'enable' ,intval($_POST['planets'])); } } @@ -115,11 +116,11 @@ function planets_settings_post(App $a, $post) function planets_settings(App &$a, array &$data) { - if(!local_user()) { + if(!Session::getLocalUser()) { return; } - $enabled = DI::pConfig()->get(local_user(),'planets','enable'); + $enabled = DI::pConfig()->get(Session::getLocalUser(),'planets','enable'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/planets/'); $html = Renderer::replaceMacros($t, [ diff --git a/public_server/public_server.php b/public_server/public_server.php index b388f00b..6c0a746b 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -16,6 +16,7 @@ use Friendica\DI; use Friendica\Model\Notification; use Friendica\Model\User; use Friendica\Core\Config\Util\ConfigFileLoader; +use Friendica\Core\Session; use Friendica\Util\DateTimeFormat; function public_server_install() @@ -118,7 +119,7 @@ function public_server_login(App $a, $b) } $fields = ['account_expires_on' => DateTimeFormat::utc('now +' . $days . ' days')]; - $condition = ["`uid` = ? AND `account_expires_on` > ?", local_user(), DBA::NULL_DATETIME]; + $condition = ["`uid` = ? AND `account_expires_on` > ?", Session::getLocalUser(), DBA::NULL_DATETIME]; DBA::update('user', $fields, $condition); } diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 470c1f27..f2f158d8 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -27,6 +27,7 @@ use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Protocol\Activity; use Friendica\Protocol\ActivityNamespace; use Friendica\Core\Config\Util\ConfigFileLoader; +use Friendica\Core\Session; use Friendica\Util\DateTimeFormat; use Friendica\Util\Strings; use Friendica\Util\XML; @@ -59,7 +60,7 @@ function pumpio_module() {} function pumpio_content(App $a) { - if (!local_user()) { + if (!Session::getLocalUser()) { DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.')); return ''; } @@ -138,18 +139,18 @@ function pumpio_registerclient(App $a, $host) function pumpio_connect(App $a) { // Define the needed keys - $consumer_key = DI::pConfig()->get(local_user(), 'pumpio', 'consumer_key'); - $consumer_secret = DI::pConfig()->get(local_user(), 'pumpio', 'consumer_secret'); - $hostname = DI::pConfig()->get(local_user(), 'pumpio', 'host'); + $consumer_key = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'consumer_key'); + $consumer_secret = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'consumer_secret'); + $hostname = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'host'); if ((($consumer_key == '') || ($consumer_secret == '')) && ($hostname != '')) { Logger::notice('pumpio_connect: register client'); $clientdata = pumpio_registerclient($a, $hostname); - DI::pConfig()->set(local_user(), 'pumpio', 'consumer_key', $clientdata->client_id); - DI::pConfig()->set(local_user(), 'pumpio', 'consumer_secret', $clientdata->client_secret); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'consumer_key', $clientdata->client_id); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'consumer_secret', $clientdata->client_secret); - $consumer_key = DI::pConfig()->get(local_user(), 'pumpio', 'consumer_key'); - $consumer_secret = DI::pConfig()->get(local_user(), 'pumpio', 'consumer_secret'); + $consumer_key = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'consumer_key'); + $consumer_secret = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'consumer_secret'); Logger::info('pumpio_connect: ckey: ' . $consumer_key . ' csecrect: ' . $consumer_secret); } @@ -185,8 +186,8 @@ function pumpio_connect(App $a) if (($success = $client->Process())) { if (strlen($client->access_token)) { Logger::info('pumpio_connect: otoken: ' . $client->access_token . ', osecrect: ' . $client->access_token_secret); - DI::pConfig()->set(local_user(), 'pumpio', 'oauth_token', $client->access_token); - DI::pConfig()->set(local_user(), 'pumpio', 'oauth_token_secret', $client->access_token_secret); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'oauth_token', $client->access_token); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'oauth_token_secret', $client->access_token_secret); } } $success = $client->Finalize($success); @@ -209,17 +210,17 @@ function pumpio_connect(App $a) function pumpio_jot_nets(App $a, array &$jotnets_fields) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - if (DI::pConfig()->get(local_user(), 'pumpio', 'post')) { + if (DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'pumpio_enable', DI::l10n()->t('Post to pumpio'), - DI::pConfig()->get(local_user(), 'pumpio', 'post_by_default') + DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'post_by_default') ] ]; } @@ -227,20 +228,20 @@ function pumpio_jot_nets(App $a, array &$jotnets_fields) function pumpio_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $pumpio_host = DI::pConfig()->get(local_user(), 'pumpio', 'host'); - $pumpio_user = DI::pConfig()->get(local_user(), 'pumpio', 'user'); - $oauth_token = DI::pConfig()->get(local_user(), 'pumpio', 'oauth_token'); - $oauth_token_secret = DI::pConfig()->get(local_user(), 'pumpio', 'oauth_token_secret'); + $pumpio_host = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'host'); + $pumpio_user = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'user'); + $oauth_token = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'oauth_token'); + $oauth_token_secret = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'oauth_token_secret'); - $import_enabled = DI::pConfig()->get(local_user(), 'pumpio', 'import', false); - $enabled = DI::pConfig()->get(local_user(), 'pumpio', 'post', false); - $def_enabled = DI::pConfig()->get(local_user(), 'pumpio', 'post_by_default', false); - $public_enabled = DI::pConfig()->get(local_user(), 'pumpio', 'public', false); - $mirror_enabled = DI::pConfig()->get(local_user(), 'pumpio', 'mirror', false); + $import_enabled = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'import', false); + $enabled = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'post', false); + $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'post_by_default', false); + $public_enabled = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'public', false); + $mirror_enabled = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'mirror', false); $submit = ['pumpio-submit' => DI::l10n()->t('Save Settings')]; if ($oauth_token && $oauth_token_secret) { @@ -279,19 +280,19 @@ function pumpio_settings(App $a, array &$data) function pumpio_settings_post(App $a, array &$b) { if (!empty($_POST['pumpio_delete'])) { - DI::pConfig()->set(local_user(), 'pumpio', 'consumer_key' , ''); - DI::pConfig()->set(local_user(), 'pumpio', 'consumer_secret' , ''); - DI::pConfig()->set(local_user(), 'pumpio', 'oauth_token' , ''); - DI::pConfig()->set(local_user(), 'pumpio', 'oauth_token_secret', ''); - DI::pConfig()->set(local_user(), 'pumpio', 'post' , false); - DI::pConfig()->set(local_user(), 'pumpio', 'import' , false); - DI::pConfig()->set(local_user(), 'pumpio', 'host' , ''); - DI::pConfig()->set(local_user(), 'pumpio', 'user' , ''); - DI::pConfig()->set(local_user(), 'pumpio', 'public' , false); - DI::pConfig()->set(local_user(), 'pumpio', 'mirror' , false); - DI::pConfig()->set(local_user(), 'pumpio', 'post_by_default' , false); - DI::pConfig()->set(local_user(), 'pumpio', 'lastdate' , 0); - DI::pConfig()->set(local_user(), 'pumpio', 'last_id' , ''); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'consumer_key' , ''); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'consumer_secret' , ''); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'oauth_token' , ''); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'oauth_token_secret', ''); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'post' , false); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'import' , false); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'host' , ''); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'user' , ''); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'public' , false); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'mirror' , false); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'post_by_default' , false); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'lastdate' , 0); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'last_id' , ''); } elseif (!empty($_POST['pumpio-submit'])) { // filtering the username if it is filled wrong $user = $_POST['pumpio_user']; @@ -308,16 +309,16 @@ function pumpio_settings_post(App $a, array &$b) $host = trim($host); $host = str_replace(['https://', 'http://'], ['', ''], $host); - DI::pConfig()->set(local_user(), 'pumpio', 'post' , $_POST['pumpio'] ?? false); - DI::pConfig()->set(local_user(), 'pumpio', 'import' , $_POST['pumpio_import'] ?? false); - DI::pConfig()->set(local_user(), 'pumpio', 'host' , $host); - DI::pConfig()->set(local_user(), 'pumpio', 'user' , $user); - DI::pConfig()->set(local_user(), 'pumpio', 'public' , $_POST['pumpio_public'] ?? false); - DI::pConfig()->set(local_user(), 'pumpio', 'mirror' , $_POST['pumpio_mirror'] ?? false); - DI::pConfig()->set(local_user(), 'pumpio', 'post_by_default', $_POST['pumpio_bydefault'] ?? false); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'post' , $_POST['pumpio'] ?? false); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'import' , $_POST['pumpio_import'] ?? false); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'host' , $host); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'user' , $user); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'public' , $_POST['pumpio_public'] ?? false); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'mirror' , $_POST['pumpio_mirror'] ?? false); + DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'post_by_default', $_POST['pumpio_bydefault'] ?? false); if (!empty($_POST['pumpio_mirror'])) { - DI::pConfig()->delete(local_user(), 'pumpio', 'lastdate'); + DI::pConfig()->delete(Session::getLocalUser(), 'pumpio', 'lastdate'); } } } @@ -365,15 +366,15 @@ function pumpio_hook_fork(App $a, array &$b) function pumpio_post_local(App $a, array &$b) { - if (!local_user() || (local_user() != $b['uid'])) { + if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { return; } - $pumpio_post = intval(DI::pConfig()->get(local_user(), 'pumpio', 'post')); + $pumpio_post = intval(DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'post')); $pumpio_enable = (($pumpio_post && !empty($_REQUEST['pumpio_enable'])) ? intval($_REQUEST['pumpio_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(local_user(), 'pumpio', 'post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'post_by_default'))) { $pumpio_enable = 1; } diff --git a/qcomment/qcomment.php b/qcomment/qcomment.php index ece149d2..496b0a06 100644 --- a/qcomment/qcomment.php +++ b/qcomment/qcomment.php @@ -21,6 +21,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; use Friendica\Util\XML; @@ -38,11 +39,11 @@ function qcomment_footer(App $a, string &$body) function qcomment_addon_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $words = DI::pConfig()->get(local_user(), 'qcomment', 'words', DI::l10n()->t(':-)') . "\n" . DI::l10n()->t(':-(') . "\n" . DI::l10n()->t('lol')); + $words = DI::pConfig()->get(Session::getLocalUser(), 'qcomment', 'words', DI::l10n()->t(':-)') . "\n" . DI::l10n()->t(':-(') . "\n" . DI::l10n()->t('lol')); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/qcomment/'); $html = Renderer::replaceMacros($t, [ @@ -59,11 +60,11 @@ function qcomment_addon_settings(App &$a, array &$data) function qcomment_addon_settings_post(App $a, array &$b) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } if (isset($_POST['qcomment-words'])) { - DI::pConfig()->set(local_user(), 'qcomment', 'words', XML::escape($_POST['qcomment-words'])); + DI::pConfig()->set(Session::getLocalUser(), 'qcomment', 'words', XML::escape($_POST['qcomment-words'])); } } diff --git a/randplace/randplace.php b/randplace/randplace.php index 83270213..439068db 100644 --- a/randplace/randplace.php +++ b/randplace/randplace.php @@ -23,6 +23,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; function randplace_install() @@ -64,12 +65,12 @@ function randplace_post_hook(App $a, &$item) */ Logger::notice('randplace invoked'); - if (!local_user()) { + if (!Session::getLocalUser()) { /* non-zero if this is a logged in user of this system */ return; } - if (local_user() != $item['uid']) { + if (Session::getLocalUser() != $item['uid']) { /* Does this person own the post? */ return; } @@ -81,7 +82,7 @@ function randplace_post_hook(App $a, &$item) /* Retrieve our personal config setting */ - $active = DI::pConfig()->get(local_user(), 'randplace', 'enable'); + $active = DI::pConfig()->get(Session::getLocalUser(), 'randplace', 'enable'); if (!$active) { return; @@ -122,12 +123,12 @@ function randplace_post_hook(App $a, &$item) */ function randplace_settings_post(App $a, $post) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } if ($_POST['randplace-submit']) { - DI::pConfig()->set(local_user(), 'randplace', 'enable', intval($_POST['randplace'])); + DI::pConfig()->set(Session::getLocalUser(), 'randplace', 'enable', intval($_POST['randplace'])); } } @@ -138,11 +139,11 @@ function randplace_settings_post(App $a, $post) */ function randplace_settings(App &$a, array &$data) { - if(!local_user()) { + if(!Session::getLocalUser()) { return; } - $enabled = DI::pConfig()->get(local_user(),'randplace','enable'); + $enabled = DI::pConfig()->get(Session::getLocalUser(),'randplace','enable'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/randplace/'); $html = Renderer::replaceMacros($t, [ diff --git a/securemail/SecureTestEmail.php b/securemail/SecureTestEmail.php index 1ee41ad5..632336e7 100644 --- a/securemail/SecureTestEmail.php +++ b/securemail/SecureTestEmail.php @@ -25,6 +25,7 @@ use Friendica\App; use Friendica\App\BaseURL; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; +use Friendica\Core\Session; use Friendica\Model\User; use Friendica\Object\Email; @@ -47,16 +48,16 @@ class SecureTestEmail extends Email $sender_email = 'noreply@' . $hostname; } - $user = User::getById(local_user()); + $user = User::getById(Session::getLocalUser()); $subject = 'Friendica - Secure Mail - Test'; $message = 'This is a test message from your Friendica Secure Mail addon.'; // enable addon for test - $pConfig->set(local_user(), 'securemail', 'enable', 1); + $pConfig->set(Session::getLocalUser(), 'securemail', 'enable', 1); parent::__construct($sitename, $sender_email, $sender_email, $user['email'], $subject, "

{$message}

", $message, - [], local_user()); + [], Session::getLocalUser()); } } diff --git a/securemail/securemail.php b/securemail/securemail.php index 82c5aec7..777e0343 100644 --- a/securemail/securemail.php +++ b/securemail/securemail.php @@ -11,6 +11,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; use Friendica\Object\EMail\IEmail; @@ -38,12 +39,12 @@ function securemail_install() */ function securemail_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enabled = intval(DI::pConfig()->get(local_user(), 'securemail', 'enable')); - $publickey = DI::pConfig()->get(local_user(), 'securemail', 'pkey'); + $enabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'securemail', 'enable')); + $publickey = DI::pConfig()->get(Session::getLocalUser(), 'securemail', 'pkey'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/securemail/'); $html = Renderer::replaceMacros($t, [ @@ -74,20 +75,20 @@ function securemail_settings(App &$a, array &$data) */ function securemail_settings_post(App &$a, array &$b) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } if (!empty($_POST['securemail-submit']) || !empty($_POST['securemail-test'])) { - DI::pConfig()->set(local_user(), 'securemail', 'pkey', trim($_POST['securemail-pkey'])); + DI::pConfig()->set(Session::getLocalUser(), 'securemail', 'pkey', trim($_POST['securemail-pkey'])); $enable = (!empty($_POST['securemail-enable']) ? 1 : 0); - DI::pConfig()->set(local_user(), 'securemail', 'enable', $enable); + DI::pConfig()->set(Session::getLocalUser(), 'securemail', 'enable', $enable); if (!empty($_POST['securemail-test'])) { $res = DI::emailer()->send(new SecureTestEmail(DI::app(), DI::config(), DI::pConfig(), DI::baseUrl())); // revert to saved value - DI::pConfig()->set(local_user(), 'securemail', 'enable', $enable); + DI::pConfig()->set(Session::getLocalUser(), 'securemail', 'enable', $enable); if ($res) { DI::sysmsg()->addInfo(DI::l10n()->t('Test email sent')); diff --git a/showmore/showmore.php b/showmore/showmore.php index e7d53f8a..52e9771b 100644 --- a/showmore/showmore.php +++ b/showmore/showmore.php @@ -11,6 +11,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; use Friendica\Util\Strings; @@ -23,14 +24,14 @@ function showmore_install() function showmore_addon_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } DI::page()->registerStylesheet(__DIR__ . '/showmore.css', 'all'); - $enabled = !DI::pConfig()->get(local_user(), 'showmore', 'disable'); - $chars = DI::pConfig()->get(local_user(), 'showmore', 'chars', 1100); + $enabled = !DI::pConfig()->get(Session::getLocalUser(), 'showmore', 'disable'); + $chars = DI::pConfig()->get(Session::getLocalUser(), 'showmore', 'chars', 1100); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/showmore/'); $html = Renderer::replaceMacros($t, [ @@ -47,15 +48,15 @@ function showmore_addon_settings(App &$a, array &$data) function showmore_addon_settings_post(App $a, array &$b) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } if (!empty($_POST['showmore-submit'])) { - DI::pConfig()->set(local_user(), 'showmore', 'chars', trim($_POST['showmore-chars'])); + DI::pConfig()->set(Session::getLocalUser(), 'showmore', 'chars', trim($_POST['showmore-chars'])); $enable = (!empty($_POST['showmore-enable']) ? intval($_POST['showmore-enable']) : 0); $disable = 1-$enable; - DI::pConfig()->set(local_user(), 'showmore', 'disable', $disable); + DI::pConfig()->set(Session::getLocalUser(), 'showmore', 'disable', $disable); } } @@ -100,11 +101,11 @@ function showmore_prepare_body(App $a, &$hook_data) return; } - if (DI::pConfig()->get(local_user(), 'showmore', 'disable')) { + if (DI::pConfig()->get(Session::getLocalUser(), 'showmore', 'disable')) { return; } - $chars = (int) DI::pConfig()->get(local_user(), 'showmore', 'chars', 1100); + $chars = (int) DI::pConfig()->get(Session::getLocalUser(), 'showmore', 'chars', 1100); if (get_body_length($hook_data['html']) > $chars) { $found = true; diff --git a/showmore_dyn/showmore_dyn.php b/showmore_dyn/showmore_dyn.php index a6f41411..b5dda5d0 100644 --- a/showmore_dyn/showmore_dyn.php +++ b/showmore_dyn/showmore_dyn.php @@ -12,6 +12,7 @@ use Friendica\Core\Hook; use Friendica\Core\L10n; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; @@ -36,23 +37,23 @@ function showmore_dyn_footer(App $a, string &$body) function showmore_dyn_settings_post() { - if(!local_user()) { + if(!Session::getLocalUser()) { return; } if (isset($_POST['showmore_dyn-submit'])) { - DI::pConfig()->set(local_user(), 'showmore_dyn', 'limitHeight', $_POST['limitHeight'] ?? 0); + DI::pConfig()->set(Session::getLocalUser(), 'showmore_dyn', 'limitHeight', $_POST['limitHeight'] ?? 0); } } function showmore_dyn_settings(App &$a, array &$data) { - if(!local_user()) { + if(!Session::getLocalUser()) { return; } - $limitHeight = DI::pConfig()->get(local_user(), 'showmore_dyn', 'limitHeight', 250); - DI::pConfig()->set(local_user(), 'showmore_dyn', 'limitHeight', $limitHeight); + $limitHeight = DI::pConfig()->get(Session::getLocalUser(), 'showmore_dyn', 'limitHeight', 250); + DI::pConfig()->set(Session::getLocalUser(), 'showmore_dyn', 'limitHeight', $limitHeight); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/showmore_dyn/'); $html = Renderer::replaceMacros($t, [ @@ -68,7 +69,7 @@ function showmore_dyn_settings(App &$a, array &$data) function showmore_dyn_script() { - $limitHeight = intval(DI::pConfig()->get(local_user(), 'showmore_dyn', 'limitHeight', 250)); + $limitHeight = intval(DI::pConfig()->get(Session::getLocalUser(), 'showmore_dyn', 'limitHeight', 250)); $showmore_dyn_showmore_linktext = DI::l10n()->t('Show more...'); DI::page()['htmlhead'] .= << diff --git a/startpage/startpage.php b/startpage/startpage.php index 1e5edeea..f4ef59c0 100644 --- a/startpage/startpage.php +++ b/startpage/startpage.php @@ -10,6 +10,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; function startpage_install() { @@ -20,11 +21,11 @@ function startpage_install() { function startpage_home_init(App $a, $b) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $page = DI::pConfig()->get(local_user(), 'startpage', 'startpage'); + $page = DI::pConfig()->get(Session::getLocalUser(), 'startpage', 'startpage'); if (strlen($page)) { DI::baseUrl()->redirect($page); } @@ -42,12 +43,12 @@ function startpage_home_init(App $a, $b) function startpage_settings_post(App $a, $post) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } if (!empty($_POST['startpage-submit'])) { - DI::pConfig()->set(local_user(), 'startpage', 'startpage', strip_tags(trim($_POST['startpage']))); + DI::pConfig()->set(Session::getLocalUser(), 'startpage', 'startpage', strip_tags(trim($_POST['startpage']))); } } @@ -59,11 +60,11 @@ function startpage_settings_post(App $a, $post) */ function startpage_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $startpage = DI::pConfig()->get(local_user(), 'startpage', 'startpage'); + $startpage = DI::pConfig()->get(Session::getLocalUser(), 'startpage', 'startpage'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/startpage/'); $html = Renderer::replaceMacros($t, [ diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 9c6fb7f0..2c735c94 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -47,6 +47,7 @@ use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Core\System; use Friendica\Database\DBA; use Friendica\DI; @@ -86,17 +87,17 @@ function statusnet_check_item_notification(App $a, &$notification_data) function statusnet_jot_nets(App $a, array &$jotnets_fields) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - if (DI::pConfig()->get(local_user(), 'statusnet', 'post')) { + if (DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'statusnet_enable', DI::l10n()->t('Post to GNU Social'), - DI::pConfig()->get(local_user(), 'statusnet', 'post_by_default') + DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'post_by_default') ] ]; } @@ -104,7 +105,7 @@ function statusnet_jot_nets(App $a, array &$jotnets_fields) function statusnet_settings_post(App $a, $post) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } // don't check GNU Social settings if GNU Social submit button is not clicked @@ -116,18 +117,18 @@ function statusnet_settings_post(App $a, $post) /* * * * if the GNU Social-disconnect button is clicked, clear the GNU Social configuration */ - DI::pConfig()->delete(local_user(), 'statusnet', 'consumerkey'); - DI::pConfig()->delete(local_user(), 'statusnet', 'consumersecret'); - DI::pConfig()->delete(local_user(), 'statusnet', 'post'); - DI::pConfig()->delete(local_user(), 'statusnet', 'post_by_default'); - DI::pConfig()->delete(local_user(), 'statusnet', 'oauthtoken'); - DI::pConfig()->delete(local_user(), 'statusnet', 'oauthsecret'); - DI::pConfig()->delete(local_user(), 'statusnet', 'baseapi'); - DI::pConfig()->delete(local_user(), 'statusnet', 'lastid'); - DI::pConfig()->delete(local_user(), 'statusnet', 'mirror_posts'); - DI::pConfig()->delete(local_user(), 'statusnet', 'import'); - DI::pConfig()->delete(local_user(), 'statusnet', 'create_user'); - DI::pConfig()->delete(local_user(), 'statusnet', 'own_url'); + DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'consumerkey'); + DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'consumersecret'); + DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'post'); + DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'post_by_default'); + DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'oauthtoken'); + DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'oauthsecret'); + DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'baseapi'); + DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'lastid'); + DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'mirror_posts'); + DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'import'); + DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'create_user'); + DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'own_url'); } else { if (isset($_POST['statusnet-preconf-apiurl'])) { /* * * @@ -141,10 +142,10 @@ function statusnet_settings_post(App $a, $post) $apibase = $asn['apiurl']; $c = DI::httpClient()->fetch($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { - DI::pConfig()->set(local_user(), 'statusnet', 'consumerkey', $asn['consumerkey']); - DI::pConfig()->set(local_user(), 'statusnet', 'consumersecret', $asn['consumersecret']); - DI::pConfig()->set(local_user(), 'statusnet', 'baseapi', $asn['apiurl']); - //DI::pConfig()->set(local_user(), 'statusnet', 'application_name', $asn['applicationname'] ); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'consumerkey', $asn['consumerkey']); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'consumersecret', $asn['consumersecret']); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'baseapi', $asn['apiurl']); + //DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'application_name', $asn['applicationname'] ); } else { DI::sysmsg()->addNotice(DI::l10n()->t('Please contact your site administrator.
The provided API URL is not valid.') . '
' . $asn['apiurl']); } @@ -159,19 +160,19 @@ function statusnet_settings_post(App $a, $post) $c = DI::httpClient()->fetch($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { // ok the API path is correct, let's save the settings - DI::pConfig()->set(local_user(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); - DI::pConfig()->set(local_user(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']); - DI::pConfig()->set(local_user(), 'statusnet', 'baseapi', $apibase); - //DI::pConfig()->set(local_user(), 'statusnet', 'application_name', $_POST['statusnet-applicationname'] ); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'baseapi', $apibase); + //DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'application_name', $_POST['statusnet-applicationname'] ); } else { // the API path is not correct, maybe missing trailing / ? $apibase = $apibase . '/'; $c = DI::httpClient()->fetch($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { // ok the API path is now correct, let's save the settings - DI::pConfig()->set(local_user(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); - DI::pConfig()->set(local_user(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']); - DI::pConfig()->set(local_user(), 'statusnet', 'baseapi', $apibase); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'baseapi', $apibase); } else { // still not the correct API base, let's do noting DI::sysmsg()->addNotice(DI::l10n()->t('We could not contact the GNU Social API with the Path you entered.')); @@ -180,31 +181,31 @@ function statusnet_settings_post(App $a, $post) } else { if (isset($_POST['statusnet-pin'])) { // if the user supplied us with a PIN from GNU Social, let the magic of OAuth happen - $api = DI::pConfig()->get(local_user(), 'statusnet', 'baseapi'); - $ckey = DI::pConfig()->get(local_user(), 'statusnet', 'consumerkey'); - $csecret = DI::pConfig()->get(local_user(), 'statusnet', 'consumersecret'); + $api = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'baseapi'); + $ckey = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'consumerkey'); + $csecret = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'consumersecret'); // the token and secret for which the PIN was generated were hidden in the settings // form as token and token2, we need a new connection to GNU Social using these token // and secret to request a Access Token with the PIN $connection = new StatusNetOAuth($api, $ckey, $csecret, $_POST['statusnet-token'], $_POST['statusnet-token2']); $token = $connection->getAccessToken($_POST['statusnet-pin']); // ok, now that we have the Access Token, save them in the user config - DI::pConfig()->set(local_user(), 'statusnet', 'oauthtoken', $token['oauth_token']); - DI::pConfig()->set(local_user(), 'statusnet', 'oauthsecret', $token['oauth_token_secret']); - DI::pConfig()->set(local_user(), 'statusnet', 'post', 1); - DI::pConfig()->set(local_user(), 'statusnet', 'post_taglinks', 1); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'oauthtoken', $token['oauth_token']); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'oauthsecret', $token['oauth_token_secret']); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'post', 1); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'post_taglinks', 1); // reload the Addon Settings page, if we don't do it see Bug #42 } else { // if no PIN is supplied in the POST variables, the user has changed the setting // to post a dent for every new __public__ posting to the wall - DI::pConfig()->set(local_user(), 'statusnet', 'post', intval($_POST['statusnet-enable'])); - DI::pConfig()->set(local_user(), 'statusnet', 'post_by_default', intval($_POST['statusnet-default'])); - DI::pConfig()->set(local_user(), 'statusnet', 'mirror_posts', intval($_POST['statusnet-mirror'])); - DI::pConfig()->set(local_user(), 'statusnet', 'import', intval($_POST['statusnet-import'])); - DI::pConfig()->set(local_user(), 'statusnet', 'create_user', intval($_POST['statusnet-create_user'])); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'post', intval($_POST['statusnet-enable'])); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'post_by_default', intval($_POST['statusnet-default'])); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'mirror_posts', intval($_POST['statusnet-mirror'])); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'import', intval($_POST['statusnet-import'])); + DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'create_user', intval($_POST['statusnet-create_user'])); if (!intval($_POST['statusnet-mirror'])) - DI::pConfig()->delete(local_user(), 'statusnet', 'lastid'); + DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'lastid'); } } } @@ -213,7 +214,7 @@ function statusnet_settings_post(App $a, $post) function statusnet_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } @@ -225,16 +226,16 @@ function statusnet_settings(App $a, array &$data) * allow the user to cancel the connection process at this step * 3) Checkbox for "Send public notices (respect size limitation) */ - $baseapi = DI::pConfig()->get(local_user(), 'statusnet', 'baseapi'); - $ckey = DI::pConfig()->get(local_user(), 'statusnet', 'consumerkey'); - $csecret = DI::pConfig()->get(local_user(), 'statusnet', 'consumersecret'); - $otoken = DI::pConfig()->get(local_user(), 'statusnet', 'oauthtoken'); - $osecret = DI::pConfig()->get(local_user(), 'statusnet', 'oauthsecret'); - $enabled = DI::pConfig()->get(local_user(), 'statusnet', 'post', false); - $def_enabled = DI::pConfig()->get(local_user(), 'statusnet', 'post_by_default', false); - $mirror_enabled = DI::pConfig()->get(local_user(), 'statusnet', 'mirror_posts', false); - $createuser_enabled = DI::pConfig()->get(local_user(), 'statusnet', 'create_user', false); - $import = DI::pConfig()->get(local_user(), 'statusnet', 'import'); + $baseapi = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'baseapi'); + $ckey = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'consumerkey'); + $csecret = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'consumersecret'); + $otoken = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'oauthtoken'); + $osecret = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'oauthsecret'); + $enabled = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'post', false); + $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'post_by_default', false); + $mirror_enabled = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'mirror_posts', false); + $createuser_enabled = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'create_user', false); + $import = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'import'); // Radio button list to select existing application credentials $sites = array_map(function ($site) { @@ -256,7 +257,7 @@ function statusnet_settings(App $a, array &$data) $connected_account = DI::l10n()->t('Currently connected to: %s', $account->statusnet_profile_url, $account->screen_name); } - $user = User::getById(local_user()); + $user = User::getById(Session::getLocalUser()); if ($user['hidewall']) { $privacy_warning = DI::l10n()->t('Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to GNU Social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'); } @@ -379,15 +380,15 @@ function statusnet_post_local(App $a, array &$b) return; } - if (!local_user() || (local_user() != $b['uid'])) { + if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { return; } - $statusnet_post = DI::pConfig()->get(local_user(), 'statusnet', 'post'); + $statusnet_post = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'post'); $statusnet_enable = (($statusnet_post && !empty($_REQUEST['statusnet_enable'])) ? intval($_REQUEST['statusnet_enable']) : 0); // if API is used, default to the chosen settings - if ($b['api_source'] && intval(DI::pConfig()->get(local_user(), 'statusnet', 'post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'post_by_default'))) { $statusnet_enable = 1; } @@ -668,7 +669,7 @@ function statusnet_prepare_body(App $a, array &$b) } if ($b['preview']) { - $max_char = DI::pConfig()->get(local_user(), 'statusnet', 'max_char'); + $max_char = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'max_char'); if (intval($max_char) == 0) { $max_char = 140; } @@ -676,7 +677,7 @@ function statusnet_prepare_body(App $a, array &$b) $item = $b['item']; $item['plink'] = DI::baseUrl()->get() . '/display/' . $item['guid']; - $condition = ['uri' => $item['thr-parent'], 'uid' => local_user()]; + $condition = ['uri' => $item['thr-parent'], 'uid' => Session::getLocalUser()]; $orig_post = Post::selectFirst(['author-link', 'uri'], $condition); if (DBA::isResult($orig_post)) { $nick = preg_replace("=https?://(.*)/(.*)=ism", "$2", $orig_post['author-link']); diff --git a/superblock/superblock.php b/superblock/superblock.php index dcc4242f..23f29d65 100644 --- a/superblock/superblock.php +++ b/superblock/superblock.php @@ -10,6 +10,7 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\DI; use Friendica\Util\Strings; @@ -24,11 +25,11 @@ function superblock_install() function superblock_addon_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $blocked = DI::pConfig()->get(local_user(), 'system', 'blocked', ''); + $blocked = DI::pConfig()->get(Session::getLocalUser(), 'system', 'blocked', ''); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/superblock/'); $html = Renderer::replaceMacros($t, [ @@ -44,12 +45,12 @@ function superblock_addon_settings(App &$a, array &$data) function superblock_addon_settings_post(App $a, array &$b) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } if (!empty($_POST['superblock-submit'])) { - DI::pConfig()->set(local_user(), 'system', 'blocked',trim($_POST['superblock-words'])); + DI::pConfig()->set(Session::getLocalUser(), 'system', 'blocked',trim($_POST['superblock-words'])); } } @@ -89,11 +90,11 @@ function superblock_enotify_store(App $a, array &$b) function superblock_conversation_start(App $a, array &$b) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $words = DI::pConfig()->get(local_user(), 'system', 'blocked'); + $words = DI::pConfig()->get(Session::getLocalUser(), 'system', 'blocked'); if ($words) { $a->data['superblock'] = explode(',', $words); } @@ -112,7 +113,7 @@ EOT; function superblock_item_photo_menu(App $a, array &$b) { - if (!local_user() || $b['item']['self']) { + if (!Session::getLocalUser() || $b['item']['self']) { return; } @@ -139,11 +140,11 @@ function superblock_module() {} function superblock_init(App $a) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $words = DI::pConfig()->get(local_user(), 'system', 'blocked'); + $words = DI::pConfig()->get(Session::getLocalUser(), 'system', 'blocked'); if (array_key_exists('block', $_GET) && $_GET['block']) { if (strlen($words)) @@ -151,6 +152,6 @@ function superblock_init(App $a) $words .= trim($_GET['block']); } - DI::pConfig()->set(local_user(), 'system', 'blocked', $words); + DI::pConfig()->set(Session::getLocalUser(), 'system', 'blocked', $words); exit(); } diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index 6a552b7b..8fee684a 100644 --- a/tumblr/tumblr.php +++ b/tumblr/tumblr.php @@ -14,6 +14,7 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Post; @@ -38,7 +39,7 @@ function tumblr_module() {} function tumblr_content(App $a) { - if (!local_user()) { + if (!Session::getLocalUser()) { DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.')); return ''; } @@ -171,8 +172,8 @@ function tumblr_callback(App $a) } // What's next? Now that we have an Access Token and Secret, we can make an API call. - DI::pConfig()->set(local_user(), 'tumblr', 'oauth_token', $access_token['oauth_token']); - DI::pConfig()->set(local_user(), 'tumblr', 'oauth_token_secret', $access_token['oauth_token_secret']); + DI::pConfig()->set(Session::getLocalUser(), 'tumblr', 'oauth_token', $access_token['oauth_token']); + DI::pConfig()->set(Session::getLocalUser(), 'tumblr', 'oauth_token_secret', $access_token['oauth_token_secret']); $o = DI::l10n()->t("You are now authenticated to tumblr."); $o .= '
' . DI::l10n()->t("return to the connector page") . ''; @@ -182,17 +183,17 @@ function tumblr_callback(App $a) function tumblr_jot_nets(App $a, array &$jotnets_fields) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - if (DI::pConfig()->get(local_user(),'tumblr','post')) { + if (DI::pConfig()->get(Session::getLocalUser(),'tumblr','post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'tumblr_enable', DI::l10n()->t('Post to Tumblr'), - DI::pConfig()->get(local_user(),'tumblr','post_by_default') + DI::pConfig()->get(Session::getLocalUser(),'tumblr','post_by_default') ] ]; } @@ -200,18 +201,18 @@ function tumblr_jot_nets(App $a, array &$jotnets_fields) function tumblr_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enabled = DI::pConfig()->get(local_user(), 'tumblr', 'post', false); - $def_enabled = DI::pConfig()->get(local_user(), 'tumblr', 'post_by_default', false); + $enabled = DI::pConfig()->get(Session::getLocalUser(), 'tumblr', 'post', false); + $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'tumblr', 'post_by_default', false); - $oauth_token = DI::pConfig()->get(local_user(), 'tumblr', 'oauth_token'); - $oauth_token_secret = DI::pConfig()->get(local_user(), 'tumblr', 'oauth_token_secret'); + $oauth_token = DI::pConfig()->get(Session::getLocalUser(), 'tumblr', 'oauth_token'); + $oauth_token_secret = DI::pConfig()->get(Session::getLocalUser(), 'tumblr', 'oauth_token_secret'); if ($oauth_token && $oauth_token_secret) { - $page = DI::pConfig()->get(local_user(), 'tumblr', 'page'); + $page = DI::pConfig()->get(Session::getLocalUser(), 'tumblr', 'page'); $consumer_key = DI::config()->get('tumblr', 'consumer_key'); $consumer_secret = DI::config()->get('tumblr', 'consumer_secret'); @@ -251,9 +252,9 @@ function tumblr_settings(App $a, array &$data) function tumblr_settings_post(App $a, array &$b) { if (!empty($_POST['tumblr-submit'])) { - DI::pConfig()->set(local_user(), 'tumblr', 'post', intval($_POST['tumblr'])); - DI::pConfig()->set(local_user(), 'tumblr', 'page', $_POST['tumblr_page']); - DI::pConfig()->set(local_user(), 'tumblr', 'post_by_default', intval($_POST['tumblr_bydefault'])); + DI::pConfig()->set(Session::getLocalUser(), 'tumblr', 'post', intval($_POST['tumblr'])); + DI::pConfig()->set(Session::getLocalUser(), 'tumblr', 'page', $_POST['tumblr_page']); + DI::pConfig()->set(Session::getLocalUser(), 'tumblr', 'post_by_default', intval($_POST['tumblr_bydefault'])); } } @@ -280,7 +281,7 @@ function tumblr_post_local(App $a, array &$b) return; } - if (!local_user() || (local_user() != $b['uid'])) { + if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { return; } @@ -288,11 +289,11 @@ function tumblr_post_local(App $a, array &$b) return; } - $tmbl_post = intval(DI::pConfig()->get(local_user(), 'tumblr', 'post')); + $tmbl_post = intval(DI::pConfig()->get(Session::getLocalUser(), 'tumblr', 'post')); $tmbl_enable = (($tmbl_post && !empty($_REQUEST['tumblr_enable'])) ? intval($_REQUEST['tumblr_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(local_user(), 'tumblr', 'post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(), 'tumblr', 'post_by_default'))) { $tmbl_enable = 1; } diff --git a/twitter/twitter.php b/twitter/twitter.php index 5f0d8c84..465acaed 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -85,6 +85,7 @@ use Friendica\Model\Tag; use Friendica\Model\User; use Friendica\Protocol\Activity; use Friendica\Core\Config\Util\ConfigFileLoader; +use Friendica\Core\Session; use Friendica\Core\System; use Friendica\Util\DateTimeFormat; use Friendica\Util\Images; @@ -204,17 +205,17 @@ function twitter_api_contact(string $apiPath, array $contact, int $uid): ?bool function twitter_jot_nets(App $a, array &$jotnets_fields) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - if (DI::pConfig()->get(local_user(), 'twitter', 'post')) { + if (DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'twitter_enable', DI::l10n()->t('Post to Twitter'), - DI::pConfig()->get(local_user(), 'twitter', 'post_by_default') + DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'post_by_default') ] ]; } @@ -223,7 +224,7 @@ function twitter_jot_nets(App $a, array &$jotnets_fields) function twitter_settings_post(App $a) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } // don't check twitter settings if twitter submit button is not clicked @@ -236,18 +237,18 @@ function twitter_settings_post(App $a) * if the twitter-disconnect checkbox is set, clear the OAuth key/secret pair * from the user configuration */ - DI::pConfig()->delete(local_user(), 'twitter', 'consumerkey'); - DI::pConfig()->delete(local_user(), 'twitter', 'consumersecret'); - DI::pConfig()->delete(local_user(), 'twitter', 'oauthtoken'); - DI::pConfig()->delete(local_user(), 'twitter', 'oauthsecret'); - DI::pConfig()->delete(local_user(), 'twitter', 'post'); - DI::pConfig()->delete(local_user(), 'twitter', 'post_by_default'); - DI::pConfig()->delete(local_user(), 'twitter', 'lastid'); - DI::pConfig()->delete(local_user(), 'twitter', 'thread'); - DI::pConfig()->delete(local_user(), 'twitter', 'mirror_posts'); - DI::pConfig()->delete(local_user(), 'twitter', 'import'); - DI::pConfig()->delete(local_user(), 'twitter', 'create_user'); - DI::pConfig()->delete(local_user(), 'twitter', 'own_id'); + DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'consumerkey'); + DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'consumersecret'); + DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'oauthtoken'); + DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'oauthsecret'); + DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'post'); + DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'post_by_default'); + DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'lastid'); + DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'thread'); + DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'mirror_posts'); + DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'import'); + DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'create_user'); + DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'own_id'); } else { if (isset($_POST['twitter-pin'])) { // if the user supplied us with a PIN from Twitter, let the magic of OAuth happen @@ -265,9 +266,9 @@ function twitter_settings_post(App $a) $connection = new TwitterOAuth($ckey, $csecret, $_POST['twitter-token'], $_POST['twitter-token2']); $token = $connection->oauth('oauth/access_token', ['oauth_verifier' => $_POST['twitter-pin']]); // ok, now that we have the Access Token, save them in the user config - DI::pConfig()->set(local_user(), 'twitter', 'oauthtoken', $token['oauth_token']); - DI::pConfig()->set(local_user(), 'twitter', 'oauthsecret', $token['oauth_token_secret']); - DI::pConfig()->set(local_user(), 'twitter', 'post', 1); + DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'oauthtoken', $token['oauth_token']); + DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'oauthsecret', $token['oauth_token_secret']); + DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'post', 1); } catch(Exception $e) { DI::sysmsg()->addNotice($e->getMessage()); } catch(TwitterOAuthException $e) { @@ -276,15 +277,15 @@ function twitter_settings_post(App $a) } else { // if no PIN is supplied in the POST variables, the user has changed the setting // to post a tweet for every new __public__ posting to the wall - DI::pConfig()->set(local_user(), 'twitter', 'post', intval($_POST['twitter-enable'])); - DI::pConfig()->set(local_user(), 'twitter', 'post_by_default', intval($_POST['twitter-default'])); - DI::pConfig()->set(local_user(), 'twitter', 'thread', intval($_POST['twitter-thread'])); - DI::pConfig()->set(local_user(), 'twitter', 'mirror_posts', intval($_POST['twitter-mirror'])); - DI::pConfig()->set(local_user(), 'twitter', 'import', intval($_POST['twitter-import'])); - DI::pConfig()->set(local_user(), 'twitter', 'create_user', intval($_POST['twitter-create_user'])); + DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'post', intval($_POST['twitter-enable'])); + DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'post_by_default', intval($_POST['twitter-default'])); + DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'thread', intval($_POST['twitter-thread'])); + DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'mirror_posts', intval($_POST['twitter-mirror'])); + DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'import', intval($_POST['twitter-import'])); + DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'create_user', intval($_POST['twitter-create_user'])); if (!intval($_POST['twitter-mirror'])) { - DI::pConfig()->delete(local_user(), 'twitter', 'lastid'); + DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'lastid'); } } } @@ -292,11 +293,11 @@ function twitter_settings_post(App $a) function twitter_settings(App $a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $user = User::getById(local_user()); + $user = User::getById(Session::getLocalUser()); DI::page()->registerStylesheet(__DIR__ . '/twitter.css', 'all'); @@ -307,15 +308,15 @@ function twitter_settings(App $a, array &$data) */ $ckey = DI::config()->get('twitter', 'consumerkey'); $csecret = DI::config()->get('twitter', 'consumersecret'); - $otoken = DI::pConfig()->get(local_user(), 'twitter', 'oauthtoken'); - $osecret = DI::pConfig()->get(local_user(), 'twitter', 'oauthsecret'); + $otoken = DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'oauthtoken'); + $osecret = DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'oauthsecret'); - $enabled = intval(DI::pConfig()->get(local_user(), 'twitter', 'post')); - $defenabled = intval(DI::pConfig()->get(local_user(), 'twitter', 'post_by_default')); - $threadenabled = intval(DI::pConfig()->get(local_user(), 'twitter', 'thread')); - $mirrorenabled = intval(DI::pConfig()->get(local_user(), 'twitter', 'mirror_posts')); - $importenabled = intval(DI::pConfig()->get(local_user(), 'twitter', 'import')); - $create_userenabled = intval(DI::pConfig()->get(local_user(), 'twitter', 'create_user')); + $enabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'post')); + $defenabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'post_by_default')); + $threadenabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'thread')); + $mirrorenabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'mirror_posts')); + $importenabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'import')); + $create_userenabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'create_user')); // Hide the submit button by default $submit = ''; @@ -465,15 +466,15 @@ function twitter_post_local(App $a, array &$b) return; } - if (!local_user() || (local_user() != $b['uid'])) { + if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { return; } - $twitter_post = intval(DI::pConfig()->get(local_user(), 'twitter', 'post')); + $twitter_post = intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'post')); $twitter_enable = (($twitter_post && !empty($_REQUEST['twitter_enable'])) ? intval($_REQUEST['twitter_enable']) : 0); // if API is used, default to the chosen settings - if ($b['api_source'] && intval(DI::pConfig()->get(local_user(), 'twitter', 'post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'post_by_default'))) { $twitter_enable = 1; } @@ -1069,7 +1070,7 @@ function twitter_prepare_body(App $a, array &$b) $item = $b['item']; $item['plink'] = DI::baseUrl()->get() . '/display/' . $item['guid']; - $condition = ['uri' => $item['thr-parent'], 'uid' => local_user()]; + $condition = ['uri' => $item['thr-parent'], 'uid' => Session::getLocalUser()]; $orig_post = Post::selectFirst(['author-link'], $condition); if (DBA::isResult($orig_post)) { $nicknameplain = preg_replace("=https?://twitter.com/(.*)=ism", "$1", $orig_post['author-link']); diff --git a/viewsrc/viewsrc.php b/viewsrc/viewsrc.php index 84617744..c9a24692 100644 --- a/viewsrc/viewsrc.php +++ b/viewsrc/viewsrc.php @@ -9,6 +9,7 @@ use Friendica\App; use Friendica\Core\Hook; +use Friendica\Core\Session; use Friendica\DI; function viewsrc_install() @@ -32,7 +33,7 @@ EOS; function viewsrc_item_photo_menu(App $a, array &$b) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } diff --git a/windowsphonepush/windowsphonepush.php b/windowsphonepush/windowsphonepush.php index e08cb5a0..55ecb14f 100644 --- a/windowsphonepush/windowsphonepush.php +++ b/windowsphonepush/windowsphonepush.php @@ -33,6 +33,7 @@ use Friendica\Content\Text\HTML; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Item; @@ -74,17 +75,17 @@ function windowsphonepush_module() {} */ function windowsphonepush_settings_post(App $a, $post) { - if (!local_user() || empty($_POST['windowsphonepush-submit'])) { + if (!Session::getLocalUser() || empty($_POST['windowsphonepush-submit'])) { return; } $enable = intval($_POST['windowsphonepush']); - DI::pConfig()->set(local_user(), 'windowsphonepush', 'enable', $enable); + DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'enable', $enable); if ($enable) { - DI::pConfig()->set(local_user(), 'windowsphonepush', 'counterunseen', 0); + DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'counterunseen', 0); } - DI::pConfig()->set(local_user(), 'windowsphonepush', 'senditemtext', intval($_POST['windowsphonepush-senditemtext'])); + DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'senditemtext', intval($_POST['windowsphonepush-senditemtext'])); } /* Called from the Addon Setting form. @@ -92,13 +93,13 @@ function windowsphonepush_settings_post(App $a, $post) */ function windowsphonepush_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enabled = DI::pConfig()->get(local_user(), 'windowsphonepush', 'enable'); - $senditemtext = DI::pConfig()->get(local_user(), 'windowsphonepush', 'senditemtext'); - $device_url = DI::pConfig()->get(local_user(), 'windowsphonepush', 'device_url'); + $enabled = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'enable'); + $senditemtext = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'senditemtext'); + $device_url = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'device_url'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/windowsphonepush/'); $html = Renderer::replaceMacros($t, [ @@ -274,7 +275,7 @@ function send_push($device_url, $headers, $msg) // and log this fact $subscriptionStatus = get_header_value($output, 'X-SubscriptionStatus'); if ($subscriptionStatus == "Expired") { - DI::pConfig()->set(local_user(), 'windowsphonepush', 'device_url', ""); + DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'device_url', ""); Logger::notice("ERROR: the stored Device-URL " . $device_url . "returned an 'Expired' error, it has been deleted now."); } @@ -329,15 +330,15 @@ function windowsphonepush_content(App $a) // return settings for windowsphonepush addon to be able to check them in WP app function windowsphonepush_showsettings() { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enable = DI::pConfig()->get(local_user(), 'windowsphonepush', 'enable'); - $device_url = DI::pConfig()->get(local_user(), 'windowsphonepush', 'device_url'); - $senditemtext = DI::pConfig()->get(local_user(), 'windowsphonepush', 'senditemtext'); - $lastpushid = DI::pConfig()->get(local_user(), 'windowsphonepush', 'lastpushid'); - $counterunseen = DI::pConfig()->get(local_user(), 'windowsphonepush', 'counterunseen'); + $enable = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'enable'); + $device_url = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'device_url'); + $senditemtext = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'senditemtext'); + $lastpushid = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'lastpushid'); + $counterunseen = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'counterunseen'); $addonversion = "2.0"; if (!$device_url) { @@ -349,7 +350,7 @@ function windowsphonepush_showsettings() } header("Content-Type: application/json"); - echo json_encode(['uid' => local_user(), + echo json_encode(['uid' => Session::getLocalUser(), 'enable' => $enable, 'device_url' => $device_url, 'senditemtext' => $senditemtext, @@ -363,12 +364,12 @@ function windowsphonepush_showsettings() */ function windowsphonepush_updatesettings() { - if (!local_user()) { + if (!Session::getLocalUser()) { return "Not Authenticated"; } // no updating if user hasn't enabled the addon - $enable = DI::pConfig()->get(local_user(), 'windowsphonepush', 'enable'); + $enable = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'enable'); if (!$enable) { return "Plug-in not enabled"; } @@ -384,32 +385,32 @@ function windowsphonepush_updatesettings() // the user on the Windows Phone device and that device url is no longer true for the other user, so we // et the device_url for the OTHER user blank (should normally not occur as App should include User/server // in url request to Microsoft Push Notification server) - $pconfigs = DBA::selectToArray('pconfig', ['uid'], ["`uid` != ? AND `cat` = ? AND `k` = ? AND `v` = ?", local_user(), 'windowsphonepush', 'device_url', $device_url]); + $pconfigs = DBA::selectToArray('pconfig', ['uid'], ["`uid` != ? AND `cat` = ? AND `k` = ? AND `v` = ?", Session::getLocalUser(), 'windowsphonepush', 'device_url', $device_url]); foreach ($pconfigs as $rr) { DI::pConfig()->set($rr['uid'], 'windowsphonepush', 'device_url', ''); - Logger::notice("WARN: the sent URL was already registered with user '" . $rr['uid'] . "'. Deleted for this user as we expect to be correct now for user '" . local_user() . "'."); + Logger::notice("WARN: the sent URL was already registered with user '" . $rr['uid'] . "'. Deleted for this user as we expect to be correct now for user '" . Session::getLocalUser() . "'."); } - DI::pConfig()->set(local_user(), 'windowsphonepush', 'device_url', $device_url); + DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'device_url', $device_url); // output the successfull update of the device URL to the logger for error analysis if necessary - Logger::notice("INFO: Device-URL for user '" . local_user() . "' has been updated with '" . $device_url . "'"); + Logger::notice("INFO: Device-URL for user '" . Session::getLocalUser() . "' has been updated with '" . $device_url . "'"); return "Device-URL updated successfully!"; } // update_counterunseen is used to reset the counter to zero from Windows Phone app function windowsphonepush_updatecounterunseen() { - if (!local_user()) { + if (!Session::getLocalUser()) { return "Not Authenticated"; } // no updating if user hasn't enabled the addon - $enable = DI::pConfig()->get(local_user(), 'windowsphonepush', 'enable'); + $enable = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'enable'); if (!$enable) { return "Plug-in not enabled"; } - DI::pConfig()->set(local_user(), 'windowsphonepush', 'counterunseen', 0); + DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'counterunseen', 0); return "Counter set to zero"; } diff --git a/wppost/wppost.php b/wppost/wppost.php index 5c110038..e05286d4 100644 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -12,6 +12,7 @@ use Friendica\Content\Text\HTML; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Post; @@ -29,17 +30,17 @@ function wppost_install() function wppost_jot_nets(App &$a, array &$jotnets_fields) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - if (DI::pConfig()->get(local_user(),'wppost','post')) { + if (DI::pConfig()->get(Session::getLocalUser(),'wppost','post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'wppost_enable', DI::l10n()->t('Post to Wordpress'), - DI::pConfig()->get(local_user(),'wppost','post_by_default') + DI::pConfig()->get(Session::getLocalUser(),'wppost','post_by_default') ] ]; } @@ -48,17 +49,17 @@ function wppost_jot_nets(App &$a, array &$jotnets_fields) function wppost_settings(App &$a, array &$data) { - if (!local_user()) { + if (!Session::getLocalUser()) { return; } - $enabled = DI::pConfig()->get(local_user(), 'wppost', 'post', false); - $wp_username = DI::pConfig()->get(local_user(), 'wppost', 'wp_username'); - $wp_blog = DI::pConfig()->get(local_user(), 'wppost', 'wp_blog'); - $def_enabled = DI::pConfig()->get(local_user(), 'wppost', 'post_by_default', false); - $back_enabled = DI::pConfig()->get(local_user(), 'wppost', 'backlink', false); - $wp_backlink_text = DI::pConfig()->get(local_user(), 'wppost', 'wp_backlink_text'); - $shortcheck_enabled = DI::pConfig()->get(local_user(), 'wppost', 'shortcheck', false); + $enabled = DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'post', false); + $wp_username = DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'wp_username'); + $wp_blog = DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'wp_blog'); + $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'post_by_default', false); + $back_enabled = DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'backlink', false); + $wp_backlink_text = DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'wp_backlink_text'); + $shortcheck_enabled = DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'shortcheck', false); $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/wppost/'); $html = Renderer::replaceMacros($t, [ @@ -85,16 +86,16 @@ function wppost_settings(App &$a, array &$data) function wppost_settings_post(App $a, array &$b) { if(!empty($_POST['wppost-submit'])) { - DI::pConfig()->set(local_user(), 'wppost', 'post' , intval($_POST['wppost'])); - DI::pConfig()->set(local_user(), 'wppost', 'post_by_default', intval($_POST['wp_bydefault'])); - DI::pConfig()->set(local_user(), 'wppost', 'wp_username' , trim($_POST['wp_username'])); - DI::pConfig()->set(local_user(), 'wppost', 'wp_password' , trim($_POST['wp_password'])); - DI::pConfig()->set(local_user(), 'wppost', 'wp_blog' , trim($_POST['wp_blog'])); - DI::pConfig()->set(local_user(), 'wppost', 'backlink' , intval($_POST['wp_backlink'])); - DI::pConfig()->set(local_user(), 'wppost', 'shortcheck' , intval($_POST['wp_shortcheck'])); + DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'post' , intval($_POST['wppost'])); + DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'post_by_default', intval($_POST['wp_bydefault'])); + DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'wp_username' , trim($_POST['wp_username'])); + DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'wp_password' , trim($_POST['wp_password'])); + DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'wp_blog' , trim($_POST['wp_blog'])); + DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'backlink' , intval($_POST['wp_backlink'])); + DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'shortcheck' , intval($_POST['wp_shortcheck'])); $wp_backlink_text = BBCode::convert(trim($_POST['wp_backlink_text']), false, BBCode::BACKLINK); $wp_backlink_text = HTML::toPlaintext($wp_backlink_text, 0, true); - DI::pConfig()->set(local_user(), 'wppost', 'wp_backlink_text', $wp_backlink_text); + DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'wp_backlink_text', $wp_backlink_text); } } @@ -121,7 +122,7 @@ function wppost_post_local(App $a, array &$b) { return; } - if (!local_user() || (local_user() != $b['uid'])) { + if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { return; } @@ -129,11 +130,11 @@ function wppost_post_local(App $a, array &$b) { return; } - $wp_post = intval(DI::pConfig()->get(local_user(), 'wppost', 'post')); + $wp_post = intval(DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'post')); $wp_enable = (($wp_post && !empty($_REQUEST['wppost_enable'])) ? intval($_REQUEST['wppost_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(local_user(), 'wppost', 'post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'post_by_default'))) { $wp_enable = 1; } From 0f6ea75bb72b186e87eead96e5dac1d7b7473619 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 19 Oct 2022 09:47:48 -0400 Subject: [PATCH 114/677] [various] Improve formatting --- group_text/group_text.php | 21 +++++++++---------- libertree/libertree.php | 2 +- ljpost/ljpost.php | 4 ++-- pumpio/pumpio.php | 29 +++++++++++++-------------- windowsphonepush/windowsphonepush.php | 22 ++++++++++---------- 5 files changed, 38 insertions(+), 40 deletions(-) diff --git a/group_text/group_text.php b/group_text/group_text.php index 0c088f99..6c60b8e3 100644 --- a/group_text/group_text.php +++ b/group_text/group_text.php @@ -13,12 +13,10 @@ use Friendica\Core\Renderer; use Friendica\Core\Session; use Friendica\DI; -function group_text_install() { - +function group_text_install() +{ Hook::register('addon_settings', 'addon/group_text/group_text.php', 'group_text_settings'); Hook::register('addon_settings_post', 'addon/group_text/group_text.php', 'group_text_settings_post'); - - Logger::notice("installed group_text"); } /** @@ -30,29 +28,30 @@ function group_text_install() { * */ -function group_text_settings_post(App $a, $post) { - if(! Session::getLocalUser() || empty($_POST['group_text-submit'])) +function group_text_settings_post(App $a, array $post) +{ + if (!Session::getLocalUser() || empty($post['group_text-submit'])) { return; - DI::pConfig()->set(Session::getLocalUser(),'system','groupedit_image_limit',intval($_POST['group_text'])); + } + + DI::pConfig()->set(Session::getLocalUser(), 'system', 'groupedit_image_limit', intval($post['group_text'])); } /** * - * Called from the Addon Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * */ - - function group_text_settings(App &$a, array &$data) { if (!Session::getLocalUser()) { return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(),'system','groupedit_image_limit'); + $enabled = DI::pConfig()->get(Session::getLocalUser(), 'system', 'groupedit_image_limit'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/group_text/'); $html = Renderer::replaceMacros($t, [ diff --git a/libertree/libertree.php b/libertree/libertree.php index 7847f60e..4085fe0a 100644 --- a/libertree/libertree.php +++ b/libertree/libertree.php @@ -108,7 +108,7 @@ function libertree_post_local(App $a, array &$b) return; } - if ((!Session::getLocalUser()) || (Session::getLocalUser() != $b['uid'])) { + if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { return; } diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index fcba7bb3..ba2263a9 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -54,7 +54,7 @@ function ljpost_settings(App &$a, array &$data) return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(), 'ljpost', 'post', false); + $enabled = DI::pConfig()->get(Session::getLocalUser(), 'ljpost', 'post', false); $ij_username = DI::pConfig()->get(Session::getLocalUser(), 'ljpost', 'ij_username'); $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'ljpost', 'post_by_default'); @@ -92,7 +92,7 @@ function ljpost_post_local(App $a, array &$b) return; } - if ((!Session::getLocalUser()) || (Session::getLocalUser() != $b['uid'])) { + if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { return; } diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index f2f158d8..456342e6 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -139,9 +139,9 @@ function pumpio_registerclient(App $a, $host) function pumpio_connect(App $a) { // Define the needed keys - $consumer_key = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'consumer_key'); + $consumer_key = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'consumer_key'); $consumer_secret = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'consumer_secret'); - $hostname = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'host'); + $hostname = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'host'); if ((($consumer_key == '') || ($consumer_secret == '')) && ($hostname != '')) { Logger::notice('pumpio_connect: register client'); @@ -149,7 +149,7 @@ function pumpio_connect(App $a) DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'consumer_key', $clientdata->client_id); DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'consumer_secret', $clientdata->client_secret); - $consumer_key = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'consumer_key'); + $consumer_key = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'consumer_key'); $consumer_secret = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'consumer_secret'); Logger::info('pumpio_connect: ckey: ' . $consumer_key . ' csecrect: ' . $consumer_secret); @@ -463,13 +463,13 @@ function pumpio_send(App $a, array &$b) // Support for native shares // http:///api//shares?id= - $oauth_token = DI::pConfig()->get($b['uid'], 'pumpio', 'oauth_token'); + $oauth_token = DI::pConfig()->get($b['uid'], 'pumpio', 'oauth_token'); $oauth_token_secret = DI::pConfig()->get($b['uid'], 'pumpio', 'oauth_token_secret'); - $consumer_key = DI::pConfig()->get($b['uid'], 'pumpio', 'consumer_key'); - $consumer_secret = DI::pConfig()->get($b['uid'], 'pumpio', 'consumer_secret'); + $consumer_key = DI::pConfig()->get($b['uid'], 'pumpio', 'consumer_key'); + $consumer_secret = DI::pConfig()->get($b['uid'], 'pumpio', 'consumer_secret'); - $host = DI::pConfig()->get($b['uid'], 'pumpio', 'host'); - $user = DI::pConfig()->get($b['uid'], 'pumpio', 'user'); + $host = DI::pConfig()->get($b['uid'], 'pumpio', 'host'); + $user = DI::pConfig()->get($b['uid'], 'pumpio', 'user'); $public = DI::pConfig()->get($b['uid'], 'pumpio', 'public'); if ($oauth_token && $oauth_token_secret) { @@ -700,10 +700,10 @@ function pumpio_cron(App $a, $b) function pumpio_fetchtimeline(App $a, int $uid) { - $ckey = DI::pConfig()->get($uid, 'pumpio', 'consumer_key'); - $csecret = DI::pConfig()->get($uid, 'pumpio', 'consumer_secret'); - $otoken = DI::pConfig()->get($uid, 'pumpio', 'oauth_token'); - $osecret = DI::pConfig()->get($uid, 'pumpio', 'oauth_token_secret'); + $ckey = DI::pConfig()->get($uid, 'pumpio', 'consumer_key'); + $csecret = DI::pConfig()->get($uid, 'pumpio', 'consumer_secret'); + $otoken = DI::pConfig()->get($uid, 'pumpio', 'oauth_token'); + $osecret = DI::pConfig()->get($uid, 'pumpio', 'oauth_token_secret'); $lastdate = DI::pConfig()->get($uid, 'pumpio', 'lastdate'); $hostname = DI::pConfig()->get($uid, 'pumpio', 'host'); $username = DI::pConfig()->get($uid, 'pumpio', 'user'); @@ -1125,7 +1125,6 @@ function pumpio_dopost(App $a, $client, int $uid, array $self, $post, string $ow $reply->generator->displayName = 'pumpio'; $reply->published = $post->object->inReplyTo->published; $reply->received = $post->object->inReplyTo->updated; - $reply->url = $post->object->inReplyTo->url; pumpio_dopost($a, $client, $uid, $self, $reply, $own_id, false); $postarray['thr-parent'] = $post->object->inReplyTo->id; @@ -1219,7 +1218,7 @@ function pumpio_dopost(App $a, $client, int $uid, array $self, $post, string $ow function pumpio_fetchinbox(App $a, int $uid) { - $ckey= DI::pConfig()->get($uid, 'pumpio', 'consumer_key'); + $ckey = DI::pConfig()->get($uid, 'pumpio', 'consumer_key'); $csecret = DI::pConfig()->get($uid, 'pumpio', 'consumer_secret'); $otoken = DI::pConfig()->get($uid, 'pumpio', 'oauth_token'); $osecret = DI::pConfig()->get($uid, 'pumpio', 'oauth_token_secret'); @@ -1285,7 +1284,7 @@ function pumpio_fetchinbox(App $a, int $uid) function pumpio_getallusers(App &$a, int $uid) { - $ckey= DI::pConfig()->get($uid, 'pumpio', 'consumer_key'); + $ckey = DI::pConfig()->get($uid, 'pumpio', 'consumer_key'); $csecret = DI::pConfig()->get($uid, 'pumpio', 'consumer_secret'); $otoken = DI::pConfig()->get($uid, 'pumpio', 'oauth_token'); $osecret = DI::pConfig()->get($uid, 'pumpio', 'oauth_token_secret'); diff --git a/windowsphonepush/windowsphonepush.php b/windowsphonepush/windowsphonepush.php index 55ecb14f..2ea23721 100644 --- a/windowsphonepush/windowsphonepush.php +++ b/windowsphonepush/windowsphonepush.php @@ -73,19 +73,19 @@ function windowsphonepush_module() {} * We will make sure we've got a valid user account * and if so set our configuration setting for this person. */ -function windowsphonepush_settings_post(App $a, $post) +function windowsphonepush_settings_post(App $a, array $post) { - if (!Session::getLocalUser() || empty($_POST['windowsphonepush-submit'])) { + if (!Session::getLocalUser() || empty($post['windowsphonepush-submit'])) { return; } - $enable = intval($_POST['windowsphonepush']); + $enable = intval($post['windowsphonepush']); DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'enable', $enable); if ($enable) { DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'counterunseen', 0); } - DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'senditemtext', intval($_POST['windowsphonepush-senditemtext'])); + DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'senditemtext', intval($post['windowsphonepush-senditemtext'])); } /* Called from the Addon Setting form. @@ -97,9 +97,9 @@ function windowsphonepush_settings(App &$a, array &$data) return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'enable'); + $enabled = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'enable'); $senditemtext = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'senditemtext'); - $device_url = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'device_url'); + $device_url = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'device_url'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/windowsphonepush/'); $html = Renderer::replaceMacros($t, [ @@ -334,12 +334,12 @@ function windowsphonepush_showsettings() return; } - $enable = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'enable'); - $device_url = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'device_url'); - $senditemtext = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'senditemtext'); - $lastpushid = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'lastpushid'); + $enable = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'enable'); + $device_url = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'device_url'); + $senditemtext = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'senditemtext'); + $lastpushid = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'lastpushid'); $counterunseen = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'counterunseen'); - $addonversion = "2.0"; + $addonversion = "2.0"; if (!$device_url) { $device_url = ""; From b0eb28143a716900ff706b9864bf057d5abb6a87 Mon Sep 17 00:00:00 2001 From: Philipp Date: Thu, 20 Oct 2022 23:51:49 +0200 Subject: [PATCH 115/677] UserSession class - Refactor addon --- .../advancedcontentfilter.php | 51 ++++---- birdavatar/birdavatar.php | 31 +++-- blackout/blackout.php | 3 +- blockem/blockem.php | 27 ++-- catavatar/catavatar.php | 31 +++-- curweather/curweather.php | 27 ++-- diaspora/diaspora.php | 37 +++--- discourse/discourse.php | 9 +- dwpost/dwpost.php | 29 +++-- forumdirectory/forumdirectory.php | 5 +- fromapp/fromapp.php | 21 ++-- geonames/geonames.php | 15 ++- gnot/gnot.php | 9 +- group_text/group_text.php | 9 +- ifttt/ifttt.php | 9 +- ijpost/ijpost.php | 29 +++-- irc/irc.php | 21 ++-- keycloakpassword/keycloakpassword.php | 3 +- krynn/krynn.php | 15 ++- langfilter/langfilter.php | 31 +++-- libertree/libertree.php | 31 +++-- ljpost/ljpost.php | 29 +++-- mailstream/mailstream.php | 27 ++-- markdown/markdown.php | 11 +- mathjax/mathjax.php | 11 +- nsfw/nsfw.php | 19 ++- numfriends/numfriends.php | 9 +- opmlexport/opmlexport.php | 9 +- planets/planets.php | 15 ++- public_server/public_server.php | 3 +- pumpio/pumpio.php | 95 +++++++-------- qcomment/qcomment.php | 9 +- randplace/randplace.php | 15 ++- saml/saml.php | 1 - securemail/SecureTestEmail.php | 7 +- securemail/securemail.php | 15 ++- showmore/showmore.php | 17 ++- showmore_dyn/showmore_dyn.php | 13 +- startpage/startpage.php | 13 +- statusnet/statusnet.php | 115 +++++++++--------- superblock/superblock.php | 21 ++-- tumblr/tumblr.php | 37 +++--- twitter/twitter.php | 81 ++++++------ viewsrc/viewsrc.php | 3 +- windowsphonepush/windowsphonepush.php | 51 ++++---- wppost/wppost.php | 45 ++++--- 46 files changed, 534 insertions(+), 580 deletions(-) diff --git a/advancedcontentfilter/advancedcontentfilter.php b/advancedcontentfilter/advancedcontentfilter.php index c33d1248..8f5585c6 100644 --- a/advancedcontentfilter/advancedcontentfilter.php +++ b/advancedcontentfilter/advancedcontentfilter.php @@ -39,7 +39,6 @@ use Friendica\Content\Text\Markdown; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\Database\DBStructure; use Friendica\DI; @@ -124,21 +123,21 @@ function advancedcontentfilter_prepare_body_content_filter(App $a, &$hook_data) $expressionLanguage = new ExpressionLanguage\ExpressionLanguage(); } - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } $vars = advancedcontentfilter_get_filter_fields($hook_data['item']); - $rules = DI::cache()->get('rules_' . Session::getLocalUser()); + $rules = DI::cache()->get('rules_' . DI::userSession()->getLocalUserId()); if (!isset($rules)) { $rules = DBA::toArray(DBA::select( 'advancedcontentfilter_rules', ['name', 'expression', 'serialized'], - ['uid' => Session::getLocalUser(), 'active' => true] + ['uid' => DI::userSession()->getLocalUserId(), 'active' => true] )); - DI::cache()->set('rules_' . Session::getLocalUser(), $rules); + DI::cache()->set('rules_' . DI::userSession()->getLocalUserId(), $rules); } if ($rules) { @@ -166,7 +165,7 @@ function advancedcontentfilter_prepare_body_content_filter(App $a, &$hook_data) function advancedcontentfilter_addon_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } @@ -204,12 +203,12 @@ function advancedcontentfilter_init(App $a) function advancedcontentfilter_content(App $a) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return Login::form('/' . implode('/', DI::args()->getArgv())); } if (DI::args()->getArgc() > 1 && DI::args()->getArgv()[1] == 'help') { - $user = User::getById(Session::getLocalUser()); + $user = User::getById(DI::userSession()->getLocalUserId()); $lang = $user['language']; @@ -273,9 +272,9 @@ function advancedcontentfilter_build_fields($data) if (!empty($data['expression'])) { // Using a dummy item to validate the field existence - $condition = ["(`uid` = ? OR `uid` = 0)", Session::getLocalUser()]; + $condition = ["(`uid` = ? OR `uid` = 0)", DI::userSession()->getLocalUserId()]; $params = ['order' => ['uid' => true]]; - $item_row = Post::selectFirstForUser(Session::getLocalUser(), [], $condition, $params); + $item_row = Post::selectFirstForUser(DI::userSession()->getLocalUserId(), [], $condition, $params); if (!DBA::isResult($item_row)) { throw new HTTPException\NotFoundException(DI::l10n()->t('This addon requires this node having at least one post')); @@ -308,29 +307,29 @@ function advancedcontentfilter_build_fields($data) function advancedcontentfilter_get_rules() { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method')); } - $rules = DBA::toArray(DBA::select('advancedcontentfilter_rules', [], ['uid' => Session::getLocalUser()])); + $rules = DBA::toArray(DBA::select('advancedcontentfilter_rules', [], ['uid' => DI::userSession()->getLocalUserId()])); return json_encode($rules); } function advancedcontentfilter_get_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method')); } - $rule = DBA::selectFirst('advancedcontentfilter_rules', [], ['id' => $args['id'], 'uid' => Session::getLocalUser()]); + $rule = DBA::selectFirst('advancedcontentfilter_rules', [], ['id' => $args['id'], 'uid' => DI::userSession()->getLocalUserId()]); return json_encode($rule); } function advancedcontentfilter_post_rules(ServerRequestInterface $request) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method')); } @@ -350,7 +349,7 @@ function advancedcontentfilter_post_rules(ServerRequestInterface $request) throw new HTTPException\BadRequestException(DI::l10n()->t('The rule name and expression are required.')); } - $fields['uid'] = Session::getLocalUser(); + $fields['uid'] = DI::userSession()->getLocalUserId(); $fields['created'] = DateTimeFormat::utcNow(); if (!DBA::insert('advancedcontentfilter_rules', $fields)) { @@ -359,14 +358,14 @@ function advancedcontentfilter_post_rules(ServerRequestInterface $request) $rule = DBA::selectFirst('advancedcontentfilter_rules', [], ['id' => DBA::lastInsertId()]); - DI::cache()->delete('rules_' . Session::getLocalUser()); + DI::cache()->delete('rules_' . DI::userSession()->getLocalUserId()); return json_encode(['message' => DI::l10n()->t('Rule successfully added'), 'rule' => $rule]); } function advancedcontentfilter_put_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method')); } @@ -374,7 +373,7 @@ function advancedcontentfilter_put_rules_id(ServerRequestInterface $request, Res throw new HTTPException\BadRequestException(DI::l10n()->t('Invalid form security token, please refresh the page.')); } - if (!DBA::exists('advancedcontentfilter_rules', ['id' => $args['id'], 'uid' => Session::getLocalUser()])) { + if (!DBA::exists('advancedcontentfilter_rules', ['id' => $args['id'], 'uid' => DI::userSession()->getLocalUserId()])) { throw new HTTPException\NotFoundException(DI::l10n()->t('Rule doesn\'t exist or doesn\'t belong to you.')); } @@ -390,14 +389,14 @@ function advancedcontentfilter_put_rules_id(ServerRequestInterface $request, Res throw new HTTPException\ServiceUnavailableException(DBA::errorMessage()); } - DI::cache()->delete('rules_' . Session::getLocalUser()); + DI::cache()->delete('rules_' . DI::userSession()->getLocalUserId()); return json_encode(['message' => DI::l10n()->t('Rule successfully updated')]); } function advancedcontentfilter_delete_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method')); } @@ -405,7 +404,7 @@ function advancedcontentfilter_delete_rules_id(ServerRequestInterface $request, throw new HTTPException\BadRequestException(DI::l10n()->t('Invalid form security token, please refresh the page.')); } - if (!DBA::exists('advancedcontentfilter_rules', ['id' => $args['id'], 'uid' => Session::getLocalUser()])) { + if (!DBA::exists('advancedcontentfilter_rules', ['id' => $args['id'], 'uid' => DI::userSession()->getLocalUserId()])) { throw new HTTPException\NotFoundException(DI::l10n()->t('Rule doesn\'t exist or doesn\'t belong to you.')); } @@ -413,14 +412,14 @@ function advancedcontentfilter_delete_rules_id(ServerRequestInterface $request, throw new HTTPException\ServiceUnavailableException(DBA::errorMessage()); } - DI::cache()->delete('rules_' . Session::getLocalUser()); + DI::cache()->delete('rules_' . DI::userSession()->getLocalUserId()); return json_encode(['message' => DI::l10n()->t('Rule successfully deleted')]); } function advancedcontentfilter_get_variables_guid(ServerRequestInterface $request, ResponseInterface $response, $args) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method')); } @@ -428,9 +427,9 @@ function advancedcontentfilter_get_variables_guid(ServerRequestInterface $reques throw new HTTPException\BadRequestException(DI::l10n()->t('Missing argument: guid.')); } - $condition = ["`guid` = ? AND (`uid` = ? OR `uid` = 0)", $args['guid'], Session::getLocalUser()]; + $condition = ["`guid` = ? AND (`uid` = ? OR `uid` = 0)", $args['guid'], DI::userSession()->getLocalUserId()]; $params = ['order' => ['uid' => true]]; - $item_row = Post::selectFirstForUser(Session::getLocalUser(), [], $condition, $params); + $item_row = Post::selectFirstForUser(DI::userSession()->getLocalUserId(), [], $condition, $params); if (!DBA::isResult($item_row)) { throw new HTTPException\NotFoundException(DI::l10n()->t('Unknown post with guid: %s', $args['guid'])); diff --git a/birdavatar/birdavatar.php b/birdavatar/birdavatar.php index 12d150a4..44247dae 100644 --- a/birdavatar/birdavatar.php +++ b/birdavatar/birdavatar.php @@ -10,7 +10,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; @@ -37,14 +36,14 @@ function birdavatar_install() */ function birdavatar_addon_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/birdavatar/'); $html = Renderer::replaceMacros($t, [ '$uncache' => time(), - '$uid' => Session::getLocalUser(), + '$uid' => DI::userSession()->getLocalUserId(), '$setrandomize' => DI::l10n()->t('Set default profile avatar or randomize the bird.'), ]); @@ -55,7 +54,7 @@ function birdavatar_addon_settings(App $a, array &$data) 'submit' => [ 'birdavatar-usebird' => DI::l10n()->t('Use Bird as Avatar'), 'birdavatar-morebird' => DI::l10n()->t('More Random Bird!'), - 'birdavatar-emailbird' => DI::pConfig()->get(Session::getLocalUser(), 'birdavatar', 'seed', false) ? DI::l10n()->t('Reset to email Bird') : null, + 'birdavatar-emailbird' => DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'birdavatar', 'seed', false) ? DI::l10n()->t('Reset to email Bird') : null, ], ]; } @@ -65,50 +64,50 @@ function birdavatar_addon_settings(App $a, array &$data) */ function birdavatar_addon_settings_post(App $a, &$s) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } if (!empty($_POST['birdavatar-usebird'])) { - $url = DI::baseUrl()->get() . '/birdavatar/' . Session::getLocalUser() . '?ts=' . time(); + $url = DI::baseUrl()->get() . '/birdavatar/' . DI::userSession()->getLocalUserId() . '?ts=' . time(); - $self = DBA::selectFirst('contact', ['id'], ['uid' => Session::getLocalUser(), 'self' => true]); + $self = DBA::selectFirst('contact', ['id'], ['uid' => DI::userSession()->getLocalUserId(), 'self' => true]); if (!DBA::isResult($self)) { DI::sysmsg()->addNotice(DI::l10n()->t("The bird has not found itself.")); return; } - Photo::importProfilePhoto($url, Session::getLocalUser(), $self['id']); + Photo::importProfilePhoto($url, DI::userSession()->getLocalUserId(), $self['id']); - $condition = ['uid' => Session::getLocalUser(), 'contact-id' => $self['id']]; + $condition = ['uid' => DI::userSession()->getLocalUserId(), 'contact-id' => $self['id']]; $photo = DBA::selectFirst('photo', ['resource-id'], $condition); if (!DBA::isResult($photo)) { DI::sysmsg()->addNotice(DI::l10n()->t('There was an error, the bird flew away.')); return; } - DBA::update('photo', ['profile' => false], ['profile' => true, 'uid' => Session::getLocalUser()]); + DBA::update('photo', ['profile' => false], ['profile' => true, 'uid' => DI::userSession()->getLocalUserId()]); $fields = ['profile' => true, 'album' => DI::l10n()->t('Profile Photos'), 'contact-id' => 0]; - DBA::update('photo', $fields, ['uid' => Session::getLocalUser(), 'resource-id' => $photo['resource-id']]); + DBA::update('photo', $fields, ['uid' => DI::userSession()->getLocalUserId(), 'resource-id' => $photo['resource-id']]); - Photo::importProfilePhoto($url, Session::getLocalUser(), $self['id']); + Photo::importProfilePhoto($url, DI::userSession()->getLocalUserId(), $self['id']); - Contact::updateSelfFromUserID(Session::getLocalUser(), true); + Contact::updateSelfFromUserID(DI::userSession()->getLocalUserId(), true); // Update global directory in background - Profile::publishUpdate(Session::getLocalUser()); + Profile::publishUpdate(DI::userSession()->getLocalUserId()); DI::sysmsg()->addInfo(DI::l10n()->t('Meow!')); return; } if (!empty($_POST['birdavatar-morebird'])) { - DI::pConfig()->set(Session::getLocalUser(), 'birdavatar', 'seed', time()); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'birdavatar', 'seed', time()); } if (!empty($_POST['birdavatar-emailbird'])) { - DI::pConfig()->delete(Session::getLocalUser(), 'birdavatar', 'seed'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'birdavatar', 'seed'); } } diff --git a/blackout/blackout.php b/blackout/blackout.php index f291413f..c211c914 100644 --- a/blackout/blackout.php +++ b/blackout/blackout.php @@ -48,7 +48,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Core\System; use Friendica\DI; @@ -59,7 +58,7 @@ function blackout_install() { function blackout_redirect (App $a, $b) { // if we have a logged in user, don't throw her out - if (Session::getLocalUser()) { + if (DI::userSession()->getLocalUserId()) { return true; } diff --git a/blockem/blockem.php b/blockem/blockem.php index 618f21a5..dfd802dd 100644 --- a/blockem/blockem.php +++ b/blockem/blockem.php @@ -10,7 +10,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; use Friendica\Util\Strings; @@ -29,11 +28,11 @@ function blockem_install() function blockem_addon_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $words = DI::pConfig()->get(Session::getLocalUser(), 'blockem', 'words', ''); + $words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'blockem', 'words', ''); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/blockem/'); $html = Renderer::replaceMacros($t, [ @@ -50,12 +49,12 @@ function blockem_addon_settings(App $a, array &$data) function blockem_addon_settings_post(App $a, array &$b) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } if (!empty($_POST['blockem-submit'])) { - DI::pConfig()->set(Session::getLocalUser(), 'blockem', 'words', trim($_POST['blockem-words'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'blockem', 'words', trim($_POST['blockem-words'])); } } @@ -92,14 +91,14 @@ function blockem_enotify_store(App $a, array &$b) function blockem_prepare_body_content_filter(App $a, array &$hook_data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } $profiles_string = null; - if (Session::getLocalUser()) { - $profiles_string = DI::pConfig()->get(Session::getLocalUser(), 'blockem', 'words'); + if (DI::userSession()->getLocalUserId()) { + $profiles_string = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'blockem', 'words'); } if ($profiles_string) { @@ -133,11 +132,11 @@ function blockem_conversation_start(App $a, array &$b) { global $blockem_words; - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $words = DI::pConfig()->get(Session::getLocalUser(), 'blockem', 'words'); + $words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'blockem', 'words'); if ($words) { $blockem_words = explode(',', $words); @@ -165,7 +164,7 @@ function blockem_item_photo_menu(App $a, array &$b) { global $blockem_words; - if (!Session::getLocalUser() || $b['item']['self']) { + if (!DI::userSession()->getLocalUserId() || $b['item']['self']) { return; } @@ -196,11 +195,11 @@ function blockem_module() {} function blockem_init(App $a) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $words = DI::pConfig()->get(Session::getLocalUser(), 'blockem', 'words'); + $words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'blockem', 'words'); if (array_key_exists('block', $_GET) && $_GET['block']) { if (strlen($words)) { @@ -225,6 +224,6 @@ function blockem_init(App $a) $words = implode(',', $newarr); } - DI::pConfig()->set(Session::getLocalUser(), 'blockem', 'words', $words); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'blockem', 'words', $words); exit(); } diff --git a/catavatar/catavatar.php b/catavatar/catavatar.php index 5b0b8bd6..bdca4b42 100644 --- a/catavatar/catavatar.php +++ b/catavatar/catavatar.php @@ -10,7 +10,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\DI; @@ -38,14 +37,14 @@ function catavatar_install() */ function catavatar_addon_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/catavatar/'); $html = Renderer::replaceMacros($t, [ '$uncache' => time(), - '$uid' => Session::getLocalUser(), + '$uid' => DI::userSession()->getLocalUserId(), '$setrandomize' => DI::l10n()->t('Set default profile avatar or randomize the cat.'), ]); @@ -56,7 +55,7 @@ function catavatar_addon_settings(App $a, array &$data) 'submit' => [ 'catavatar-usecat' => DI::l10n()->t('Use Cat as Avatar'), 'catavatar-morecat' => DI::l10n()->t('Another random Cat!'), - 'catavatar-emailcat' => DI::pConfig()->get(Session::getLocalUser(), 'catavatar', 'seed', false) ? DI::l10n()->t('Reset to email Cat') : null, + 'catavatar-emailcat' => DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'catavatar', 'seed', false) ? DI::l10n()->t('Reset to email Cat') : null, ], ]; } @@ -66,50 +65,50 @@ function catavatar_addon_settings(App $a, array &$data) */ function catavatar_addon_settings_post(App $a, &$s) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } if (!empty($_POST['catavatar-usecat'])) { - $url = DI::baseUrl()->get() . '/catavatar/' . Session::getLocalUser() . '?ts=' . time(); + $url = DI::baseUrl()->get() . '/catavatar/' . DI::userSession()->getLocalUserId() . '?ts=' . time(); - $self = DBA::selectFirst('contact', ['id'], ['uid' => Session::getLocalUser(), 'self' => true]); + $self = DBA::selectFirst('contact', ['id'], ['uid' => DI::userSession()->getLocalUserId(), 'self' => true]); if (!DBA::isResult($self)) { DI::sysmsg()->addNotice(DI::l10n()->t("The cat hadn't found itself.")); return; } - Photo::importProfilePhoto($url, Session::getLocalUser(), $self['id']); + Photo::importProfilePhoto($url, DI::userSession()->getLocalUserId(), $self['id']); - $condition = ['uid' => Session::getLocalUser(), 'contact-id' => $self['id']]; + $condition = ['uid' => DI::userSession()->getLocalUserId(), 'contact-id' => $self['id']]; $photo = DBA::selectFirst('photo', ['resource-id'], $condition); if (!DBA::isResult($photo)) { DI::sysmsg()->addNotice(DI::l10n()->t('There was an error, the cat ran away.')); return; } - DBA::update('photo', ['profile' => false], ['profile' => true, 'uid' => Session::getLocalUser()]); + DBA::update('photo', ['profile' => false], ['profile' => true, 'uid' => DI::userSession()->getLocalUserId()]); $fields = ['profile' => true, 'album' => DI::l10n()->t('Profile Photos'), 'contact-id' => 0]; - DBA::update('photo', $fields, ['uid' => Session::getLocalUser(), 'resource-id' => $photo['resource-id']]); + DBA::update('photo', $fields, ['uid' => DI::userSession()->getLocalUserId(), 'resource-id' => $photo['resource-id']]); - Photo::importProfilePhoto($url, Session::getLocalUser(), $self['id']); + Photo::importProfilePhoto($url, DI::userSession()->getLocalUserId(), $self['id']); - Contact::updateSelfFromUserID(Session::getLocalUser(), true); + Contact::updateSelfFromUserID(DI::userSession()->getLocalUserId(), true); // Update global directory in background - Profile::publishUpdate(Session::getLocalUser()); + Profile::publishUpdate(DI::userSession()->getLocalUserId()); DI::sysmsg()->addInfo(DI::l10n()->t('Meow!')); return; } if (!empty($_POST['catavatar-morecat'])) { - DI::pConfig()->set(Session::getLocalUser(), 'catavatar', 'seed', time()); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'catavatar', 'seed', time()); } if (!empty($_POST['catavatar-emailcat'])) { - DI::pConfig()->delete(Session::getLocalUser(), 'catavatar', 'seed'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'catavatar', 'seed'); } } diff --git a/curweather/curweather.php b/curweather/curweather.php index 88e3b18c..79aa752e 100644 --- a/curweather/curweather.php +++ b/curweather/curweather.php @@ -13,7 +13,6 @@ use Friendica\App; use Friendica\Core\Cache\Enum\Duration; use Friendica\Core\Hook; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; use Friendica\Util\Proxy as ProxyUtils; @@ -32,7 +31,7 @@ function getWeather($loc, $units = 'metric', $lang = 'en', $appid = '', $cacheti $now = new DateTime(); if (!is_null($cached)) { - $cdate = DI::pConfig()->get(Session::getLocalUser(), 'curweather', 'last'); + $cdate = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'curweather', 'last'); $cached = unserialize($cached); if ($cdate + $cachetime > $now->getTimestamp()) { @@ -81,7 +80,7 @@ function getWeather($loc, $units = 'metric', $lang = 'en', $appid = '', $cacheti 'icon' => (string) $res->weather['icon'], ]; - DI::pConfig()->set(Session::getLocalUser(), 'curweather', 'last', $now->getTimestamp()); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'curweather', 'last', $now->getTimestamp()); DI::cache()->set('curweather'.md5($url), serialize($r), Duration::HOUR); return $r; @@ -89,7 +88,7 @@ function getWeather($loc, $units = 'metric', $lang = 'en', $appid = '', $cacheti function curweather_network_mod_init(App $a, string &$body) { - if (!intval(DI::pConfig()->get(Session::getLocalUser(), 'curweather', 'curweather_enable'))) { + if (!intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'curweather', 'curweather_enable'))) { return; } @@ -104,11 +103,11 @@ function curweather_network_mod_init(App $a, string &$body) // those parameters will be used to get: cloud status, temperature, preassure // and relative humidity for display, also the relevent area of the map is // linked from lat/log of the reply of OWMp - $rpt = DI::pConfig()->get(Session::getLocalUser(), 'curweather', 'curweather_loc'); + $rpt = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'curweather', 'curweather_loc'); // Set the language to the browsers language or default and use metric units $lang = DI::session()->get('language', DI::config()->get('system', 'language')); - $units = DI::pConfig()->get(Session::getLocalUser(), 'curweather', 'curweather_units'); + $units = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'curweather', 'curweather_units'); $appid = DI::config()->get('curweather', 'appid'); $cachetime = intval(DI::config()->get('curweather', 'cachetime')); @@ -155,23 +154,23 @@ function curweather_network_mod_init(App $a, string &$body) function curweather_addon_settings_post(App $a, $post) { - if (!Session::getLocalUser() || empty($_POST['curweather-settings-submit'])) { + if (!DI::userSession()->getLocalUserId() || empty($_POST['curweather-settings-submit'])) { return; } - DI::pConfig()->set(Session::getLocalUser(), 'curweather', 'curweather_loc' , trim($_POST['curweather_loc'])); - DI::pConfig()->set(Session::getLocalUser(), 'curweather', 'curweather_enable', intval($_POST['curweather_enable'])); - DI::pConfig()->set(Session::getLocalUser(), 'curweather', 'curweather_units' , trim($_POST['curweather_units'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'curweather', 'curweather_loc' , trim($_POST['curweather_loc'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'curweather', 'curweather_enable', intval($_POST['curweather_enable'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'curweather', 'curweather_units' , trim($_POST['curweather_units'])); } function curweather_addon_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $curweather_loc = DI::pConfig()->get(Session::getLocalUser(), 'curweather', 'curweather_loc'); - $curweather_units = DI::pConfig()->get(Session::getLocalUser(), 'curweather', 'curweather_units'); + $curweather_loc = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'curweather', 'curweather_loc'); + $curweather_units = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'curweather', 'curweather_units'); $appid = DI::config()->get('curweather', 'appid'); if ($appid == '') { @@ -180,7 +179,7 @@ function curweather_addon_settings(App $a, array &$data) $noappidtext = ''; } - $enabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'curweather', 'curweather_enable')); + $enabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'curweather', 'curweather_enable')); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/curweather/'); $html = Renderer::replaceMacros($t, [ diff --git a/diaspora/diaspora.php b/diaspora/diaspora.php index d548fef3..8b304181 100644 --- a/diaspora/diaspora.php +++ b/diaspora/diaspora.php @@ -14,7 +14,6 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\Core\Worker; use Friendica\DI; @@ -32,17 +31,17 @@ function diaspora_install() function diaspora_jot_nets(App $a, array &$jotnets_fields) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - if (DI::pConfig()->get(Session::getLocalUser(), 'diaspora', 'post')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'diaspora', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'diaspora_enable', DI::l10n()->t('Post to Diaspora'), - DI::pConfig()->get(Session::getLocalUser(), 'diaspora', 'post_by_default') + DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'diaspora', 'post_by_default') ] ]; } @@ -50,16 +49,16 @@ function diaspora_jot_nets(App $a, array &$jotnets_fields) function diaspora_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(), 'diaspora', 'post', false); - $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'diaspora', 'post_by_default'); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'diaspora', 'post', false); + $def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'diaspora', 'post_by_default'); - $handle = DI::pConfig()->get(Session::getLocalUser(), 'diaspora', 'handle'); - $password = DI::pConfig()->get(Session::getLocalUser(), 'diaspora', 'password'); - $aspect = DI::pConfig()->get(Session::getLocalUser(), 'diaspora', 'aspect'); + $handle = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'diaspora', 'handle'); + $password = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'diaspora', 'password'); + $aspect = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'diaspora', 'aspect'); $info = ''; $error = ''; @@ -121,18 +120,18 @@ function diaspora_settings(App $a, array &$data) function diaspora_settings_post(App $a, array &$b) { if (!empty($_POST['diaspora-submit'])) { - DI::pConfig()->set(Session::getLocalUser(),'diaspora', 'post' , intval($_POST['enabled'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(),'diaspora', 'post' , intval($_POST['enabled'])); if (intval($_POST['enabled'])) { if (isset($_POST['handle'])) { - DI::pConfig()->set(Session::getLocalUser(),'diaspora', 'handle' , trim($_POST['handle'])); - DI::pConfig()->set(Session::getLocalUser(),'diaspora', 'password' , trim($_POST['password'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(),'diaspora', 'handle' , trim($_POST['handle'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(),'diaspora', 'password' , trim($_POST['password'])); } if (!empty($_POST['aspect'])) { - DI::pConfig()->set(Session::getLocalUser(),'diaspora', 'aspect' , trim($_POST['aspect'])); - DI::pConfig()->set(Session::getLocalUser(),'diaspora', 'post_by_default', intval($_POST['post_by_default'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(),'diaspora', 'aspect' , trim($_POST['aspect'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(),'diaspora', 'post_by_default', intval($_POST['post_by_default'])); } } else { - DI::pConfig()->delete(Session::getLocalUser(), 'diaspora', 'password'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'diaspora', 'password'); } } } @@ -158,7 +157,7 @@ function diaspora_post_local(App $a, array &$b) return; } - if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { + if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { return; } @@ -166,11 +165,11 @@ function diaspora_post_local(App $a, array &$b) return; } - $diaspora_post = intval(DI::pConfig()->get(Session::getLocalUser(),'diaspora','post')); + $diaspora_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(),'diaspora','post')); $diaspora_enable = (($diaspora_post && !empty($_REQUEST['diaspora_enable'])) ? intval($_REQUEST['diaspora_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(),'diaspora','post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(),'diaspora','post_by_default'))) { $diaspora_enable = 1; } diff --git a/discourse/discourse.php b/discourse/discourse.php index 2069ce7d..13f73690 100644 --- a/discourse/discourse.php +++ b/discourse/discourse.php @@ -14,7 +14,6 @@ use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; @@ -39,11 +38,11 @@ function discourse_install() function discourse_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'discourse', 'enabled')); + $enabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'discourse', 'enabled')); $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/discourse/'); $html = Renderer::replaceMacros($t, [ @@ -61,11 +60,11 @@ function discourse_settings(App $a, array &$data) function discourse_settings_post(App $a) { - if (!Session::getLocalUser() || empty($_POST['discourse-submit'])) { + if (!DI::userSession()->getLocalUserId() || empty($_POST['discourse-submit'])) { return; } - DI::pConfig()->set(Session::getLocalUser(), 'discourse', 'enabled', intval($_POST['enabled'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'discourse', 'enabled', intval($_POST['enabled'])); } function discourse_email_getmessage(App $a, &$message) diff --git a/dwpost/dwpost.php b/dwpost/dwpost.php index ed7ac492..a8e82854 100644 --- a/dwpost/dwpost.php +++ b/dwpost/dwpost.php @@ -13,7 +13,6 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; use Friendica\Model\Post; use Friendica\Model\Tag; @@ -32,17 +31,17 @@ function dwpost_install() function dwpost_jot_nets(App $a, array &$jotnets_fields) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - if (DI::pConfig()->get(Session::getLocalUser(), 'dwpost', 'post')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'dwpost', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'dwpost_enable', DI::l10n()->t('Post to Dreamwidth'), - DI::pConfig()->get(Session::getLocalUser(), 'dwpost', 'post_by_default') + DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'dwpost', 'post_by_default') ] ]; } @@ -51,13 +50,13 @@ function dwpost_jot_nets(App $a, array &$jotnets_fields) function dwpost_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(), 'dwpost', 'post', false); - $dw_username = DI::pConfig()->get(Session::getLocalUser(), 'dwpost', 'dw_username'); - $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'dwpost', 'post_by_default'); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'dwpost', 'post', false); + $dw_username = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'dwpost', 'dw_username'); + $def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'dwpost', 'post_by_default'); $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/dwpost/'); $html = Renderer::replaceMacros($t, [ @@ -80,10 +79,10 @@ function dwpost_settings(App $a, array &$data) function dwpost_settings_post(App $a, array &$b) { if (!empty($_POST['dwpost-submit'])) { - DI::pConfig()->set(Session::getLocalUser(), 'dwpost', 'post', intval($_POST['dwpost'])); - DI::pConfig()->set(Session::getLocalUser(), 'dwpost', 'post_by_default', intval($_POST['dw_bydefault'])); - DI::pConfig()->set(Session::getLocalUser(), 'dwpost', 'dw_username', trim($_POST['dw_username'])); - DI::pConfig()->set(Session::getLocalUser(), 'dwpost', 'dw_password', trim($_POST['dw_password'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'dwpost', 'post', intval($_POST['dwpost'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'dwpost', 'post_by_default', intval($_POST['dw_bydefault'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'dwpost', 'dw_username', trim($_POST['dw_username'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'dwpost', 'dw_password', trim($_POST['dw_password'])); } } @@ -94,7 +93,7 @@ function dwpost_post_local(App $a, array &$b) return; } - if ((!Session::getLocalUser()) || (Session::getLocalUser() != $b['uid'])) { + if ((!DI::userSession()->getLocalUserId()) || (DI::userSession()->getLocalUserId() != $b['uid'])) { return; } @@ -102,11 +101,11 @@ function dwpost_post_local(App $a, array &$b) return; } - $dw_post = intval(DI::pConfig()->get(Session::getLocalUser(),'dwpost','post')); + $dw_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(),'dwpost','post')); $dw_enable = (($dw_post && !empty($_REQUEST['dwpost_enable'])) ? intval($_REQUEST['dwpost_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(),'dwpost','post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(),'dwpost','post_by_default'))) { $dw_enable = 1; } diff --git a/forumdirectory/forumdirectory.php b/forumdirectory/forumdirectory.php index da6e059c..c3b2cff5 100644 --- a/forumdirectory/forumdirectory.php +++ b/forumdirectory/forumdirectory.php @@ -12,7 +12,6 @@ use Friendica\Content\Pager; use Friendica\Content\Widget; use Friendica\Core\Hook; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Profile; @@ -44,7 +43,7 @@ function forumdirectory_app_menu(App $a, array &$b) function forumdirectory_init(App $a) { - if (Session::getLocalUser()) { + if (DI::userSession()->getLocalUserId()) { DI::page()['aside'] .= Widget::findPeople(); } } @@ -62,7 +61,7 @@ function forumdirectory_content(App $a) { global $forumdirectory_search; - if (DI::config()->get('system', 'block_public') && !Session::getLocalUser() && !Session::getRemoteUser()) { + if (DI::config()->get('system', 'block_public') && !DI::userSession()->getLocalUserId() && !DI::userSession()->getRemoteUserId()) { DI::sysmsg()->addNotice(DI::l10n()->t('Public access denied.')); return; } diff --git a/fromapp/fromapp.php b/fromapp/fromapp.php index b5ad9c39..94aac63b 100644 --- a/fromapp/fromapp.php +++ b/fromapp/fromapp.php @@ -11,7 +11,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; function fromapp_install() @@ -24,22 +23,22 @@ function fromapp_install() function fromapp_settings_post(App $a, $post) { - if (!Session::getLocalUser() || empty($_POST['fromapp-submit'])) { + if (!DI::userSession()->getLocalUserId() || empty($_POST['fromapp-submit'])) { return; } - DI::pConfig()->set(Session::getLocalUser(), 'fromapp', 'app', $_POST['fromapp-input']); - DI::pConfig()->set(Session::getLocalUser(), 'fromapp', 'force', intval($_POST['fromapp-force'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'fromapp', 'app', $_POST['fromapp-input']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'fromapp', 'force', intval($_POST['fromapp-force'])); } function fromapp_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $fromapp = DI::pConfig()->get(Session::getLocalUser(), 'fromapp', 'app', ''); - $force = intval(DI::pConfig()->get(Session::getLocalUser(), 'fromapp', 'force')); + $fromapp = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'fromapp', 'app', ''); + $force = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'fromapp', 'force')); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/fromapp/'); $html = Renderer::replaceMacros($t, [ @@ -56,16 +55,16 @@ function fromapp_settings(App &$a, array &$data) function fromapp_post_hook(App $a, &$item) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - if (Session::getLocalUser() != $item['uid']) { + if (DI::userSession()->getLocalUserId() != $item['uid']) { return; } - $app = DI::pConfig()->get(Session::getLocalUser(), 'fromapp', 'app'); - $force = intval(DI::pConfig()->get(Session::getLocalUser(), 'fromapp', 'force')); + $app = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'fromapp', 'app'); + $force = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'fromapp', 'force')); if (is_null($app) || (! strlen($app))) { return; diff --git a/geonames/geonames.php b/geonames/geonames.php index 819d9eca..2ae845e5 100644 --- a/geonames/geonames.php +++ b/geonames/geonames.php @@ -12,7 +12,6 @@ use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\DI; use Friendica\Core\Config\Util\ConfigFileLoader; -use Friendica\Core\Session; use Friendica\Util\XML; function geonames_install() @@ -49,11 +48,11 @@ function geonames_post_hook(App $a, array &$item) Logger::notice('geonames invoked'); - if (!Session::getLocalUser()) { /* non-zero if this is a logged in user of this system */ + if (!DI::userSession()->getLocalUserId()) { /* non-zero if this is a logged in user of this system */ return; } - if (Session::getLocalUser() != $item['uid']) { /* Does this person own the post? */ + if (DI::userSession()->getLocalUserId() != $item['uid']) { /* Does this person own the post? */ return; } @@ -64,7 +63,7 @@ function geonames_post_hook(App $a, array &$item) /* Retrieve our personal config setting */ $geo_account = DI::config()->get('geonames', 'username'); - $active = DI::pConfig()->get(Session::getLocalUser(), 'geonames', 'enable'); + $active = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'geonames', 'enable'); if (!$geo_account || !$active) { return; @@ -103,11 +102,11 @@ function geonames_post_hook(App $a, array &$item) */ function geonames_addon_settings_post(App $a, array $post) { - if (!Session::getLocalUser() || empty($_POST['geonames-submit'])) { + if (!DI::userSession()->getLocalUserId() || empty($_POST['geonames-submit'])) { return; } - DI::pConfig()->set(Session::getLocalUser(), 'geonames', 'enable', intval($_POST['geonames-enable'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'geonames', 'enable', intval($_POST['geonames-enable'])); } /** @@ -120,7 +119,7 @@ function geonames_addon_settings_post(App $a, array $post) */ function geonames_addon_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } @@ -129,7 +128,7 @@ function geonames_addon_settings(App $a, array &$data) return; } - $enabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'geonames', 'enable')); + $enabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'geonames', 'enable')); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/geonames/'); $html = Renderer::replaceMacros($t, [ diff --git a/gnot/gnot.php b/gnot/gnot.php index fa311ded..e3594b14 100644 --- a/gnot/gnot.php +++ b/gnot/gnot.php @@ -12,7 +12,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; use Friendica\Model\Notification; @@ -32,10 +31,10 @@ function gnot_install() * and if so set our configuration setting for this person. */ function gnot_settings_post(App $a, $post) { - if(! Session::getLocalUser() || empty($_POST['gnot-submit'])) + if(! DI::userSession()->getLocalUserId() || empty($_POST['gnot-submit'])) return; - DI::pConfig()->set(Session::getLocalUser(),'gnot','enable',intval($_POST['gnot'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(),'gnot','enable',intval($_POST['gnot'])); } /** @@ -44,11 +43,11 @@ function gnot_settings_post(App $a, $post) { */ function gnot_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $gnot = intval(DI::pConfig()->get(Session::getLocalUser(), 'gnot', 'enable')); + $gnot = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'gnot', 'enable')); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/gnot/'); $html = Renderer::replaceMacros($t, [ diff --git a/group_text/group_text.php b/group_text/group_text.php index 6c60b8e3..b89cd275 100644 --- a/group_text/group_text.php +++ b/group_text/group_text.php @@ -10,7 +10,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; function group_text_install() @@ -30,11 +29,11 @@ function group_text_install() function group_text_settings_post(App $a, array $post) { - if (!Session::getLocalUser() || empty($post['group_text-submit'])) { + if (!DI::userSession()->getLocalUserId() || empty($post['group_text-submit'])) { return; } - DI::pConfig()->set(Session::getLocalUser(), 'system', 'groupedit_image_limit', intval($post['group_text'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'system', 'groupedit_image_limit', intval($post['group_text'])); } @@ -47,11 +46,11 @@ function group_text_settings_post(App $a, array $post) function group_text_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(), 'system', 'groupedit_image_limit'); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'groupedit_image_limit'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/group_text/'); $html = Renderer::replaceMacros($t, [ diff --git a/ifttt/ifttt.php b/ifttt/ifttt.php index a5db28bd..582b6b26 100644 --- a/ifttt/ifttt.php +++ b/ifttt/ifttt.php @@ -12,7 +12,6 @@ use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\DI; @@ -37,14 +36,14 @@ function ifttt_content() {} function ifttt_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $key = DI::pConfig()->get(Session::getLocalUser(), 'ifttt', 'key'); + $key = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ifttt', 'key'); if (!$key) { $key = Strings::getRandomHex(20); - DI::pConfig()->set(Session::getLocalUser(), 'ifttt', 'key', $key); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'ifttt', 'key', $key); } $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/ifttt/'); @@ -76,7 +75,7 @@ function ifttt_settings(App $a, array &$data) function ifttt_settings_post() { if (!empty($_POST['ifttt-submit'])) { - DI::pConfig()->delete(Session::getLocalUser(), 'ifttt', 'key'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'ifttt', 'key'); } } diff --git a/ijpost/ijpost.php b/ijpost/ijpost.php index 1c9a899a..613b4133 100644 --- a/ijpost/ijpost.php +++ b/ijpost/ijpost.php @@ -13,7 +13,6 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; use Friendica\Model\Tag; use Friendica\Model\User; @@ -31,17 +30,17 @@ function ijpost_install() function ijpost_jot_nets(App &$a, array &$jotnets_fields) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - if (DI::pConfig()->get(Session::getLocalUser(), 'ijpost', 'post')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ijpost', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'ijpost_enable', DI::l10n()->t('Post to Insanejournal'), - DI::pConfig()->get(Session::getLocalUser(), 'ijpost', 'post_by_default') + DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ijpost', 'post_by_default') ] ]; } @@ -49,13 +48,13 @@ function ijpost_jot_nets(App &$a, array &$jotnets_fields) function ijpost_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(), 'ijpost', 'post', false); - $ij_username = DI::pConfig()->get(Session::getLocalUser(), 'ijpost', 'ij_username'); - $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'ijpost', 'post_by_default'); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ijpost', 'post', false); + $ij_username = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ijpost', 'ij_username'); + $def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ijpost', 'post_by_default'); $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/ijpost/'); $html = Renderer::replaceMacros($t, [ @@ -77,10 +76,10 @@ function ijpost_settings(App &$a, array &$data) function ijpost_settings_post(App $a, array &$b) { if (!empty($_POST['ijpost-submit'])) { - DI::pConfig()->set(Session::getLocalUser(), 'ijpost', 'post', intval($_POST['ijpost'])); - DI::pConfig()->set(Session::getLocalUser(), 'ijpost', 'post_by_default', intval($_POST['ij_bydefault'])); - DI::pConfig()->set(Session::getLocalUser(), 'ijpost', 'ij_username', trim($_POST['ij_username'])); - DI::pConfig()->set(Session::getLocalUser(), 'ijpost', 'ij_password', trim($_POST['ij_password'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'ijpost', 'post', intval($_POST['ijpost'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'ijpost', 'post_by_default', intval($_POST['ij_bydefault'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'ijpost', 'ij_username', trim($_POST['ij_username'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'ijpost', 'ij_password', trim($_POST['ij_password'])); } } @@ -92,7 +91,7 @@ function ijpost_post_local(App $a, array &$b) return; } - if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { + if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { return; } @@ -100,11 +99,11 @@ function ijpost_post_local(App $a, array &$b) return; } - $ij_post = intval(DI::pConfig()->get(Session::getLocalUser(), 'ijpost', 'post')); + $ij_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ijpost', 'post')); $ij_enable = (($ij_post && !empty($_REQUEST['ijpost_enable'])) ? intval($_REQUEST['ijpost_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(), 'ijpost', 'post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ijpost', 'post_by_default'))) { $ij_enable = 1; } diff --git a/irc/irc.php b/irc/irc.php index 656c85c8..0cec5622 100644 --- a/irc/irc.php +++ b/irc/irc.php @@ -10,7 +10,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; function irc_install() @@ -22,12 +21,12 @@ function irc_install() function irc_addon_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $sitechats = DI::pConfig()->get(Session::getLocalUser(), 'irc', 'sitechats'); /* popular channels */ - $autochans = DI::pConfig()->get(Session::getLocalUser(), 'irc', 'autochans'); /* auto connect chans */ + $sitechats = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'irc', 'sitechats'); /* popular channels */ + $autochans = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'irc', 'autochans'); /* auto connect chans */ $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/irc/'); $html = Renderer::replaceMacros($t, [ @@ -45,16 +44,16 @@ function irc_addon_settings(App &$a, array &$data) function irc_addon_settings_post(App $a, array &$b) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } if (!empty($_POST['irc-submit'])) { if (isset($_POST['autochans'])) { - DI::pConfig()->set(Session::getLocalUser(), 'irc', 'autochans', trim(($_POST['autochans']))); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'irc', 'autochans', trim(($_POST['autochans']))); } if (isset($_POST['sitechats'])) { - DI::pConfig()->set(Session::getLocalUser(), 'irc', 'sitechats', trim($_POST['sitechats'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'irc', 'sitechats', trim($_POST['sitechats'])); } /* upid pop-up thing */ } @@ -78,8 +77,8 @@ function irc_content(App $a) $o = ''; /* set the list of popular channels */ - if (Session::getLocalUser()) { - $sitechats = DI::pConfig()->get( Session::getLocalUser(), 'irc', 'sitechats'); + if (DI::userSession()->getLocalUserId()) { + $sitechats = DI::pConfig()->get( DI::userSession()->getLocalUserId(), 'irc', 'sitechats'); if (!$sitechats) { $sitechats = DI::config()->get('irc', 'sitechats'); } @@ -101,8 +100,8 @@ function irc_content(App $a) DI::page()['aside'] .= '
'; /* setting the channel(s) to auto connect */ - if (Session::getLocalUser()) { - $autochans = DI::pConfig()->get(Session::getLocalUser(), 'irc', 'autochans'); + if (DI::userSession()->getLocalUserId()) { + $autochans = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'irc', 'autochans'); if (!$autochans) $autochans = DI::config()->get('irc','autochans'); } else { diff --git a/keycloakpassword/keycloakpassword.php b/keycloakpassword/keycloakpassword.php index 69720f14..7a417805 100644 --- a/keycloakpassword/keycloakpassword.php +++ b/keycloakpassword/keycloakpassword.php @@ -10,7 +10,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\User; @@ -143,7 +142,7 @@ function keycloakpassword_addon_admin(App $a, string &$o) function keycloakpassword_addon_admin_post(App $a) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } diff --git a/krynn/krynn.php b/krynn/krynn.php index 6c179002..48a65fdd 100644 --- a/krynn/krynn.php +++ b/krynn/krynn.php @@ -14,7 +14,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; function krynn_install() @@ -44,12 +43,12 @@ function krynn_post_hook(App $a, &$item) * - A status post by a profile owner * - The profile owner must have allowed our addon */ - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { /* non-zero if this is a logged in user of this system */ return; } - if (Session::getLocalUser() != $item['uid']) { + if (DI::userSession()->getLocalUserId() != $item['uid']) { /* Does this person own the post? */ return; } @@ -60,7 +59,7 @@ function krynn_post_hook(App $a, &$item) } /* Retrieve our personal config setting */ - $active = DI::pConfig()->get(Session::getLocalUser(), 'krynn', 'enable'); + $active = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'krynn', 'enable'); if (!$active) { return; @@ -91,12 +90,12 @@ function krynn_post_hook(App $a, &$item) */ function krynn_settings_post(App $a, $post) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } if ($_POST['krynn-submit']) { - DI::pConfig()->set(Session::getLocalUser(),'krynn','enable',intval($_POST['krynn'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(),'krynn','enable',intval($_POST['krynn'])); } } @@ -106,11 +105,11 @@ function krynn_settings_post(App $a, $post) */ function krynn_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(),'krynn','enable'); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(),'krynn','enable'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/krynn/'); $html = Renderer::replaceMacros($t, [ diff --git a/langfilter/langfilter.php b/langfilter/langfilter.php index eee7faf0..31efad3b 100644 --- a/langfilter/langfilter.php +++ b/langfilter/langfilter.php @@ -11,7 +11,6 @@ use Friendica\App; use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; /* Define the hooks we want to use @@ -34,16 +33,16 @@ function langfilter_install() function langfilter_addon_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'enable', - !DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'disable')); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'langfilter', 'enable', + !DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'langfilter', 'disable')); - $languages = DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'languages'); - $minconfidence = DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'minconfidence', 0) * 100; - $minlength = DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'minlength', 32); + $languages = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'langfilter', 'languages'); + $minconfidence = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'langfilter', 'minconfidence', 0) * 100; + $minlength = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'langfilter', 'minlength', 32); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/langfilter/'); $html = Renderer::replaceMacros($t, [ @@ -70,7 +69,7 @@ function langfilter_addon_settings(App $a, array &$data) function langfilter_addon_settings_post(App $a, array &$b) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } @@ -83,10 +82,10 @@ function langfilter_addon_settings_post(App $a, array &$b) $minlength = 32; } - DI::pConfig()->set(Session::getLocalUser(), 'langfilter', 'enable' , $enable); - DI::pConfig()->set(Session::getLocalUser(), 'langfilter', 'languages' , $languages); - DI::pConfig()->set(Session::getLocalUser(), 'langfilter', 'minconfidence', $minconfidence); - DI::pConfig()->set(Session::getLocalUser(), 'langfilter', 'minlength' , $minlength); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'langfilter', 'enable' , $enable); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'langfilter', 'languages' , $languages); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'langfilter', 'minconfidence', $minconfidence); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'langfilter', 'minlength' , $minlength); } } @@ -101,7 +100,7 @@ function langfilter_addon_settings_post(App $a, array &$b) function langfilter_prepare_body_content_filter(App $a, &$hook_data) { - $logged_user = Session::getLocalUser(); + $logged_user = DI::userSession()->getLocalUserId(); if (!$logged_user) { return; } @@ -129,7 +128,7 @@ function langfilter_prepare_body_content_filter(App $a, &$hook_data) $naked_body = preg_replace('#\s+#', ' ', trim($naked_body)); // Don't filter if body lenght is below minimum - $minlen = DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'minlength', 32); + $minlen = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'langfilter', 'minlength', 32); if (!$minlen) { $minlen = 32; } @@ -138,8 +137,8 @@ function langfilter_prepare_body_content_filter(App $a, &$hook_data) return; } - $read_languages_string = DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'languages'); - $minconfidence = DI::pConfig()->get(Session::getLocalUser(), 'langfilter', 'minconfidence'); + $read_languages_string = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'langfilter', 'languages'); + $minconfidence = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'langfilter', 'minconfidence'); // Don't filter if no spoken languages are configured if (!$read_languages_string) { diff --git a/libertree/libertree.php b/libertree/libertree.php index 4085fe0a..999c4972 100644 --- a/libertree/libertree.php +++ b/libertree/libertree.php @@ -11,7 +11,6 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Post; @@ -28,17 +27,17 @@ function libertree_install() function libertree_jot_nets(App &$a, array &$jotnets_fields) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - if (DI::pConfig()->get(Session::getLocalUser(), 'libertree', 'post')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'libertree', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'libertree_enable', DI::l10n()->t('Post to libertree'), - DI::pConfig()->get(Session::getLocalUser(), 'libertree', 'post_by_default'), + DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'libertree', 'post_by_default'), ], ]; } @@ -46,14 +45,14 @@ function libertree_jot_nets(App &$a, array &$jotnets_fields) function libertree_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(), 'libertree', 'post', false); - $ltree_api_token = DI::pConfig()->get(Session::getLocalUser(), 'libertree', 'libertree_api_token'); - $ltree_url = DI::pConfig()->get(Session::getLocalUser(), 'libertree', 'libertree_url'); - $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'libertree', 'post_by_default'); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'libertree', 'post', false); + $ltree_api_token = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'libertree', 'libertree_api_token'); + $ltree_url = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'libertree', 'libertree_url'); + $def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'libertree', 'post_by_default'); $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/libertree/'); $html = Renderer::replaceMacros($t, [ @@ -75,10 +74,10 @@ function libertree_settings(App $a, array &$data) function libertree_settings_post(App $a, array &$b) { if (!empty($_POST['libertree-submit'])) { - DI::pConfig()->set(Session::getLocalUser(),'libertree','post',intval($_POST['libertree'])); - DI::pConfig()->set(Session::getLocalUser(),'libertree','post_by_default',intval($_POST['libertree_bydefault'])); - DI::pConfig()->set(Session::getLocalUser(),'libertree','libertree_api_token',trim($_POST['libertree_api_token'])); - DI::pConfig()->set(Session::getLocalUser(),'libertree','libertree_url',trim($_POST['libertree_url'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(),'libertree','post',intval($_POST['libertree'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(),'libertree','post_by_default',intval($_POST['libertree_bydefault'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(),'libertree','libertree_api_token',trim($_POST['libertree_api_token'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(),'libertree','libertree_url',trim($_POST['libertree_url'])); } @@ -108,7 +107,7 @@ function libertree_post_local(App $a, array &$b) return; } - if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { + if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { return; } @@ -116,11 +115,11 @@ function libertree_post_local(App $a, array &$b) return; } - $ltree_post = intval(DI::pConfig()->get(Session::getLocalUser(),'libertree','post')); + $ltree_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(),'libertree','post')); $ltree_enable = (($ltree_post && !empty($_REQUEST['libertree_enable'])) ? intval($_REQUEST['libertree_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(),'libertree','post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(),'libertree','post_by_default'))) { $ltree_enable = 1; } diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index ba2263a9..42b0c020 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -13,7 +13,6 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; use Friendica\Model\Post; use Friendica\Model\Tag; @@ -32,17 +31,17 @@ function ljpost_install() function ljpost_jot_nets(App &$a, array &$jotnets_fields) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - if (DI::pConfig()->get(Session::getLocalUser(),'ljpost','post')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(),'ljpost','post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'ljpost_enable', DI::l10n()->t('Post to LiveJournal'), - DI::pConfig()->get(Session::getLocalUser(), 'ljpost', 'post_by_default'), + DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ljpost', 'post_by_default'), ], ]; } @@ -50,13 +49,13 @@ function ljpost_jot_nets(App &$a, array &$jotnets_fields) function ljpost_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(), 'ljpost', 'post', false); - $ij_username = DI::pConfig()->get(Session::getLocalUser(), 'ljpost', 'ij_username'); - $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'ljpost', 'post_by_default'); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ljpost', 'post', false); + $ij_username = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ljpost', 'ij_username'); + $def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ljpost', 'post_by_default'); $t= Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/ljpost/'); $html = Renderer::replaceMacros($t, [ @@ -78,10 +77,10 @@ function ljpost_settings(App &$a, array &$data) function ljpost_settings_post(App $a, array &$b) { if (!empty($_POST['ljpost-submit'])) { - DI::pConfig()->set(Session::getLocalUser(), 'ljpost', 'post', intval($_POST['ljpost'])); - DI::pConfig()->set(Session::getLocalUser(), 'ljpost', 'post_by_default', intval($_POST['lj_bydefault'])); - DI::pConfig()->set(Session::getLocalUser(), 'ljpost', 'lj_username', trim($_POST['lj_username'])); - DI::pConfig()->set(Session::getLocalUser(), 'ljpost', 'lj_password', trim($_POST['lj_password'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'ljpost', 'post', intval($_POST['ljpost'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'ljpost', 'post_by_default', intval($_POST['lj_bydefault'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'ljpost', 'lj_username', trim($_POST['lj_username'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'ljpost', 'lj_password', trim($_POST['lj_password'])); } } @@ -92,7 +91,7 @@ function ljpost_post_local(App $a, array &$b) return; } - if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { + if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { return; } @@ -100,10 +99,10 @@ function ljpost_post_local(App $a, array &$b) return; } - $lj_post = intval(DI::pConfig()->get(Session::getLocalUser(),'ljpost','post')); + $lj_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(),'ljpost','post')); $lj_enable = (($lj_post && !empty($_REQUEST['ljpost_enable'])) ? intval($_REQUEST['ljpost_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(), 'ljpost', 'post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'ljpost', 'post_by_default'))) { $lj_enable = 1; } diff --git a/mailstream/mailstream.php b/mailstream/mailstream.php index 7b5090fd..35c6aab0 100644 --- a/mailstream/mailstream.php +++ b/mailstream/mailstream.php @@ -11,7 +11,6 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Core\System; use Friendica\Core\Worker; use Friendica\Database\DBA; @@ -482,10 +481,10 @@ function mailstream_convert_table_entries() */ function mailstream_addon_settings(App &$a, array &$data) { - $enabled = DI::pConfig()->get(Session::getLocalUser(), 'mailstream', 'enabled'); - $address = DI::pConfig()->get(Session::getLocalUser(), 'mailstream', 'address'); - $nolikes = DI::pConfig()->get(Session::getLocalUser(), 'mailstream', 'nolikes'); - $attachimg = DI::pConfig()->get(Session::getLocalUser(), 'mailstream', 'attachimg'); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'mailstream', 'enabled'); + $address = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'mailstream', 'address'); + $nolikes = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'mailstream', 'nolikes'); + $attachimg = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'mailstream', 'attachimg'); $template = Renderer::getMarkupTemplate('settings.tpl', 'addon/mailstream/'); $html = Renderer::replaceMacros($template, [ @@ -530,28 +529,28 @@ function mailstream_addon_settings(App &$a, array &$data) */ function mailstream_addon_settings_post(App $a, array $post) { - if (!Session::getLocalUser() || empty($post['mailstream-submit'])) { + if (!DI::userSession()->getLocalUserId() || empty($post['mailstream-submit'])) { return; } if ($post['mailstream_address'] != "") { - DI::pConfig()->set(Session::getLocalUser(), 'mailstream', 'address', $post['mailstream_address']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'mailstream', 'address', $post['mailstream_address']); } else { - DI::pConfig()->delete(Session::getLocalUser(), 'mailstream', 'address'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'mailstream', 'address'); } if ($post['mailstream_nolikes']) { - DI::pConfig()->set(Session::getLocalUser(), 'mailstream', 'nolikes', $post['mailstream_enabled']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'mailstream', 'nolikes', $post['mailstream_enabled']); } else { - DI::pConfig()->delete(Session::getLocalUser(), 'mailstream', 'nolikes'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'mailstream', 'nolikes'); } if ($post['mailstream_enabled']) { - DI::pConfig()->set(Session::getLocalUser(), 'mailstream', 'enabled', $post['mailstream_enabled']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'mailstream', 'enabled', $post['mailstream_enabled']); } else { - DI::pConfig()->delete(Session::getLocalUser(), 'mailstream', 'enabled'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'mailstream', 'enabled'); } if ($post['mailstream_attachimg']) { - DI::pConfig()->set(Session::getLocalUser(), 'mailstream', 'attachimg', $post['mailstream_attachimg']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'mailstream', 'attachimg', $post['mailstream_attachimg']); } else { - DI::pConfig()->delete(Session::getLocalUser(), 'mailstream', 'attachimg'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'mailstream', 'attachimg'); } } diff --git a/markdown/markdown.php b/markdown/markdown.php index faa1b356..ffc46ac5 100644 --- a/markdown/markdown.php +++ b/markdown/markdown.php @@ -9,7 +9,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Content\Text\Markdown; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; function markdown_install() { @@ -20,11 +19,11 @@ function markdown_install() { function markdown_addon_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'markdown', 'enabled')); + $enabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'markdown', 'enabled')); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/markdown/'); $html = Renderer::replaceMacros($t, [ @@ -40,15 +39,15 @@ function markdown_addon_settings(App $a, array &$data) function markdown_addon_settings_post(App $a, array &$b) { - if (!Session::getLocalUser() || empty($_POST['markdown-submit'])) { + if (!DI::userSession()->getLocalUserId() || empty($_POST['markdown-submit'])) { return; } - DI::pConfig()->set(Session::getLocalUser(), 'markdown', 'enabled', intval($_POST['enabled'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'markdown', 'enabled', intval($_POST['enabled'])); } function markdown_post_local_start(App $a, &$request) { - if (empty($request['body']) || !DI::pConfig()->get(Session::getLocalUser(), 'markdown', 'enabled')) { + if (empty($request['body']) || !DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'markdown', 'enabled')) { return; } diff --git a/mathjax/mathjax.php b/mathjax/mathjax.php index 92ece931..b60254bd 100644 --- a/mathjax/mathjax.php +++ b/mathjax/mathjax.php @@ -11,7 +11,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; function mathjax_install() @@ -23,20 +22,20 @@ function mathjax_install() function mathjax_settings_post(App $a) { - if (!Session::getLocalUser() || empty($_POST['mathjax-submit'])) { + if (!DI::userSession()->getLocalUserId() || empty($_POST['mathjax-submit'])) { return; } - DI::pConfig()->set(Session::getLocalUser(), 'mathjax', 'use', intval($_POST['mathjax_use'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'mathjax', 'use', intval($_POST['mathjax_use'])); } function mathjax_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $use = DI::pConfig()->get(Session::getLocalUser(), 'mathjax', 'use', false); + $use = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'mathjax', 'use', false); $tpl = Renderer::getMarkupTemplate('settings.tpl', 'addon/mathjax'); $html = Renderer::replaceMacros($tpl, [ @@ -55,7 +54,7 @@ function mathjax_footer(App $a, string &$body) { // if the visitor of the page is not a local_user, use MathJax // otherwise check the users settings. - if (!Session::getLocalUser() || DI::pConfig()->get(Session::getLocalUser(), 'mathjax', 'use', false)) { + if (!DI::userSession()->getLocalUserId() || DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'mathjax', 'use', false)) { DI::page()->registerFooterScript(__DIR__ . '/asset/MathJax.js?config=TeX-MML-AM_CHTML'); DI::page()->registerFooterScript(__DIR__ . '/mathjax.js'); } diff --git a/nsfw/nsfw.php b/nsfw/nsfw.php index da45df3e..f252ffc3 100644 --- a/nsfw/nsfw.php +++ b/nsfw/nsfw.php @@ -11,7 +11,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; function nsfw_install() @@ -54,12 +53,12 @@ function nsfw_extract_photos($body) function nsfw_addon_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enabled = !DI::pConfig()->get(Session::getLocalUser(), 'nsfw', 'disable'); - $words = DI::pConfig()->get(Session::getLocalUser(), 'nsfw', 'words', 'nsfw,'); + $enabled = !DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'nsfw', 'disable'); + $words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'nsfw', 'words', 'nsfw,'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/nsfw/'); $html = Renderer::replaceMacros($t, [ @@ -77,27 +76,27 @@ function nsfw_addon_settings(App &$a, array &$data) function nsfw_addon_settings_post(App $a, array &$b) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } if (!empty($_POST['nsfw-submit'])) { - DI::pConfig()->set(Session::getLocalUser(), 'nsfw', 'words', trim($_POST['nsfw-words'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'nsfw', 'words', trim($_POST['nsfw-words'])); $enable = (!empty($_POST['nsfw-enable']) ? intval($_POST['nsfw-enable']) : 0); $disable = 1 - $enable; - DI::pConfig()->set(Session::getLocalUser(), 'nsfw', 'disable', $disable); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'nsfw', 'disable', $disable); } } function nsfw_prepare_body_content_filter(App $a, &$hook_data) { $words = null; - if (DI::pConfig()->get(Session::getLocalUser(), 'nsfw', 'disable')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'nsfw', 'disable')) { return; } - if (Session::getLocalUser()) { - $words = DI::pConfig()->get(Session::getLocalUser(), 'nsfw', 'words'); + if (DI::userSession()->getLocalUserId()) { + $words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'nsfw', 'words'); } if ($words) { diff --git a/numfriends/numfriends.php b/numfriends/numfriends.php index beba8bfd..8532e36d 100644 --- a/numfriends/numfriends.php +++ b/numfriends/numfriends.php @@ -10,7 +10,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; function numfriends_install() { @@ -30,11 +29,11 @@ function numfriends_install() { * */ function numfriends_settings_post(App $a, $post) { - if (! Session::getLocalUser() || empty($_POST['numfriends-submit'])) { + if (! DI::userSession()->getLocalUserId() || empty($_POST['numfriends-submit'])) { return; } - DI::pConfig()->set(Session::getLocalUser(), 'system', 'display_friend_count', intval($_POST['numfriends'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'system', 'display_friend_count', intval($_POST['numfriends'])); } @@ -46,11 +45,11 @@ function numfriends_settings_post(App $a, $post) { */ function numfriends_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $numfriends = DI::pConfig()->get(Session::getLocalUser(), 'system', 'display_friend_count', 24); + $numfriends = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'display_friend_count', 24); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/numfriends/'); $html = Renderer::replaceMacros($t, [ diff --git a/opmlexport/opmlexport.php b/opmlexport/opmlexport.php index d32d4c77..e8d7157d 100644 --- a/opmlexport/opmlexport.php +++ b/opmlexport/opmlexport.php @@ -15,7 +15,6 @@ use Friendica\Network\HTTPException; use Friendica\Database\DBA; use Friendica\Core\Renderer; use Friendica\Core\Protocol; -use Friendica\Core\Session; use Friendica\Model\Contact; use Friendica\Model\User; @@ -30,7 +29,7 @@ function opmlexport_install() function opmlexport(App $a) { $condition = [ - 'uid' => Session::getLocalUser(), + 'uid' => DI::userSession()->getLocalUserId(), 'self' => false, 'deleted' => false, 'archive' => false, @@ -39,7 +38,7 @@ function opmlexport(App $a) 'network' => Protocol::FEED ]; $data = Contact::selectToArray([], $condition, ['order' => ['name']]); - $user = User::getById(Session::getLocalUser()); + $user = User::getById(DI::userSession()->getLocalUserId()); $xml = new \DOMDocument( '1.0', 'utf-8' ); $opml = $xml->createElement('opml'); @@ -71,7 +70,7 @@ function opmlexport(App $a) function opmlexport_addon_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } @@ -85,7 +84,7 @@ function opmlexport_addon_settings(App $a, array &$data) function opmlexport_addon_settings_post(App $a, array &$b) { - if (!Session::getLocalUser() || empty($_POST['opmlexport-submit'])) { + if (!DI::userSession()->getLocalUserId() || empty($_POST['opmlexport-submit'])) { return; } diff --git a/planets/planets.php b/planets/planets.php index 8cee996d..35a677ae 100644 --- a/planets/planets.php +++ b/planets/planets.php @@ -11,7 +11,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; function planets_install() @@ -43,12 +42,12 @@ function planets_post_hook(App $a, &$item) { Logger::notice('planets invoked'); - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { /* non-zero if this is a logged in user of this system */ return; } - if (Session::getLocalUser() != $item['uid']) { + if (DI::userSession()->getLocalUserId() != $item['uid']) { /* Does this person own the post? */ return; } @@ -59,7 +58,7 @@ function planets_post_hook(App $a, &$item) } /* Retrieve our personal config setting */ - $active = DI::pConfig()->get(Session::getLocalUser(), 'planets', 'enable'); + $active = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'planets', 'enable'); if (!$active) { return; @@ -96,11 +95,11 @@ function planets_post_hook(App $a, &$item) function planets_settings_post(App $a, $post) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } if ($_POST['planets-submit']) { - DI::pConfig()->set(Session::getLocalUser(), 'planets', 'enable' ,intval($_POST['planets'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'planets', 'enable' ,intval($_POST['planets'])); } } @@ -116,11 +115,11 @@ function planets_settings_post(App $a, $post) function planets_settings(App &$a, array &$data) { - if(!Session::getLocalUser()) { + if(!DI::userSession()->getLocalUserId()) { return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(),'planets','enable'); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(),'planets','enable'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/planets/'); $html = Renderer::replaceMacros($t, [ diff --git a/public_server/public_server.php b/public_server/public_server.php index 6c0a746b..cc85ba60 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -16,7 +16,6 @@ use Friendica\DI; use Friendica\Model\Notification; use Friendica\Model\User; use Friendica\Core\Config\Util\ConfigFileLoader; -use Friendica\Core\Session; use Friendica\Util\DateTimeFormat; function public_server_install() @@ -119,7 +118,7 @@ function public_server_login(App $a, $b) } $fields = ['account_expires_on' => DateTimeFormat::utc('now +' . $days . ' days')]; - $condition = ["`uid` = ? AND `account_expires_on` > ?", Session::getLocalUser(), DBA::NULL_DATETIME]; + $condition = ["`uid` = ? AND `account_expires_on` > ?", DI::userSession()->getLocalUserId(), DBA::NULL_DATETIME]; DBA::update('user', $fields, $condition); } diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 456342e6..cb890277 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -27,7 +27,6 @@ use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Protocol\Activity; use Friendica\Protocol\ActivityNamespace; use Friendica\Core\Config\Util\ConfigFileLoader; -use Friendica\Core\Session; use Friendica\Util\DateTimeFormat; use Friendica\Util\Strings; use Friendica\Util\XML; @@ -60,7 +59,7 @@ function pumpio_module() {} function pumpio_content(App $a) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.')); return ''; } @@ -139,18 +138,18 @@ function pumpio_registerclient(App $a, $host) function pumpio_connect(App $a) { // Define the needed keys - $consumer_key = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'consumer_key'); - $consumer_secret = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'consumer_secret'); - $hostname = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'host'); + $consumer_key = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'consumer_key'); + $consumer_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'consumer_secret'); + $hostname = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'host'); if ((($consumer_key == '') || ($consumer_secret == '')) && ($hostname != '')) { Logger::notice('pumpio_connect: register client'); $clientdata = pumpio_registerclient($a, $hostname); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'consumer_key', $clientdata->client_id); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'consumer_secret', $clientdata->client_secret); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'consumer_key', $clientdata->client_id); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'consumer_secret', $clientdata->client_secret); - $consumer_key = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'consumer_key'); - $consumer_secret = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'consumer_secret'); + $consumer_key = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'consumer_key'); + $consumer_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'consumer_secret'); Logger::info('pumpio_connect: ckey: ' . $consumer_key . ' csecrect: ' . $consumer_secret); } @@ -186,8 +185,8 @@ function pumpio_connect(App $a) if (($success = $client->Process())) { if (strlen($client->access_token)) { Logger::info('pumpio_connect: otoken: ' . $client->access_token . ', osecrect: ' . $client->access_token_secret); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'oauth_token', $client->access_token); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'oauth_token_secret', $client->access_token_secret); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'oauth_token', $client->access_token); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'oauth_token_secret', $client->access_token_secret); } } $success = $client->Finalize($success); @@ -210,17 +209,17 @@ function pumpio_connect(App $a) function pumpio_jot_nets(App $a, array &$jotnets_fields) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - if (DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'post')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'pumpio_enable', DI::l10n()->t('Post to pumpio'), - DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'post_by_default') + DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'post_by_default') ] ]; } @@ -228,20 +227,20 @@ function pumpio_jot_nets(App $a, array &$jotnets_fields) function pumpio_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $pumpio_host = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'host'); - $pumpio_user = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'user'); - $oauth_token = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'oauth_token'); - $oauth_token_secret = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'oauth_token_secret'); + $pumpio_host = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'host'); + $pumpio_user = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'user'); + $oauth_token = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'oauth_token'); + $oauth_token_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'oauth_token_secret'); - $import_enabled = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'import', false); - $enabled = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'post', false); - $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'post_by_default', false); - $public_enabled = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'public', false); - $mirror_enabled = DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'mirror', false); + $import_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'import', false); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'post', false); + $def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'post_by_default', false); + $public_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'public', false); + $mirror_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'mirror', false); $submit = ['pumpio-submit' => DI::l10n()->t('Save Settings')]; if ($oauth_token && $oauth_token_secret) { @@ -280,19 +279,19 @@ function pumpio_settings(App $a, array &$data) function pumpio_settings_post(App $a, array &$b) { if (!empty($_POST['pumpio_delete'])) { - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'consumer_key' , ''); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'consumer_secret' , ''); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'oauth_token' , ''); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'oauth_token_secret', ''); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'post' , false); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'import' , false); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'host' , ''); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'user' , ''); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'public' , false); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'mirror' , false); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'post_by_default' , false); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'lastdate' , 0); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'last_id' , ''); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'consumer_key' , ''); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'consumer_secret' , ''); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'oauth_token' , ''); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'oauth_token_secret', ''); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'post' , false); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'import' , false); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'host' , ''); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'user' , ''); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'public' , false); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'mirror' , false); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'post_by_default' , false); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'lastdate' , 0); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'last_id' , ''); } elseif (!empty($_POST['pumpio-submit'])) { // filtering the username if it is filled wrong $user = $_POST['pumpio_user']; @@ -309,16 +308,16 @@ function pumpio_settings_post(App $a, array &$b) $host = trim($host); $host = str_replace(['https://', 'http://'], ['', ''], $host); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'post' , $_POST['pumpio'] ?? false); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'import' , $_POST['pumpio_import'] ?? false); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'host' , $host); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'user' , $user); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'public' , $_POST['pumpio_public'] ?? false); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'mirror' , $_POST['pumpio_mirror'] ?? false); - DI::pConfig()->set(Session::getLocalUser(), 'pumpio', 'post_by_default', $_POST['pumpio_bydefault'] ?? false); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'post' , $_POST['pumpio'] ?? false); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'import' , $_POST['pumpio_import'] ?? false); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'host' , $host); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'user' , $user); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'public' , $_POST['pumpio_public'] ?? false); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'mirror' , $_POST['pumpio_mirror'] ?? false); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'pumpio', 'post_by_default', $_POST['pumpio_bydefault'] ?? false); if (!empty($_POST['pumpio_mirror'])) { - DI::pConfig()->delete(Session::getLocalUser(), 'pumpio', 'lastdate'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'pumpio', 'lastdate'); } } } @@ -366,15 +365,15 @@ function pumpio_hook_fork(App $a, array &$b) function pumpio_post_local(App $a, array &$b) { - if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { + if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { return; } - $pumpio_post = intval(DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'post')); + $pumpio_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'post')); $pumpio_enable = (($pumpio_post && !empty($_REQUEST['pumpio_enable'])) ? intval($_REQUEST['pumpio_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(), 'pumpio', 'post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'pumpio', 'post_by_default'))) { $pumpio_enable = 1; } diff --git a/qcomment/qcomment.php b/qcomment/qcomment.php index 496b0a06..d4d88e8e 100644 --- a/qcomment/qcomment.php +++ b/qcomment/qcomment.php @@ -21,7 +21,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; use Friendica\Util\XML; @@ -39,11 +38,11 @@ function qcomment_footer(App $a, string &$body) function qcomment_addon_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $words = DI::pConfig()->get(Session::getLocalUser(), 'qcomment', 'words', DI::l10n()->t(':-)') . "\n" . DI::l10n()->t(':-(') . "\n" . DI::l10n()->t('lol')); + $words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'qcomment', 'words', DI::l10n()->t(':-)') . "\n" . DI::l10n()->t(':-(') . "\n" . DI::l10n()->t('lol')); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/qcomment/'); $html = Renderer::replaceMacros($t, [ @@ -60,11 +59,11 @@ function qcomment_addon_settings(App &$a, array &$data) function qcomment_addon_settings_post(App $a, array &$b) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } if (isset($_POST['qcomment-words'])) { - DI::pConfig()->set(Session::getLocalUser(), 'qcomment', 'words', XML::escape($_POST['qcomment-words'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'qcomment', 'words', XML::escape($_POST['qcomment-words'])); } } diff --git a/randplace/randplace.php b/randplace/randplace.php index 439068db..badc1c9e 100644 --- a/randplace/randplace.php +++ b/randplace/randplace.php @@ -23,7 +23,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; function randplace_install() @@ -65,12 +64,12 @@ function randplace_post_hook(App $a, &$item) */ Logger::notice('randplace invoked'); - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { /* non-zero if this is a logged in user of this system */ return; } - if (Session::getLocalUser() != $item['uid']) { + if (DI::userSession()->getLocalUserId() != $item['uid']) { /* Does this person own the post? */ return; } @@ -82,7 +81,7 @@ function randplace_post_hook(App $a, &$item) /* Retrieve our personal config setting */ - $active = DI::pConfig()->get(Session::getLocalUser(), 'randplace', 'enable'); + $active = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'randplace', 'enable'); if (!$active) { return; @@ -123,12 +122,12 @@ function randplace_post_hook(App $a, &$item) */ function randplace_settings_post(App $a, $post) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } if ($_POST['randplace-submit']) { - DI::pConfig()->set(Session::getLocalUser(), 'randplace', 'enable', intval($_POST['randplace'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'randplace', 'enable', intval($_POST['randplace'])); } } @@ -139,11 +138,11 @@ function randplace_settings_post(App $a, $post) */ function randplace_settings(App &$a, array &$data) { - if(!Session::getLocalUser()) { + if(!DI::userSession()->getLocalUserId()) { return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(),'randplace','enable'); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(),'randplace','enable'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/randplace/'); $html = Renderer::replaceMacros($t, [ diff --git a/saml/saml.php b/saml/saml.php index d511d90e..53e65b57 100755 --- a/saml/saml.php +++ b/saml/saml.php @@ -11,7 +11,6 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\User; diff --git a/securemail/SecureTestEmail.php b/securemail/SecureTestEmail.php index 632336e7..b51bdde1 100644 --- a/securemail/SecureTestEmail.php +++ b/securemail/SecureTestEmail.php @@ -25,7 +25,6 @@ use Friendica\App; use Friendica\App\BaseURL; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; -use Friendica\Core\Session; use Friendica\Model\User; use Friendica\Object\Email; @@ -48,16 +47,16 @@ class SecureTestEmail extends Email $sender_email = 'noreply@' . $hostname; } - $user = User::getById(Session::getLocalUser()); + $user = User::getById(DI::userSession()->getLocalUserId()); $subject = 'Friendica - Secure Mail - Test'; $message = 'This is a test message from your Friendica Secure Mail addon.'; // enable addon for test - $pConfig->set(Session::getLocalUser(), 'securemail', 'enable', 1); + $pConfig->set(DI::userSession()->getLocalUserId(), 'securemail', 'enable', 1); parent::__construct($sitename, $sender_email, $sender_email, $user['email'], $subject, "

{$message}

", $message, - [], Session::getLocalUser()); + [], DI::userSession()->getLocalUserId()); } } diff --git a/securemail/securemail.php b/securemail/securemail.php index 777e0343..470db0e4 100644 --- a/securemail/securemail.php +++ b/securemail/securemail.php @@ -11,7 +11,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; use Friendica\Object\EMail\IEmail; @@ -39,12 +38,12 @@ function securemail_install() */ function securemail_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'securemail', 'enable')); - $publickey = DI::pConfig()->get(Session::getLocalUser(), 'securemail', 'pkey'); + $enabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'securemail', 'enable')); + $publickey = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'securemail', 'pkey'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/securemail/'); $html = Renderer::replaceMacros($t, [ @@ -75,20 +74,20 @@ function securemail_settings(App &$a, array &$data) */ function securemail_settings_post(App &$a, array &$b) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } if (!empty($_POST['securemail-submit']) || !empty($_POST['securemail-test'])) { - DI::pConfig()->set(Session::getLocalUser(), 'securemail', 'pkey', trim($_POST['securemail-pkey'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'securemail', 'pkey', trim($_POST['securemail-pkey'])); $enable = (!empty($_POST['securemail-enable']) ? 1 : 0); - DI::pConfig()->set(Session::getLocalUser(), 'securemail', 'enable', $enable); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'securemail', 'enable', $enable); if (!empty($_POST['securemail-test'])) { $res = DI::emailer()->send(new SecureTestEmail(DI::app(), DI::config(), DI::pConfig(), DI::baseUrl())); // revert to saved value - DI::pConfig()->set(Session::getLocalUser(), 'securemail', 'enable', $enable); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'securemail', 'enable', $enable); if ($res) { DI::sysmsg()->addInfo(DI::l10n()->t('Test email sent')); diff --git a/showmore/showmore.php b/showmore/showmore.php index 52e9771b..aed11520 100644 --- a/showmore/showmore.php +++ b/showmore/showmore.php @@ -11,7 +11,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; use Friendica\Util\Strings; @@ -24,14 +23,14 @@ function showmore_install() function showmore_addon_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } DI::page()->registerStylesheet(__DIR__ . '/showmore.css', 'all'); - $enabled = !DI::pConfig()->get(Session::getLocalUser(), 'showmore', 'disable'); - $chars = DI::pConfig()->get(Session::getLocalUser(), 'showmore', 'chars', 1100); + $enabled = !DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'showmore', 'disable'); + $chars = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'showmore', 'chars', 1100); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/showmore/'); $html = Renderer::replaceMacros($t, [ @@ -48,15 +47,15 @@ function showmore_addon_settings(App &$a, array &$data) function showmore_addon_settings_post(App $a, array &$b) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } if (!empty($_POST['showmore-submit'])) { - DI::pConfig()->set(Session::getLocalUser(), 'showmore', 'chars', trim($_POST['showmore-chars'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'showmore', 'chars', trim($_POST['showmore-chars'])); $enable = (!empty($_POST['showmore-enable']) ? intval($_POST['showmore-enable']) : 0); $disable = 1-$enable; - DI::pConfig()->set(Session::getLocalUser(), 'showmore', 'disable', $disable); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'showmore', 'disable', $disable); } } @@ -101,11 +100,11 @@ function showmore_prepare_body(App $a, &$hook_data) return; } - if (DI::pConfig()->get(Session::getLocalUser(), 'showmore', 'disable')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'showmore', 'disable')) { return; } - $chars = (int) DI::pConfig()->get(Session::getLocalUser(), 'showmore', 'chars', 1100); + $chars = (int) DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'showmore', 'chars', 1100); if (get_body_length($hook_data['html']) > $chars) { $found = true; diff --git a/showmore_dyn/showmore_dyn.php b/showmore_dyn/showmore_dyn.php index b5dda5d0..5fc07722 100644 --- a/showmore_dyn/showmore_dyn.php +++ b/showmore_dyn/showmore_dyn.php @@ -12,7 +12,6 @@ use Friendica\Core\Hook; use Friendica\Core\L10n; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; @@ -37,23 +36,23 @@ function showmore_dyn_footer(App $a, string &$body) function showmore_dyn_settings_post() { - if(!Session::getLocalUser()) { + if(!DI::userSession()->getLocalUserId()) { return; } if (isset($_POST['showmore_dyn-submit'])) { - DI::pConfig()->set(Session::getLocalUser(), 'showmore_dyn', 'limitHeight', $_POST['limitHeight'] ?? 0); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'showmore_dyn', 'limitHeight', $_POST['limitHeight'] ?? 0); } } function showmore_dyn_settings(App &$a, array &$data) { - if(!Session::getLocalUser()) { + if(!DI::userSession()->getLocalUserId()) { return; } - $limitHeight = DI::pConfig()->get(Session::getLocalUser(), 'showmore_dyn', 'limitHeight', 250); - DI::pConfig()->set(Session::getLocalUser(), 'showmore_dyn', 'limitHeight', $limitHeight); + $limitHeight = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'showmore_dyn', 'limitHeight', 250); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'showmore_dyn', 'limitHeight', $limitHeight); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/showmore_dyn/'); $html = Renderer::replaceMacros($t, [ @@ -69,7 +68,7 @@ function showmore_dyn_settings(App &$a, array &$data) function showmore_dyn_script() { - $limitHeight = intval(DI::pConfig()->get(Session::getLocalUser(), 'showmore_dyn', 'limitHeight', 250)); + $limitHeight = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'showmore_dyn', 'limitHeight', 250)); $showmore_dyn_showmore_linktext = DI::l10n()->t('Show more...'); DI::page()['htmlhead'] .= << diff --git a/startpage/startpage.php b/startpage/startpage.php index f4ef59c0..1b77ffe8 100644 --- a/startpage/startpage.php +++ b/startpage/startpage.php @@ -10,7 +10,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; function startpage_install() { @@ -21,11 +20,11 @@ function startpage_install() { function startpage_home_init(App $a, $b) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $page = DI::pConfig()->get(Session::getLocalUser(), 'startpage', 'startpage'); + $page = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'startpage', 'startpage'); if (strlen($page)) { DI::baseUrl()->redirect($page); } @@ -43,12 +42,12 @@ function startpage_home_init(App $a, $b) function startpage_settings_post(App $a, $post) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } if (!empty($_POST['startpage-submit'])) { - DI::pConfig()->set(Session::getLocalUser(), 'startpage', 'startpage', strip_tags(trim($_POST['startpage']))); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'startpage', 'startpage', strip_tags(trim($_POST['startpage']))); } } @@ -60,11 +59,11 @@ function startpage_settings_post(App $a, $post) */ function startpage_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $startpage = DI::pConfig()->get(Session::getLocalUser(), 'startpage', 'startpage'); + $startpage = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'startpage', 'startpage'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/startpage/'); $html = Renderer::replaceMacros($t, [ diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 2c735c94..7ed90f9e 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -47,7 +47,6 @@ use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Core\System; use Friendica\Database\DBA; use Friendica\DI; @@ -87,17 +86,17 @@ function statusnet_check_item_notification(App $a, &$notification_data) function statusnet_jot_nets(App $a, array &$jotnets_fields) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - if (DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'post')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'statusnet_enable', DI::l10n()->t('Post to GNU Social'), - DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'post_by_default') + DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'post_by_default') ] ]; } @@ -105,7 +104,7 @@ function statusnet_jot_nets(App $a, array &$jotnets_fields) function statusnet_settings_post(App $a, $post) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } // don't check GNU Social settings if GNU Social submit button is not clicked @@ -117,18 +116,18 @@ function statusnet_settings_post(App $a, $post) /* * * * if the GNU Social-disconnect button is clicked, clear the GNU Social configuration */ - DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'consumerkey'); - DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'consumersecret'); - DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'post'); - DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'post_by_default'); - DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'oauthtoken'); - DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'oauthsecret'); - DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'baseapi'); - DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'lastid'); - DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'mirror_posts'); - DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'import'); - DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'create_user'); - DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'own_url'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'statusnet', 'consumerkey'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'statusnet', 'consumersecret'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'statusnet', 'post'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'statusnet', 'post_by_default'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'statusnet', 'oauthtoken'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'statusnet', 'oauthsecret'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'statusnet', 'baseapi'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'statusnet', 'lastid'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'statusnet', 'mirror_posts'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'statusnet', 'import'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'statusnet', 'create_user'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'statusnet', 'own_url'); } else { if (isset($_POST['statusnet-preconf-apiurl'])) { /* * * @@ -142,10 +141,10 @@ function statusnet_settings_post(App $a, $post) $apibase = $asn['apiurl']; $c = DI::httpClient()->fetch($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'consumerkey', $asn['consumerkey']); - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'consumersecret', $asn['consumersecret']); - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'baseapi', $asn['apiurl']); - //DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'application_name', $asn['applicationname'] ); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'consumerkey', $asn['consumerkey']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'consumersecret', $asn['consumersecret']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'baseapi', $asn['apiurl']); + //DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'application_name', $asn['applicationname'] ); } else { DI::sysmsg()->addNotice(DI::l10n()->t('Please contact your site administrator.
The provided API URL is not valid.') . '
' . $asn['apiurl']); } @@ -160,19 +159,19 @@ function statusnet_settings_post(App $a, $post) $c = DI::httpClient()->fetch($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { // ok the API path is correct, let's save the settings - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']); - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'baseapi', $apibase); - //DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'application_name', $_POST['statusnet-applicationname'] ); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'baseapi', $apibase); + //DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'application_name', $_POST['statusnet-applicationname'] ); } else { // the API path is not correct, maybe missing trailing / ? $apibase = $apibase . '/'; $c = DI::httpClient()->fetch($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { // ok the API path is now correct, let's save the settings - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']); - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'baseapi', $apibase); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'baseapi', $apibase); } else { // still not the correct API base, let's do noting DI::sysmsg()->addNotice(DI::l10n()->t('We could not contact the GNU Social API with the Path you entered.')); @@ -181,31 +180,31 @@ function statusnet_settings_post(App $a, $post) } else { if (isset($_POST['statusnet-pin'])) { // if the user supplied us with a PIN from GNU Social, let the magic of OAuth happen - $api = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'baseapi'); - $ckey = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'consumerkey'); - $csecret = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'consumersecret'); + $api = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'baseapi'); + $ckey = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'consumerkey'); + $csecret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'consumersecret'); // the token and secret for which the PIN was generated were hidden in the settings // form as token and token2, we need a new connection to GNU Social using these token // and secret to request a Access Token with the PIN $connection = new StatusNetOAuth($api, $ckey, $csecret, $_POST['statusnet-token'], $_POST['statusnet-token2']); $token = $connection->getAccessToken($_POST['statusnet-pin']); // ok, now that we have the Access Token, save them in the user config - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'oauthtoken', $token['oauth_token']); - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'oauthsecret', $token['oauth_token_secret']); - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'post', 1); - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'post_taglinks', 1); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'oauthtoken', $token['oauth_token']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'oauthsecret', $token['oauth_token_secret']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'post', 1); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'post_taglinks', 1); // reload the Addon Settings page, if we don't do it see Bug #42 } else { // if no PIN is supplied in the POST variables, the user has changed the setting // to post a dent for every new __public__ posting to the wall - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'post', intval($_POST['statusnet-enable'])); - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'post_by_default', intval($_POST['statusnet-default'])); - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'mirror_posts', intval($_POST['statusnet-mirror'])); - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'import', intval($_POST['statusnet-import'])); - DI::pConfig()->set(Session::getLocalUser(), 'statusnet', 'create_user', intval($_POST['statusnet-create_user'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'post', intval($_POST['statusnet-enable'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'post_by_default', intval($_POST['statusnet-default'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'mirror_posts', intval($_POST['statusnet-mirror'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'import', intval($_POST['statusnet-import'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'statusnet', 'create_user', intval($_POST['statusnet-create_user'])); if (!intval($_POST['statusnet-mirror'])) - DI::pConfig()->delete(Session::getLocalUser(), 'statusnet', 'lastid'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'statusnet', 'lastid'); } } } @@ -214,7 +213,7 @@ function statusnet_settings_post(App $a, $post) function statusnet_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } @@ -226,16 +225,16 @@ function statusnet_settings(App $a, array &$data) * allow the user to cancel the connection process at this step * 3) Checkbox for "Send public notices (respect size limitation) */ - $baseapi = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'baseapi'); - $ckey = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'consumerkey'); - $csecret = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'consumersecret'); - $otoken = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'oauthtoken'); - $osecret = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'oauthsecret'); - $enabled = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'post', false); - $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'post_by_default', false); - $mirror_enabled = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'mirror_posts', false); - $createuser_enabled = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'create_user', false); - $import = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'import'); + $baseapi = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'baseapi'); + $ckey = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'consumerkey'); + $csecret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'consumersecret'); + $otoken = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'oauthtoken'); + $osecret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'oauthsecret'); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'post', false); + $def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'post_by_default', false); + $mirror_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'mirror_posts', false); + $createuser_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'create_user', false); + $import = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'import'); // Radio button list to select existing application credentials $sites = array_map(function ($site) { @@ -257,7 +256,7 @@ function statusnet_settings(App $a, array &$data) $connected_account = DI::l10n()->t('Currently connected to: %s', $account->statusnet_profile_url, $account->screen_name); } - $user = User::getById(Session::getLocalUser()); + $user = User::getById(DI::userSession()->getLocalUserId()); if ($user['hidewall']) { $privacy_warning = DI::l10n()->t('Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to GNU Social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.'); } @@ -380,15 +379,15 @@ function statusnet_post_local(App $a, array &$b) return; } - if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { + if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { return; } - $statusnet_post = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'post'); + $statusnet_post = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'post'); $statusnet_enable = (($statusnet_post && !empty($_REQUEST['statusnet_enable'])) ? intval($_REQUEST['statusnet_enable']) : 0); // if API is used, default to the chosen settings - if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'post_by_default'))) { $statusnet_enable = 1; } @@ -669,7 +668,7 @@ function statusnet_prepare_body(App $a, array &$b) } if ($b['preview']) { - $max_char = DI::pConfig()->get(Session::getLocalUser(), 'statusnet', 'max_char'); + $max_char = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'statusnet', 'max_char'); if (intval($max_char) == 0) { $max_char = 140; } @@ -677,7 +676,7 @@ function statusnet_prepare_body(App $a, array &$b) $item = $b['item']; $item['plink'] = DI::baseUrl()->get() . '/display/' . $item['guid']; - $condition = ['uri' => $item['thr-parent'], 'uid' => Session::getLocalUser()]; + $condition = ['uri' => $item['thr-parent'], 'uid' => DI::userSession()->getLocalUserId()]; $orig_post = Post::selectFirst(['author-link', 'uri'], $condition); if (DBA::isResult($orig_post)) { $nick = preg_replace("=https?://(.*)/(.*)=ism", "$2", $orig_post['author-link']); diff --git a/superblock/superblock.php b/superblock/superblock.php index 23f29d65..c1a14111 100644 --- a/superblock/superblock.php +++ b/superblock/superblock.php @@ -10,7 +10,6 @@ use Friendica\App; use Friendica\Core\Hook; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\DI; use Friendica\Util\Strings; @@ -25,11 +24,11 @@ function superblock_install() function superblock_addon_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $blocked = DI::pConfig()->get(Session::getLocalUser(), 'system', 'blocked', ''); + $blocked = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'blocked', ''); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/superblock/'); $html = Renderer::replaceMacros($t, [ @@ -45,12 +44,12 @@ function superblock_addon_settings(App &$a, array &$data) function superblock_addon_settings_post(App $a, array &$b) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } if (!empty($_POST['superblock-submit'])) { - DI::pConfig()->set(Session::getLocalUser(), 'system', 'blocked',trim($_POST['superblock-words'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'system', 'blocked',trim($_POST['superblock-words'])); } } @@ -90,11 +89,11 @@ function superblock_enotify_store(App $a, array &$b) function superblock_conversation_start(App $a, array &$b) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $words = DI::pConfig()->get(Session::getLocalUser(), 'system', 'blocked'); + $words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'blocked'); if ($words) { $a->data['superblock'] = explode(',', $words); } @@ -113,7 +112,7 @@ EOT; function superblock_item_photo_menu(App $a, array &$b) { - if (!Session::getLocalUser() || $b['item']['self']) { + if (!DI::userSession()->getLocalUserId() || $b['item']['self']) { return; } @@ -140,11 +139,11 @@ function superblock_module() {} function superblock_init(App $a) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $words = DI::pConfig()->get(Session::getLocalUser(), 'system', 'blocked'); + $words = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'blocked'); if (array_key_exists('block', $_GET) && $_GET['block']) { if (strlen($words)) @@ -152,6 +151,6 @@ function superblock_init(App $a) $words .= trim($_GET['block']); } - DI::pConfig()->set(Session::getLocalUser(), 'system', 'blocked', $words); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'system', 'blocked', $words); exit(); } diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index 8fee684a..261f037e 100644 --- a/tumblr/tumblr.php +++ b/tumblr/tumblr.php @@ -14,7 +14,6 @@ use Friendica\Content\Text\BBCode; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Post; @@ -39,7 +38,7 @@ function tumblr_module() {} function tumblr_content(App $a) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { DI::sysmsg()->addNotice(DI::l10n()->t('Permission denied.')); return ''; } @@ -172,8 +171,8 @@ function tumblr_callback(App $a) } // What's next? Now that we have an Access Token and Secret, we can make an API call. - DI::pConfig()->set(Session::getLocalUser(), 'tumblr', 'oauth_token', $access_token['oauth_token']); - DI::pConfig()->set(Session::getLocalUser(), 'tumblr', 'oauth_token_secret', $access_token['oauth_token_secret']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'tumblr', 'oauth_token', $access_token['oauth_token']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'tumblr', 'oauth_token_secret', $access_token['oauth_token_secret']); $o = DI::l10n()->t("You are now authenticated to tumblr."); $o .= '
' . DI::l10n()->t("return to the connector page") . ''; @@ -183,17 +182,17 @@ function tumblr_callback(App $a) function tumblr_jot_nets(App $a, array &$jotnets_fields) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - if (DI::pConfig()->get(Session::getLocalUser(),'tumblr','post')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(),'tumblr','post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'tumblr_enable', DI::l10n()->t('Post to Tumblr'), - DI::pConfig()->get(Session::getLocalUser(),'tumblr','post_by_default') + DI::pConfig()->get(DI::userSession()->getLocalUserId(),'tumblr','post_by_default') ] ]; } @@ -201,18 +200,18 @@ function tumblr_jot_nets(App $a, array &$jotnets_fields) function tumblr_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(), 'tumblr', 'post', false); - $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'tumblr', 'post_by_default', false); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'post', false); + $def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'post_by_default', false); - $oauth_token = DI::pConfig()->get(Session::getLocalUser(), 'tumblr', 'oauth_token'); - $oauth_token_secret = DI::pConfig()->get(Session::getLocalUser(), 'tumblr', 'oauth_token_secret'); + $oauth_token = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'oauth_token'); + $oauth_token_secret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'oauth_token_secret'); if ($oauth_token && $oauth_token_secret) { - $page = DI::pConfig()->get(Session::getLocalUser(), 'tumblr', 'page'); + $page = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'page'); $consumer_key = DI::config()->get('tumblr', 'consumer_key'); $consumer_secret = DI::config()->get('tumblr', 'consumer_secret'); @@ -252,9 +251,9 @@ function tumblr_settings(App $a, array &$data) function tumblr_settings_post(App $a, array &$b) { if (!empty($_POST['tumblr-submit'])) { - DI::pConfig()->set(Session::getLocalUser(), 'tumblr', 'post', intval($_POST['tumblr'])); - DI::pConfig()->set(Session::getLocalUser(), 'tumblr', 'page', $_POST['tumblr_page']); - DI::pConfig()->set(Session::getLocalUser(), 'tumblr', 'post_by_default', intval($_POST['tumblr_bydefault'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'tumblr', 'post', intval($_POST['tumblr'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'tumblr', 'page', $_POST['tumblr_page']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'tumblr', 'post_by_default', intval($_POST['tumblr_bydefault'])); } } @@ -281,7 +280,7 @@ function tumblr_post_local(App $a, array &$b) return; } - if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { + if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { return; } @@ -289,11 +288,11 @@ function tumblr_post_local(App $a, array &$b) return; } - $tmbl_post = intval(DI::pConfig()->get(Session::getLocalUser(), 'tumblr', 'post')); + $tmbl_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'post')); $tmbl_enable = (($tmbl_post && !empty($_REQUEST['tumblr_enable'])) ? intval($_REQUEST['tumblr_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(), 'tumblr', 'post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'tumblr', 'post_by_default'))) { $tmbl_enable = 1; } diff --git a/twitter/twitter.php b/twitter/twitter.php index 465acaed..1c71a076 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -85,7 +85,6 @@ use Friendica\Model\Tag; use Friendica\Model\User; use Friendica\Protocol\Activity; use Friendica\Core\Config\Util\ConfigFileLoader; -use Friendica\Core\Session; use Friendica\Core\System; use Friendica\Util\DateTimeFormat; use Friendica\Util\Images; @@ -205,17 +204,17 @@ function twitter_api_contact(string $apiPath, array $contact, int $uid): ?bool function twitter_jot_nets(App $a, array &$jotnets_fields) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - if (DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'post')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'twitter_enable', DI::l10n()->t('Post to Twitter'), - DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'post_by_default') + DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'post_by_default') ] ]; } @@ -224,7 +223,7 @@ function twitter_jot_nets(App $a, array &$jotnets_fields) function twitter_settings_post(App $a) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } // don't check twitter settings if twitter submit button is not clicked @@ -237,18 +236,18 @@ function twitter_settings_post(App $a) * if the twitter-disconnect checkbox is set, clear the OAuth key/secret pair * from the user configuration */ - DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'consumerkey'); - DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'consumersecret'); - DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'oauthtoken'); - DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'oauthsecret'); - DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'post'); - DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'post_by_default'); - DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'lastid'); - DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'thread'); - DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'mirror_posts'); - DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'import'); - DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'create_user'); - DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'own_id'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'consumerkey'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'consumersecret'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'oauthtoken'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'oauthsecret'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'post'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'post_by_default'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'lastid'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'thread'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'mirror_posts'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'import'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'create_user'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'own_id'); } else { if (isset($_POST['twitter-pin'])) { // if the user supplied us with a PIN from Twitter, let the magic of OAuth happen @@ -266,9 +265,9 @@ function twitter_settings_post(App $a) $connection = new TwitterOAuth($ckey, $csecret, $_POST['twitter-token'], $_POST['twitter-token2']); $token = $connection->oauth('oauth/access_token', ['oauth_verifier' => $_POST['twitter-pin']]); // ok, now that we have the Access Token, save them in the user config - DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'oauthtoken', $token['oauth_token']); - DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'oauthsecret', $token['oauth_token_secret']); - DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'post', 1); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'oauthtoken', $token['oauth_token']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'oauthsecret', $token['oauth_token_secret']); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'post', 1); } catch(Exception $e) { DI::sysmsg()->addNotice($e->getMessage()); } catch(TwitterOAuthException $e) { @@ -277,15 +276,15 @@ function twitter_settings_post(App $a) } else { // if no PIN is supplied in the POST variables, the user has changed the setting // to post a tweet for every new __public__ posting to the wall - DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'post', intval($_POST['twitter-enable'])); - DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'post_by_default', intval($_POST['twitter-default'])); - DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'thread', intval($_POST['twitter-thread'])); - DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'mirror_posts', intval($_POST['twitter-mirror'])); - DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'import', intval($_POST['twitter-import'])); - DI::pConfig()->set(Session::getLocalUser(), 'twitter', 'create_user', intval($_POST['twitter-create_user'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'post', intval($_POST['twitter-enable'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'post_by_default', intval($_POST['twitter-default'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'thread', intval($_POST['twitter-thread'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'mirror_posts', intval($_POST['twitter-mirror'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'import', intval($_POST['twitter-import'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'twitter', 'create_user', intval($_POST['twitter-create_user'])); if (!intval($_POST['twitter-mirror'])) { - DI::pConfig()->delete(Session::getLocalUser(), 'twitter', 'lastid'); + DI::pConfig()->delete(DI::userSession()->getLocalUserId(), 'twitter', 'lastid'); } } } @@ -293,11 +292,11 @@ function twitter_settings_post(App $a) function twitter_settings(App $a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $user = User::getById(Session::getLocalUser()); + $user = User::getById(DI::userSession()->getLocalUserId()); DI::page()->registerStylesheet(__DIR__ . '/twitter.css', 'all'); @@ -308,15 +307,15 @@ function twitter_settings(App $a, array &$data) */ $ckey = DI::config()->get('twitter', 'consumerkey'); $csecret = DI::config()->get('twitter', 'consumersecret'); - $otoken = DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'oauthtoken'); - $osecret = DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'oauthsecret'); + $otoken = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'oauthtoken'); + $osecret = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'oauthsecret'); - $enabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'post')); - $defenabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'post_by_default')); - $threadenabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'thread')); - $mirrorenabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'mirror_posts')); - $importenabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'import')); - $create_userenabled = intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'create_user')); + $enabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'post')); + $defenabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'post_by_default')); + $threadenabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'thread')); + $mirrorenabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'mirror_posts')); + $importenabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'import')); + $create_userenabled = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'create_user')); // Hide the submit button by default $submit = ''; @@ -466,15 +465,15 @@ function twitter_post_local(App $a, array &$b) return; } - if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { + if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { return; } - $twitter_post = intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'post')); + $twitter_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'post')); $twitter_enable = (($twitter_post && !empty($_REQUEST['twitter_enable'])) ? intval($_REQUEST['twitter_enable']) : 0); // if API is used, default to the chosen settings - if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(), 'twitter', 'post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'twitter', 'post_by_default'))) { $twitter_enable = 1; } @@ -1070,7 +1069,7 @@ function twitter_prepare_body(App $a, array &$b) $item = $b['item']; $item['plink'] = DI::baseUrl()->get() . '/display/' . $item['guid']; - $condition = ['uri' => $item['thr-parent'], 'uid' => Session::getLocalUser()]; + $condition = ['uri' => $item['thr-parent'], 'uid' => DI::userSession()->getLocalUserId()]; $orig_post = Post::selectFirst(['author-link'], $condition); if (DBA::isResult($orig_post)) { $nicknameplain = preg_replace("=https?://twitter.com/(.*)=ism", "$1", $orig_post['author-link']); diff --git a/viewsrc/viewsrc.php b/viewsrc/viewsrc.php index c9a24692..c203bd51 100644 --- a/viewsrc/viewsrc.php +++ b/viewsrc/viewsrc.php @@ -9,7 +9,6 @@ use Friendica\App; use Friendica\Core\Hook; -use Friendica\Core\Session; use Friendica\DI; function viewsrc_install() @@ -33,7 +32,7 @@ EOS; function viewsrc_item_photo_menu(App $a, array &$b) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } diff --git a/windowsphonepush/windowsphonepush.php b/windowsphonepush/windowsphonepush.php index 2ea23721..1d0423b2 100644 --- a/windowsphonepush/windowsphonepush.php +++ b/windowsphonepush/windowsphonepush.php @@ -33,7 +33,6 @@ use Friendica\Content\Text\HTML; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Item; @@ -75,17 +74,17 @@ function windowsphonepush_module() {} */ function windowsphonepush_settings_post(App $a, array $post) { - if (!Session::getLocalUser() || empty($post['windowsphonepush-submit'])) { + if (!DI::userSession()->getLocalUserId() || empty($post['windowsphonepush-submit'])) { return; } $enable = intval($post['windowsphonepush']); - DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'enable', $enable); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'enable', $enable); if ($enable) { - DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'counterunseen', 0); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'counterunseen', 0); } - DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'senditemtext', intval($post['windowsphonepush-senditemtext'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'senditemtext', intval($post['windowsphonepush-senditemtext'])); } /* Called from the Addon Setting form. @@ -93,13 +92,13 @@ function windowsphonepush_settings_post(App $a, array $post) */ function windowsphonepush_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'enable'); - $senditemtext = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'senditemtext'); - $device_url = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'device_url'); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'enable'); + $senditemtext = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'senditemtext'); + $device_url = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'device_url'); $t = Renderer::getMarkupTemplate('settings.tpl', 'addon/windowsphonepush/'); $html = Renderer::replaceMacros($t, [ @@ -275,7 +274,7 @@ function send_push($device_url, $headers, $msg) // and log this fact $subscriptionStatus = get_header_value($output, 'X-SubscriptionStatus'); if ($subscriptionStatus == "Expired") { - DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'device_url', ""); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'device_url', ""); Logger::notice("ERROR: the stored Device-URL " . $device_url . "returned an 'Expired' error, it has been deleted now."); } @@ -330,15 +329,15 @@ function windowsphonepush_content(App $a) // return settings for windowsphonepush addon to be able to check them in WP app function windowsphonepush_showsettings() { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enable = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'enable'); - $device_url = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'device_url'); - $senditemtext = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'senditemtext'); - $lastpushid = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'lastpushid'); - $counterunseen = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'counterunseen'); + $enable = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'enable'); + $device_url = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'device_url'); + $senditemtext = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'senditemtext'); + $lastpushid = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'lastpushid'); + $counterunseen = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'counterunseen'); $addonversion = "2.0"; if (!$device_url) { @@ -350,7 +349,7 @@ function windowsphonepush_showsettings() } header("Content-Type: application/json"); - echo json_encode(['uid' => Session::getLocalUser(), + echo json_encode(['uid' => DI::userSession()->getLocalUserId(), 'enable' => $enable, 'device_url' => $device_url, 'senditemtext' => $senditemtext, @@ -364,12 +363,12 @@ function windowsphonepush_showsettings() */ function windowsphonepush_updatesettings() { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return "Not Authenticated"; } // no updating if user hasn't enabled the addon - $enable = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'enable'); + $enable = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'enable'); if (!$enable) { return "Plug-in not enabled"; } @@ -385,32 +384,32 @@ function windowsphonepush_updatesettings() // the user on the Windows Phone device and that device url is no longer true for the other user, so we // et the device_url for the OTHER user blank (should normally not occur as App should include User/server // in url request to Microsoft Push Notification server) - $pconfigs = DBA::selectToArray('pconfig', ['uid'], ["`uid` != ? AND `cat` = ? AND `k` = ? AND `v` = ?", Session::getLocalUser(), 'windowsphonepush', 'device_url', $device_url]); + $pconfigs = DBA::selectToArray('pconfig', ['uid'], ["`uid` != ? AND `cat` = ? AND `k` = ? AND `v` = ?", DI::userSession()->getLocalUserId(), 'windowsphonepush', 'device_url', $device_url]); foreach ($pconfigs as $rr) { DI::pConfig()->set($rr['uid'], 'windowsphonepush', 'device_url', ''); - Logger::notice("WARN: the sent URL was already registered with user '" . $rr['uid'] . "'. Deleted for this user as we expect to be correct now for user '" . Session::getLocalUser() . "'."); + Logger::notice("WARN: the sent URL was already registered with user '" . $rr['uid'] . "'. Deleted for this user as we expect to be correct now for user '" . DI::userSession()->getLocalUserId() . "'."); } - DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'device_url', $device_url); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'device_url', $device_url); // output the successfull update of the device URL to the logger for error analysis if necessary - Logger::notice("INFO: Device-URL for user '" . Session::getLocalUser() . "' has been updated with '" . $device_url . "'"); + Logger::notice("INFO: Device-URL for user '" . DI::userSession()->getLocalUserId() . "' has been updated with '" . $device_url . "'"); return "Device-URL updated successfully!"; } // update_counterunseen is used to reset the counter to zero from Windows Phone app function windowsphonepush_updatecounterunseen() { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return "Not Authenticated"; } // no updating if user hasn't enabled the addon - $enable = DI::pConfig()->get(Session::getLocalUser(), 'windowsphonepush', 'enable'); + $enable = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'enable'); if (!$enable) { return "Plug-in not enabled"; } - DI::pConfig()->set(Session::getLocalUser(), 'windowsphonepush', 'counterunseen', 0); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'windowsphonepush', 'counterunseen', 0); return "Counter set to zero"; } diff --git a/wppost/wppost.php b/wppost/wppost.php index e05286d4..9c12bb6e 100644 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -12,7 +12,6 @@ use Friendica\Content\Text\HTML; use Friendica\Core\Hook; use Friendica\Core\Logger; use Friendica\Core\Renderer; -use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Post; @@ -30,17 +29,17 @@ function wppost_install() function wppost_jot_nets(App &$a, array &$jotnets_fields) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - if (DI::pConfig()->get(Session::getLocalUser(),'wppost','post')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(),'wppost','post')) { $jotnets_fields[] = [ 'type' => 'checkbox', 'field' => [ 'wppost_enable', DI::l10n()->t('Post to Wordpress'), - DI::pConfig()->get(Session::getLocalUser(),'wppost','post_by_default') + DI::pConfig()->get(DI::userSession()->getLocalUserId(),'wppost','post_by_default') ] ]; } @@ -49,17 +48,17 @@ function wppost_jot_nets(App &$a, array &$jotnets_fields) function wppost_settings(App &$a, array &$data) { - if (!Session::getLocalUser()) { + if (!DI::userSession()->getLocalUserId()) { return; } - $enabled = DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'post', false); - $wp_username = DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'wp_username'); - $wp_blog = DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'wp_blog'); - $def_enabled = DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'post_by_default', false); - $back_enabled = DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'backlink', false); - $wp_backlink_text = DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'wp_backlink_text'); - $shortcheck_enabled = DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'shortcheck', false); + $enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'wppost', 'post', false); + $wp_username = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'wppost', 'wp_username'); + $wp_blog = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'wppost', 'wp_blog'); + $def_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'wppost', 'post_by_default', false); + $back_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'wppost', 'backlink', false); + $wp_backlink_text = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'wppost', 'wp_backlink_text'); + $shortcheck_enabled = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'wppost', 'shortcheck', false); $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/wppost/'); $html = Renderer::replaceMacros($t, [ @@ -86,16 +85,16 @@ function wppost_settings(App &$a, array &$data) function wppost_settings_post(App $a, array &$b) { if(!empty($_POST['wppost-submit'])) { - DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'post' , intval($_POST['wppost'])); - DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'post_by_default', intval($_POST['wp_bydefault'])); - DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'wp_username' , trim($_POST['wp_username'])); - DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'wp_password' , trim($_POST['wp_password'])); - DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'wp_blog' , trim($_POST['wp_blog'])); - DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'backlink' , intval($_POST['wp_backlink'])); - DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'shortcheck' , intval($_POST['wp_shortcheck'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'post' , intval($_POST['wppost'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'post_by_default', intval($_POST['wp_bydefault'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'wp_username' , trim($_POST['wp_username'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'wp_password' , trim($_POST['wp_password'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'wp_blog' , trim($_POST['wp_blog'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'backlink' , intval($_POST['wp_backlink'])); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'shortcheck' , intval($_POST['wp_shortcheck'])); $wp_backlink_text = BBCode::convert(trim($_POST['wp_backlink_text']), false, BBCode::BACKLINK); $wp_backlink_text = HTML::toPlaintext($wp_backlink_text, 0, true); - DI::pConfig()->set(Session::getLocalUser(), 'wppost', 'wp_backlink_text', $wp_backlink_text); + DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'wppost', 'wp_backlink_text', $wp_backlink_text); } } @@ -122,7 +121,7 @@ function wppost_post_local(App $a, array &$b) { return; } - if (!Session::getLocalUser() || (Session::getLocalUser() != $b['uid'])) { + if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) { return; } @@ -130,11 +129,11 @@ function wppost_post_local(App $a, array &$b) { return; } - $wp_post = intval(DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'post')); + $wp_post = intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'wppost', 'post')); $wp_enable = (($wp_post && !empty($_REQUEST['wppost_enable'])) ? intval($_REQUEST['wppost_enable']) : 0); - if ($b['api_source'] && intval(DI::pConfig()->get(Session::getLocalUser(), 'wppost', 'post_by_default'))) { + if ($b['api_source'] && intval(DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'wppost', 'post_by_default'))) { $wp_enable = 1; } From 94b4ad6279a22b4b4b52389740bb340cce48f976 Mon Sep 17 00:00:00 2001 From: Philipp Date: Fri, 21 Oct 2022 00:49:38 +0200 Subject: [PATCH 116/677] Fix CI pipeline --- .woodpecker/.continuous-deployment.yml | 12 +++++++----- .woodpecker/.releaser.yml | 12 +++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/.woodpecker/.continuous-deployment.yml b/.woodpecker/.continuous-deployment.yml index 46a32d9f..80df1fa5 100644 --- a/.woodpecker/.continuous-deployment.yml +++ b/.woodpecker/.continuous-deployment.yml @@ -1,8 +1,3 @@ -# This prevents executing this pipeline at other servers than ci.friendi.ca -labels: - location: friendica - type: releaser - skip_clone: true pipeline: @@ -15,6 +10,7 @@ pipeline: repo: friendica/friendica-addons branch: [ develop, '*-rc' ] event: push + instance: releaser.ci.friendi.ca clone_friendica_addon: image: alpine/git commands: @@ -29,6 +25,7 @@ pipeline: repo: friendica/friendica-addons branch: [ develop, '*-rc' ] event: push + instance: releaser.ci.friendi.ca restore_cache: image: meltwater/drone-cache:dev settings: @@ -44,6 +41,7 @@ pipeline: repo: friendica/friendica-addons branch: [ develop, '*-rc' ] event: push + instance: releaser.ci.friendi.ca composer_install: image: friendicaci/php7.4:php7.4.18 commands: @@ -56,6 +54,7 @@ pipeline: repo: friendica/friendica-addons branch: [ develop, '*-rc' ] event: push + instance: releaser.ci.friendi.ca create_artifacts: image: debian commands: @@ -84,6 +83,7 @@ pipeline: repo: friendica/friendica-addons branch: [ develop, '*-rc' ] event: push + instance: releaser.ci.friendi.ca sign_artifacts: image: plugins/gpgsign settings: @@ -100,6 +100,7 @@ pipeline: repo: friendica/friendica-addons branch: [ develop, '*-rc' ] event: push + instance: releaser.ci.friendi.ca publish_artifacts: image: alpine commands: @@ -110,3 +111,4 @@ pipeline: repo: friendica/friendica-addons branch: [ develop, '*-rc' ] event: push + instance: releaser.ci.friendi.ca diff --git a/.woodpecker/.releaser.yml b/.woodpecker/.releaser.yml index cd8ae368..b8b79f68 100644 --- a/.woodpecker/.releaser.yml +++ b/.woodpecker/.releaser.yml @@ -1,8 +1,3 @@ -# This prevents executing this pipeline at other servers than ci.friendi.ca -labels: - location: friendica - type: releaser - skip_clone: true pipeline: @@ -14,6 +9,7 @@ pipeline: when: repo: friendica/friendica-addons event: tag + instance: releaser.ci.friendi.ca clone_friendica_addon: image: alpine/git commands: @@ -27,6 +23,7 @@ pipeline: when: repo: friendica/friendica-addons event: tag + instance: releaser.ci.friendi.ca restore_cache: image: meltwater/drone-cache:dev settings: @@ -41,6 +38,7 @@ pipeline: when: repo: friendica/friendica-addons event: tag + instance: releaser.ci.friendi.ca composer_install: image: friendicaci/php7.4:php7.4.18 commands: @@ -50,6 +48,7 @@ pipeline: when: repo: friendica/friendica-addons event: tag + instance: releaser.ci.friendi.ca volumes: - /etc/hosts:/etc/hosts create_artifacts: @@ -79,6 +78,7 @@ pipeline: when: repo: friendica/friendica-addons event: tag + instance: releaser.ci.friendi.ca sign_artifacts: image: plugins/gpgsign settings: @@ -94,6 +94,7 @@ pipeline: when: repo: friendica/friendica-addons event: tag + instance: releaser.ci.friendi.ca publish_artifacts: image: alpine commands: @@ -103,3 +104,4 @@ pipeline: when: repo: friendica/friendica-addons event: tag + instance: releaser.ci.friendi.ca From 6d2b7459b5ab475da013d463f71e10cbb07ad0b6 Mon Sep 17 00:00:00 2001 From: Philipp Date: Fri, 21 Oct 2022 00:05:52 +0200 Subject: [PATCH 117/677] [monolog] Remove non-compliant PSR4 config --- monolog/composer.json | 5 ----- monolog/monolog.php | 2 +- monolog/src/DevelopHandler.php | 2 +- monolog/src/IntrospectionProcessor.php | 2 +- monolog/vendor/composer/autoload_classmap.php | 2 -- monolog/vendor/composer/autoload_psr4.php | 1 - monolog/vendor/composer/autoload_static.php | 10 ---------- 7 files changed, 3 insertions(+), 21 deletions(-) diff --git a/monolog/composer.json b/monolog/composer.json index f9d8d4b3..9c7f32c3 100644 --- a/monolog/composer.json +++ b/monolog/composer.json @@ -10,11 +10,6 @@ "role": "Developer" } ], - "autoload": { - "psr-4": { - "Friendica\\Addon\\Monolog\\": "src/" - } - }, "require": { "php": ">=7.0", "monolog/monolog": "^3.2" diff --git a/monolog/monolog.php b/monolog/monolog.php index 0df9ac0b..f89feafe 100644 --- a/monolog/monolog.php +++ b/monolog/monolog.php @@ -8,7 +8,7 @@ use Friendica\App; use Friendica\Core\Hook; -use Friendica\Addon\Monolog\IntrospectionProcessor; +use Friendica\Addon\monolog\src\IntrospectionProcessor; use Friendica\DI; use Psr\Log\LogLevel; diff --git a/monolog/src/DevelopHandler.php b/monolog/src/DevelopHandler.php index cab297ae..1c6f0bf1 100644 --- a/monolog/src/DevelopHandler.php +++ b/monolog/src/DevelopHandler.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Addon\Monolog; +namespace Friendica\Addon\monolog\src; use Friendica\App\Request; use Monolog\Handler; diff --git a/monolog/src/IntrospectionProcessor.php b/monolog/src/IntrospectionProcessor.php index b82bd67a..bb5428af 100644 --- a/monolog/src/IntrospectionProcessor.php +++ b/monolog/src/IntrospectionProcessor.php @@ -19,7 +19,7 @@ * */ -namespace Friendica\Addon\Monolog; +namespace Friendica\Addon\monolog\src; use Friendica\Core\Logger\Util\Introspection; use Monolog\Logger; diff --git a/monolog/vendor/composer/autoload_classmap.php b/monolog/vendor/composer/autoload_classmap.php index 6a85d4b5..70609203 100644 --- a/monolog/vendor/composer/autoload_classmap.php +++ b/monolog/vendor/composer/autoload_classmap.php @@ -6,8 +6,6 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - 'Friendica\\Addon\\Monolog\\DevelopHandler' => $baseDir . '/src/DevelopHandler.php', - 'Friendica\\Addon\\Monolog\\IntrospectionProcessor' => $baseDir . '/src/IntrospectionProcessor.php', 'Monolog\\Attribute\\AsMonologProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php', 'Monolog\\DateTimeImmutable' => $vendorDir . '/monolog/monolog/src/Monolog/DateTimeImmutable.php', 'Monolog\\ErrorHandler' => $vendorDir . '/monolog/monolog/src/Monolog/ErrorHandler.php', diff --git a/monolog/vendor/composer/autoload_psr4.php b/monolog/vendor/composer/autoload_psr4.php index 551ee81e..afcfb31e 100644 --- a/monolog/vendor/composer/autoload_psr4.php +++ b/monolog/vendor/composer/autoload_psr4.php @@ -8,5 +8,4 @@ $baseDir = dirname($vendorDir); return array( 'Psr\\Log\\' => array($vendorDir . '/psr/log/src'), 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), - 'Friendica\\Addon\\Monolog\\' => array($baseDir . '/src'), ); diff --git a/monolog/vendor/composer/autoload_static.php b/monolog/vendor/composer/autoload_static.php index e871958a..85bd86fd 100644 --- a/monolog/vendor/composer/autoload_static.php +++ b/monolog/vendor/composer/autoload_static.php @@ -15,10 +15,6 @@ class ComposerStaticInitMonologAddon array ( 'Monolog\\' => 8, ), - 'F' => - array ( - 'Friendica\\Addon\\Monolog\\' => 24, - ), ); public static $prefixDirsPsr4 = array ( @@ -30,15 +26,9 @@ class ComposerStaticInitMonologAddon array ( 0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog', ), - 'Friendica\\Addon\\Monolog\\' => - array ( - 0 => __DIR__ . '/../..' . '/src', - ), ); public static $classMap = array ( - 'Friendica\\Addon\\Monolog\\DevelopHandler' => __DIR__ . '/../..' . '/src/DevelopHandler.php', - 'Friendica\\Addon\\Monolog\\IntrospectionProcessor' => __DIR__ . '/../..' . '/src/IntrospectionProcessor.php', 'Monolog\\Attribute\\AsMonologProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php', 'Monolog\\DateTimeImmutable' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/DateTimeImmutable.php', 'Monolog\\ErrorHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/ErrorHandler.php', From 97fcee53c04345271c62df18f44e6fad948a3d0e Mon Sep 17 00:00:00 2001 From: Philipp Date: Fri, 21 Oct 2022 08:42:47 +0200 Subject: [PATCH 118/677] [saml] Replace $_SESSION with DI::session() --- saml/saml.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/saml/saml.php b/saml/saml.php index 53e65b57..52d36d99 100755 --- a/saml/saml.php +++ b/saml/saml.php @@ -117,7 +117,7 @@ function saml_sso_initiate(App $a, array &$b) $auth = new \OneLogin\Saml2\Auth(saml_settings()); $ssoBuiltUrl = $auth->login(null, [], false, false, true); - $_SESSION['AuthNRequestID'] = $auth->getLastRequestID(); + DI::session()->set('AuthNRequestID', $auth->getLastRequestID()); header('Pragma: no-cache'); header('Cache-Control: no-cache, must-revalidate'); header('Location: ' . $ssoBuiltUrl); @@ -129,12 +129,12 @@ function saml_sso_reply(App $a) $auth = new \OneLogin\Saml2\Auth(saml_settings()); $requestID = null; - if (isset($_SESSION) && isset($_SESSION['AuthNRequestID'])) { - $requestID = $_SESSION['AuthNRequestID']; + if (DI::session()->exists('AuthNRequestID')) { + $requestID = DI::session()->get('AuthNRequestID'); } $auth->processResponse($requestID); - unset($_SESSION['AuthNRequestID']); + DI::session()->remove('AuthNRequestID'); $errors = $auth->getErrors(); @@ -183,7 +183,7 @@ function saml_slo_initiate(App $a, array &$b) $auth = new \OneLogin\Saml2\Auth(saml_settings()); $sloBuiltUrl = $auth->logout(); - $_SESSION['LogoutRequestID'] = $auth->getLastRequestID(); + DI::session()->set('LogoutRequestID', $auth->getLastRequestID()); header('Pragma: no-cache'); header('Cache-Control: no-cache, must-revalidate'); header('Location: ' . $sloBuiltUrl); @@ -194,8 +194,8 @@ function saml_slo_reply() { $auth = new \OneLogin\Saml2\Auth(saml_settings()); - if (isset($_SESSION) && isset($_SESSION['LogoutRequestID'])) { - $requestID = $_SESSION['LogoutRequestID']; + if (DI::session()->exists('LogoutRequestID')) { + $requestID = DI::session()->get('LogoutRequestID'); } else { $requestID = null; } From 9a6a0925184c870653d57795b200110d7c0cf662 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 22 Oct 2022 20:16:31 +0200 Subject: [PATCH 119/677] Revert "Fix CI pipeline" --- .woodpecker/.continuous-deployment.yml | 12 +++++------- .woodpecker/.releaser.yml | 12 +++++------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/.woodpecker/.continuous-deployment.yml b/.woodpecker/.continuous-deployment.yml index 80df1fa5..46a32d9f 100644 --- a/.woodpecker/.continuous-deployment.yml +++ b/.woodpecker/.continuous-deployment.yml @@ -1,3 +1,8 @@ +# This prevents executing this pipeline at other servers than ci.friendi.ca +labels: + location: friendica + type: releaser + skip_clone: true pipeline: @@ -10,7 +15,6 @@ pipeline: repo: friendica/friendica-addons branch: [ develop, '*-rc' ] event: push - instance: releaser.ci.friendi.ca clone_friendica_addon: image: alpine/git commands: @@ -25,7 +29,6 @@ pipeline: repo: friendica/friendica-addons branch: [ develop, '*-rc' ] event: push - instance: releaser.ci.friendi.ca restore_cache: image: meltwater/drone-cache:dev settings: @@ -41,7 +44,6 @@ pipeline: repo: friendica/friendica-addons branch: [ develop, '*-rc' ] event: push - instance: releaser.ci.friendi.ca composer_install: image: friendicaci/php7.4:php7.4.18 commands: @@ -54,7 +56,6 @@ pipeline: repo: friendica/friendica-addons branch: [ develop, '*-rc' ] event: push - instance: releaser.ci.friendi.ca create_artifacts: image: debian commands: @@ -83,7 +84,6 @@ pipeline: repo: friendica/friendica-addons branch: [ develop, '*-rc' ] event: push - instance: releaser.ci.friendi.ca sign_artifacts: image: plugins/gpgsign settings: @@ -100,7 +100,6 @@ pipeline: repo: friendica/friendica-addons branch: [ develop, '*-rc' ] event: push - instance: releaser.ci.friendi.ca publish_artifacts: image: alpine commands: @@ -111,4 +110,3 @@ pipeline: repo: friendica/friendica-addons branch: [ develop, '*-rc' ] event: push - instance: releaser.ci.friendi.ca diff --git a/.woodpecker/.releaser.yml b/.woodpecker/.releaser.yml index b8b79f68..cd8ae368 100644 --- a/.woodpecker/.releaser.yml +++ b/.woodpecker/.releaser.yml @@ -1,3 +1,8 @@ +# This prevents executing this pipeline at other servers than ci.friendi.ca +labels: + location: friendica + type: releaser + skip_clone: true pipeline: @@ -9,7 +14,6 @@ pipeline: when: repo: friendica/friendica-addons event: tag - instance: releaser.ci.friendi.ca clone_friendica_addon: image: alpine/git commands: @@ -23,7 +27,6 @@ pipeline: when: repo: friendica/friendica-addons event: tag - instance: releaser.ci.friendi.ca restore_cache: image: meltwater/drone-cache:dev settings: @@ -38,7 +41,6 @@ pipeline: when: repo: friendica/friendica-addons event: tag - instance: releaser.ci.friendi.ca composer_install: image: friendicaci/php7.4:php7.4.18 commands: @@ -48,7 +50,6 @@ pipeline: when: repo: friendica/friendica-addons event: tag - instance: releaser.ci.friendi.ca volumes: - /etc/hosts:/etc/hosts create_artifacts: @@ -78,7 +79,6 @@ pipeline: when: repo: friendica/friendica-addons event: tag - instance: releaser.ci.friendi.ca sign_artifacts: image: plugins/gpgsign settings: @@ -94,7 +94,6 @@ pipeline: when: repo: friendica/friendica-addons event: tag - instance: releaser.ci.friendi.ca publish_artifacts: image: alpine commands: @@ -104,4 +103,3 @@ pipeline: when: repo: friendica/friendica-addons event: tag - instance: releaser.ci.friendi.ca From 7522a8eb9a4d292f2e3fcb1c9794112e7cf93bdc Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Fri, 28 Oct 2022 21:16:27 -0400 Subject: [PATCH 120/677] [advancedcontentfilter] Ship standalone Vue 2 library with addon - The Composer Bower package stopped including the dist/vue.min.js which was required by the addon --- advancedcontentfilter/asset/vue/dist/vue.js | 11894 ++++++++++++++++ .../asset/vue/dist/vue.min.js | 11 + advancedcontentfilter/templates/settings.tpl | 2 +- 3 files changed, 11906 insertions(+), 1 deletion(-) create mode 100644 advancedcontentfilter/asset/vue/dist/vue.js create mode 100644 advancedcontentfilter/asset/vue/dist/vue.min.js diff --git a/advancedcontentfilter/asset/vue/dist/vue.js b/advancedcontentfilter/asset/vue/dist/vue.js new file mode 100644 index 00000000..04bcb375 --- /dev/null +++ b/advancedcontentfilter/asset/vue/dist/vue.js @@ -0,0 +1,11894 @@ +/*! + * Vue.js v2.7.13 + * (c) 2014-2022 Evan You + * Released under the MIT License. + */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Vue = factory()); +})(this, (function () { 'use strict'; + + var emptyObject = Object.freeze({}); + var isArray = Array.isArray; + // These helpers produce better VM code in JS engines due to their + // explicitness and function inlining. + function isUndef(v) { + return v === undefined || v === null; + } + function isDef(v) { + return v !== undefined && v !== null; + } + function isTrue(v) { + return v === true; + } + function isFalse(v) { + return v === false; + } + /** + * Check if value is primitive. + */ + function isPrimitive(value) { + return (typeof value === 'string' || + typeof value === 'number' || + // $flow-disable-line + typeof value === 'symbol' || + typeof value === 'boolean'); + } + function isFunction(value) { + return typeof value === 'function'; + } + /** + * Quick object check - this is primarily used to tell + * objects from primitive values when we know the value + * is a JSON-compliant type. + */ + function isObject(obj) { + return obj !== null && typeof obj === 'object'; + } + /** + * Get the raw type string of a value, e.g., [object Object]. + */ + var _toString = Object.prototype.toString; + function toRawType(value) { + return _toString.call(value).slice(8, -1); + } + /** + * Strict object type check. Only returns true + * for plain JavaScript objects. + */ + function isPlainObject(obj) { + return _toString.call(obj) === '[object Object]'; + } + function isRegExp(v) { + return _toString.call(v) === '[object RegExp]'; + } + /** + * Check if val is a valid array index. + */ + function isValidArrayIndex(val) { + var n = parseFloat(String(val)); + return n >= 0 && Math.floor(n) === n && isFinite(val); + } + function isPromise(val) { + return (isDef(val) && + typeof val.then === 'function' && + typeof val.catch === 'function'); + } + /** + * Convert a value to a string that is actually rendered. + */ + function toString(val) { + return val == null + ? '' + : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString) + ? JSON.stringify(val, null, 2) + : String(val); + } + /** + * Convert an input value to a number for persistence. + * If the conversion fails, return original string. + */ + function toNumber(val) { + var n = parseFloat(val); + return isNaN(n) ? val : n; + } + /** + * Make a map and return a function for checking if a key + * is in that map. + */ + function makeMap(str, expectsLowerCase) { + var map = Object.create(null); + var list = str.split(','); + for (var i = 0; i < list.length; i++) { + map[list[i]] = true; + } + return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; }; + } + /** + * Check if a tag is a built-in tag. + */ + var isBuiltInTag = makeMap('slot,component', true); + /** + * Check if an attribute is a reserved attribute. + */ + var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is'); + /** + * Remove an item from an array. + */ + function remove$2(arr, item) { + var len = arr.length; + if (len) { + // fast path for the only / last item + if (item === arr[len - 1]) { + arr.length = len - 1; + return; + } + var index = arr.indexOf(item); + if (index > -1) { + return arr.splice(index, 1); + } + } + } + /** + * Check whether an object has the property. + */ + var hasOwnProperty = Object.prototype.hasOwnProperty; + function hasOwn(obj, key) { + return hasOwnProperty.call(obj, key); + } + /** + * Create a cached version of a pure function. + */ + function cached(fn) { + var cache = Object.create(null); + return function cachedFn(str) { + var hit = cache[str]; + return hit || (cache[str] = fn(str)); + }; + } + /** + * Camelize a hyphen-delimited string. + */ + var camelizeRE = /-(\w)/g; + var camelize = cached(function (str) { + return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); }); + }); + /** + * Capitalize a string. + */ + var capitalize = cached(function (str) { + return str.charAt(0).toUpperCase() + str.slice(1); + }); + /** + * Hyphenate a camelCase string. + */ + var hyphenateRE = /\B([A-Z])/g; + var hyphenate = cached(function (str) { + return str.replace(hyphenateRE, '-$1').toLowerCase(); + }); + /** + * Simple bind polyfill for environments that do not support it, + * e.g., PhantomJS 1.x. Technically, we don't need this anymore + * since native bind is now performant enough in most browsers. + * But removing it would mean breaking code that was able to run in + * PhantomJS 1.x, so this must be kept for backward compatibility. + */ + /* istanbul ignore next */ + function polyfillBind(fn, ctx) { + function boundFn(a) { + var l = arguments.length; + return l + ? l > 1 + ? fn.apply(ctx, arguments) + : fn.call(ctx, a) + : fn.call(ctx); + } + boundFn._length = fn.length; + return boundFn; + } + function nativeBind(fn, ctx) { + return fn.bind(ctx); + } + // @ts-expect-error bind cannot be `undefined` + var bind$1 = Function.prototype.bind ? nativeBind : polyfillBind; + /** + * Convert an Array-like object to a real Array. + */ + function toArray(list, start) { + start = start || 0; + var i = list.length - start; + var ret = new Array(i); + while (i--) { + ret[i] = list[i + start]; + } + return ret; + } + /** + * Mix properties into target object. + */ + function extend(to, _from) { + for (var key in _from) { + to[key] = _from[key]; + } + return to; + } + /** + * Merge an Array of Objects into a single Object. + */ + function toObject(arr) { + var res = {}; + for (var i = 0; i < arr.length; i++) { + if (arr[i]) { + extend(res, arr[i]); + } + } + return res; + } + /* eslint-disable no-unused-vars */ + /** + * Perform no operation. + * Stubbing args to make Flow happy without leaving useless transpiled code + * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/). + */ + function noop(a, b, c) { } + /** + * Always return false. + */ + var no = function (a, b, c) { return false; }; + /* eslint-enable no-unused-vars */ + /** + * Return the same value. + */ + var identity = function (_) { return _; }; + /** + * Generate a string containing static keys from compiler modules. + */ + function genStaticKeys$1(modules) { + return modules + .reduce(function (keys, m) { + return keys.concat(m.staticKeys || []); + }, []) + .join(','); + } + /** + * Check if two values are loosely equal - that is, + * if they are plain objects, do they have the same shape? + */ + function looseEqual(a, b) { + if (a === b) + return true; + var isObjectA = isObject(a); + var isObjectB = isObject(b); + if (isObjectA && isObjectB) { + try { + var isArrayA = Array.isArray(a); + var isArrayB = Array.isArray(b); + if (isArrayA && isArrayB) { + return (a.length === b.length && + a.every(function (e, i) { + return looseEqual(e, b[i]); + })); + } + else if (a instanceof Date && b instanceof Date) { + return a.getTime() === b.getTime(); + } + else if (!isArrayA && !isArrayB) { + var keysA = Object.keys(a); + var keysB = Object.keys(b); + return (keysA.length === keysB.length && + keysA.every(function (key) { + return looseEqual(a[key], b[key]); + })); + } + else { + /* istanbul ignore next */ + return false; + } + } + catch (e) { + /* istanbul ignore next */ + return false; + } + } + else if (!isObjectA && !isObjectB) { + return String(a) === String(b); + } + else { + return false; + } + } + /** + * Return the first index at which a loosely equal value can be + * found in the array (if value is a plain object, the array must + * contain an object of the same shape), or -1 if it is not present. + */ + function looseIndexOf(arr, val) { + for (var i = 0; i < arr.length; i++) { + if (looseEqual(arr[i], val)) + return i; + } + return -1; + } + /** + * Ensure a function is called only once. + */ + function once(fn) { + var called = false; + return function () { + if (!called) { + called = true; + fn.apply(this, arguments); + } + }; + } + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill + function hasChanged(x, y) { + if (x === y) { + return x === 0 && 1 / x !== 1 / y; + } + else { + return x === x || y === y; + } + } + + var SSR_ATTR = 'data-server-rendered'; + var ASSET_TYPES = ['component', 'directive', 'filter']; + var LIFECYCLE_HOOKS = [ + 'beforeCreate', + 'created', + 'beforeMount', + 'mounted', + 'beforeUpdate', + 'updated', + 'beforeDestroy', + 'destroyed', + 'activated', + 'deactivated', + 'errorCaptured', + 'serverPrefetch', + 'renderTracked', + 'renderTriggered' + ]; + + var config = { + /** + * Option merge strategies (used in core/util/options) + */ + // $flow-disable-line + optionMergeStrategies: Object.create(null), + /** + * Whether to suppress warnings. + */ + silent: false, + /** + * Show production mode tip message on boot? + */ + productionTip: true, + /** + * Whether to enable devtools + */ + devtools: true, + /** + * Whether to record perf + */ + performance: false, + /** + * Error handler for watcher errors + */ + errorHandler: null, + /** + * Warn handler for watcher warns + */ + warnHandler: null, + /** + * Ignore certain custom elements + */ + ignoredElements: [], + /** + * Custom user key aliases for v-on + */ + // $flow-disable-line + keyCodes: Object.create(null), + /** + * Check if a tag is reserved so that it cannot be registered as a + * component. This is platform-dependent and may be overwritten. + */ + isReservedTag: no, + /** + * Check if an attribute is reserved so that it cannot be used as a component + * prop. This is platform-dependent and may be overwritten. + */ + isReservedAttr: no, + /** + * Check if a tag is an unknown element. + * Platform-dependent. + */ + isUnknownElement: no, + /** + * Get the namespace of an element + */ + getTagNamespace: noop, + /** + * Parse the real tag name for the specific platform. + */ + parsePlatformTagName: identity, + /** + * Check if an attribute must be bound using property, e.g. value + * Platform-dependent. + */ + mustUseProp: no, + /** + * Perform updates asynchronously. Intended to be used by Vue Test Utils + * This will significantly reduce performance if set to false. + */ + async: true, + /** + * Exposed for legacy reasons + */ + _lifecycleHooks: LIFECYCLE_HOOKS + }; + + /** + * unicode letters used for parsing html tags, component names and property paths. + * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname + * skipping \u10000-\uEFFFF due to it freezing up PhantomJS + */ + var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/; + /** + * Check if a string starts with $ or _ + */ + function isReserved(str) { + var c = (str + '').charCodeAt(0); + return c === 0x24 || c === 0x5f; + } + /** + * Define a property. + */ + function def(obj, key, val, enumerable) { + Object.defineProperty(obj, key, { + value: val, + enumerable: !!enumerable, + writable: true, + configurable: true + }); + } + /** + * Parse simple path. + */ + var bailRE = new RegExp("[^".concat(unicodeRegExp.source, ".$_\\d]")); + function parsePath(path) { + if (bailRE.test(path)) { + return; + } + var segments = path.split('.'); + return function (obj) { + for (var i = 0; i < segments.length; i++) { + if (!obj) + return; + obj = obj[segments[i]]; + } + return obj; + }; + } + + // can we use __proto__? + var hasProto = '__proto__' in {}; + // Browser environment sniffing + var inBrowser = typeof window !== 'undefined'; + var UA = inBrowser && window.navigator.userAgent.toLowerCase(); + var isIE = UA && /msie|trident/.test(UA); + var isIE9 = UA && UA.indexOf('msie 9.0') > 0; + var isEdge = UA && UA.indexOf('edge/') > 0; + UA && UA.indexOf('android') > 0; + var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA); + UA && /chrome\/\d+/.test(UA) && !isEdge; + UA && /phantomjs/.test(UA); + var isFF = UA && UA.match(/firefox\/(\d+)/); + // Firefox has a "watch" function on Object.prototype... + // @ts-expect-error firebox support + var nativeWatch = {}.watch; + var supportsPassive = false; + if (inBrowser) { + try { + var opts = {}; + Object.defineProperty(opts, 'passive', { + get: function () { + /* istanbul ignore next */ + supportsPassive = true; + } + }); // https://github.com/facebook/flow/issues/285 + window.addEventListener('test-passive', null, opts); + } + catch (e) { } + } + // this needs to be lazy-evaled because vue may be required before + // vue-server-renderer can set VUE_ENV + var _isServer; + var isServerRendering = function () { + if (_isServer === undefined) { + /* istanbul ignore if */ + if (!inBrowser && typeof global !== 'undefined') { + // detect presence of vue-server-renderer and avoid + // Webpack shimming the process + _isServer = + global['process'] && global['process'].env.VUE_ENV === 'server'; + } + else { + _isServer = false; + } + } + return _isServer; + }; + // detect devtools + var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__; + /* istanbul ignore next */ + function isNative(Ctor) { + return typeof Ctor === 'function' && /native code/.test(Ctor.toString()); + } + var hasSymbol = typeof Symbol !== 'undefined' && + isNative(Symbol) && + typeof Reflect !== 'undefined' && + isNative(Reflect.ownKeys); + var _Set; // $flow-disable-line + /* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) { + // use native Set when available. + _Set = Set; + } + else { + // a non-standard Set polyfill that only works with primitive keys. + _Set = /** @class */ (function () { + function Set() { + this.set = Object.create(null); + } + Set.prototype.has = function (key) { + return this.set[key] === true; + }; + Set.prototype.add = function (key) { + this.set[key] = true; + }; + Set.prototype.clear = function () { + this.set = Object.create(null); + }; + return Set; + }()); + } + + var currentInstance = null; + /** + * This is exposed for compatibility with v3 (e.g. some functions in VueUse + * relies on it). Do not use this internally, just use `currentInstance`. + * + * @internal this function needs manual type declaration because it relies + * on previously manually authored types from Vue 2 + */ + function getCurrentInstance() { + return currentInstance && { proxy: currentInstance }; + } + /** + * @internal + */ + function setCurrentInstance(vm) { + if (vm === void 0) { vm = null; } + if (!vm) + currentInstance && currentInstance._scope.off(); + currentInstance = vm; + vm && vm._scope.on(); + } + + /** + * @internal + */ + var VNode = /** @class */ (function () { + function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) { + this.tag = tag; + this.data = data; + this.children = children; + this.text = text; + this.elm = elm; + this.ns = undefined; + this.context = context; + this.fnContext = undefined; + this.fnOptions = undefined; + this.fnScopeId = undefined; + this.key = data && data.key; + this.componentOptions = componentOptions; + this.componentInstance = undefined; + this.parent = undefined; + this.raw = false; + this.isStatic = false; + this.isRootInsert = true; + this.isComment = false; + this.isCloned = false; + this.isOnce = false; + this.asyncFactory = asyncFactory; + this.asyncMeta = undefined; + this.isAsyncPlaceholder = false; + } + Object.defineProperty(VNode.prototype, "child", { + // DEPRECATED: alias for componentInstance for backwards compat. + /* istanbul ignore next */ + get: function () { + return this.componentInstance; + }, + enumerable: false, + configurable: true + }); + return VNode; + }()); + var createEmptyVNode = function (text) { + if (text === void 0) { text = ''; } + var node = new VNode(); + node.text = text; + node.isComment = true; + return node; + }; + function createTextVNode(val) { + return new VNode(undefined, undefined, undefined, String(val)); + } + // optimized shallow clone + // used for static nodes and slot nodes because they may be reused across + // multiple renders, cloning them avoids errors when DOM manipulations rely + // on their elm reference. + function cloneVNode(vnode) { + var cloned = new VNode(vnode.tag, vnode.data, + // #7975 + // clone children array to avoid mutating original in case of cloning + // a child. + vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory); + cloned.ns = vnode.ns; + cloned.isStatic = vnode.isStatic; + cloned.key = vnode.key; + cloned.isComment = vnode.isComment; + cloned.fnContext = vnode.fnContext; + cloned.fnOptions = vnode.fnOptions; + cloned.fnScopeId = vnode.fnScopeId; + cloned.asyncMeta = vnode.asyncMeta; + cloned.isCloned = true; + return cloned; + } + + /* not type checking this file because flow doesn't play well with Proxy */ + var initProxy; + { + var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' + + 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' + + 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' + + 'require' // for Webpack/Browserify + ); + var warnNonPresent_1 = function (target, key) { + warn$2("Property or method \"".concat(key, "\" is not defined on the instance but ") + + 'referenced during render. Make sure that this property is reactive, ' + + 'either in the data option, or for class-based components, by ' + + 'initializing the property. ' + + 'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target); + }; + var warnReservedPrefix_1 = function (target, key) { + warn$2("Property \"".concat(key, "\" must be accessed with \"$data.").concat(key, "\" because ") + + 'properties starting with "$" or "_" are not proxied in the Vue instance to ' + + 'prevent conflicts with Vue internals. ' + + 'See: https://v2.vuejs.org/v2/api/#data', target); + }; + var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy); + if (hasProxy_1) { + var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact'); + config.keyCodes = new Proxy(config.keyCodes, { + set: function (target, key, value) { + if (isBuiltInModifier_1(key)) { + warn$2("Avoid overwriting built-in modifier in config.keyCodes: .".concat(key)); + return false; + } + else { + target[key] = value; + return true; + } + } + }); + } + var hasHandler_1 = { + has: function (target, key) { + var has = key in target; + var isAllowed = allowedGlobals_1(key) || + (typeof key === 'string' && + key.charAt(0) === '_' && + !(key in target.$data)); + if (!has && !isAllowed) { + if (key in target.$data) + warnReservedPrefix_1(target, key); + else + warnNonPresent_1(target, key); + } + return has || !isAllowed; + } + }; + var getHandler_1 = { + get: function (target, key) { + if (typeof key === 'string' && !(key in target)) { + if (key in target.$data) + warnReservedPrefix_1(target, key); + else + warnNonPresent_1(target, key); + } + return target[key]; + } + }; + initProxy = function initProxy(vm) { + if (hasProxy_1) { + // determine which proxy handler to use + var options = vm.$options; + var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1; + vm._renderProxy = new Proxy(vm, handlers); + } + else { + vm._renderProxy = vm; + } + }; + } + + /****************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + var uid$2 = 0; + var pendingCleanupDeps = []; + var cleanupDeps = function () { + for (var i = 0; i < pendingCleanupDeps.length; i++) { + var dep = pendingCleanupDeps[i]; + dep.subs = dep.subs.filter(function (s) { return s; }); + dep._pending = false; + } + pendingCleanupDeps.length = 0; + }; + /** + * A dep is an observable that can have multiple + * directives subscribing to it. + * @internal + */ + var Dep = /** @class */ (function () { + function Dep() { + // pending subs cleanup + this._pending = false; + this.id = uid$2++; + this.subs = []; + } + Dep.prototype.addSub = function (sub) { + this.subs.push(sub); + }; + Dep.prototype.removeSub = function (sub) { + // #12696 deps with massive amount of subscribers are extremely slow to + // clean up in Chromium + // to workaround this, we unset the sub for now, and clear them on + // next scheduler flush. + this.subs[this.subs.indexOf(sub)] = null; + if (!this._pending) { + this._pending = true; + pendingCleanupDeps.push(this); + } + }; + Dep.prototype.depend = function (info) { + if (Dep.target) { + Dep.target.addDep(this); + if (info && Dep.target.onTrack) { + Dep.target.onTrack(__assign({ effect: Dep.target }, info)); + } + } + }; + Dep.prototype.notify = function (info) { + // stabilize the subscriber list first + var subs = this.subs.filter(function (s) { return s; }); + if (!config.async) { + // subs aren't sorted in scheduler if not running async + // we need to sort them now to make sure they fire in correct + // order + subs.sort(function (a, b) { return a.id - b.id; }); + } + for (var i = 0, l = subs.length; i < l; i++) { + var sub = subs[i]; + if (info) { + sub.onTrigger && + sub.onTrigger(__assign({ effect: subs[i] }, info)); + } + sub.update(); + } + }; + return Dep; + }()); + // The current target watcher being evaluated. + // This is globally unique because only one watcher + // can be evaluated at a time. + Dep.target = null; + var targetStack = []; + function pushTarget(target) { + targetStack.push(target); + Dep.target = target; + } + function popTarget() { + targetStack.pop(); + Dep.target = targetStack[targetStack.length - 1]; + } + + /* + * not type checking this file because flow doesn't play well with + * dynamically accessing methods on Array prototype + */ + var arrayProto = Array.prototype; + var arrayMethods = Object.create(arrayProto); + var methodsToPatch = [ + 'push', + 'pop', + 'shift', + 'unshift', + 'splice', + 'sort', + 'reverse' + ]; + /** + * Intercept mutating methods and emit events + */ + methodsToPatch.forEach(function (method) { + // cache original method + var original = arrayProto[method]; + def(arrayMethods, method, function mutator() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var result = original.apply(this, args); + var ob = this.__ob__; + var inserted; + switch (method) { + case 'push': + case 'unshift': + inserted = args; + break; + case 'splice': + inserted = args.slice(2); + break; + } + if (inserted) + ob.observeArray(inserted); + // notify change + { + ob.dep.notify({ + type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */, + target: this, + key: method + }); + } + return result; + }); + }); + + var rawMap = new WeakMap(); + function reactive(target) { + makeReactive(target, false); + return target; + } + /** + * Return a shallowly-reactive copy of the original object, where only the root + * level properties are reactive. It also does not auto-unwrap refs (even at the + * root level). + */ + function shallowReactive(target) { + makeReactive(target, true); + def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true); + return target; + } + function makeReactive(target, shallow) { + // if trying to observe a readonly proxy, return the readonly version. + if (!isReadonly(target)) { + { + if (isArray(target)) { + warn$2("Avoid using Array as root value for ".concat(shallow ? "shallowReactive()" : "reactive()", " as it cannot be tracked in watch() or watchEffect(). Use ").concat(shallow ? "shallowRef()" : "ref()", " instead. This is a Vue-2-only limitation.")); + } + var existingOb = target && target.__ob__; + if (existingOb && existingOb.shallow !== shallow) { + warn$2("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow.")); + } + } + var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */); + if (!ob) { + if (target == null || isPrimitive(target)) { + warn$2("value cannot be made reactive: ".concat(String(target))); + } + if (isCollectionType(target)) { + warn$2("Vue 2 does not support reactive collection types such as Map or Set."); + } + } + } + } + function isReactive(value) { + if (isReadonly(value)) { + return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]); + } + return !!(value && value.__ob__); + } + function isShallow(value) { + return !!(value && value.__v_isShallow); + } + function isReadonly(value) { + return !!(value && value.__v_isReadonly); + } + function isProxy(value) { + return isReactive(value) || isReadonly(value); + } + function toRaw(observed) { + var raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */]; + return raw ? toRaw(raw) : observed; + } + function markRaw(value) { + if (isObject(value)) { + rawMap.set(value, true); + } + return value; + } + /** + * @internal + */ + function isCollectionType(value) { + var type = toRawType(value); + return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet'); + } + + var arrayKeys = Object.getOwnPropertyNames(arrayMethods); + var NO_INIITIAL_VALUE = {}; + /** + * In some cases we may want to disable observation inside a component's + * update computation. + */ + var shouldObserve = true; + function toggleObserving(value) { + shouldObserve = value; + } + // ssr mock dep + var mockDep = { + notify: noop, + depend: noop, + addSub: noop, + removeSub: noop + }; + /** + * Observer class that is attached to each observed + * object. Once attached, the observer converts the target + * object's property keys into getter/setters that + * collect dependencies and dispatch updates. + */ + var Observer = /** @class */ (function () { + function Observer(value, shallow, mock) { + if (shallow === void 0) { shallow = false; } + if (mock === void 0) { mock = false; } + this.value = value; + this.shallow = shallow; + this.mock = mock; + // this.value = value + this.dep = mock ? mockDep : new Dep(); + this.vmCount = 0; + def(value, '__ob__', this); + if (isArray(value)) { + if (!mock) { + if (hasProto) { + value.__proto__ = arrayMethods; + /* eslint-enable no-proto */ + } + else { + for (var i = 0, l = arrayKeys.length; i < l; i++) { + var key = arrayKeys[i]; + def(value, key, arrayMethods[key]); + } + } + } + if (!shallow) { + this.observeArray(value); + } + } + else { + /** + * Walk through all properties and convert them into + * getter/setters. This method should only be called when + * value type is Object. + */ + var keys = Object.keys(value); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock); + } + } + } + /** + * Observe a list of Array items. + */ + Observer.prototype.observeArray = function (value) { + for (var i = 0, l = value.length; i < l; i++) { + observe(value[i], false, this.mock); + } + }; + return Observer; + }()); + // helpers + /** + * Attempt to create an observer instance for a value, + * returns the new observer if successfully observed, + * or the existing observer if the value already has one. + */ + function observe(value, shallow, ssrMockReactivity) { + if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { + return value.__ob__; + } + if (shouldObserve && + (ssrMockReactivity || !isServerRendering()) && + (isArray(value) || isPlainObject(value)) && + Object.isExtensible(value) && + !value.__v_skip /* ReactiveFlags.SKIP */ && + !rawMap.has(value) && + !isRef(value) && + !(value instanceof VNode)) { + return new Observer(value, shallow, ssrMockReactivity); + } + } + /** + * Define a reactive property on an Object. + */ + function defineReactive(obj, key, val, customSetter, shallow, mock) { + var dep = new Dep(); + var property = Object.getOwnPropertyDescriptor(obj, key); + if (property && property.configurable === false) { + return; + } + // cater for pre-defined getter/setters + var getter = property && property.get; + var setter = property && property.set; + if ((!getter || setter) && + (val === NO_INIITIAL_VALUE || arguments.length === 2)) { + val = obj[key]; + } + var childOb = !shallow && observe(val, false, mock); + Object.defineProperty(obj, key, { + enumerable: true, + configurable: true, + get: function reactiveGetter() { + var value = getter ? getter.call(obj) : val; + if (Dep.target) { + { + dep.depend({ + target: obj, + type: "get" /* TrackOpTypes.GET */, + key: key + }); + } + if (childOb) { + childOb.dep.depend(); + if (isArray(value)) { + dependArray(value); + } + } + } + return isRef(value) && !shallow ? value.value : value; + }, + set: function reactiveSetter(newVal) { + var value = getter ? getter.call(obj) : val; + if (!hasChanged(value, newVal)) { + return; + } + if (customSetter) { + customSetter(); + } + if (setter) { + setter.call(obj, newVal); + } + else if (getter) { + // #7981: for accessor properties without setter + return; + } + else if (!shallow && isRef(value) && !isRef(newVal)) { + value.value = newVal; + return; + } + else { + val = newVal; + } + childOb = !shallow && observe(newVal, false, mock); + { + dep.notify({ + type: "set" /* TriggerOpTypes.SET */, + target: obj, + key: key, + newValue: newVal, + oldValue: value + }); + } + } + }); + return dep; + } + function set(target, key, val) { + if ((isUndef(target) || isPrimitive(target))) { + warn$2("Cannot set reactive property on undefined, null, or primitive value: ".concat(target)); + } + if (isReadonly(target)) { + warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly.")); + return; + } + var ob = target.__ob__; + if (isArray(target) && isValidArrayIndex(key)) { + target.length = Math.max(target.length, key); + target.splice(key, 1, val); + // when mocking for SSR, array methods are not hijacked + if (ob && !ob.shallow && ob.mock) { + observe(val, false, true); + } + return val; + } + if (key in target && !(key in Object.prototype)) { + target[key] = val; + return val; + } + if (target._isVue || (ob && ob.vmCount)) { + warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' + + 'at runtime - declare it upfront in the data option.'); + return val; + } + if (!ob) { + target[key] = val; + return val; + } + defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock); + { + ob.dep.notify({ + type: "add" /* TriggerOpTypes.ADD */, + target: target, + key: key, + newValue: val, + oldValue: undefined + }); + } + return val; + } + function del(target, key) { + if ((isUndef(target) || isPrimitive(target))) { + warn$2("Cannot delete reactive property on undefined, null, or primitive value: ".concat(target)); + } + if (isArray(target) && isValidArrayIndex(key)) { + target.splice(key, 1); + return; + } + var ob = target.__ob__; + if (target._isVue || (ob && ob.vmCount)) { + warn$2('Avoid deleting properties on a Vue instance or its root $data ' + + '- just set it to null.'); + return; + } + if (isReadonly(target)) { + warn$2("Delete operation on key \"".concat(key, "\" failed: target is readonly.")); + return; + } + if (!hasOwn(target, key)) { + return; + } + delete target[key]; + if (!ob) { + return; + } + { + ob.dep.notify({ + type: "delete" /* TriggerOpTypes.DELETE */, + target: target, + key: key + }); + } + } + /** + * Collect dependencies on array elements when the array is touched, since + * we cannot intercept array element access like property getters. + */ + function dependArray(value) { + for (var e = void 0, i = 0, l = value.length; i < l; i++) { + e = value[i]; + if (e && e.__ob__) { + e.__ob__.dep.depend(); + } + if (isArray(e)) { + dependArray(e); + } + } + } + + /** + * @internal + */ + var RefFlag = "__v_isRef"; + function isRef(r) { + return !!(r && r.__v_isRef === true); + } + function ref$1(value) { + return createRef(value, false); + } + function shallowRef(value) { + return createRef(value, true); + } + function createRef(rawValue, shallow) { + if (isRef(rawValue)) { + return rawValue; + } + var ref = {}; + def(ref, RefFlag, true); + def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow); + def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering())); + return ref; + } + function triggerRef(ref) { + if (!ref.dep) { + warn$2("received object is not a triggerable ref."); + } + { + ref.dep && + ref.dep.notify({ + type: "set" /* TriggerOpTypes.SET */, + target: ref, + key: 'value' + }); + } + } + function unref(ref) { + return isRef(ref) ? ref.value : ref; + } + function proxyRefs(objectWithRefs) { + if (isReactive(objectWithRefs)) { + return objectWithRefs; + } + var proxy = {}; + var keys = Object.keys(objectWithRefs); + for (var i = 0; i < keys.length; i++) { + proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]); + } + return proxy; + } + function proxyWithRefUnwrap(target, source, key) { + Object.defineProperty(target, key, { + enumerable: true, + configurable: true, + get: function () { + var val = source[key]; + if (isRef(val)) { + return val.value; + } + else { + var ob = val && val.__ob__; + if (ob) + ob.dep.depend(); + return val; + } + }, + set: function (value) { + var oldValue = source[key]; + if (isRef(oldValue) && !isRef(value)) { + oldValue.value = value; + } + else { + source[key] = value; + } + } + }); + } + function customRef(factory) { + var dep = new Dep(); + var _a = factory(function () { + { + dep.depend({ + target: ref, + type: "get" /* TrackOpTypes.GET */, + key: 'value' + }); + } + }, function () { + { + dep.notify({ + target: ref, + type: "set" /* TriggerOpTypes.SET */, + key: 'value' + }); + } + }), get = _a.get, set = _a.set; + var ref = { + get value() { + return get(); + }, + set value(newVal) { + set(newVal); + } + }; + def(ref, RefFlag, true); + return ref; + } + function toRefs(object) { + if (!isReactive(object)) { + warn$2("toRefs() expects a reactive object but received a plain one."); + } + var ret = isArray(object) ? new Array(object.length) : {}; + for (var key in object) { + ret[key] = toRef(object, key); + } + return ret; + } + function toRef(object, key, defaultValue) { + var val = object[key]; + if (isRef(val)) { + return val; + } + var ref = { + get value() { + var val = object[key]; + return val === undefined ? defaultValue : val; + }, + set value(newVal) { + object[key] = newVal; + } + }; + def(ref, RefFlag, true); + return ref; + } + + var rawToReadonlyMap = new WeakMap(); + var rawToShallowReadonlyMap = new WeakMap(); + function readonly(target) { + return createReadonly(target, false); + } + function createReadonly(target, shallow) { + if (!isPlainObject(target)) { + { + if (isArray(target)) { + warn$2("Vue 2 does not support readonly arrays."); + } + else if (isCollectionType(target)) { + warn$2("Vue 2 does not support readonly collection types such as Map or Set."); + } + else { + warn$2("value cannot be made readonly: ".concat(typeof target)); + } + } + return target; + } + // already a readonly object + if (isReadonly(target)) { + return target; + } + // already has a readonly proxy + var map = shallow ? rawToShallowReadonlyMap : rawToReadonlyMap; + var existingProxy = map.get(target); + if (existingProxy) { + return existingProxy; + } + var proxy = Object.create(Object.getPrototypeOf(target)); + map.set(target, proxy); + def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true); + def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target); + if (isRef(target)) { + def(proxy, RefFlag, true); + } + if (shallow || isShallow(target)) { + def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true); + } + var keys = Object.keys(target); + for (var i = 0; i < keys.length; i++) { + defineReadonlyProperty(proxy, target, keys[i], shallow); + } + return proxy; + } + function defineReadonlyProperty(proxy, target, key, shallow) { + Object.defineProperty(proxy, key, { + enumerable: true, + configurable: true, + get: function () { + var val = target[key]; + return shallow || !isPlainObject(val) ? val : readonly(val); + }, + set: function () { + warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly.")); + } + }); + } + /** + * Returns a reactive-copy of the original object, where only the root level + * properties are readonly, and does NOT unwrap refs nor recursively convert + * returned properties. + * This is used for creating the props proxy object for stateful components. + */ + function shallowReadonly(target) { + return createReadonly(target, true); + } + + function computed(getterOrOptions, debugOptions) { + var getter; + var setter; + var onlyGetter = isFunction(getterOrOptions); + if (onlyGetter) { + getter = getterOrOptions; + setter = function () { + warn$2('Write operation failed: computed value is readonly'); + } + ; + } + else { + getter = getterOrOptions.get; + setter = getterOrOptions.set; + } + var watcher = isServerRendering() + ? null + : new Watcher(currentInstance, getter, noop, { lazy: true }); + if (watcher && debugOptions) { + watcher.onTrack = debugOptions.onTrack; + watcher.onTrigger = debugOptions.onTrigger; + } + var ref = { + // some libs rely on the presence effect for checking computed refs + // from normal refs, but the implementation doesn't matter + effect: watcher, + get value() { + if (watcher) { + if (watcher.dirty) { + watcher.evaluate(); + } + if (Dep.target) { + if (Dep.target.onTrack) { + Dep.target.onTrack({ + effect: Dep.target, + target: ref, + type: "get" /* TrackOpTypes.GET */, + key: 'value' + }); + } + watcher.depend(); + } + return watcher.value; + } + else { + return getter(); + } + }, + set value(newVal) { + setter(newVal); + } + }; + def(ref, RefFlag, true); + def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter); + return ref; + } + + var mark; + var measure; + { + var perf_1 = inBrowser && window.performance; + /* istanbul ignore if */ + if (perf_1 && + // @ts-ignore + perf_1.mark && + // @ts-ignore + perf_1.measure && + // @ts-ignore + perf_1.clearMarks && + // @ts-ignore + perf_1.clearMeasures) { + mark = function (tag) { return perf_1.mark(tag); }; + measure = function (name, startTag, endTag) { + perf_1.measure(name, startTag, endTag); + perf_1.clearMarks(startTag); + perf_1.clearMarks(endTag); + // perf.clearMeasures(name) + }; + } + } + + var normalizeEvent = cached(function (name) { + var passive = name.charAt(0) === '&'; + name = passive ? name.slice(1) : name; + var once = name.charAt(0) === '~'; // Prefixed last, checked first + name = once ? name.slice(1) : name; + var capture = name.charAt(0) === '!'; + name = capture ? name.slice(1) : name; + return { + name: name, + once: once, + capture: capture, + passive: passive + }; + }); + function createFnInvoker(fns, vm) { + function invoker() { + var fns = invoker.fns; + if (isArray(fns)) { + var cloned = fns.slice(); + for (var i = 0; i < cloned.length; i++) { + invokeWithErrorHandling(cloned[i], null, arguments, vm, "v-on handler"); + } + } + else { + // return handler return value for single handlers + return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler"); + } + } + invoker.fns = fns; + return invoker; + } + function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) { + var name, cur, old, event; + for (name in on) { + cur = on[name]; + old = oldOn[name]; + event = normalizeEvent(name); + if (isUndef(cur)) { + warn$2("Invalid handler for event \"".concat(event.name, "\": got ") + String(cur), vm); + } + else if (isUndef(old)) { + if (isUndef(cur.fns)) { + cur = on[name] = createFnInvoker(cur, vm); + } + if (isTrue(event.once)) { + cur = on[name] = createOnceHandler(event.name, cur, event.capture); + } + add(event.name, cur, event.capture, event.passive, event.params); + } + else if (cur !== old) { + old.fns = cur; + on[name] = old; + } + } + for (name in oldOn) { + if (isUndef(on[name])) { + event = normalizeEvent(name); + remove(event.name, oldOn[name], event.capture); + } + } + } + + function mergeVNodeHook(def, hookKey, hook) { + if (def instanceof VNode) { + def = def.data.hook || (def.data.hook = {}); + } + var invoker; + var oldHook = def[hookKey]; + function wrappedHook() { + hook.apply(this, arguments); + // important: remove merged hook to ensure it's called only once + // and prevent memory leak + remove$2(invoker.fns, wrappedHook); + } + if (isUndef(oldHook)) { + // no existing hook + invoker = createFnInvoker([wrappedHook]); + } + else { + /* istanbul ignore if */ + if (isDef(oldHook.fns) && isTrue(oldHook.merged)) { + // already a merged invoker + invoker = oldHook; + invoker.fns.push(wrappedHook); + } + else { + // existing plain hook + invoker = createFnInvoker([oldHook, wrappedHook]); + } + } + invoker.merged = true; + def[hookKey] = invoker; + } + + function extractPropsFromVNodeData(data, Ctor, tag) { + // we are only extracting raw values here. + // validation and default values are handled in the child + // component itself. + var propOptions = Ctor.options.props; + if (isUndef(propOptions)) { + return; + } + var res = {}; + var attrs = data.attrs, props = data.props; + if (isDef(attrs) || isDef(props)) { + for (var key in propOptions) { + var altKey = hyphenate(key); + { + var keyInLowerCase = key.toLowerCase(); + if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) { + tip("Prop \"".concat(keyInLowerCase, "\" is passed to component ") + + "".concat(formatComponentName( + // @ts-expect-error tag is string + tag || Ctor), ", but the declared prop name is") + + " \"".concat(key, "\". ") + + "Note that HTML attributes are case-insensitive and camelCased " + + "props need to use their kebab-case equivalents when using in-DOM " + + "templates. You should probably use \"".concat(altKey, "\" instead of \"").concat(key, "\".")); + } + } + checkProp(res, props, key, altKey, true) || + checkProp(res, attrs, key, altKey, false); + } + } + return res; + } + function checkProp(res, hash, key, altKey, preserve) { + if (isDef(hash)) { + if (hasOwn(hash, key)) { + res[key] = hash[key]; + if (!preserve) { + delete hash[key]; + } + return true; + } + else if (hasOwn(hash, altKey)) { + res[key] = hash[altKey]; + if (!preserve) { + delete hash[altKey]; + } + return true; + } + } + return false; + } + + // The template compiler attempts to minimize the need for normalization by + // statically analyzing the template at compile time. + // + // For plain HTML markup, normalization can be completely skipped because the + // generated render function is guaranteed to return Array. There are + // two cases where extra normalization is needed: + // 1. When the children contains components - because a functional component + // may return an Array instead of a single root. In this case, just a simple + // normalization is needed - if any child is an Array, we flatten the whole + // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep + // because functional components already normalize their own children. + function simpleNormalizeChildren(children) { + for (var i = 0; i < children.length; i++) { + if (isArray(children[i])) { + return Array.prototype.concat.apply([], children); + } + } + return children; + } + // 2. When the children contains constructs that always generated nested Arrays, + // e.g.

ogcL?aj?Mkh-MO2`hg5yWOAFwxm;LYI-xZfk|q56E(NR-RjLn@kgjW%-eXU`s-K4 zMkdD9)i1UUYGy=pX3$jd_i$2?cDBdvtm)Jcht1R=N_Gf+a?8Zk`z}TInW%O1OJBeLcEl|*uT@Z(F{7%69+XPiFwXLG1lQzwy*j4^`A70tMq zKP~sMm8y{hbDSs-oLm4g^Fs;)^zyv!1H5OSo=X9*xol-eeqvTT8*TTInJVlhW8yw$AJx@7 zav9I46LKZ`;(re-AOq;A^CkmoZbi5aO%Wg;UiJ2idt=1m(p1nb<~T#n^%BWL6K X9D?=4fAOay4!m;33YlbS6g2OD2yLQ~ literal 3451 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 D2E?wo diff --git a/smiley_pack/icons/love/lovebear.gif b/smiley_pack/icons/love/lovebear.gif index d13fd1852520f27f2ea3160bf1d40851a9a92e54..36f9efbe0075ec9968b0704763dad2dbc87a78d5 100644 GIT binary patch delta 4242 zcmYk;`Bzhiq6Oe{l9O-}AcQal2#^7p!7vFb+DuG}HliY8tYJ`5(S}J-fgD00VNer5 zsund+&`2GEVnM(*2>}D93WydhYM>6-%X_BQD(&@_N89z@di$6C5A5}=UCa0n-6lRU zE_!)79S8+J3@dFYHeZ*fn_9~IzB(=0ny6f{KAYQa5!#bnc+A>$KvAL})ybccwJADOY&sT-jA5bMn&h7u{!X z9T&Z`yt#FJ|Mxr62O9HV^nYcj7d`K5iHlykJ&7}ZsPKaP$l&gb+3BYr=H|MO6@Po- z+^sX!w@(${gcV2b-s=8i{zC(T@)kdo%hYAN{-aP_+Q0oj4Gq&W*|nO&XWeJbqP)J^ zz1oICRdMFa?=Jj#PW5K!@~ygk_dDu`YKoqh9C@6V*V!N))Ajeu_FO95dRca)S+GG< zd*Ef!q5fTIrwg-;1qbFQZvK>4;7|8_Yr1y6aEoql`bhTf``4P!7YHf4KQg zyX;7-{9t=tT6cZP;NHEr6tabd1=@o3`q%~%+EF|V1ObcrYZ?H&05sqz2_kBTJFhw0 zxJlD8AVZ0RUYk`Ctei~yCafDoDr#N1r2a7wk?mMNbW`XT#z;)@OdU+az*%eMAy4_~ zP7LS9(@~)>_rzlmg{SZx3l3ne|3avH-@JCnShd;x=YDVQ4XeFhMALq1hGk+cY~yV$ zBB%Bp)Sc&~5Ipcjs36`_-_&>2TYT6m5grxDd<#EanVVrS{A*xF`cM|FAKTLzat8D- z9Z#B!Dc>SJWHGdF`$4iknqn79WmC^TAmiZZUr(=FS?NBInO4n4pbBmhrK>R?WGwry zpSs+iIKOIbb|#!G%a?j(T(GX1?{&_5~9PdYOa-|U5qn|C21$4*w{!44OoJrY!Gv?XJQqgJ>Nh?1Bp5O za_&J&#@XO%AYJF}lav7xt0!k3QRf_oM=Cvn9*ugEvT1FO*>f3ezz-7YLb4N-Y`jIo z;01Al((gJPh6@PJsj7M#=fR24I``_fi#|&}*Plwj&h`(iw@auWz__5&TVz2cdx1LF zZG!OxTQO_ynzfhClB*42O$bx1H{>jgaf3?1!QFu=fTStGr+tF-8# zPwO@g+h`}529K{jRc}Z3RXK3H@XgdZF1wD8;BQkhkx*|kzvChcUCP2;=mM^rY%$X{ z?mOC)dK#0-s%>SX_m{h!=~5uhK{<0N?kJ3X9NylvjGeiJzddqv=7v^W5qQNsv&P>V zhDJPB`fYd*oe?dFsvht267u{5lExCf(%va`KIl~%oM--dJ|5n9)uYQCBQj6#@^74u zXSYywJaVuGC^pAgfOzlzHU$UUmb94&mC2P7NAS|#pTX?eE9bq>%n4Zpx>|DE(=Nu_ z*StmuGd3_F=8#{^t;xVza_Wn?m$$8KJIIy z4lDCWR_F47v$H$&w9^|nu4JZ0QKEMWp4ZRQN9Cdks(o@#EW?K?v1^=$7=FUI)h!4` zEwoZHwn21rFRYf}0+D9q|{m7a#R8Sp@}^QBh}v1E#bY3_1z0i^xKGj)?Hf z9%_J{qY^^fB*|kAIIvNn4Nd}4STl!k_#K;?XU5~FcvfCU9V3~FvKMuVfeyK07rj$% zlO?p3ZNk7ls&-ha%HPQ{%=;j)XUTMaa3}<`6sQ=>3_9J2;M0gGPAUy-&(`6Ra~m)U z2^b8p;Y%Wv+bGK_odtOoGi%oMyrO|1K>HoSxdPLF35Qt}Zm|}H8(0)hBkb9PbqElU zL&OP+b&wx3OWv`rQy2lYkY;67$DAN2W0n*&aX#wQYZ53Vi9c!SkX+X zD#)s3N$(25Xv*ujvq#aj#$J)m-G1+tI1Qh*xm+3lKy`!2Me*y%ofJXwbsn0%%4Hca z+P)u%WTcHxo@RZq1&VsW%0WLb-z>KIt~VrlIKnbi`JH>#{?N?KlkjH>#8`R?01iN#Stz=W#a@#C^{mF$xO3Ur~&BoLAk0iIo#L|Q{IkA5* zX>UdD+vEuq3gU^{oj>v#zGn`!y)VZH`{@AKOTEiFv@J-4IfP4BCOW|pBsQe*55=Kv zRaAsTNV$HShkDc!TiQQ*Lhjbcr?Y^#EaD?5Y!u0eUO~~%K)X%$NVt!RY2_9Bub)lW?uP1ZLVzkJ<}l;GoPZdCdOsm;85^4R5kblqmDy$>}oO5-~<%pC5E(# zfU|eKlmBNy6MCqF$7JK<$O{r2A)tp7zqBN2K&%DAO`19fG(0ehPl=e!@H(wlG}wtP z+N!0y3N+;*?ge}uX)Dsor}$dxQ8NFjnHp3i0P+CPWT^^C)S$Gv9@&{GV!LM18mvF{ z+5>u#-(e*3S^u*hc40bS0N7tnP^Ao2vzF(#1G*ad&sr%jNN{{Z$s`0&~c#;K(%-_TOqTDXeuQQi+wD_na!y%Y@*2EoZsz*S18JGI;n$Pc zd60j}sN@vB^lc?v*eF82>oVm@Tb&^$#;SJm1VW%Lb;LWo8=n3HWSR1YLYyfgE6ScZ zEgJUC(HnU!Oymuem(VigakCgTY`u;<#9US5*h3e;p0|(Cb8M>t5!qh1IPy%XO~i%dIqi5d?>f$(a|w{32E;bCOg7_}3pb!Hs0QG}-Hc^zI>+M)!%x*u_d& zD$wGbAqmkNag0#0X%<8*XIfOmebMJQDAZqGVO)V*e?f&_^eW_UuZ}Ew#Wx=>Tc7jX z->7NfmJ5uVdxQsEn`C5n&ggx%3t;8clSNrhyyIX6WEkpiDB1?7M<85{WIsC4j-N9- zoY($?(<#Y&A=ygrwy4)Dk8^YXq z0Pf;o$X03GfvmZ&RRkqv?JGCzH1&cYkPQ1oj4-{oc4cwtJhPL|wik6-?cv6b6GzJI zV)TZWgMG^USEf_(M&t?xw`YtOCb&$6WUC!oYZtuk1rAb)=)?VcUP-J2B;>e6%?zV* z9;a+HFA!Jvx|5c{>`L_KQ(sv@Q0O=&Y_oYR zQEc)Ltp;pWtZLF&WSEp8{@Q>d1BnHE9QR=M*fYp=f>jHk)FLVB0P|I=t7kC)$Or;H z$X!7hKNnnW%9VxtB!yYIC1+`WByRJzUmGNx+Q`PNm(Fs%?ms|=LP{DD3C5X%4AES9 z)C$I`(VkfQPd+Me+>>O|U1C`CFQyQy=bT|m-<+h%-ql8o`W|>5#J+1gxJr5t__Xf2 z%~y2?LvMq9KsqmS_L5@6T61inAadN?pU*z^!KZlwytR_?vxFcw^*5xz!oy7I3sJQ89p{J@7b8|uopf;+B z1XOAESUi@{t>vzcnCD7XZ8|wP60k~<$!?4GQot}qu4DVUCNXtZJLkvNTDx{>Q9t$9VwS{=bFA?^ItMTIS7#*T1}6!vmrna5x5G}DR0+VtRFBsn=*P!; zVnyaS|Ma>Ay_{7g<# ziGAchhei3IZvkwV^b#cp4*00M{c8CeJqN;M33pgK_VbAW`%@(l+#!~8exAx!xn0C` zP0%=Cf8)5`mt5L<#A8XeN$qx>Qr>|n(uNk0*A>`@#^4|_dTBUbUw8V#+D-EZ#+B@)3o+)M$zNZy)AVCMwHL&yF=WLL!{}qfem)p+Y zN$_*jf=+W{R*~@jIw)C<|38XT&n=ECg9iLX|0u^Z{D0;0 z7n!RWoZ|e=T-6KG|1$UO`|?HRKKX|^{GrHXCo0oDpQAu|G|@5N5ZSOrgZ{K$>bN=y t^wc_6*{D^R6evxk?jjs4^_&J?EO#A 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 diff --git a/smiley_pack/icons/love/loveheart.gif b/smiley_pack/icons/love/loveheart.gif index 541220a9026384750a7685a8338c019d36e41d67..784cbd5a0e567d885165b983c6edcedae14db2ec 100644 GIT binary patch delta 241 zcmeBSoy8>V?&)S>naIz;&+wU#0SJz9a7>hu_{?T3F=Rh;Ql-Qz zKa*6ai4HOyN)93mBQ(~qHJvD&9JJQ#6z>j}D l1|M++r;Py;ymFoe5iOA_J7vFg*;Z`7b6-d5Sb;KwH2{spO6ULp literal 652 zcmZ?wbhEHbsHp$R$v`!V|GE8KLxPTGw6T}0~yP}5>;@*b2ZD3 zBm+kQmU2O-1C>sR63?TiL}bZuFkNZ?m~^B^r7MAHA~$1*{n4bA60iJBR2LtN(CAQd zD7jc*vZk{+qhNB-TC-EUJ6M)q^?Vo|EPYP*R`ZQTCqtA#*0G{l=LfQGugHs42U(mF zD})k6m^eGwA2FUNT;(=fqhZpKj2;!Ma#TSZt%P(8`Gnv(}4=?-tvH*hAE0G zk|C~WYj0ubYV88L1893+69XqZ(-ekDyh42pLcG&wan2PMV-OQwIC(0k&~oujtAy50 v6%rE%+di*z2gve$!c+Qp?%unijbY>F6YUqou3hd}u=?c9?vDG-KzpqL8Vtb* diff --git a/smiley_pack/icons/music/dj.gif b/smiley_pack/icons/music/dj.gif index 66bc075f3589312135218139534c40f476d90f73..0c2dc0e72f2a7759b45ec6967bdd8e720658bffb 100644 GIT binary patch literal 4145 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 diff --git a/smiley_pack/icons/music/drums.gif b/smiley_pack/icons/music/drums.gif index 27215f4d2588edb438749d89e96bcd3a75b5ed29..2afa0db9c496a2af4f8562da741012628196447c 100644 GIT binary patch literal 4768 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 literal 7596 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 I$N%lW09P5O(*OVf diff --git a/smiley_pack/icons/music/elvis.gif b/smiley_pack/icons/music/elvis.gif index ebcdcccc473a120cea8cc118d407dab75471cae6..6d8ad9997a76e3e85fdce16352cabc96285b6cec 100644 GIT binary patch literal 1498 zcmZ?wbhEHblw^=*_{huv1pogt95`^`|NsAr|GE8KLxP@ z8FWAjL0TA?;^)*aXn4Eh(QM_YTWgMadgo~zl!#g2u}JkWybNU$;zgW4bCg7G^=#Ag&mKV;Q>N!U&&_|;4;PWku!*@Mm zVOn3ide^zvKdkf~uopAz^Koi$U@+FmJ+2;P73&nXGo)`dm-(WHd66}GlP{mtp8c_9 z-|dM^$aXOR?UDrA6$$p==10XF&xO1_Th+|Kc6V{hBX+IXCzlDcPkuV-98c)BgAQx3zMwanCYG& z0t#=Sv%m@&fy#t{3QeW}i-5iNkIc@vm7>UJ6R@~M?t1S9pgKKejh?Hp2x^Bj`q2VHR7Z`IT zZY2bi`n_E zT0b08nPSD!$=LVcAc0Q7A5>Gf5r$0A6V%yw*`-9_Et@k>g zYAP6!?POvQV-N@08Q#)wyx_&kMKuAp+@{|6y>5Bo+^L>(!~%UJIuAYHvN(L#BNo2( zwX1iXd;P;o?*V%;!#!Xc^e`{7MsM=vliIUCw(Pq- zkqOx@2B2M%K)WKr{@d`Vc;mT{w`Z&P8M*E*Zh6G6HT&c;VfM*SC!OO7-L|mnwc34$ zg%O9syIwTi5!!u%Pl!W@_wcn`0oI_^>MdToV^2&G=U?(>=Ayl?eWRDfv5H+8>J@Kv}{9uir6QQ>e_%$|MIH|_Z2H2dmf z_1RIi$zrSn7iGiNW3ZGTL3E7$EL$Icj&-MMkCUK^K!DV&HMbeK<^*kCwWdtbJI-dp zM)xeY1(&n7<;>leba#d;N|uI%q9Y`E?Bx$Hc8*xBal(4v%$P?S1~MIfJ+Ia-P&zcj zJM>AZ)sN0L3)H;&9FY9yRln@9hed)sdT|o;>kgl66slZkRFJ0wSa*bsNAIh&dwt2 SxUzF3EITv8YZ#iBz}5gfR_Y!A diff --git a/smiley_pack/icons/music/guitar.gif b/smiley_pack/icons/music/guitar.gif index 11eccdd0b05ad478174064b830f333f0480f8ace..9622b50bd9dc6220cbdd28aaf8b3ad75fbd0cf53 100644 GIT binary patch delta 764 zcmbOxu#BD8-P6s&GEsv;gW(e^!$bjz$-K;x^{fm!3_t)9WnjJ;v1`qT^(Q@_b349> zsAi8?!O8q!F0bIaTLuCdYt}{lKDM0el5WA{sgfx_3Jx}iG$|N}@bsQ|^1|?|qyK~l z8Qw*)+G@d$I*JTtvC~BhmZY@jt>3Ehy~8r)q)gEE&Ehh7#aWekEbfsJ1#({PX^nx7 z?e!`X4Rc}wnIihUq8&oJljm^FuuzU`$?4-&_DDC&T0Aw`g?agk+|A8;F>z^|x2)I` zy`pv9A=SAXR1fUdpPZR>cHfB;#~iB9tvrx?boYeIS6lAzxL$qmd6gydio8!l_z&a zG4(q)w@!_62YQgN$8Dy4s%g_QL8Tf$rNwrW8+B*K*00>gyrVi`PgZo?{)LwWi5mA=qf&pElBy&nK1JwxyS literal 2070 zcmZ?wbhEHb)L_tHXlG>j|NlP&1H-@148Kn?{FuWaCnpEwj)Kt;7$G5`_@CR)H6+;C zF~HSG&w!Z`=xxQHESx+H{~2^ZK>*4o3>^O%{&UKB1SB*xvvX_3oG5tc$jHRz;d5g{ z(oqHhV=oy8g@&X3tlTLwniClsnG}M%WH>iIIXOk%H7O<1=z#YO-f*Qml^0aJ=J0Uy z2y7@m;5Xl)InQRt6}3zK9L0HaPF;L*xlPXY-{n;s92z=9eXV#uOisKqH*Kxe+ZERq zg>}V_UEO38`6v4+}ZnDxK3`Kdd0gJmsiK1-?#Vo z_YZ|^EQoMo28NR=gCZ=PEDRbPn^}Z`;dEgE10%DNQi{jKq=t40Wj+Og1&iF9SPi;* zJQ^Gt`{kXxYCJBfoa$24U#B8@;OXgBE&f*~5ucv;wz9HuT(ERVKR@5WR4OFu^NZun zo~B;9o>!M2t(V=XrX%3+$ZeG`b3`mhX!@aLG6$Q!&L~X^Ys%nXm#V$(LG+FcZ@)Df z*VIG0({74MoGH~0np1mRF3sb{hooc79QyZmntwcYJa*+PQ;UdK4JV~c)!*res-`k6 zG>!h66IJYaKJuk7^5F6NmP^*-ggn&<9))xx=q4-Rzh?^#{F`P0)yrS|`C z%DgFgbye2>*sVXmQcm5Q$i_ItLWP+_-p{h)anivccA0xSx92CXwBH?cHG9H_^C!%A zZ@co^a-rKUH`BarJ1z20o(O&4R_4p_EoRAxix3${G)lXR;h~o;c@1&@VK0C za@op-5?4;XZyz1yCx!0dUE5%n{IoKBb=`KeJ!>L_9 z#X@T%3pQL@YA`*_HX}0O$(fMLWoj!73w)Ut_I8=pT+;}?nqT~^bggCXqigZ{lee7R zwd&;2-Os=6dud&oGb5|e->>KD%bY96CqB9-6Z`AS`m2%g=j(Q-B|c+fW@1qM*BO$L zS*(zlmzkSblA5C6?&+qGmYI{PP@Y(&P!s z2r0@;%uxtSEh^5;&(l#T%Ph_;0jgF=EK$fPDJihh*Do(G*DD2S)Jx9KRVc{^T9B8b YkY8G&kegqWs>c`_930^68^T}>0B>9}^#A|> diff --git a/smiley_pack/icons/music/violin.gif b/smiley_pack/icons/music/violin.gif index 53592d6ee6b2d85add64359253d9103fd0b32492..99e2c46fc4e1afb19a5b0686bcb6a67dd6e27da8 100644 GIT binary patch delta 872 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 diff --git a/smiley_pack/icons/oldcore/shaka.gif b/smiley_pack/icons/oldcore/shaka.gif index e5d7b70305653cdb3a606b10eebd6c4a9aef32f6..5e91d96f59bef26643150436a43cabb2016962ee 100644 GIT binary patch literal 2219 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 diff --git a/smiley_pack/icons/respect/hailking.gif b/smiley_pack/icons/respect/hailking.gif index 07551e5026900d60fd1711f87d22473bfd54aff7..2d53376396def12db42995c26a32a1cd63384619 100644 GIT binary patch delta 4586 zcmdnGld*RvBe%P!n}ucK1BP^luM@drCT7V^>{ekrw)NPxbN420l$m&1gYp05MBj?Z zeW7CYN-P^rUcSACL0UGJMd|vki+7$cVlXh!*D%zRy0Pimi?5vvU%fG8QP9*pf9nnB zALfPzM+W^Efr`RMEsi;i>|QxXn_4>s_2M#0RxEhD$4A&%ujt{S7EUHLPL&-8jGP#m zzPOxHVQx@4)y={);lzW3&Mp5r*f<*Ic$)Au@cr|%sxP>(h?P@F-r$c)z?LjY22CC* zjerBqU833sHXZ_vtFCT#V~o*wxQU^8E)z@2i46yIZtc#niRqZo;Lym;|L9z9g82G} zUhEt$8!m{v;o|4xQqZW`@kzXyQ)flNtHu`gbxyk7|1K?H;ALQDlHf5=U}0o&cJEhH zP;}^(GEOP8%^FAmc*=8@qe;dxE#}Yp2=q6cUXk(N&@*2 zzgc&;RM`Ppk-ylwu3Nm11u~<4vY)u9EqAdU$d3NOab|OdY59ylb0>?%%o9`m$-=3@ zV8Woo00a*hQW+T7{yWT?94k-{3iQLr&Ygz@`l($j&)?by3-r^QZr*;eWZ~WW;6Oik z_T|?(3@kqx^z~Tu)zv@gE>2&+K!rgkVur-SN3Dk&xRhp{PTBBCkwGtJhJj;(awChl zlbeRagE>bh*BE@eZPC=gC?si9(IIeMLGBXrtExCTNE50F|*BLDbezs zsWiWliPdIB#73sW%`AeG^zQBwKF}(p%x%!1>EO`D!@Z>_Hk++s@&rK%`(1~co0&Mi ze2VQ+i)Z52YO7Ls$oR_l*o=!N8Vbw@8W?^u@o+dYFrGWJVj{y09p_^`l53Nv+s)ne zZGzsK_}9}We-xKtoIBakT6=O8mnL&W1TZ1`%P^jq?5K91<+{`?AUEJQ>-{i?KR{OC zFScD%7oH6TGJ}4yXSlxF8|)2a2mjy@TT|z`n&;{4$%!E|qk#H5iT{(Mh5oSIsqz3agnzRhSaY8Z$P)R*c8q;*!pAR@qeZ`h6D(37jwaaA1UoQ= z!)SsXEn$aLZ8n-%LZ#}#Net}p{Q Nt}vC=OOb=Y8URhSES3NO delta 4642 zcmeC($+&eVBe%P!n}ucK1BP^ls}s3nn2&8eHZfg}`P#XA6I)d#Zj_mLT7&tY!|ch4 zVr7$a7{%(9SvH)!e0vRpv}`Pk^7UO8?>t|`U}R*dWo#gIW7D%2Upp7RdSlF@sI7he z)*H@0%nc2W42B5;9gR$_jya6%UO7(>9pw} zw0Wd70v<4Ti|HEJcnCDEy1LnoF~;EGCWhv@Oe`rUHXP8owL8Nurei{bLnAl;qjR|l z;_DxJv2(a=xFC|#&CkcBpi#5qlXx?y&W3_t3y-j`bJFepcWFTbI|DP51do9O3nPoO zd%v23qC=O6X~u;e{Jss2IX4$^`pgJuaO-_+GP$2AN%@~v1!wcwjEaS=l6(grwj?!d zeAvt&W1i3*$1`a``;0g3{=Ab#nD4Os6S^xo`3v)J)_=QOs_Z6zVfn@Ouj{(S``F1} zSbwtrJ8@B4?qd7oFKj)9ltOwKjRW-P~Q@Cg`n+f4yw-c|RG(yOR&9hA{t&h?soQScdV+ z68LqGP276DwX#Rs^x!9UI z&(%CnCttLfAs=>b)3o`5EDQ{aKUp|M7)ApdOJEo30t359VsfMPAC`Z2syrq)+5m(3 zz?%DPlN)V+vHd#6zBl3H`7oMfM@!iuR;7(5+0i6Bnq)`YvZHNT cT6P>pOW8qN%CZ_^>wb-nI}FIU!#qZ703@7g9smFU diff --git a/smiley_pack/icons/sad/prisoner.gif b/smiley_pack/icons/sad/prisoner.gif index f2c3181dab37da9b35bfbd1365f72e9031dc0a53..3c16c3eb3a2b9bc6a6e7f03b88083a19d3c02c65 100644 GIT binary patch delta 1171 zcmZ3D>VUS{AVE^9`+0@+9 z+ScA2(bXN%(bwP6&A`aStlm9gW?vT*<77q-c4@h;S<5;jn3)*XFsgD2@YpV0KC>&B zdET1I%>vG?%Ahya%3;Wrp=gtJ>O7L75+Q1Ej4|To z%W!so8(s5@j~P)wKzoA01mb=62OY960pAv5`@g?Mqg}Q5T^(v!@7IOjy9cvZ6jB#3SNS<6&kd zmW&RA%8iSeFD)_rEOlX~>%=MCk`Ze<6r7v6g(cqQWwn$ovT^0JIx``lv5l37;hnPEoYmxZT_5`rmg;k?|xgEXB^#U{*Z57wZ+Fd z>k{S6MK~A~f3k3jFhl}Fo&gyC+Nj~*1P%Xoc=&hV4*vfb_LHpQyU delta 1106 zcmbQtzmlKZ-P6s&GEtvFmf_h(ZeB*_|Ns9_R%FbXY{1C2xtDP+R5t zo;;0#k%?J-+RXl`OpJ3FIoPG;rY`E4%FM*DnNgKffX8<2x{j&A%*!^!C6?H zThHpyqK!|F2}Vr$qOI^iNQ{v+N8`sshg9Wh)6K$GO-y8388lbR(4a}>u9tR1QjLHj zQ--R%*am}&fCPt5#v@V*h7*rG*IvQGr=r1dP)kfyC~sQDgAWZ1j7mOnZ(cn3^78Ed zShj|sLrPDb*u=DzPF#3!h^1}cdV`&3XRM#p%xA0;vLKQ1u;b>gO{pb23!_yP1D#q{ z2ys2uJE_wuw~2G-^c2Unh1bheqqgjuzk~gM-=69pn;sl%4EBKAJunk9kC^)$Uc-iSBBz{*Pc?qL(eG`4sabyG}m``Y5aA@Qc_-Ueg7$uaawoK59yqSSB zls|?$96%0b{lYcSP!2^2LPD8yY3C$xDD&;@ rpOk%JT~z8}lj!-mhxXTgzjai4`}@0lTl2Zs)$DlVeU_V*iNP8GJ}tMm diff --git a/smiley_pack/icons/sad/sigh.gif b/smiley_pack/icons/sad/sigh.gif index 686022664cdb9c64246fa055560cb159431487a0..cc384acaaab9570a08e29658719894c250324a24 100644 GIT binary patch literal 710 zcmZ?wbhEHbHn#x|1Ekxdrtd02Su}!2W4^wUE1zsgSOkLv zgQ~ErARjZEj~{~&gPgJ}Ckv|xD+{NFsF=8-iYq@i6DJclzbGRIuYzW|gtVHpgpe2q zyYLnl9!4%k9)U~-%>ypt^5Uv;iknZzF(?Tut8B^g^m4o7LQMAp; literal 748 zcmZ?wbhEHbbg`M$!g>bxOg z5n2pdV(hMb>Z(#cep(V*{35O@9Bh(o94bmOa%w`NuAE#vDm+}AGOP-+f*R!v%;L-p z5^@U4>|0#8S>;)|r8BiO4!EcZsEP3lZ9W~RCCn}&x+Tlg%k7SnBiOn8Am_3(Ff*_+ zZ~~nxabRkeYe;Ix>PZEiE^1-3mx-*D60&X&6+l+ZgrZooL%SEKSSzd>tk`ies$xc{ zVllAEiV%~H!diifSDA%E9H9(x1YD_uXr`;p+7S0elPvz|%=elqvP-MM3dOw$rR`a+ zGFoBWi#F|$(wl#TC5<_ERR~t45(hx0uIyN?oE++4)$hK1%88FNI?noG^_u7b(Ii(L kkmAg*jv&P%oK@?ZkOKi0VxkA8Cc0i(fiPCY5~R`^08feIga7~l diff --git a/smiley_pack/icons/smoking/smoking.gif b/smiley_pack/icons/smoking/smoking.gif index 77720b17322f4baecc60aed8c4696b99fe1de7fe..93059638e3496eb746d3638a755c99b335768542 100644 GIT binary patch literal 971 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 A+W-In literal 2793 zcmdtj=~q){0tWD#eIa7VLIMgVEE#sfqQzwxtOSq&%HlWy*=`gnuDCN+EhIN##{hwZ zB{7f%kS&y;fXk48oT#)Fw3I~=t*BV-Kzp=k+hJI0JN3+$`7r17%>4u2_ni0l+~*12 z8sxVgjO4lnqG>lH{ zL7n&voimD&Pht0&P$g{Z$WA1q67~lL%(o7n(u+FGq6pn+x>=lU1>mWI2el#A)x%Tz zP_@&z>c`l`9^~$R6sHYgnm6-M!I@RSZhNv#1(4K(^lw6>^`lt|n5P;}F9-J6laH_{ zAG=u6%7BkuX(ybh`%GxX+SMO9Qzc&3;T?z!Cu-zHq`ix)030hswr9$x?nAyAZ?mtRm=B+My3%gZS(m&!yXrC?dbIi*-$ zqA0AYsjmQG>TH#UU#4r&7c{oYCE!*P&YaREP_%bk%WeYKuiYT0BUcbHNIDkXYwRDb zG_4CEgXT!C9n<22mG-utpJb1HBZ134Y0KAQ@v4GA9f&F~?hh@TsMGl2JVVYI|J>$TLF!GX#(y}AIMouQDu{UnrT zgk=slC!W4^z>RMIoP=;xGDa-=10+#xV+PJOuL3eN%$TlAe`w5R*to^RCfDhv3^jP# zV5W*ppi(Vd_kmvEyhqwut_u@1yRJIxQZ$-GYl z2k$t3zrFUhSTb%sLDgyFhY_LKR%B&ez@o@P3Km2bTmZ_Fi1)IHC_4uNa|?L+g*j)% zrQ#9^zg$`&trl3w1<6W2QN?r6I%*r6np;|xS-&3hE9~qq$1KD0z_TT#k}`gAc|~Pq zF(|82)`%4f!8vhlLz!YpQZ1@G-;oQxHPp0U=*@Yn2ikh->-%mCeuh&A3=ZAtBL#s3 z76Bxxod)kesC5S|Rz0-_S*xb^ePeJ?qg-&;I32B%SpiSaG z&QBwI^qK~BFWlb-wf32#)Uz?}4YaLsD1vxp4<7lSUg38fZ%*?>N*|ZK7;j_X$iKy# z+m!E-5I5!&y15Q+MS6&j5e9Ud#~&{ma?sa@#RLh*d}T}VX8aOwkJ?dl>R&;y+;WaC zLh-4%17h8feHhss;Okj$;tE=Hd@qxSS0o(Iw{au{TAlP#_H?7C&mIwE>&aIl9c9B zT}2*{UV)(NCDGs<}P7Ygz17^vK+FMpn65f;Y)El~~f4 z+-7tNk!95gFiA#;7`5b+e&ukTemXk5^SH?Q)^F=)*MUd%vy-1j%hi?)t0kYp15n#C zP#>vj+M-S?_8R%w2P6c(=B^ta2|l$_c+?KsN;kKRh@T^>1wvQg+YPoqjabHt<$1e% z263W1e6-7tN{ctv(?jQrI71BAu&4LWpdLQ%^NM!ZE=g6M9y{UcCxCtk@ zoC=#oI!rK6Vx8}q#RT+cvPlIHn9Mg=Vio?%$d}Gc``9%!EqCU(LVhRrX`V&WQ40L7 zjHis5A)%)~;An?}7-jbcwt5rHkglY= z*qxeS8EZ8JWc<`Uy)8JzY^Nk)xuT5poakpV*X|lS_jh3)*`&D@o*zoMdf4;g zRQH=BA=h6-8^dqVPJH#{ieYajrzM#Gm%(nunW>a9Sp=NTra2M|%5gys9h>BT{l(2f zPHEBkG~$PJJVPN&n*ksa!sD`j(;gSrx>(=+X9&GZi(%w0ECvn(?BI8~49%_GZlLd! z(w$%^LlGNYTafofM2idfZleL6kk2ZALTil03cn48$f(Vs!Zp4gH!pX-CSBSg@y)!l z&}gaB=5fwg_+q1J(hYs`su@=F)mY3zqs;{+B!1+x5_`R?`Kv_C-WwWu_seHqOO3Yi EUo0j+!2kdN diff --git a/smiley_pack/icons/sport/bowling.gif b/smiley_pack/icons/sport/bowling.gif index 0f8300c930372e9b3771edaf08a3ffed48f4da6e..f91936eb2dec75ba6713aab7d6ff1774155d3a50 100644 GIT binary patch literal 2444 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 diff --git a/smiley_pack/icons/sport/cycling.gif b/smiley_pack/icons/sport/cycling.gif index 332081e83fef0956bafe5e9a38b63c0c23b5541b..762e5748e269392421a1edbd54f1d637d30ba872 100644 GIT binary patch delta 572 zcmV-C0>k~=4$lWDM@dFFIbkROF97oi00000004l1001yBFaTfxU|<0MfB^shApigW zlMwYfm&fX1dNP35_Mz*j|l{ke-w^8mOws1lanSg35rOSl{6qK z69fQ>rK|v;5~?f}pslYc60)-$FRK#*!U6-6zorz&8OoUh!@>ju%oWNP$^+N~qf(C2 znA97`#f{{k-pk<>+1dgC!U@{d;OQ3Y*gP@5`4+Uv9{v5ODGSJ=g)f7Y5-MECu%W|; z5F<8>e*gd>`2+R`e3}Egnw=EAy`V9N!4$Zs3AKO(0@DJ#!Wqub z#tGEZ1Fj$+*SyBZvDoLZ=q)@n;lkM*9YpgJ5db0nphihdMIcE;MNU*nR9OuQLvm$d Kv#JGr0RcOIYUZQ> literal 1883 zcmd^9Yfuwc6kZesgE8QXXw@!SO;rpF*4836#t_+11q&%VwUllMO9_NsCP`uG6eiS; ztAus}R$!!btw5opQfBU27?w&c{ zIp^N{?KgLCnr7X~XLV0P2@r!rf=MJ22(n70Qi+6-N^LTk%nCsWf-n+^Otu}uA)8c+ zAWbPLDGG%`Vvwj*DilSx%VY`#DdcVXQ)dR3Qd~1jlg< z>(uM@Z752TQU#;H@vh?HVv3?@T87r4ofuYCg_M_C+0)TMgY7bVkKN&LfF^`zS%+ibu+YFNoK7d}W{$?(XKe zi=Y#8cpRV$ce`1a%XN|CPMtdCa`^y9c{~oTp99BepUc(P*XJ5^0XM_*e7}(Fwe!4x zaM0!Fd9T+Cc$Oa$f&dtB1iap%A>QZnd568=A~!5}p9=uk@Am_+%%`{BX-jfF2R?K&(F@YwN1eOXS|};6pxL>=`cCBP+TSCm z{^+TjmGs^mI?3L*W(ijN<}B0-H770a|736axzo*$h5ce#yk>@#g_lpRGK?(zrZ&B4 zN>zGdhjyn{w&{zVQ%m|g7rU!3pWm^x{?JS=Sv=Yh3C)i^w@KU*Cco63-u6+htLb`r z4Y5~#$5yPw->SxDZ@H2*{QZfU>fQaeLuI;#=oM3PA($f0KycLAubuEuXV^s1^wmd) zdQXp+c%HN3!IHjkN_MtYdct@o3mP zhv~{UB(GSA%`aL;{#^WYbPSX#-{0C2N9OkYC0%K+C^r~8W9ZYB5!3R%j7`iqXCGP&t8z$Z;OFFCDNL}h5eGF z-|cHLPdxd#ri)y?vD`NyV)x_G%_+LF&F*b&4fE#Klm=v+c`ErDHRTs4}^pDit_heK8|T zou=?h{>}^5kb1dTw3edb6$l~( z1Yx1bcsMgdELxAG!HG&CsZwSrQSu?SR*Mwp~5u&%6(5X3T& zaG}9S2n~OV`;e;+HW9BG%of5VurDV}AuZ&Pa4`rUp~}p#nb=^#^hm-Vp!* diff --git a/smiley_pack/icons/sport/darts.gif b/smiley_pack/icons/sport/darts.gif index 09fb6ea99875a92b3cd753ab48263ea0f0eed7ce..3c0047153b3a186a03d00a7044315c6ab5edd0b4 100644 GIT binary patch literal 6746 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 UBx0Yh{p~ZF&vWko|D0R)PluofW&i*H literal 7103 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 YMf{&ROZwmbi7?)dzvt|P<*eoZ10<#4ssI20 diff --git a/smiley_pack/icons/sport/fencing.gif b/smiley_pack/icons/sport/fencing.gif index a4ec5cd3e9f1273817d8dfa01f41b56b4647bf60..24fe999cebbba58dd56a6d008944296eaa5a1ac4 100644 GIT binary patch literal 9995 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 literal 11247 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 diff --git a/smiley_pack/icons/sport/football.gif b/smiley_pack/icons/sport/football.gif index c9fa6c5e21f99c8d384170786e960569a31efcf2..5e3447463be38d06b4befe733079b51ac5a0ace3 100644 GIT binary patch delta 1377 zcmbQp-^kDH?&)S>ndr?R$MAU~cLd}A$+uZsC+}sdWct2;vITR>OIzR#diY(Wz4jxL8XLDS4bc?MHyB9ROR%vf=fkmS#^Ukm>O$HI#$5omf{55XBDGDjesgS7R z?&x4*@+oKtDlRQ+6=mt1-j!cJxjtY*(`3D=GZyz4_IWTcGOe;|oRqy#m}xP$`OIar ztyj)iy>?znNtm6`v@P4V>o4bI=w#j6$rKyJX2l$GEreBM^Oik3+%3;+Wjp(X`(iBD zmC3?K?_SvP+LG~oSNhJx!*{+uzi;(u>l{U^GQGJr5l3Ee>ZB$%9A*?{VliM)xVn$G z{w#}FPOJWWomQT$nie7l7A$cVc=u{y^P)U~*=2v6yd*Ysq?~jW(0>y=lTXH)(|WI| zO6FuoU*|s}p(&LD3)d{@*5lDQ`QX4J=8)nj4zDbx1{RYmf9|L;IE3&7ue^4qtKDnscRX&`j=6LZWM6jGa;>K$5 zE&B6E7Gpg@A3g@<+-I|A|21hfowX@_Ww7}2Z;y+EvOAZ`@8Z0(usxqekbyz*Ckv+p z122OP0|V)iSx?p2M2bvn21Z6E#@KmCv1zq(#+r5U%;4DEx_yWKa$scEZ|h`A2gc^X zk`OnMEnD~Qbmu&?jqU7X?u+T5$UJuEf(r9T=03)EU7jxY6OY{f_Dty`i-Cm1dkbkBlfb+-k)30k=q1W!4499iTQYw~E( z`QJD82jt!O$tfBMdU-xLw*yJtH&YpVp4A++I?oW4~^s3e` z+Wh)L-kcXfzK_cCBwto>d>3E@#V9M;F-ls5))UB|NHLnoffAc@Rzah3#$-v0N5OHF|L%VWzG1&rh2SVYZd-OW=jES?thbYIyWwQZ{_1e4u*yRvTW;ru9TRB0E_8KHi~w|T1K zU)fg4$-b>iU(ad#u_M1BknLp3M3>U32M#Us+gZk|ZK9oUaudUsDYu%%IGlXUr4)Rt sL>(GSS(v_D^kQ82kTZ|9jYFs0AW=Q}ep1E{iMdDRX4tw+&ScjB04lmo7ytkO delta 795 zcmZqVpUBVc?&)S>ndr?R$FO-KcLd|Vi7Ee>4t$@S!g!jKfdM4UzycQA4H8SKzx8$V z!DZKG#~9a44R;K!fO7)6RLsxED0I3ba@YHPv`qh}22 zH=Z5&`Lk!U|8ishV+?_s%~RId9_s7;)u>NT zc1^#XcV)qh)opf5lBaJA&^KMOc3u4GJ{fiAZ08e3C*GZ%6+7XvsuBYzpjpuadSXgz zeaZs67Nh{3mbIw7JZcl~%&psZ$gf^w%gDrBkJVHD?LOnf2KR-!83TRsmeR35>KtN4LM^8yeP)tivO-)lzPghb> zT2@wOV`FG$W@%?K1oD0Lrh0TOh-pgN=j2sPE}D+T2@tD zSXg3TUukA$Z*FdMb8~ieb$EAoeSCa>e}A*47~9Pov%vvO0h7=H5R(l98Gi==EC2ui z051SN000Bkc)HyFFv>}*y*TU5yZ>M)j$~<`XsWJk>ykhmzehaW_sjx9;Qs*uUhmrpalz8kxYhJPTXK4$bC3*{fO3CCcb$9-pgU8eRBM@`Ym_afG&MT1 zH3YA)x3!hJy8yklzqmWVvckKz!$ie2$ECDqF$BN>1=h+QzthuN)z@d++}+j%*c{s2 z25d4->FSL{hz{n+6A1tz`2-0L00#gp0{{mA8UQr_00X~x3e5U2N`GJsAOy%gEyfxr zG9M_8Wp<*OvvODXqVl}OHa#|VginBhQ0Vfhe1d>-84&aizelhss9J-)=t4-f28hOD za2RNOhqc%sG#)6)=e4u}Zoj#4HW~{Z`u}o$duwBHerGZaXmW*rh(JVya7$<~k!yg9 zPg|0Tex8Aln1l_Sn|}*qMRQy$o@G3#Gjy2&ISQ|4wYIywy}rM|!NSAD#m2|T$;!*j zyrsVY1=6Ro(goBn(bK@s+`}OW03rDV2@C)R04xXq1ppNQHvj+!|9}R9gM@<>BpwWf zi-imyEG-?1jEf8@AucEJRqr+Ha`y4jWrM{+Jq7aL@^Nt&gYcpCNm5Z00Z#w z&dnGw11|sv0s;K}0Rqniy@N;Nz<_@O5-NNba3Di?2o(m9H|Sx8cn8l-jQ4Ed0FV6Q zg`_A@p2&>{QGYfxiLoWeiY!rL+!)YY%$78pu}sCK}}d1_=j)hX1IT@w~uIu>izhz2{ZG^=y1 zSgBpzB7Y1SmLONVVC$|uO1CamsdDx1waa$u%(N2yf=v2wQDVP{3o3f77-1SD4hk!l zgNTl1zi|xR`CRu6p**C+wi&c1Ct}5H1o=^mhrppisXqb;1PFi;0>B|Os9b=-AK<_f z5y+jAL7xXl_!QB@fH=W5cILRLZk-^UI%>Ml4}WDYzP$PK=pj??PTp|WfB+%+1O+Gn z1OO}y00ICK06G8w2ibrGf`R~rg@cHR09gt~P)-1eic?}`3t(K4l7j$LVPs}yV_uq@ z1cm@dNC`}(ri1`mQLe9qU9`0TSh%kMPrRl8QwYGD0AIzD09(n5Qq77*z^Ix4O}K>v z+JD*r2T4~|t^fi8)BtBoXxy;m?d}3r+mQeR<^kfFh*r_Y~2g9;r=w5ZXeHfQ35rf5(g0FyZhCK=(C7ytkO literal 2399 zcmeIyX*3(?8VB$gl?35PY!O5fMZ^|c1VJK_NDxU=yGqp{wD#C(D7Ds7r`mC=XgamD z)v6wrc63>zuZrE=EMDVpY!|vob!L5|I1*~iMGLJ00+Rw z5`bi&GBQx$0Vq%g3X*{VfiMtI87u)(m6KJKms69MQ-{c_D?s3i3OcX@NEi^Q4AO)u zX~AIH%F0L;6{M<)4qP3rC~JrWp%EGw1md73;-I#czP6SDQd=LTV{Zn=VbC}X#zgO+ znSs6;4u{7Y;IUY92}7*8sfo3T3BkX-PE46V1(SEzIpKE$po?rmU_GA)?LLxa!I5@aCI?$XPX--Z|vK+@no=$cW z1Sn+2tCGoNI+@ILp}N!Q?hFZr2ZO<8y0V!}Po}FUi^Xww<9c}T*leDsrx%Cg#g*WC zA3EeC!Q=URd-;2N2m1O3`TGY21n>g_jvfg-#^;BHgoJ!HZ~zHE+IZ%n2?Yt6ecAmrX(k)rlh2%rlzH(rAwrzXQZcRW@Mbq%oK@4pk+K@ zk8r+F=}tZT`ytK!O>|aP*8cwfmv{RA{0|a9@5{4khj~;Ahh|}lmzI*OK<^xo#Q;hG z#$VQbsR;nQ2hfz&a&4)5m;+YE1wLuH{3u^ZmsRb0TijO+w~U;7a{J0a8H!q@#cchS zSqeNngr5&1ywC za}ca;J?H89%+#rdmp20Aj-8e#tc~2_u6Aa0jbgc#7N6Nm z0i5;u+aLuUZzImeVsGwCjQ%qG)@&E)jd#7h($?VBi&dp1)v3lmRMhyjpKIz|5|20X z??xM^w`b2b$2_Vj3~2jh=4SHN+R$cl_!OUK+8dR1Heo?6#*A;;wzG9>yvZkd7;Hy- zJ8?;=+{@3Z`%^DTN^@H=BbfYGMvDI=Bb-&w*(?3|z-pp-i{NZ_nF6)KI0ClhTx#rA zBdm(mdtPM)y}9;HLdf$PGtpPghQeh^1yLbsdl~kYD_ta}hh7_vph)N81+R)8a>k0i zLC)_Y8*lhE@{RIT!Cp|mJMemM>%u!xhauWOusrOcP2#GgHkPWf`U%Fp?Dw5sgX-cV zr6SFlN>-|w@3V4rS98YQ7TS<^ISc`$wKl zZJn59F+NV5Nj6-$oF5#5w`)mxy)<~mt(N^==lj*^JICJ)f7kW#*ZD`9#bv|eol^AW zIBAF4*Q7N1%1fU0Er-2NbSbGnPYUw4~+?*|KeNAmasT>1byu8{lW~i0ci0*GVp1gVU2Gew5!=VGVeg zFGd2v@Luvg3m`S55aDa}Gr9z2lzc|h!Z)&Vuad^T9WasCv9uv|wG$qE3vDnI!k zPoMGafaf7rUIwQEPfj2G_euW!jQ>Gxp&pXj9$PnTZ4g&ej`u?%w)KFO)Zkx!pPtZn zzwXu)RFZaX^>CR-a8ae)7}n=D_ra+|J3`cGv(3}{+C~?`eQO;iBm1tmhEBDLWDt{G z=dlmFNvpqE4_ejxKQ7!?tg%hO{aAI#>)E&NHltx(|58BxHn`bS1G*>MYgY5wSgJ_E~@mstZhQXFO{jI#p*9gY2@44ujO#Cg;8KPv*V8BV%*Y$e#Fa5oREd91PgmoNc|3 z^P>^>Kbx#xtmApVduMBT{5t=|{m;TT+=YSUT09DX-a}(U3{e(%yano5Dhk7kiZ~Gw UYQp#+6h=g2P{R1&q)>qU9~*&15dZ)H diff --git a/smiley_pack/icons/sport/horseriding.gif b/smiley_pack/icons/sport/horseriding.gif index 13ca45030d00cd71bb7275a6782aa63398398a53..9eb717b8ec84db99468af8a756677ad33420a4a1 100644 GIT binary patch literal 10124 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 V)eASi?*vm1yL-wd(Vk%U{{Uc*6Kwzh literal 4292 zcmciFYfw{X8o=@Qn8+cKoP=2) ze0N7R80mmN1Lhusxw$#hZ~Vo+yU(qP2#SspZI2Av`fG0*0{^i4OFDxIT)-CcpCB`V zU9Vo57_wz;wz1++v#+{ikd5#Toqx^8yg*ohcu9l}ms_rN8!KBz|DS&^zfOAIyg z*}eUl1vC7n>m!;W*3+4~>(jky!|JJ2O~lmZclYJ_OB?@#`yEbD`Mxvq^i#%)r5bNh zje;*iCgQXQJ=ls<6Ju2v`wqQ7cH1Uyrq@6-{)MH{$3H-WI;<4Bt?gvbCL(m&3W+o& z7|7*+AzM|j^&r4iS{0t3pefSu&)`J~EN3}Kb3w!U6vkC@1a)-{wfg}d2wEGiHndzS zyV6k9T3SqGbzL@=maDp4uzN0-+3mt_bt5@l81D@ytanhz8Xc(-VUt|!z9O*nu3URo z)bl-2F#50AeSP=dx?LWg%PiR}mVKNPbVyD|{$FBe#i1Jq{Z4mDaKSscJ#t`cqHBDE zvE4m@XWzPKTv{6$a{Eb7X|a!?T~2R1zES=%O`3jEcIxwtP?#v4PfRi=#+nmj=M$qB z5+h$p49-#rO^rb?u=h*d5WiW3jl1+c5VD4cYR1UcA8v_CzlVKeGu&rH!SGK%_NaXx zK2mb)9qw0dV2Wi$ZT?xmSvv71d5UZ7sGG{*F=ZgR(jfqaHU2-L5e9@88K;@`Ko8zNDS;Z|kG|l!!>m5y!qOeRAe# zik&?T`R?oZ>>HL3V$sa`F4uw^2FD}Op4`+#OyZdS0U(GSDH#!DWUlF&<`(ASngnf$ z7Jd**U>x8OB~@BeUR71&*Y&4=Pqtmtw_S~IEoti%l(%FSS6B2Ih4L(PAh5n@Ft4SR zeHC?B#Y6*HLxZ)V)?9#2G9LX+_mn6+_aLjk$EAGe<(H|2YOgzAh5c7?aovZqkG}~@ zN?)?Dd%nV~teb3fH!oyAjD&d8#+ixDNAXjgbS7;=`@N`HAyK1C?_mWn+K0jYqm6x zv=p_nR2ORMuvm&37|>EJv^3vrX}-l$4P~i%!P5MxRJFCG@yoNcY%jFbwcw^lqBwXvnxf~C|5u~-TxzKtx6-y?{zgKNtfxkEhqQO(5D8K+^+G5!*boz^Wp1{C1NKW zZEY!PWhpgJ<}HO2AGMLCJ2P;BG29b7aA&tRr0(G-Ze!1b^>K0fNH=Kdt~1;04Mv$% z|4UekE?7#gHw%_Bex9YvpZZZW@n(pyVwq=COE&{f-_PRQHi~c_R?U)B8{9dJvq*A zZOAaqB25$111WNv4p&$%tg%{n@!FMBtPa&eT9X|zCe6Ob8K7o1 z=lIjrQBu!tJ>`)6o#&tZzqBT-t}=_cojHlAyQi1QuY;LYn3Xxhr<~yUZc@xmDP(Keoa?t&$<1F{kU{Y$3#SMJCxcEsBLf$M zG=m_}LB$3qJ%x8{f2F(rXZ*23hK#nwVe`}{_^oync)+tOKc{|oW51!;>+PIezAje- zXYlaMYo40mwU*22g5yGi9kt8Y9V={j8`&7s%Ul)uGxx0#b8MG<@x#WZbHbC4M!8J& zwRIIT9HzDm_4;C+YNdVB91@;Vf(-R=moPH00v#d(bVwbQ9TJ$h`{)OiB>(o0w<;<{ zYdNb$tZb`VTD#>ux}@vd3?w{zlqc!Wkg3s}HMeHL0-&RSZej(84kB>!3A!n}BcbQ$ zFJA$JMM45DYI9^&KZ^74tOJJ8>9<@?H^5=EjoqW^;9 ZC8hNZ`aoATw#%t0wQEUqiwZJW0|0ZQ+4}$h delta 670 zcmbQwcAHJx-P6s&GEt5}j$tzc2yikpbFwfCasGK;01C5frKrzeD+F(b?Y~7Qp`;$$g|Q&0kuOLGdRGrw9YkJ@p6&wO%;k zxq7d~>$AK6CusDgWX{uIU-NpWlEIxmhn&+%wf7lTD7QN4NW8ABbBPd240$`xLcQer zl|Rc|eHsp^zF>K+=g)46eOq3U{uizQ(3g?8Rr@U z?R|wj4JJV%ulL=XH^<-9g~4)X)Y}!FT8U>a220Lm;fP@JJ@B@Qb&bwL151HAtvsg< zdBu_1P6xEE3Ej<|x6yAJPklgnP7`NUV0|5PyO4=>WvghHaHoiqYum(06Ey>-OHCG5 z)fJgPZ-&GY>CR<~S1(<)ewF&B&0Dr^+b)9DrOik#B^-!nc*5rGzq>9|(q~bS^n=W$ zC8{@c{65WL;mBz6JCL`Vb(0Cm;avu0P8;5DPBmmwqym#GUfSOWmL*7iF9 diff --git a/smiley_pack/icons/sport/snooker.gif b/smiley_pack/icons/sport/snooker.gif index fa2e6a840c5d19d8f4582c6e7fbdd0e42b928b71..d5ad72600c17d7f18e2a06af0ed20015de63be80 100644 GIT binary patch literal 6079 zcmeHLX*^VIA3kG{tYb+SQvq8O~td;*8nSEgBAdS z0m|5=+?D;O(yYcCH zy59!)x2X@?0knYlp5dNf0KDs1H}>N+LHk*w;&ONWu9fIRJEtd(g(WV_O?Sn6yZp|7mtRrC2mr5LHk2%GzML$(r)=DWo~@|krQq=pmSuZq32R7gqa-&-PvW;n1@s|`G$Ck^Tn{DQ z4E#CrXzAy*34fjr2Hp|Bu^}gPN)1!bw(nv_V|5i{{a3GzS8alW^#q1*nMQ6-k61W# z-c4P}UYz(aYr*hU0B{E3gQ+L!!ALHX9kwa7nZ>8&vw>dC-E@iX;lYnnXmd_;HwtjqdQTJFsRlQ7 z*@(Y1%d%87pV9xWpWrG{ex{H#k4IgfhMFCP&?TGHDA0cey4-E}Yn1^L46 zN&D*tNMoFD`Cz<51MXNPqL{IAagW0+uR0uwz3r5tk;Reilb)yk2$p7$TOyGV9m3{^ z%b;+=vrMdx8xqu!LR*p7^h&X;y(2gc-QQ0vE=lxaBn@I%CI;iWDotv}r-Q|o+Gj`R zdlv^*2uqvGVrvn$(WE!iz<5`l%Wn1h(olEjINXAI>!`2ekp08CM zNeaIoHra;cG=fa!-%I4UIe0Cpl zwL+s|Jj!Vrx-AAd9rSzMy;@R?I1T>s+! zL;;ah6li$3Z<-Lhyy41V7iZAR$KqA^2exNg$8*}44x?^pZ(xy-$m0~MKZbKp&NV;c zB+g(g!aiaK%Uv;MLfT#TQ;R>vhpCGF*hc*8~x3* zP`mSEI(<;+WE%&;^+~7W%@iFzv=wSKXhLFTj!3ybuRK-=gdEKuBDy< z5mgH9Qj_5hH1~RQ@`eA3L*@Arqs1N6?P=3;5lGSV51b!&qTTwDzB`G26rH;}Sb>5s ziCs|)3_#!{um~@24AK`K{@|g#M+iERn+b+NR%^U#jYTMgIt# z2T%DUJmcq{LuK<-=2uQAMcgWWY_1|NG;74srDYfsn38C0(^W3r;`Zhc;hDau)mv<4 zfKg0KwP*DrQ)Opfp;4eLOa;efX_k+J*0&Xkmf3kmNGP;7bf=DYM~P_8<#J0ea7E*k z1;3AYJE|5K1tcOCd<4sLOwyVj)e~1eW2D~Blg+p8PBw~!H<*oWc}{jGls0R8FEAQy z5QrY`QNc^UA9)s$cUlPa*NA=~_5-o+<#7jMKM?zV`u=~&<5wkAdUZD z(|DTyc4+>6`5bL1rCgU{kK_1Vu2&#ADuv;{>va^iGgYp=zh}R8s~!;>AosnlkM3h> zYxkWSfFMazxtTuX`L*>|#F9FVq}7?lb^Y&~ib&g;TtdNxrJdTWq*ah=paduKt9-ci z1?*>IMS48lIJ*Y!2$+-I@tuA>=W+NC_S%QMsd3Tt(3M5kQ18PeWP3fOco)l1<^IzK}_^R|HVzsR40*iU)dtl`_vm&6dk4Tl+ACwJoB2 zyy07~o(>&*d=SIAuc~N*7R2l(p}e?dd}q*{)Oj&11I#&3NMLOxxvH z7a>ui%u|Jw-*#X?oEzY#97B|{jqpV(CxPVVvADv~6zrhYHx}%)R^ohk?vlChlMR~< zWh1?(W5i63UniuPasr$H9Ux6H6~_e$fS58{k_Qx(V6S+h<}tra3012M9a5c^h9)nu zha^m;wxxM!{_21hI74x8A|7Q8ni=B_D;eGY#GiXRT_a^Pi$|9cq`Tn>e19{f-Z$iA qw90E;VR@Qbv1d4TERhbyPy6dP+wB3t30wlelnbB&qmLT{=l%oqv1DQZ literal 11255 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 ITg(dl7rmL(!vFvP diff --git a/smiley_pack/icons/sport/surfing.gif b/smiley_pack/icons/sport/surfing.gif index b75d74b95d5c917beb427048001495b1e1cf612b..2ed2b77a6fb8bea2ca84e0a0bbc4449fd08e6eb8 100644 GIT binary patch delta 1339 zcmaFPvztf8-P6s&GEtX7lHrRO0|*>js`&rj|Ns9PTCyj~7&8M!CI*=#i81JaBthyJ zSpP3j?NdpZm$GWznkv46oNXn#voNiER}i6~#?6?~dh6qh?GH`W5*a7HC}w1y9K$GQnwTgz zQNlpU?Z%0T%6s}0oTo{4L93fPq?nSBnk=Hc)YPgr);9$>@$qoaSin4QPWSu;Yz3TL3?}x=Hd`>y z*}W%nM*hT24BSV!cI@1H}ls{8*ftR1Rc^>ic(B$Su67S|si@UBi6k7N*51XQr%)JGVsB$<=4JmE}hs zMh3;7ES!?SumVOc?m)Yz-*Cd`u|+Q%gS*K~k*;}<53=xeD~0Bn7cWtm(B3;ks$#x+ zL*n!;Olm^)#un-s-1~G4r*1rw)cjg(!P+YBPl4QvS2Wz1!ap2e073MSj>OD+5J7@3*ocP2G0Vc_2GF;j(Mect;0`3(%LY)#f$L6&<>u#}$qX7iJwemmkM0djG!2Bh5vN*fk%$d{r-Ua?ifI%&!DLfBACZ>yMw# zdrseZ@ZdEQm&}gV`P1t~*|b7Bd?v5X7Et!`5nC?U*e%9c@ajpX^6@a~LW5H~F7mE% zQ?nK=Y7$CSIWm&$4_mzY>^kTmyLGEHV` zPcQ0b;GXT#>c%{UX~DEsU~m*!YfaN*STJS5Mos3`tCz>t?%cXnb={)+MeCUlF^e8O zDsn=T?eq%G6X!38EZKPA@CCseH*apeb@!h0x`PLf9lQAK`HRShhn|SOc>jL&UdAoE zzkUA^Sv{HM?;no(mkCqBVXlPBCCO+{WiT(^F93(Sde$RX-objY-bEE=~-f zl*1~?z`~%z$iU8^%pe3zK#?A+>M#5@@Ve2)YMjl~B7R*>Z|;SXX3M--;XSI`^70?B zo|`i@e!?T8xf-q_X>8n$N~t+k@~4)Uc&+t|=hj)6w!3h*?YqUx9@MdH-8_Ac;p*!N z6%I?v<{zENg0K#ltr=7pM1a<1dhFu0H=US-i6$!F=&wjp>g9(rtp+4zCb-Qhbl)ns}IDK+fg|1xvK`W}kmylDH#b z{o+%Zf$F_3dp}qd+Sz(Ouc@rcQ*WqmD;MHqQ2fUm=}?eUnw_7gU}Rum#9$2o`0geT delta 1387 zcma)+X;71Q5XS#`V-iS$Xh>d2%P`!BfRjQp19(h8NyJ(jErX~LgF!?B7`Yl8Ns~@^w_QUSX?)>)Ir=IwV zXw42{`S?b70xEcD306ZU0Bxmq#$m(t>xi{C+GsQ)d%r~Ds7Eb<$7+4G6=0U1JE<(8Z1|Y{ zX2Sv2gVAVudbm(z>r6mJ%ZFws>qZ&Q5fCz&h=TLDC>zG92phzTX3rYzKpYxWwmU9R z6+JD@nIz_S72IdX!gKN{p`H1rH8PN9OnCE{>b6I6bvrt*8s#qj&z6xVw9yqeV&C2u z#zJ(@5koDl;Rm&0h*-?0TdP=TTf#vt$2nI|^RpQ&>BCqtafhc93AR(#bd#5(0=Xc( zrpS!Op+-0DJU3Etmkvo!CORfZiOgeScBi{#NYR-&bsx1nNYfPVB+>IHe+krW{vn5 zcN>b>@(QLQRb7J_X-rn3e286_Eh`5Jj3jirJ;0sd>@#N*<=!#?x?Yc?PfpK}e{Oj=2G49-fS~l*M1zH^M;WlKNSV%Ye zl=0-U4R(I$z{)GF*;ZGdT_zVfv;!Rr!Mi1d?sC>yZ&hme0#X;Ei-^kwh>yALXxcQ6TOBeHoo|5u2I|2)baUH>^RI7bpQnYZAaH5brP7l-JSW z+S(iZn#TJ2xVmcwxE-c+c9Og4*j_EYyRV;I`LLtCf8+1N!}TLC#&(1D%XN>s9uNF6 zHFad7<1J10fJe*O^~48sMzK$Hchu>|2%k$X=#sZ*gE2 zmGSg;2Xb_mr5$QTNaBTcm^CG#01h|+(u!5^pF1g;zAI0tD;T% zNPMWfscPGxFoit0uI$*J)KqM7$ZL;|{x*-FGF&G;uYCLB=IQSEYPG|B>FczoZ|jz> zx#>o*--uJvzDk#7iWHEa^o%%Z)4%svohx4PC=74}1l)#vM9*=qy*E6v&l_p|i-o9~rs%=d%!HG9&*|!CBaSb(v+e159CT PvfyOAtrv~v1-ASR10zNY diff --git a/smiley_pack/icons/sport/tennis.gif b/smiley_pack/icons/sport/tennis.gif index 36e47bf976d17ea16ef2f00c8e7631084d15b75b..b41641074c5f26e3690759b0a2aaab31dfb01d57 100644 GIT binary patch delta 302 zcmZ3=af6A+-P6s&GEtF1h~bOaL>|-ndy3!h8UANr`2XDU|NsBrquw*%28usfSQ!|^ z7<52NKt?dIUR|Kdq|(`uv1*-mz}^ohqn;$(_TyZT*ZRX@CYOMKir9&x2WAMosoI~h z^ntWk|4G*-6%LzbhpegPu@ffwzVG{1KPhOX)2y?1G8nd)vhx3_6AZF7XD}BK$X3n` z?h2__wiWH4*sf<^+tbi5YG$CX($L){+N<1VE+S&i%pkz*JZHib8v()PTek|fvg%rO z^se5#ZMonMUZHklWnmSO{Rfu|@Uy9&Xjrb&Dsbj>D?7vaifalj}Fy{BOKF!SJ!~vdz3Jx(us07#XYq@Y`!e literal 1061 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 diff --git a/smiley_pack/icons/tired/hammock.gif b/smiley_pack/icons/tired/hammock.gif index 8639dd32e9bc81e9c493bb0a41a51dfafa2ff8bd..4192de66a1263f6d980651dea59a61bc3b9fd304 100644 GIT binary patch literal 8242 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 literal 1745 zcmd^ejs|7(X2!h|Q=6Nya{k+(s){DF13RJ3jy%Izx75c82okCpo#9hjX$a)pHCuAQp-Vpa#&Ppcz-|@oiXAs0Tlh z&~PMJ+I`K{ogAHbAHOhn;9}!D@5k{cd+QTkUGdP^&tIN}No7>Z^nfvZ8Q>C<#Ia%& zGlg(8j>;`&34xjAb~C~?;t1UuA>F)LN+Vw&4H(PNQOeW^Iz*~cb)L^qkqoo>at4z6 zZ7Lm>(ax~vJXc&le8a&wd48fCotS7qz4D4?iySl-PuF;1b1e$Pj(JeM@N{u$0RXZ9 zd$zg^o)DQ2ZW{ZGKoD`(Kp$9dfjEC#!fju@rW5)$zMuOKRFmtZ`H8x#$0p zdq;F#x7J3y^))t(FCy5fd88e1(BzCF=}$93%w&-j=0_?6i85BvlhCRzZ3-( zxnl42Y=yReRAhl&j+bfa$AJO3YvM;^zVk%C7(n>?0ZjjO06O}YfcU{tifAV-t_>dP z7E^WlrlYajH=4BH+arUPVW+a^r69Q+l~4?al^FA^cuA?zYPIB2x>>&Cb(pT~*bQmfD_9NCy7p6qU-2L$2b_iaQZsj*aY0y^Nn(k2aLf2>-D4| zlioY@BtgwkcSX&d4D(_?QRBBjiU##6mKD_e1Aso&xKw3ry0Sjx_tA(C5v9(Q1a?BP zziAN80%En${+@%IfGl(uK-RQd*Hf>*?vZrmfcAzGqhC2uTe+<-2tD`ShGP|{ABPFy zA0XwOWuoter<^hE@~urAmMcGrnhFh-CKJmPRhrR4lRck-CzzRxPxUQuS$?b2ka`4b+Xg@JDR6Ya-g&~9*N4(zAtG@BOKH*1t z>Mlk40JtJjQ;J85JCop$1{LIw6(jH*Ko`x{!(BS}Rb+LPPe+u_vJi?+hmOx$u=2Ur zo$gYVc5t7pJtnU6@2~s4|J=5u)A^@tcR==lTa-OK3`XG*c5FBe@r_N;K9agmO}&sk zHa&CO8*n|QSW-~G&I0s_=H9UKn6LCJSKp`RCMeFKyuBwF5?1V5yABBsUrCrxjvp|U RCz{0H-E$27Uw`6n{sHSew;2Ec diff --git a/smileybutton/view/default.svg b/smileybutton/view/default.svg index c39e68df..35872bdf 100644 --- a/smileybutton/view/default.svg +++ b/smileybutton/view/default.svg @@ -1,99 +1 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - + \ No newline at end of file diff --git a/smileybutton/view/smoothly.svg b/smileybutton/view/smoothly.svg index 8f5d26a2..1eaa4da3 100644 --- a/smileybutton/view/smoothly.svg +++ b/smileybutton/view/smoothly.svg @@ -1,112 +1 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/smileybutton/view/vier.svg b/smileybutton/view/vier.svg index 4b86d960..c4d9fb61 100644 --- a/smileybutton/view/vier.svg +++ b/smileybutton/view/vier.svg @@ -1,99 +1 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - + \ No newline at end of file diff --git a/smilies_adult/icons/bong.gif b/smilies_adult/icons/bong.gif index 2d06a65265e14c343beb9f83efc8c537cb81bd3f..161371400b0dce102cc0fec830e3d740a4818b2f 100644 GIT binary patch literal 197 zcmZ?wbhEHbRA5kG_{7El1P2ZrVE7ND|1o8Xd-2q>qYN$g_}E&uCMvvRxK|>uw{Pd=r!0YiX@%ug ssx{_}*+nI6jGbKtMNQVB6^+f)LR+WKPHdW}vM|?Z$$Yt4e4Gr{0Bx8_G5`Po literal 988 zcmZvbVQ3p=7{~vvod!BKT)~W0W@p-cSd_T+L#ze;5HXV>Sv_4pM7)kU50_~^bb4$Z z-bsWY2Syt3oabo92{)}X;&sOLK3vv=UggA~5pG)w`H@ngdnMu!kAvA4xu5rdN`R;yJ}6uXxM>Xo4W(*YJx0~&w__`!>C zm|`(v7~(P{2qZ})%cQDQE|X!9ZIfN2MuR+$e4jd-#6+WPJf2A;_*6=mnv#wmm$O+- z5Ohg0Wx1wl4PEz4bKSN(wOTaF#N%utkx8ZabUMdzg_#*e5Hv~BW!Y3!r(AXoqh(p` zdVMp-#3tB@WG2b*44Y#!g$%FoIW1Sv3yP^|j;6c1*)pAV$K7=0Y+e)ONI zE48-O$jZ{JTFjT{i^jsdUC|qk>A8;IQnCZ;?2dANuu=$H%1})UH}oOTjQCEJ+&K9} zZK5VooyaDt5UE5mQI04>beKGNE?gT{1r-gd3|WH2gXh38NR1)Z(|i9~7(@!uQym{| z56vd(b=Wox17#hW23bKth9H3F!LmpuF*X)NNrAr6n;+P=PXF{D-_3aPBoIZ)2&58=qt2n-N+*L_eIOn;+0Gi?p$^v9`9hy1Kf!xL7Kc z{+DMW+WTk!J-`k;62Kn(h+!af6%U2ZVY+lJ7aH8tUp;cs%J&cKeD~0g)7Sd8j2=CG z{mAgjdqd;9|GIQwWO;7nx&2R{pFFWV*LQ5G|LS8Gw`|>e;-?2MO<(`&lSq2y&S%W6 z?>^cl?Y?||^4G+LofAv1j8ESFxpe=9=RZC9=04}km+w1R4ZXF$@80bzPfnMvJS^&` z4t)Lkz}-jFSGLdX`~BlTF0Z|Rn%%Q&;ltl@eeY~lUtHi{WxhSrdE$+mmAkjTI6FA= R{YytjJ?DYZp=}{d{0*c|@#Fvi diff --git a/smilies_adult/icons/drunk.gif b/smilies_adult/icons/drunk.gif index 1e433b12ef64389036be2897793f05110f20606a..59e687e1ec8dba7bb6c5aca20a02a94d435c7ca5 100644 GIT binary patch delta 150 zcmX@ew35lz-P6s&GSP-Xg5lGD1`ufZ-_p`D$BW_Ev18|w1^x#m|NqaR_>+Z|fq{cT z2c!U`mVxD+z)8=*iJ|ID9}i5dlal%DkQ*O*%!$!q#qIYj4K?%JO0GBLD^^vPlrk|* z+~TOlc51)$GI!>SmzcMA%&EL|AnPRC-Lt{|OBpU-nbp4L@x@!W_uiLeo-EC%1^^sf BJbnNG delta 196 zcmZ3){ zj0_BX3_2j4ATt*Rs9E#un|NrmwpMk@W zfy0u4!;67KlYxVSfkT3WLz9C;fI|SN1t{qB{XbCQcZgYNq~d>WKi808XU70nBRvCV zMxeCfPZmyopzS&!r66Z8u+Dg(+?SF$FIhm4XWE=eklB?T(1Q~P2Ve{rz12s%EP5%7$MSLUmsV%7dv9cSD!W{LB%<=K4XS`=i# z!C0@^Sf0iZXUxc9$;mv?lDV|QiNT%2EWu2vER8LLB{?*fL!?z@z7uT0(czDljI&>^x}l*g1|_pnZ_ms z%$E`zG^U?qK6oA zoS9k5(fMp~EG3b~MPBT&5sTEjV!~G%uXf^Jv2GQ=GmGoyE$SQ`Ofzf+VeaHXc4xB! zBv1`(jx2~VfCQ=?i%Ezk92hq8|M=g~$Y{orUs@4i)aDf{#?sNL;p-J=!5ThMqqrb! zrqOIK&KdJ&@w@1{Ein?z<<~Qi;DNbI2-#f|7vKoLR!C&GB%TxKInuXp$)$`caQi4Go}Wn@G>t3B}R)}Gs{AwHdeL{r>^c)OO`D6(ln4$ zs~h5$2J&;Jv3tj?oHUIam?YalNwU(Z)@_$DM`4J863nebBSZy|=CK z9GVOqh725*3>;1j99|q80vsHg90C&G|9}7f|Nnm{AO_Ju05K6l0=bI+x&2&2f}I@$ zT#fV$m>Gc*ia%L6`5B}bbU=zg&R}4jxj?NiC39Z#1_8dry<%GD7aPP_oMSO~JH2I& zfO^H>zU_+V0(R&msWg@psIX3*7{j=Vlcj~*@xh6JXFU8ep~{L?`(L%5am$#c&(EHx z^O0*&kOdcGy=G&18bh2hBbOx)^F&ML(hesEcP_I8Go`XLwhWf!&{!^!R+afq?CCK} zH9R|_H<)bl+Ol<9l@p8W`dvm`vnJR|0mB1}Yo|b6y9l3ad6L}YizH5pE(nx#o@s1T zzYCiY-CA#m#||;pT|?yiOLZROxi@+EgrB)9ZN8Z5IpyyWS5Nv z_jc#2yngGwnUx$IHuC@Y-_Xct#*$xJ5nX0GK)p9J_DrLj{lsktTZ!f!ADW1o|+}ha4pb`}o&)8e1+LzEuc5nZM8V!|UD~wk;^DbYz5)^=&HfwOjmEj7%84zba1}95>t@BEbpk!(I zc6u|=nJ@mJ zi35{mJ1ALJI@P-EGUh4_F;K#uDu+mz!qVgd^vr`L>TMPpwH5t5z-!WTFvTE40GK9c z*;ue|pWeq+3M@#DgsR2hzYm(Yv)&RSkxM~0Z diff --git a/twitter/vendor/abraham/twitteroauth/tests/kitten.jpg b/twitter/vendor/abraham/twitteroauth/tests/kitten.jpg index 47006b454b41569983c6486072dca233f8b6f9a7..9f7acf1a629d0a0d489750358ed12dc94a0e4246 100644 GIT binary patch delta 206107 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ȶ-d)9n22{i(joSC^*$06pbfAG)XwS2p1!D^}-p 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 %2PncQ^-h21Fw3MpvEddl1$G*)KbV| zP@qBERDM-yjDt(DBGH*9I*)oMFr4*ih&+RTq=Gu|M>H-%`MH9N4!MUN~n%43O4FwB&%0ICX@plg`|xs=ct&9f?Qf1rPu-te9*Xm z6f5Q`cjMSlxP=!-h0r9`II`QZ0_d4gSRKtVMv1|VU3E$yyB#U7cSQlr3m?|mHQ(QRl?+eQhkR?0Mr{Bmy7}w3G44rzl?6}zyVu;dzyu)Btmh# zNo|4>LU!EL4&Oy7nQ_vTtc4M|`qGEat~ zGkTXFRDh$f{35dEoh=#^A4uXij~*h6qlh6-xK*V)Sz`325Xll=1Wn+EATB zB$E+KZNA5+PRnC2y5p%zi+hqe5>!4Zuwq(m=)N+lN)(b@Iziq@AEhrQMOrjr!zAsO zt{HU0cEQ93mIlI3+;90-cdeWFNywO4VojE}MYuc?q9#3!95ScggWL&!_Fls<+)dE+ z-Oap+{3ZwVKNVBSOYs{Fm*~APYb>*565;!@)3nKgPZB!yq-M(aTzfWSZ`Wn9hGtwY z*|aAPW6vN2nL80&>B>>;2}^q>D93Lx1SeC@G=MiseKGZ-jGGh9H$kQ`rfnMm+msbf z(ydXy%+{D=lJrU9-$E^a<{L}Pq%z9ha1-hvL~ps8xk6RbDp=fAmS!3nOJ!}6%VG+O ziS-ESMF>AeM%g~g`1OsO=xDoja^Wyi6YsX>x*j~7dj@gV%j*ivX zaeP>$D&ECS>YsNG`+IU~o;YFr{{Yly`JQjaI$vguc$b6coc)^>iUeL>gZno10F>Ld zHVrV}?xYR2k9x&_l5@)|M`IKria(D)6bMY_6jMtC9{ttf2aMnL$hf<{}w4MnGI}jv|`t+q` z@^VY29DH0*+g5DXhB!ZnR#-iy#y5`r?+|~~Tk_I8vC&F@5gLy^)uRORdtzrOHrh7d zEx(FAW~+OLi<%GZ90!U0-MK#1(u|t{xL9$!2iI^>Y#Fn4)%uU(Q60#ljGgp0Ica^O zU5nwai)L-@u9VM~ohM0xqZ^-LSL_%`r)+J6Wy~KBwl_Dg+~OBbdY~#u5!e0cafJ<^ zl{q>@Gcw|T!D&^#8H0=0H3X$TZj?3dqB{Eu9I3Qy@$oL@AR;c2XNS5mH!Z{EUZ(BS zC*Ys=th+UFPE`Uqd2#oK+!iUewPfy~(A2R5_mp-Y0Fivm=#t@hb*b!xoItT|EHlN5b>3OVk#vv$01>X|sREZZZ$^aMT#=>^_>GR_ zj6ryff{^0UOHbQeqf>VXC)Cr4>XSd2u6xeoDrU&yl;dS9<3?7)^Bz{Z@lV3wwPkdx z%f>LpD^+m4Nsgj(6P{vCa=?eV-Rj}Jc6I4eFN<$wbg`Gr=gdiudTN1l)V`(wC= z0Pk9Se=)Dcqn|$$jJYrP3+C^$wh@

-q_Du5?VE}^px8wo#^|;Og%>M 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 bSlX?G^+z06k;0AWgves7rMmig+Ck8NV;%!} literal 1614 zcmcK4c~BEq0LSr1*yt{ax>;fp!vt9Bfh{61?Tlbsxq~^xfSf`|0p(B;q8KOwNdzQ- zfP#XS5R*Wu*a(is!cb6@#^PR_E z9lpZkIth{6Wz+P*w)o8-WR~1(@4GKb#4Uw3vVee$BvQ0oVJ%9Sa<8 zy#&VKu7h9U?f@H{6%MsoahsK6vy!&4r8b-WivRDBHrkr7bz z+O4F^{o0(4Q2ENzxQ>a!%!JYszF4|TUL~*0tf<}^v$rlKx;#c4mBN>bfKHdHttbbM z&b$R2h9k%l*L8&ex|=J{rIU>v6DwntC+UZ|hcUE&bE?MC4V>!buvmaeX$}Lhh4YIopDs<5*50Ou;`%vTS45!TQsXK#s66llY*#oO*)Z%5B9^ zlcFgBikN$5M8M7qb`mWl(L$0>FF=w}E$7Mug0POb^c;aA6B9o-fg^YAB9X2E35;7$ zC`wrhg7wXHTHuZ=sZL-jtkONu@G-)gT#BXPP2n2^2^8*QVeXR+j7Z%O z;_xz$zotF7brEU$`lQ7=Jw@+d&T2x?&@Y*(=A_YX;GlB7o%ghb#lQH(_Ybb(eK&k( ze$5T%_PC;WVSdsMVS%!8ee{<6(rj8*`o5fqiZo=$fjDVeYXmSDB9+_2pPTU0@ghmd zvrJ5E?6|-zO&0djja(y!9{)j014XsFwYymkxj&5IZaxHNV?OIWCo zByCk9Le)+QPE+N^?NzUjsYn&q)=QcN8r8NiU^I%Q($ar;!pm~?iY!sGQyNwar80|LN9^RypGcrmLV_JyQH8PDe&siDwqxWVz&fEWm z6LcoL67xbDWwJ&Ux-8O=ejZN~9mJ_`a+(7JX9u;k2{ahRP6I3Z*UK{9%|cey=WRq` zQh=_U-|$q#azaovxQErT*2p@!h~AapHT+v~MQS=by^r4S;$ByoxXniYM8mu#0>8^rV9-U yTDe{d9zq$jTTAS2>T2{HoD_D;=*Q|$k7m8xc=#4q>7!Yn-NFuryiMa literal 183 zcmZ?wbhEHblx5&&_{;zTPEJk-4lo=$cI^LuhX4QncjVgvNnAkjCkrD312cmTNGHe) z29}h96P~I&w!iY#{~3R*mziOn;?9{Z54Y(vu9%uB(#rXu&BuSb^g0I#F&?E^XCq|3 zrP+&3e%W2e62YjrdTo|LfLNByu_=BJ4YhcgHm5x@`=w*dy!zwTqtV_|KPlxaTgfKK K)-Ve)SOWl%b5o=M diff --git a/smiley_pack/icons/cool/affro.gif b/smiley_pack/icons/cool/affro.gif index f06166b83256778476fd9edd3c9668e83936473a..1e70f58f505bed1413d597093b832babf5b3538a 100644 GIT binary patch literal 138 zcmZ?wbhEHbRAi80`0$?r2>$(JQ2fcl%D}+HpabHAWEhwdr}VR(p35IPTjWSc@m{Cj zlC?^odzO{XNn5op*4pcX&-HJ;&w~$quHyev88>S|;SWPLQ=_|0p`0q_9X$n#sWGw= oUjD1^+9}38om72OlQG(FIxkQ9-OSBX-W@v@_`_yaFav`%01IO^ivR!s literal 158 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 literal 5140 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 KCLA~fK>q>6*k9oQ diff --git a/smiley_pack/icons/devilangel/blondedevil.gif b/smiley_pack/icons/devilangel/blondedevil.gif index 09e7e682283c5cffdc04ccaa53820c233a67f340..ec1fe1c83edcd86849af0b878ea8f8821b18d452 100644 GIT binary patch delta 2528 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 diff --git a/smiley_pack/icons/devilangel/catdevil.gif b/smiley_pack/icons/devilangel/catdevil.gif index 269d719bfb1fbcc75cc772eb5462a79e33b41537..ce01c43bf091d173dd37c5b3a45ad3ee6282fa3c 100644 GIT binary patch literal 977 zcmZ?wbhEHb)L_tH_{7Qp1pnvn2ZH~opWXdmlp!ZsZQAq|b2UoW<@}hH^ZQD{ z+V@(zdxo_`$vXunH}cFlY*w70@L|IC zeR6lM$+@;}s9b9&xo~HxOG3R{Zc|;0ZJU2{r+JM~l?wCZ>IsqzOiWXvjV*#^wX4l6 z$SqmYW3+tvN)63f-5VCIlZi6ivSX(N%bvaaSa$L6KfG_(k>f{?o!Gk$<^eWXgs1^M z@IC_=Apuh})b{?EwzGK46*Z>?N2cC<(HYCa!1wDwx0JU2TgiN7YfIV8iMIutB~wzx z-vrL`S6%P9R&4q8>j|%U^7cQ_FV$*eJis)|>y&A)|Z9N zES$q5wtdRv+#07Dv-jYZbSV+x!TtI4{o~|ZwuI^ zZusKyOEXiQ*ZgmvYuIZmet7(qhvm=Tzdr>3aDHJgxPPGeKbM}v3eoCQWY2m?}lL*IPX#vVEOg?56g$2f0^F>-tMr#v5tjXPG*K8BZD;nNuIA1 literal 1965 zcmah|Yfx2H6h2Ougur}4jx`yQcol|3LqwvT$n&Bi5+e$@L(K#u5DX!WeaU>33aP2_ zauf1UxQU<$5w=7gCWM5UifB6#-`){}tJh3+>-eWXHm#XE``k6_`@Z#k`yBs3zv&*) zT1BfolnR#q=}-Uk(BnV7{y5g9|rrVIi*0Upj6@%Q(KHt&L}V{7?q6T(m2F8<(vYif>X&U z+CUfs%7Fq<0aOA-V@SjV<${8sLQp9vT19FmDVG!^6_QFx31KM4RHF=36HF3DD5I)4 z<0>%|Dv03}_OLi(z?fi6B91d$5nG%y;7o8PIl~ZfX&mCf0GI$Kfnls@17Tb+5KIUr z1;e1x7!q;GKr$hjl#CFLR*{;kF>|3t$O+|?s$yI<%7toz6LmpVo~u$wj5G+s5p1Xh zoD0q+G6BcPa7AnZZ~T64Bo~rP$q4}r8jT?lsFw_q z0HHvsY89zLjTs~b!hkZ>Jc@y86m6jiTp1Ts_44tzirYrkJUH)^Mf<(M(Ms< zF}Li&p+D;;g}wIkfuM#drt0mb3o4?6c3Z3*nip}z<8r~_^Dp*XEcL5Ov{-b$to5*O z%1Ro z1Rq6lT)uVls;jfMzT}yvIaRUGe}m(!VxR9v6r9>Kd1`PH@&qsqRHnO74YywP^d$g5H1mbVTXzu0rLv)=p4m~&s6?=5NGmf9VsH5Ylc zPV1VJyg8)r+IMpZgc*h_mvTy`=A=cAs0u%0*N}bgQpnW17b<<1H?^%D_oFzz{^}iL zaLxTcDl(n?_pb9u=>BD&la1xGG8p(b1B>RsoALJeB8+WbINf!L_a>VOu|Ata?3*%% zyDvH$?rN_n&(D0-$79|yUHXKDi~848=IhqGzMuHY=p@JX+~Midah_Su8HrP z9~J9v2+vPEkm2T;694P2gsSW?gXu=-XX&Qvw$`>KJ*_j2+4*ca*!R96ucI^6dgt}) z?K=Wr_A;J}={fSX)r@s*DXSLN&ae+Y`sriW?&`#tcGHuWQ=%&iZL@v0y_GsoNe&Th zaTOnlI~PhGN8TE9;BMx``ZwZ--m4sc>i*zXHaInDnO}cb*T_bHNc+@mWxP|J$p!}G zLzDY3{h$|C{E=?9(ELw?>bEpG1Cw*mIgdUW-Sov^`?n1#t`5Fi#*9zQ{i(viTTyH_ zz7?2I=+CsFOMC*iN6*f(a%*nX_Bzhp;BIkHb2}-z<8%M$zam>!m&`BG8Uu?Sjnbwd=b=2iz(+l}|QQ0f5oG4o9Zn%)2YHV`$9PMjjtcorX$0whgyIXnYy}xJvWxmn%(l-DDPX^2n$Lck9DU07xJpTcS C!Rgij diff --git a/smiley_pack/icons/devilangel/cherub.gif b/smiley_pack/icons/devilangel/cherub.gif index 40872e03c9da699a70c350661ddd1ef3f5e8995a..209a75d30f911c674d991a54b9c5b2420954f29d 100644 GIT binary patch delta 792 zcmX@dbBCM9-P6s&GEsp+f#I9`M4n>ltv$tidy=>IRPXI6-rCc$c1rcyDJ{o(vXAvt zPh4OrbnV)`d;kAWnKB0mj_p16|NsAqALmSB#8eCig2*a zb6;q%U_#4MWieSpD>F?wL0;y=3l>a1enL#iNWs$N0zWtFRfD5jZfcmDNti#766RyQ z?&SLI+f8>K%X(W!YZFxyhkyeIqb4eH2tKQxsC=SdM$In7qhN_bd$XH>)X5nICzM4^ zGhF^GaBOz%k+RNfVQF#gl`^(l;t}}a!GvC!{GyhU9Sn8O(`pUYH=5s3E&bAY7IvLfj)eH3&^WfT^ zUsy9?r6c=}T}?q34tx}o^prD6*~UBPk#l0MgAjKf_qwJV2g}b!b;wL#6MEWs?Xt;l zm=t)Vq|PvHjMey(a;r6XvIMhiJu54N3xf^=5P+fx62LCt0Pbv+Z|>^rZ$X6a1hk-? z(<#3Q5wNq@w9iKh)J~^Ur#r*^DkfVUd^f9RY7|$KkaKdXY6siG qj=9YGzY?S_JzUc|r>bSuEDl~??#2yzC8asJ-I|*huvjxPS_1$^t~WOT delta 883 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 diff --git a/smiley_pack/icons/devilangel/devil.gif b/smiley_pack/icons/devilangel/devil.gif index 2b567972c85c47b5e344478f0154789180178b59..8e510205b6ee946605ed883143e1cdc71549a406 100644 GIT binary patch delta 163 zcmX@Zf0&=!-P6s&GEta8oZ-tv?heMClO5T1O>D@Uyq7U?Vnf>GR;El5#h)ykTnr)% lIt)MnQpvyyRfb2tkTq)ZAC?5DQ8>*2Nw8uV4%N(P4FC+iC`ivv5p&mmtcZ_>+Z`i$R1zhXDvcDi~OI xPc~!<0x6ihhcOYSirtfa8T0WO0ah^iI|~t(K#gJrxrTMJB2yC3_6#NlYXG3dEpGq- diff --git a/smiley_pack/icons/devilangel/saint.gif b/smiley_pack/icons/devilangel/saint.gif index 52c22c486a7c236307cb937acbefe44aa770a4d3..04863e3de0a7ce3b5377b53203d087dd41d59bce 100644 GIT binary patch literal 907 zcmZ?wbhEHblw}ZR`1GFv2>$>7|K~r$mFtX6)eI+3oH%j(`1YM*ivPL&TtkAL9RpmA z^bD98f$9{0valL4a4_hAG=a1;uyhHW^jx}Q`zzn~KjV+}c6~Kfw5G#X#K()O>UDzco^6j*cezC7?{|35-KF$-seKdaRcSpfr=QISXq*0NV0-u zxEL52bhvy5vv$n z!B#F^d)BF85_^Z3V$odo-Z<%yXD55vEX>}=O1*z`b>i#~TPK%REV$sUqQP3x$NE;7 zlSxBRJ>=Kou>Fp2J6-*nRK-8tSg6Qzp!byO;W8C)a^MsJ2Br=Z&@M@^UH%oj+?5y{ z4A>GQT-lu&*<#K6Iz15yeymVu>9;G}2j&h4*!*Z+t=*6Z;xRPiL|qbDm@ zJDmB2uTPg>C=)e^Qm%&TM40w0Z!nr?RP*9@|3C5gu!8i?vBZXqj2(JM#mi-+=uS@udtHfaeZ<*(?VmpvR25iH(|ARA0CtJ zuxh=!*(gBP{`9decU~oL*M5?_$LeY0%_Nb^KsR=ewmKHJhKl?uYwMD(vc`~UEfYNK zrbP((_*hPGn#3``QO44C)hc@j5#!Z%YuAaw;u77RgDk0`J8vrCV4QT=(Fq)k{E9NN zJZ;W`oV9LKuPr>rrCYQxRNi8jDFe^t%eZ|LsK+ZUCy{-G2@bXj9}gP2*v;0ey$HBQ|LJEfYLRCqWH#7@0?Ej=?q+M-SFtp<;Zh#zya znreNS3JV`!bFYwaqYeLLegVP$iAIdmXBcW~wQ4GY+`%aVatA8|E6^2OKE?~bP#cgz$fH{RW5aBzW8YsTDpQz0%FVGw1|VP;@q5N6;8x;!y~H6%rImIea{ z<0PGf3l_a7+`?#V;qNfLu|Z)X$ETY8UIGt|?3DH?cqtUhlp%6OTlRgVmgXs9^-E5d^A{0I7L<;@a%OTiu)Q?fK2$mbi7|teJ+a4AuZFn6SYB literal 636 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⋘s5@37NV$GqJ zR{H^J4AGjS8=nPrf^(36xX}#F8k~H|#AIvoBaWxqdi_>Jfx?a);7?JYpA!yK>Jz!D zw>-*^RoENdhq$4UCN-j!|5p}p^uv<&hKJ6Z@u4xU!ih_gt1lF`|N7X~Ey#3#NwHK}*X?(Ru zPz@cGv&?X;GyR_4`RtzGvKx~Fz8h{l^A-XVuZgz${iEd-Y^ev;bFv@Q06l0h^6*nhsi=g7$fa}|gz4$ODW z``{KUfO_PR76)Qy=s+WOaSk2YKoV;X=D;1uSQ30lwkOC@vPG~yDce6%Zjd{csQ?&# z*8wz*IqG)>v$Y6_0jv}QXutq83jnGc&;=y{wuKu5wuQdY0uqd;jgs+W;#y*{I_~Cn z-qr!mC^>2rVVqqgiibL6`mbVf&^U91sox&**!6h(ZK+OtAg=c`6^$VcVrhLzI!9J8 zD844nTv!fSb2XI&DMQOrE+;AL-mb=+tPT~{ZE34Dzk#0+(n4a+1R~N!rg`N6R1ae* zC|9OKlS~}bmk-W09puS0?#leC8e?@~Nd?Ape*=3%$q9s4rGKC0^VTfcuutFie7MnPR{z1zm2tu)GuQ|!D9dbh~s$%sX<$kTKR;{^R?f+D5Zry4YaF^erih2 zl^xq^&EOa8xEAVoIA-${H+H(furfp61h?#AXgULR0&l>(+Y`U~%ImadGF23Dv;eYg zal6aDsNL4`2FfcLhxCHCTFV*`76$95Bpp6Jf5UMg^V9-Fc0`K#F`wdGeS7jzpBxK% zX^~3h@qG8-YKL;ql5LkmFK*g;)lgTe&cLtY{}LQZtvy)WI>#X~%$dCKFmW4-%ApQB z$KqvCs3~2q#G}SbJHCk6g`G!mvfykW7cV)vhzN{NQ^+m~b7MQy+!In`Q&8$&1TmGj z4CfxIkm9@;o?5ZenY7VZsTr-X)Fqrn3Jmea8in(xn?H4;6z3l`%rF-7d>u)waAQZQ zIx{J|^+g=8m3A6bXC%jjS#<{atc_-~Xp;<7oVLZLm2qL{y`~>3U7F3%y0FFWtUdvqvHtby)`H2o2wu>5OY~=mvzB zX5NOLY=d3}xe@e6=P@?IJx&Af~D)qqU-_{Li0j(S2w{=sngy=%1 zxUPS*dFp@I92X0+nF~3k1-dMFDCNJ_ZQz%6Q;=FWme=@gK<59g(;TEat(48-Y3TyM zDH#-1?@zIo0gAN*saQKL6>DZpiTjo~G?C50Kr{cvG%Ms^O4optUR+t%;!;s%S}GFB z#G>kANjsT7ZU*ft9uR~I$~ys$AK-E@7QXY#>W>GSUL&OnM6d|i{jzTwzN-&ym$zzS zIm=u4i)i%#n_Y&K`Dxu)Ftn_>przd;`Be>0O6gA6(HX@y71m;7ZO*g_0`%lHlFg|t zJsP`1&vxp}{iWEN&u_23F2_x#G{co{JluXk z>)$j5Iv6f5si#0Le8tC+*H!ihALbifVQ7Q}H`CA2K3nMY5B!iSwnrrm!!wGlR$Ul_ zjPt$_UUdgV^~?2s)B zE0Xlimr_)Jl%o12i0Z2GMhybsqOA`cI5#8P?k*d-@+oLM|H7p-qe|>zXvUGf=YGmI z6lu;u2rSsG{GfdE=^raZRM?7FT)_s?(}@$*cie4JHeGoLM-fdih$W+q%I0N%#>GK6 zQEU$?k`1J&oX5)8FarXZesrZ=Y+Nder?7JxicU+7xBqamSoz&zM}=LSsJMJKRw-uD z*u1noI_R0S5F`b-;-Lp7g>bN>0uYL9(mFCH@wnlp@}1Bu;>^MV_%qhoZ2gx}})2*(^El$M?-;j;jR>mZ2#i)04wy_$K$G<g!M?P%!L-h*2+7g zSlPv}*4OSAQOgO5bzig3h4kgGhb@%Nh~PGjzFSxd9Wb`*J-y6A!)n1)jmkYFd3|Yt zi!7^_9g)3gy^2B3IPOexX~E@h5@77P_aR8*Jsp?d8w21c2m?o>sdRLJMGp80GAX{s zF(^o>`Y~{khIdj`$T{J{N( zKf$u*?!L0l1>D$Rn)?X~4q-5gcSzy`ljw}*{k;n|b1)cwb64y)3u+9GpdBz2XW4+& zRdj;;h^g<><_IuXfei(T#TmoBI_BrchjrK)fn>G9{au(CGNxWkEg0{MRi(<91PNC7 z&IzR7c*gIu^5zW%5jP47T8Ykk0}yIUbMLUy-K&u>^{rphv8MhDpR;7Ib`^|eht{FH ztt>*b#2Yjo?>^0m9$VFVK=D+|@l$&reCadVl)E|D*-Za>?y0wBg7JK4Ssxc+;~P>Y zrxGR7E;1wb(Me^Kgn&4)#vB^VKIAu z6r(g9CIN%x2n@-u3rm~lm4kB6VMYvdq4~xJW}VVBWe$C)<(Ro|`%z`3@|I`S86|ki zhL%yEkf53+2-eFcziL&>Eyv9v>28EotaOK+E1DX%WC-(aWnhn~8F^*ry>TbAOlw7u z<%RA;t;qNk-}2=z_#*BGfZVOY>86S-gABo>#J;w%o;)EVH*G}5vJ#F2C};|~Z5*c4*$x|p9!{cawtiZh${K8DEZ&xxr)4$0kq@Dv zpTdF$=s1Fr>yzIP2jM$yZ!Y9BH%lXaZZo2d9QdOw<(M07NI=c-Xqi zPuHCg;t2sQSOaS0XH&S6a&$xi9(9IjOR~)+eNVz&NE_yuT0ak*u-q zj(ud~W>Wk;zk7&pbkIRpU-O^cP^Y@O5BVBUR%APcm;YrfXZMvaYEBMsgb3V736}sE zhn&S6iSUXy7q)uEKQE}@TtKQ$XcZB@E%A>)3PtNYaCy<&nq;j;(-X$(_+cW9cJ!pd zvoB~K_2t2pO>+iaG;S`Ct8L=czwWkK`wz9H_@B=Yyd&TKcyQ>dx#+~1l~I?G=t`mE zw+Yo7hrVBc0V|gF82W5v zMyQ$EdTDNPO)ID8`37=#6owsx$jIqv7&upTq>+zWe#?aFh@%6Z=5L?@{k$b7LM5O^J{G+#}~kjaJjoD&oM`Zz|utd=M%Q^H9Q+!zwiZ-*02DoSVD$jm*Y2OnAad~&E zG#l0%!ht|V=s%;K(G`J^Qlh`b?jLJpO2XwjcouoXvtSQsn!Ynm6P_s&=?GY61)OLZ> zrFYW29>~8m+Uw!rlk!t$!)(R;& z{P$UWz87%h#s`c`GKv9e4b@tGo z2XzfMz6y%AY{Wz_^{-*bJUO`+DQu83gJba*GwMS$O$oZ;jZYnyZrgp!lD`%PGDBqd z+69`oY=?Krj~%jBA`)B1Z?tyk># zXB^rkPTr*7V)XJ)W?0UOjeTgT*vMKn%ZxLW04X!lK(Ue0%lG-o3|Eu7cN;;mVWd>& zSLEVbBxS}2Lfo?xERY!!J0p(fx)gN@Ao^#6vnU131K!6XOWL9Nz2Tt8V3r@a9wbEThhGHS{FWZLYKB*l^HA>cW12wM`1%{ZQGGW+T?bXnucM9>Wm(t zs`&5~gV;lD1Zm=cAUxQicK`~Z0!J1?FT%-Hez7GBBXOs(gQ*gq3ELO*C zu8&_pDijO2Du(ed^3<6Eyo^fyOk*4bDbi&b;}I%Le8JeEZ)09@uF76eg(N#-^a-9$ zJ6x2GOA*3>nz)dc+DZC(y3Qz088SPp@wo{x&xQkm``>ES*v7w)QT80i&h|qAmb5m) zvif1E0AU+gtsZlGy6LJqNp$+p%2*s`u*>NcSQ+QNl2*oo*XJL51?$NCCwmZw{hK|s zNNeLO-}Z{OmhyB1$X*kh4TxMSHcLyvI#$rT;d%XUT25Bn%fK|x~SszvEZdSj|@q8~v~VgmHx z8rtjC0EYGGCJrUX)ANB~-k-X;_l1%NKpEx2QGF3k-_+4vV{Z>$J`CREs|FZN&;Nc@#|jnyfBxpHP%Oja}rO?k?t);V*!rxj9yR;qSOipE6y;3UAgw|laJZzP~A=3!}YLpYehq}vU0 zfw`F+j=Y|4gE&rGPNZcD?25*iLT7|Ya7S|@2jIf-UJkW!FkAL;oT1x5W~<7YN`9L* ze$uGf^!(tkZopL%OPoNz0vqYEt0*Xk-Y$McI zTjnQF8vX|;&3^*r;YL<4CqW97%#iC+ph$iZCD~?%C^JBzmLsoZ?lD{qBhK!ioUCFs z^Au*~NI&R*Jgr^KX5>iVyFl~srT?T?LZIfDKjp|YC`Zmq)uXt5uT7nLPkWKi?~g(Xze|$k099-W-NBl>NSp7e>NbP^M2!SR~qy(3C`LO9KhwJ%C zz6ED)Wak#NeaB;5ub(zq`Gaxo-LT<;!^|{Y*!Y>-HUW&ZuLbU|@yq;{LJ*BRhTB=2 zRT7hSbY$E<88Q3_t@O;pO|7ynu$?rwv<-UFFE|-LrlMisb$iCzq|$<01i0eosujyC zM(-{#@K#p0@$L$m^*Hd`vmVE%gqywUre)VE-NhY_lt^u_2B&<3l$h4>d68cH!6naI z!Exy}*}sgs9<0NUN_7Ckh8LL8Vk)egq*pFYZkHT9I1P+QJKofOScg(9BcMksoOF#fNJ?J-Bc+o?AZ8?s%nd}+V$=J7d zniIBYw*5z>9FdBY6i}ozbDN5~#G$JLemNdrpFMoSnx^3-rL{Aw)V`}g10>+aDJ`22 zaF8~}Te_1Lfo3OT*@{1y(s?4lC-FB^!bwS{y~lm5ellh7f0*K3{D(++zOgTOh3QAh zFa)B(F%3D!qD*xuFY%M^wXs$g6B3>J8A|bTxvOdCfj&pkd4FDz(%MiC=5L>K&G2uZ<8XB!+lrXygF82O(GsYlnkDH&pKHRl zw!vAE0-Wms>h;Y!mR^`GNFJLI7n}zR63I}@)8LZJ=Lfc37==6vxxo4i)fWhNKNWnF zZxC;-5pEhXM~7SYE>+yotzVq+F2SCr2WMn(INPe6RY&lu0R5a-PqJingal z4hNrIA1lkf2RNHsRX+ay?8>6)Cqpe2|3KyF94_2akmT!7a4=&eX8=y(eE$eNpv@Fv zz9KO!Vjqq;qfnB*-rv4|I+6{1GNKK&ZwuSK)qmLGx#jbKUal;T3cu5NvF*Mf&O$C9 zhQzn3d0`W%zU)_yxfh&cJ_vW3O$T5LH(j*17xD>Qv7AS6jcH6cUyeui=tDNWJNM== z+x+yGdenjs*I3EHPB&$*{faq9bb%Dw2j_uK4rpP2L0?8L{F>?m-2R%>)ER%w;_EwZUkVj=U$-Xxn3 z9>(kDt*pA9rDPum|C=)d4Z|tga$+4b(izt~bQFq()M<)f>yxM?E>FoTbZ9nN z@f{PktGJVE6X040QNx^7y0h9PYxCdQCHPP6(rmQ;N}T%&a9QO{R^ zyROlx&6Xi?#sN-{b_IA;CS(mP&|o%~O|;CH!58tk2#aK_1YD3=mA3^&NMdkZl$M9G zsfU_)*KaQc1C{2=a|LLG(h>iDo`LktMp>|XT9?uiyMQh%^!rPQ@1jlizY&ub{3l{a zjsGHsa~kk%7tlu4Nu07jeGn-ZK1f`18kLdpAK8MR`}@d7rBt>=e~(BY zAFcfR$cD}Pp1+o4TKXi=*Q{n|sr#|8?5n@+U9zq1!7NyWA8!H~qujpLKfxjqv^+Io zT$Yk$sAVX;bHVO=JLgC3zP9H=pA;;V=%GxF)P~{68X(*an(S16_jl;}vhu z@6Qn+*N4QHCh3-Yg7pti%2bMJhuZYmP2&OG@)sWMy(gv*&xn=CrILA5h`o=-M?XP{ zD2NQcfokeAg!&N?7PS_XD|{pD=RG8d8Fig36@rlgb5w3P!<5>5^+)mBLj*ahz%sMB z|JkD{NQj1wV-=2E}j5X28`eI)OOOmEdX-xtR$(tRE3(1xiN>@sr* z#9thnw`hql5m_r%ux8d-rdKAdXdj?oXx+B=#1A8QpZ#bJp%@$E*r%1pXT< z%BxN-T$0K=gWx!fQeO}*^y((#BXBol$s~cPR z1oy$i)+_S%_>t7DuZnW!5NebgT`Mf<|%05 z9Kz-3O7Y3Y3u^aXKQR9@;oiFPK0zYgP)QX>b}+_zpH$HLxzn*=343hMt~ANPH6KS; zOiH7e{aOg*D`^zdoI4Z6Tx(pO9lhaLIe`OU+%odiv?9ZeI+4cTu{sKxf{knTW2vMB zv^I)EJv90yNK*!i;k53I^o{-nAV1?)BnKt(?R)E&O^{=26M(1jd29G8i0OQSIh zf__CZB!hI{y%aFp4H6fwAgmgYl}0j)cWGvz|2LA!k*b|+X(W?6f75brm(E`l%1`*4 zLi|4{B+zp)4Gg| z$)MQge=dO3`zLDQE`bXmMwg@uAfb<@od1)-^zHaJgXx#c+)fBK&#bC>+p z|3uxWy$eJxnF}5llUx+t53aFj!0~={KaW?zCI!g7R_lJQeLOR%T+%SZp67{Xz0;3V z=fl6;jIvtyMJj6cJQwa$XdF+j5pQ`RkM4`S7xi1zw5e`)n&JtB4sX#D6Ig(>TRwKl zz{>3hK5m{A?jO;BP%U4Y3fT+P>N3_ZRJ*smCgyeYeE6oDr67C0NZIpzdWJoN`rV&o z{J2P)dK^4@`|h=C{AKYaqPB~qD0>dge4VJ_5B({x+P=3W?-E#4gwrShTs9`C&ghqPHa5|O&M?fbdF*O zC6b}@N<{`XX$Km%=2P>G+sW!vhdo1cmCiM|=+4=WSO+hB9QxcuC4Gt{qse~HA3y8( zH92Kl)QH9q3V3@hB9-%D0QlI@8Q%s6yfyR4%8A8vy#6ozG)ct`9K?_541V^^;sxRn?%g^7{MvXXDbwYQ^3g6N?&W)1@ zg}SIOcte+T>!oxj>ZapM;LM}sL4skjC{cG`9meEcMpd4|Z!)zc{UXyuQ2X%^=6Onm zcKx-$G!^eO_wmOS_m&YZt*18&UL3bDTeHmqKhWrQlk5}J1q^#!^dx#0T`2`ivLKJ# z1vR~zrS=0^E(HZS)-GAwa~yWJFuug7(Bf|+?|gnqB8gNJp+TOO!=2?4`=RNwi^c1m5hN0z z@bX65u>6ibYAjJVC$B(GC%jY-KKGHhkT@qA;K-3S&P}J6PWp_%j2T!inii$T(`WA@ ziR2AQ>{e9p-m)`DSVOc1Q|(xN8gE2(f@EMU&^J^AeXpDQK+bNdZYqxws*?e zvG*?*7Pb1f3zL90ER7D<)>&Z>Uf}ulfi8ra(*A2YC1srBmVV1Kj_k=va(9V;Omi>8f zH6yp>aoWtm)%vh6&$1M+d~rTy_0JyJLTQ&&R`X{5tLoO=FPO8vZv=o_iTw1h2$=lO zhXIeJD0HUTX;Hr-gx!Fl*ctqo9zAkMM)CeuZ5%N5pc*PW3R*aR)zqaAnQRXSPjf9c9_PXb;dki+b6yT99{YT;?^xJw^`bzf&lg&a!)_i>9U%RHmn<47=FBV$sq7KmH7h5H?OOIGCxgoT}@i;PBz{Bb5ZxAbwh* zo1g5`s=)T^cRQC8Hl#XT#Km4;etyS;K*ak^H<#JzJ@{UFd*jkvD{h#%sD2BCXR^}$ z0Q%OriLZj9Agi6gy;p;p6Nh$YwbFg9%ie^3c@Lg5n60TEU;63X2B>F)`&Zma%qXCp zF<04wQ!e9;bfzwF@&0Zwuq-3kWZ1m%?B-VP_PH-sF_PresDfoD(0WM&s>=~q4fpH>%J--wb+@uw0>xu>yl&^`@!m;&fCdzH2vyf^7ArZW2Tp9-bADQok>UuY^V_!mtQ>0$e#f7t}0Dc=!9Q*mzg%RkU`_HI&0 z-ETCN&Y~$|;(yRo{s)?{Y7;amnl8OP^Cy}b%Kk;usI2+FXsZ1aO#u^spy}$Ht*j0i z6kz!$nh0wXwM?XFS~P>E9)H{aqKOstFPiR2(KO(5!tLChKhY!sH)S`T_?JymGz}~{ z`$%!f|Nj(s-49J=-S(yudLSW`1Pr|f>4c(_KPdhBLt+2phyW4ihzSSsMu!wX5K|~$}2y=|KOf;_E~H1efC=S1PD!(CFqZ^?VlFy zBfmpa`oj%q8Xo)(O}r}|g3Di_X+i(D<;ow<{bpOU|DNT_wH%7gYK!K@JFo9vYVWvl z-%5@0H0p-_sn>0~KUsg!PjNr>UfA_NXdwHBzLN>&ZpME;@PGZ|-b*RS@QpPcE~VQq z7%)z?dQ3SGp{^FF^y}4+);+1Ar>-8ODs^{Ikc&HhtVDG~i%5wmx!b=MpWcr!_l&_PgAeLWS{?q_oqlLs&AkIr1dSfG(-0J(q+%3$1%a zRBN*pP=NTW`7yLd)gI2D(Wlx<`P7UdToC9vW?-tONEPrIr zwYCPW4%l9)>b>XLx;8bw^xkc~UY*pN{!*wwblHvlc<2)b3FWo8qb(xU(xhi6B}J0u z?07}bB4e9!tdOYBa^^3+JiVVJc<0%%D5IcOkE#o=`c+Pd0XN-R*NsQL@yfTcDZX2U zyvrO(+0CaS#5{c+-6GI(4=Cq@dM$%Pb_MQ(NM(||Zfd1z_pv%g|D3f+64UlNHf}`4ZpK zg@$?Ak!oKXLL{5Z7Dk(BJ1DBK9UNpU>kUNZ>#L1Mv~m-S9M65}(n=^;p}{vCh2-4R(A!mBCTz&-bwN_St4|P^k(nrWDfGK? zldtdgfFQJkyb{KNPNXV?u_0ia+d=HBgu8EzYJ7 zSPYUp-}gn?Ry1Cg{(+`M*#1cb(L;=dXO4r)YHc3|@0CL&z!uW2W1kk~V7A|;RjOWx z{z`fR_ON>%F?dn~;4AmLZp@FTCcuW`x}Z~bf9JbL=D%+Hs85@@BT}INKAj7RKDwj! z*cEgU;af?zzcF1?vV4!7c4vcF#V$(b79?1eK~jZXInrwEE1&9HpkLf*TSM>xqHobj zB75rNf&qKLMd||L$)j_$(Y?2qBk!z;OJK{ZySAQrV6&eWhrrem6}FSxkvMlX#IVa+ zy@U1Y;~Pjjwg)M%;>7((VSzeIYgQ!T8DyUyfK`l%l{~feSFz|>s4Y##4E01Z@yjm zT9!}S{0#ApU%RSJCDCb}jlUDq>a27lXmv`hMgVj|rOs&O zLkHwnt1EE4UUai*t@f>HEej5ZgH~6Y77LlPe@UtB{+3dk!D-epEM*&r@^+p!D4*;n zZ;?w;+ij!@MG^ykdGa|P0;I`qVJy@)g_M*>E|bxzoKky;)E?)iigzId%YY$QFDNuY zxJpbk?91@Th`eWyv!9#ukqiSn-@eGtZw|u!;)D?7kdsHi0?%-~`Lb=RC-(mSKYBjb z|N0tQYUUTA-IRirH*!WDOXA9RT-zA=5&ocT1IP-l(H>Cze)jO~U z$&-Lca)`=N8|~}8CKs4&D3O3FOUbUI04%%|lPzRs5Ew6{#Nlu=RtD-}s(7)+hn7~j z8ZJshOF)GpV~E)~mx!HRxD@g%P1z;5ji+$1`e4$Qw>~d!O>PG+9Lqe&&b{| z84J6p>+V>32*-@{y13;b)<$&OuKYG0{-}l^Hk6+6#?^3J$^kLMWWI2+5dSm>_iXz)$~ zx67JJ%cldS?uZ&eC$D}N=5&}hJ>K*&P$X2M+OwhM zv{S7igz==*?s#M<{upy0O?&TJgN-QWhQ|%S)x9q6o^JJ;ji`PrjMLLw zvuS>^%j(*D5weKKm3yY~*TtRnZt!s>)?>S@pO!J=2D*qUrJ&?rM=e0!E zaIY+=sal?m{~Z~^-E`!5zg zjA#xsrW$3`3kDZqky!eHGa`;70^O<8_xpxfb;yb-X4~rf(JU$440+IUvTn+?K z_;x5f@KDg`Z-)|~m5J|6mJ|xcFq!`5DRP+5sl)X^3uBIZh%j+2*gP3%J^4G1!FNp2 zy?^#ycY5)|yxE?t(`{%%KXaD*_-^kAXrU;8iV1`%{w?8_y@>Z?!}!(`htAabp5w)> zO#4a^nHX-U`{g}thkdf>{*TM&xuw_;+_E`qGN$>Eys7@qM&CovSMxs}@@M_<9~GaM zZY8aZDUpj|qFz;wiKfa9hbNyLFc1F`gOr;#!7qj3TUfdwo9>(lnayb1SlEW$>Ik^7 z;cmChXbX@FEN=uUO!pyz@ark_a7pu%Fxd=3TbA_0HZdUy zb#~suK!dH2_bjn+aUcu7>zzhx$*ai*{H}UUHhre2bV?f=Fj{VzS0wt3H03BW$xAeT z=B{hOgto=zSjbF|T{q}-CiM^TTa&lMBGo@$!)q3JWQ{4NnXOLdFLa!pT8s)F&p(~2 z63{!c&~;_<_F3CACzPF8({djNn%&-+GX+q+g>HKBXnf_J**qx6|gWKvh2$zE;N%8|hn?*6~>EI%eOc%09J? z?;7+$qCZblaptD-fodm=?NA-)J$z&k+vHlI_m^Z2yzC->eHRP3gvxz8kV*wm7$|!A zRVG!_3ny~M7j#t9Ou;$_L{w*5$M8xVBcsELG7Q#Jj$&IE#_P9x)}xQ9GYd*}_H^)0 z-}EBp==hf14fV1kX3;!Cx{h_+Slaxq?%;B)hFcM8G-bHDw9Y3VEcL%he8I1Pg3+!1 zH3)hD2q;tLYzBdA3I)Fr1UN$Gs=y2k0>;!Q0J0g~!j1ms49K_WP8GEGt}mwJTM8Bi zvQF1zO13f=Iuc=E5O^G49!Oo-?NQuXZu#(}%S(E|P{nLJUDcq`u9-e_-TpmNz;5}; zB0ltmrBQKfy<_=yIP*ARm@}u}{$xy?;Zufu)R;TrhM&5?*bP;59^*KN&+(#0e}B8; zU+984S5lX*4WUm_Mgrv6#L;-pjspay!YnLdvv~WCr{Aw`8>p8%L;Pkujg<=oTipOs z?n$$FSy$>LN?MF7&Tcu6Yf0sgtpNaIx;+;55?$HKn6?yI*LdyU%F@G(eCZx7cD-oY znI*ckN{uUlHY3D8u9j27&63YeRi&##=-P=!?|U=xPnd!GeGw;3S3H>RqNn2fya_vT z#3p)wA9i&|hDp~we*U1&SdmVf5=}VgDyPt0 z2T_&SmR>xS3^@OW2smNrk%qu%63`Y+i}}K2TkC)0>i6X|Z@`bn=HY+=Hy8-er-rma zvDyx^IH)Lmym=7cby3)YAqqCvH$pHr;ACU53qxbax!=tg>UNB|h_n?X1~4y~=}7#2 z@o^OuGIe{f7|Iqki^%`u|9x&3&9jq9ZG+ZiD>(iDLxcn}}| zzsDKK+bFTW;;e_h5od5YKC)qsN*8L2T0ssS=t{@q^XC`Exh*Uu#r!WwPH<=bOh=YW z&9MIfbB25J^il7sugt)yx#sU0vC#1{cv-yUQN^4=6<_0Z%}6%1SV{dODYP#P`%}hB z44OX}K3%Z~E=oD<)rgR+`!W_)Jed~Qb$M@SeW^JMuYHabnq6tbNNJg<6sAlyr;}un z#A*_LK1{CVp5DI?gaAT;I0%%r;DIcUed7ac>$Os9IM7Whag>_Xh@I)!$qzvXbcYLw zP(U`L#Ns$XJ6p{`zl0X6`?$f_Jj1^)Vb;A!)m(xwz|xo~RsBexa+8?=&Zuf0U+RZR z9lxS>oAh#!p-4iSVp2_BpKs1GN8}Hpnl(GF&pd|?<7C;7 zFU*eUtox$bPuro&NXOQKVox5jMJ9=GqTvDie}gjcwuj6kzeCwKKEpk!ax1etKW&7J z@mQPcx(IO3{=T?cYR&{{879vv>0=^Xpu{5?ikA7pLTx5T80zFglZjgglSc*3;S0kP zuY}oxfg;<%#Fc#U3NzO1z^(Jn5&_;foG!T^+HLsKH+m8MdcoU;{6?C{Uq{x>l9 z{yzeYIuIOrtTnfN` z;>+73V<|jA{<3_tk26jm3oa)aA)scH83#S78EF`jmoK ztkKqe#yWI%^)Yhdgq7Z|E9l)QN^x^O3C4s8(uq>GZbfnti%G*>+9wOO2Fk*UXX#W) zKrpt7Z_UfxWrTZnZ7Lx4Iq$5fxqjo3fg&)ai!Qvr2y)%Y)0u+fwvZ|JWc>8-)Z&ww z=A*~AWwM*QtB>U1w4Oz`&gY(ZhZNvrLYYy*rK4p_y;^XCmW>!;--~Ph)2t?c`IqhV8Cvb>m?p&YEmETuuexkQCXp%`B&eVmI(SsO@dV ze6RdOqcF|jeXJP+T4Qn)%GJwC+p}n7sN+#QBLs>-Q1$fUmdhz8ki)()Q}IAt8+}FN zHFK^%4u4|GjQlp3HN$(*6~Ll2KbpJEnqM>q)8|~<@KIdeIt6-x`m@ruHPaV^H|ekt z2(j3#Z!X#vx2*7CapD#oWAKN(S@>eM=&^p>v{}^BvqDL=4|n!{qRd}tVfpLJ0D{%& z%JQWP<3FFwh4H8Ehg(tqs1f`3#(ig>>VL5h(}2xAE~4tpH?9wa08`B;b9y{y&0-}W z%#|_mfQLE!?a?r_m!L0PV~0IK+nvB>@WtB2KGMqv;wSf=gVi^@=nl8;qW6FB4s52+ zWlFr?y|&yEKAmr-_{sCCdAJ24Nk&UwceHAfvu`!kK(n`Qa_A4&JK0)01!H#m<( z8a$D}C-<59eN=vM54G*TU%_Ugm8#Qfv>cl8{ zTn>PVKy$-UzgkmCCBM(&wavMEAj4lYOlJof*jecKcyv%_($sV4v~P5%P26Oo>EMTG zf7|~?=^JDy25xZ<_~Eaok~+^$;V=|1=VgvyV<>{Y9IMmNWnAtHj|=mzS6(%zd%MzI zsUz@bQh<55eAGGB>Rj!<9N{}4Uq#}*(*tCpRg2wfs2LD6a=d?(L2db0b@Mk(T=_?_ zy%3s_Zc7oxt+pMvXoWz|NRYeS6TnLRu)v_+dtM_YIQhxqe};8uhrn zWRb}o@da+a{y`P^N4nlboC-^2z1dLHD`h5F2YzZ-CA$L-BWyAo_&XS|ZncQBhiAjYBmzkEQ1*)G}Y$!H6f*D~jlS)z}n1&%eC9rP8>XwK9hD3b(T+Igk^ zBtCp{VB#yBor7veS3fK>2t|{`>IaJ{<}L-d8s~00)y8Gr?TIg&cPY?KLWPc24ZGxP ze}%II#|Njj?J<0Oy0X_GZdzI>hP~!itnF50@a8C5ti*Rmk+rrxn%@!*+!eu!vje(W z3$7RUxeXDlB4r;!43023AvdZfAj8{O#gxb!gEboCMSHEH7dxWj9Zy8xnXVL#`(4qR zPm5TdRJ=h)o6={2{2#3OAFh#qWsO?(yDLgWHm8go)m%55{>}W2fh>QwA(G< zLx7584=)_OiEvcSbXgFOw%019{Pji!c77GW4VC-0p&Omw`c30JtsW1K4IHhi;y2EG zKutiw$59U&RACSqj7lK*fB@Pwc^chK3FIc{8tjzjX$8^-iq%DM6d;gRlGCHdik1Ia z>vEwr9lGt^i=o~!*0STO5n7pz*2*G{yglUQQxmzEa#?jP&?SfcT2Dn?$F->b;1Z=^ z#h`qL{(juqRB4UeILU~mp}gY{AOAgO#+b3q41>X7W=tBAJzHd$!4Ne{rQMPxm25>wmciK9L`h>wmKJMC zV(e>{7O5m6Te79lHqX%VtKa>*@B4rMpXWTMPN!3y&ehd5ukY*q{(LT`W+vJ?c4`1M zz!Dq4X0tzhSYa>SW6w6t&d#!DE7-I5*|Rs6W^359S?tdQ_G|)sHi*5niM=esUZf6B zewrP7$sWrc8yjO!xqll=S{|un&l1`5&~IbG?0EotR%~!^kp0@>+u*r{!7TO|apgtQ z@~|a)48R^ieR+1AJ*d#x_i5!x;PgwAzP=}4pE$4wxh9^R`S2X|t&eM^XXnI|9k04G z@}_j_yB2!7?l1Lfc6N4VP8h8`Fq!T+!fu!E>`Z5O0%p5}KDHBTT1L`FbQZdR&CN|8 zo786-c3c=VVmAS18_7#efWb!dk$TmKwP)G)0m*$vi}!K&@85q><1kh)`u@JyY%O@{ zKA@;-wzO0Je#7pZyX=Hs9oF51=QScjHQ>66YcUUuDk>^w%4L?y0pq2*>=M9C1)!;~Xjkz!d<`u&?uU#SP9>Hj8?J*-(2GJeUD^ zoFNl@WxW29YS9&HdV2c11OVs9FEN0@6hLP>peF^9pW@1<15T$b`zLoT&;e~R;0y8e z3-SKNN&M;QfU~jpont>&#E3UAWYVIY**<{0$XzKh`=X*_AB1w1gloO`0Tc$CI?@Mk zoddF+01<(Xc7Z*M&Vax`|MYYGB|hRePRlz6R9!ej-4XEds<&>F8#E>mV0~)v+-c*l zdjK&WYUyrVna9LWy16-=QjIu)G&?r1<5{0}n6oJWbtkrylatpm9wUdoa9inc zTd?t=Jja71_5F_>_R?(jIk43M^7|&-b_3b+0L2~MJ9g}Jpn>Jh?@Mg$rwXUOru- zt0MJi&t(ZW&8S=<*|1nyyjB#lUhRl^)U^TY$oHjr4=!nYO%1e_UF*I=3gwkDFVFAI zp(ZOFY%ec(bd8o{e%ZXD@JW$Pnd{5;ilV2tEI`12x(5G$x`tB2ELn@jXkM=q1z8SZ zk}+65IoFY<#|g5yo!_EIf%H(MzIC{sNJN-~sM(S50k2$Bi_8Bf*I?TaCAIbT^=D-+ zj|#6!ApYrk!v5)c%rmGZ*~U6lPd(g`UVDO+G=YhISn@hoCy%#jU)i-$imHfcu8nPd z?AA!Pq+&EK*R_xvh`cD&P9A9`A}VXM$dvbhUs2cBT!^V` zd61d)AO5%g<;sFNkJdjtLIMB&qIUWvOmHshFdj}cpPsZy?3Fe5GD%AD<$Vx>MipMq zunB92;vAjKDUA{4;zqhYRa_GP2If zXo1m*O38XCM$okFVZAmMD%>T4FMLRDWgv}g7Ky@rc9`86UEaeDjIpV*V|9Whu zLEo*tlI!iA;^78{@PkAj2VdAh?;;febXM6D3sor zfTf2ei3}jB(&tdwsw%11gR{tH(Hk|7(;~?zJAzgTc2tMQuvt!`BAYA0DsQTeYH#jA zlv5({>z=rc1R<_QNtSW6#Ug~^ zG1g;LxTvCv3tHbE94&38adL2EFEsk0g!$naE8`C=eS1QQ?xU+6;@ci5EFm2BW3#oB zmfiQ&WOVaAZ-P}7Jk0s@eySozIA&*F)Hq>R=`mTE?KRaa?Z5{`Aj}=YP9zWf8Pos@S?r3E}!6GZ3*ph<|ddu$)Zy2{Oh6+iTSYIHJ6u*Bb&<<0oj#Veku<$ zjkHjaq0G>2nO?hr7V_jiTY{FQ^%E>BmkVl+!P6(LuDaFTGd=W0#ltW-RKVy^HTHPr zP^PT@p<-5$VQ4r~QBLfp9>VIpw2@5=dR~0-h-&WEd-Ccr-RVjP1qCi;5H#!bPcLI$ zQ!<3lOY7TymPTLW9qVk3SJcveaVDOSbM4rxuKV|vW``Q0(f@eg0zU`+-#lciH!E6r zdmGG-d4vn)woS5<6ZFBW^Wq9a5 zdee#9mR6J^$HLwKW|nv9QtqXk2WIl5-&tZ!NP{g;zE0TM64YR!3;ze6qy}D=M{jvPowb`7$dQr zg_LsB2qP|TJpwhT-pGgxqEMNbU%I|YpTUpHAIhRch^UC7j%s@uhRbX|YyP#xQ%I8F zKs;d|Vq_X^bSxXCpy6nquBLabaA3qFr2uwC>GC~pfMK-F2}S)Ea!^3fI;$sn1G3?X z@`6#)^E-Kl$o$nsr7s=Eo*v&$EN77O9k@d~nHoBE$qE1p&C6nct%CiGb{BX=RHq z;{cE0kkI#Nm1^I**T(SIFVF3^s>uXL3QVfH^r+ZV{FmmMOnamof?K5dzP@WYe2)Dg z0qg^`9}V|};QL>NeXF>3P$bxxDq`1OV#LiyIMf<~aIGB2(xtyO>=sFKQRiRpN;5PT zb9Ki@YXUrN4$u|P*R_Znc>+5V8~7V|WF$-b@w+@yRIi+VUXcG1xhnH*vWHICl zC$eKSrzUa|OcW+_Q+B&fUQKf?Mw>;JyE$fIGTqWlh!YiI>ZIghb2iL>Qooq_hZ|lCJ`o@}Q1vC+qWJWTMkQ$YodHIR7 ziQ@X#nXwka%}C*E7U}X~o?=G9*~TbHSU=@x)}_{W^0(Q3v3FY^BLE1uz4fVzd_jOs z#KsWyx`#K8JmF%nZy}o>NO$_TqdWz%(dSK9`gYyx%4s+)aV0!={{{XKU%{;@NS@=$ zyLLB;=aG;>_zT43ZoLrz2_Ot#R%M7p=>fa8O!cT75&>q8Cm*-OSn*;oq@V|yv-u9( z04>G&Afb2?^1+6;)xxp9;Oia~k+CMoL!{|M2@EAnD&|v{_M}lk0ztMNSdx2Aml79s z!Wd(qur61U@=>KNQNe=50&h~Z2d3~+4LdMocXv4+C+tJ=1$+%^XPWY22~_InaXW|v zmS~#~6s$~W!`B;on275S!0a=X-kqW3DyPjgz?CZ9>$nB!5(*GBbiST1uLdEXc_`Q# zpQoI_1^}UwkEZ|yXcy*NsBAH-zMyE^^Fqm82c9<+)FhFBH>)%|j@_y)R5+Sov1@mD z$+eoHw`C7z+KX=Wn($_O%I1lUl{_zSnoLoB8@lTw8&j@Y8d3Z9SALIJqutT=jbc?0G9=q2_Oj z@48J#uP;8dFg;*gV#Tg@tujg}wHOeQV`VRVW|TlC#B5$R@LQJ0csOhdfMjbttmDHOPI zXt?b`hWNpmGkC-No!3M%8?7Qs2o|XAWupClL#(Jv{)#o;WqA5CgiMCpMt3YF@y^M} zpc{;dQ8db#%p?ifpV$L)h@$6{DvjdQb~c!QnQ)4E4ic(oPF%#+r6G)-Nzc)olqf}Z z2=vg!Aa@AdPQh9!-(SqG(c9j z9JjVI@rFGSF%=frk`}hEBzGiU`;IL%9O~^&ZCD=)9*Nf*NrM8SED4neH_HSy1}}hU z)TyyJ_oz!@=_M{iD38QN(WuBR>)za%hGromF;E^=3o(;dmM#q;=7W{pMh?OoT5w9Hp)6#%b(Ht&%TLA*!%=U5<57a)XZH!+(E zklO|@ChB9d@X?UF?Bxlho3;*^2Mp$XOtsQVC?M7$L{z?l1tRFCLQt@|(2bg^QE3lr zk4B_^WpKN!J4qFcvb~Ok6blfUEbe5Q8WjE9$fHHEQ!~21tasZBGJHFsl!`l!de{ON zJAl1eDX8t3 z8;0L-e=|}?!@&e1S4;vzvBz!SL%4imf*}$yLuIW5ZxT#iN+V{WY=hWCi!Eb}hapgG z0=A+{Z_mrJZUL1c9_>jDS+bCV^w(m^U8p4brbiq+X1bBhqv>qdgt7ze^ ziZe8J9Yv(8e)9&A8Di)SF`s2CUfCG%>&lUsot~xw3IhOB-Hb&*WrKXnuv|sNoVoxC z!*m^;%m@^ zHNEd4BQ3VHKlN&UYe%NPXn*`sh2Nk(;#K$ZSGvp=y{GryhD##FuTYjsSvdg)pN1T2 z^_M4d^bDStO9p&I;=mT|w6LWIZ}}U7BDPF9$3w=HWoBA24YuoVe-uEtzkJIjBB&Z; z2N(%uC2-3;f1<#j(JO^NAMo`?U^>=d;L|v0{F8LZ%7D zI1JysbRyX@tOC@x2Q{1K^x*Sk7N1_iq!{4@Q;b zv_$-`A>$|B>~iA}$lz*fBQq`7pJeihsM2Bpg05qw35~y!Hj;W-dEA#tzmy_rY|bDK zn>~nDY+|M{D4o60ZV5y^QZbdmYqMdLD9kfK4TeD_(8s>}!oGJDdwR; zTulhtfNICtWxMgjVBlq4bu93@Q{!7wRe{LyE1-fW^7}jRZ>P(8 z_M!fqS%G{W>7(}A~$pobLj3WE_vytd3F3f$CMH9NsS*N*~sV=h23G=45_^f7wyF%a(o71+AaAmm1r zPp6tx_&StN&c?Z( z8!_^h)rhwKc_z9rRb1~v8Xi*wAEYG)!;}*M_3e`779LG#7nS->iR872fQ7C$|qe}3p?)DwSacbRuY>x<;t19(WEL~Vhd!5f?X1#!WZbMs@PXuP7^!st> z+deXu@%=c=aT77%rRJ6Dx7Ne;>oEOi#yqQ}hUF1|-8veqX|8eg zIIQ6uhb)7IF9_VVw>M{0zAU?)HRxY*xc^~Jkv;zoae35a=3WOde)j7`X!oa&LpkxY zUtH90zU$iRt-CUnsmibSDgR_Qd!{2|v-Gu__QqX-9<7%b9~*~}`5n+K23F-rU4+Nk z=^)|ALn28mL%zbdp&(iGBqb&Bb1V%`)B}m^wt=9gviQNm-AoO8qlZ?UW3bgukaG+^ z+;l5Yqx$g72GOw)d=&|5Ak@ph*E2~wX1m^o+z{WC)}&C4UICj%yhUMalak+jG&k(u z*AoBQ;&ZyepU2O?x9hT)OUVpqtaoGtgNI|+kn;&S{9Un1OL~de@&a16*3v|E8Y=8j z5qGI{K20v}akR1>9WD7f^wD>Ij7Cb{65To@9vbqUANua3`ZPRF0eX{$nxWkFyeK*$ z3E_SPhBea>Rm(vUH~k6i0->y+K5&S-FLWoDC$cCLPCB%DdUYb-h)!M#+7!x?;0Q5l!uvEwF+?(P5pIK-wmR<8{TWPxqVZNufs;5nE;`|?gp zHGsD-Nb+Fhod`5o;+IbAt?D%Gmri>_SrM9!%?Sr~{i)M4f75C2Rh_oBvnG!;adg`1 zUv)a+hfeq4I66J-h_S7IOc5^R_XKevrt3SE5MZW}gr?qH5awb~U9dd&auoRNbZ-OS3%|+m zJEmXOB${*?Hd*-M<~>1MrV5`Cw62~{nHdbc^BH(ABJI0GR|D!>B&l#%l0yT-rt&c=Lal@T<7~?|sZIIrAk3uuL$dfTYdtTKlUwV%HE8a| z1#u~R1OZ$M#2m{SoG!{q{Nxgr&tMVkzRw3s|8Xx)NtTXg92-ssa~bV z?WbNQaOP>g-tm}|oB0iHYrX1z|5f9ao?gS!oZom$1ATcqyTQSqBhj)o9Eo<=Z1CJ= zYjvmaW$>W|{ft#=&`)-MeKS51H~d2MRwadAiGDrAb8`(E)KzHkeAs)7w;03(ATQ8) zb=~))2X=GgT5F;$5Fw5|q0nwpm{2&44${ap*#b3GnBzjJ&~Y-0EJG2uQG$ni!{>mZ z5b2LJ=%G>=6Kk^o$4nvg*5v|yk1rVDc^esS412-L)Fy>}^HFT*8Z`bAB;KuNANcNi{%55)8WxuL z5%5&i*vJ}v0B0(G7iHOQ*zx4%8Z@AVAA=$q{N+MYLRqXnaOe+cpbVZEtwJLvADJjR zeDM!x@a+Bp4Tj7`%HN=IdaPgRzQ1@U!tx_K5rl5av#fZyAHcHfiXvWQQdCCUc79qD zWPHmQIrqQ$26NRn64S}b+}gIHsf|f-2CoO|v1oh`5+`tlUns_4Atnb0z=S+aFth)Y z7t?>^h07W*hF`^*t$R2MM%Xqy*!(UA#KlEMEd)VteyQZu8p&7hf=PI~M@a7S?e8)5 z(D=`)!CX}hPfDgtQn~3B)5_tI-+58a!9_wLo5PE1YrHt_hrYlJkNPWgn-u*Oy6aa% zx7lJ3In!hAc_Y&Fz~(l5Sg{pV#^8W^aA~{lAH2|?xVVul*Od4c9=$vl0(+cpJ9C#e zzeouJtzFgn>Q$}pf7^4-9@`ruE}k|Agkgh<>sll+F~ywFZL7wonDE{5uSsH?txSHi z3_aNxt~SzzA+40CJpg+_4sp=MLwFa25rueG`U+>5fpLebjjw zX}mPQBHc>WuHoEvf;XztK9?2lMoT-ew?`lbp~#Kjt0Ono9=_>BoL=Snn64`%SQW0{ zeS1%oO#JQvb!&NYuzdy|6GgQZE`T9b??;K?9^K@Cwg##Ro#UNmSSKdG_2% ztf{=hOL98AAqj;a4vR!d>L%^#*HY-Gn^x^e|FrZ9cgM1b*CL?O*5TR(?rql(^eBxt zr1QCb{CsAyyXVTz7OA5tj+iGIhcEH}p-{Yl^_+hp0DA97_%{r;hs+py7Z0KH_~qPowAtfiR}0?2o3SDJBsq}*V>=wzDmKrJQ&n&}Q+d=m zFFjW2>+$bH@c*6exa>GASulp4KPs)YosoZl1NBV(b%v=F&Y(O32=Sci+{OoC*zn?HU4hFq+ozXOYuyBeKE`ZCS3s zT5&yk!CWQdaTgC~%$LB`>{t(vtdh^xu5*QmbLJPMBmBqorFXnI#0mma z{(GcE|B93hwuf13*7O$7kJ@P&sPwx5V#dH>i}6U63K_b z006<*-QKd>)j|L&Ta8e!^1Y@XReH1&6O>` za-|>x!02xb;%n;z%ZKIzg7A$NWVpe*>q4)j@I*Ua6p6BPtM2FO27U$?e_|{0mg*f- zaZ7^dn}2~l;qDLEV^?8+B()M@ZIAiSum`+e&6N#E!bKNERHXDUB#G?KCUIh@g?p&@ zRt@G`?kxAhdN5Z{ArPHU@Ng|Ooa`Q`e*j z#ew-0t6AK<6U}uArH+_Hvbxg|TaFS20qP+tCyQq}xsq82)%LP5;z>z(SXYN%zu)sW z;#)jA{{E5H$N&Ho7?iwCU5#L9-vhg6W&F2X*{P~E2jJeAYZawh()e0X#KJoGdew~` zY)-Iz==U>MGGyKU%9UntKUqCbjEk;6)Zh`RE;yeQuA~b9=QCq8-?^SRQ+lXu!>S=B z4^8B(86w)BBIJ0$NxH4`HV6BS*MvLI(+IcpIM^o#=sV}uY@(E&pXQ{_Ir5i}U%g*- ze|*s(tY76;iA2ts9Z=@eYh1atHoyiJ|Giq>DB#B~Eqo!aL<6@B`@dW)F{$)A6C>Q|Y;8B!=$5H&8j9{>{6SO*e zuCq>i4;ZpGC;d(yZU8TbqcWU7y5^Ncclg>$8NtQ<$4c4vFv_FZ*~+O=yII!qURa4O%DR~=hBT*ybEdRdq+xkzFONWyf(;c&hjE6#i|G7j zXs1l&)Jl$6_u(yGW6XJpt+%IbT!voH7wvH=WNk2UAJPW4r$4o!X@dbQuBZZ=Akat{ zFeoU>_S;Z}6m-u_t%6zk%KHm$h#=1TjkDYwBhw(zItha$sw-^`)^D}U%-EPJPXr_C z+iqWcl@)rx;)*CW?B&!eR_N1_k<(X4LiM%hKWp8+vL&D=Yia-2_=6W-1D|}^99L{A z=KLYUK>3d8p-%?BrH5=~TJ`PX#gwZi@Oy3sp7ri?FEmY4vyWez<0cLTN`KYD2C%Ju zF9boH(^g^aH2Uu52_hRppzN=nshqVudOAPelL$i*cc)9cQqo}7I9)YNAhT>DJ2zHx z??&@7$7mDj{hf;Tr-U4h%&t$A57^t~#AqDl^=NnTvTcm_?nLb>g+8&ks3}_tG>$N{ z3c>ZGk9^p$uGv`smM(?RmTnM1X)0V@LEC?u2<_wTK?G-=%l!7l^^qt5Y`D9sZL3^9 zE@-<(%1Tk{^Lv_KjtzP$8NUs6}jUv6|QCN&IDf&F|c;$un9qRVG>93hoQ1Gmk^i|Mw@n)pZ9U7;#h7PUb(v8s3lsZnaU$yotqY~ zj(44hM|OW586wR$szFf{(W6Ha>#Q{s7`(bqWerQ`)DsMbjtKK%OpQ2+aHsC*!AR%_ zmZ|ksU`r9VGqRO_cvs`IL+_Q~LsOM&;LX+w_y#&%f7J5yJ28yJ+TTl$-ZJ{(8WQ zYjgWZ>*1Q?^Uv*>`Mud{zLS_#Sfa^=r0^A?H|^)ca%{d@zkG(u>9FWB-zD;a>uoQP z`=ND3lUKYkB{5KE`P?wWspg z!j=Hcz;JV}W4>L1Fbz-mIgRb4g46>Be>Kks(j)L^I97woT6Cu*y9UfR-85PDYec#Y z{4tE3JA~jZUmeC)tqo(Jd%mTM4uv11iHv+4f+)nZR);r1B_`-OO=i%K9!Zg((<9Bj zIC&GmlQBsG%k=&^kyV**{Bt7P_G0YQyQ^sui$!f)l5K&3*hWRK2Q&xlrqwbD$fx|} zi^m-txd3bEh?;)S34#F5x<&4N!v{Oo%B04#oBH`b4 zYENhncs{yuO2~51vV4&HuHjtU7UkCh8r5?~Es_~NGdknu2??9t?9wPOewr4iNW++3 z>5MQaZc+L?UGm7GenRF7&NIYc4AqiHT>@O3UST>^&#&~v`NLx_)HRLlkZ81RTffsV zZob3)q4B^#JeIP4juj_3vpRhhchCD)u~@r3aN(8L;Rk2G1We%ReVtx!KYZe`e5&>4 zob3KDkY%lQ?gs+yuMd(x_S6u-%0XP!5@3P;YHcbV!LL9T!BFo?PuK|skU(O&SZa^&TTc>f)R1IY!4?k9p|ah^_Hl11w&o>LhMZ_`vy)|v!* zLmr?jH$##XEZZ9}ouE6ct}iwPUnhtW?{N7;oFB>Hh4<@q_!ALBw0O z=iZets7dN4hdR?Y_q}fDyUkh2A?~0E>iBG`;J!-jld|8VW<)0i6Tm|t9>Q9{aF(m? zk8~PW#v7b|lQI0dPSXpGN)slag|k0!!9BKpHEMz5H&FcRu_`?uNx<$^%3$w7qjG~C ze^AE%CbY5cEY4laSZzH!tqTj{=9OZ^WZi5DouB7Jt7yNnGf&rct$aHhh*+1YvMvP> zDgb^y*AQ%7SqI?vw@7RV)+%F2{2oED1i%mAc$x7zrKwQ>Mn+hwHE|L`lChl!QnlAnUoNs>t=lCjc zh}G`mZ*O11HL|G|9&mlV#MWPJR9&m==0Dmf?Q4AR#rCDRg3rwje$jx*VW1&BWXX-1 zkRxS3hRlzZTVkf4Z05uv@qM=*d~c%$CDCk4O^5_%=rwe-=)vvB&Ea<)9_07kKRt*| zAl1JL-lL>F9A0+0F*UN`{<4qo$d^U@AgO^**}FRH)715%n_$?n=tJD&Q6tRh0*}UM zb(wFAGoNQ!pSQ)sN@_8t?=-{+K7}G9*9GQQn6md5SHOn@;FlV{xEnE#S#s+4=DX|6DmY_S|z>R2NXD3ITjkeCMh*X>_yqvB5`& zu;48gA#j(W5LE6Eh|6i4_YSX6N&Jpl0&$M}-~^ESEXhc0nZ$b#F$8$IhZKnjAv@-W z@EG4=-Fs*0xtxRJncs)kib~|&2Lgd*TXQ6aeWcQ$gmoUvILUEeDMD2ucFSX?^d{ey zEuZG&gZ?aDe!hY7-)rb!vn!c<-&xakrFNAyr6$UQx7Jwm`uM(L?=F+T$9x_V8%MYFRHm|iZD|Z2J+;yy)_u85TwU&4;f46aTaJE*PUA1=Olln3_*6JtRxR#n zqVT@(JzY;z?_@PF0hd?RrV{R3+|VwrbMjX5dQ63Fq+V%|Sc5Fi|(_Q0UADT#E~_(WMSi@i@ssE%S%)u;MrQ zzBY@kxE>rHd>~`lIBHUa{$t(DdWU=~EOVgDQq5wm0;Tblmruc zd^+zs2RR@)Gx!h&5lg<`d5^GDh_1NM-k=hxeE zmd>W8JtHKGQ*m#vCrSj95$x9T2(+n2Ry$S;5#%i0NfD0zF=ZcskpNM|B%W2*X}suK zz2Xvb>#O?uJEoN$lfU=h8UcpH>D6%=PZ4KaX4W5ltA?o5I+U>s5S{?3kNq72Y>KxyKIiL?UW9RyRxz;FizK{?y)(F!T4&tS$E#2C50bgO z#23CQJTaTyK8+-9zv&}%OwLR*+KtYC`)RZ>dy8T6#4O(*K}e?8YRgNC;?(j0V*5uRlmq zVndC*f$>`>Xy-V^M?%E6SEa%OL)JcbkkmNtfSxeK;_jMFduMSeQv=fra=&3Gl)KRF z^!Zin09gc=*;VZDoMnB-jtv&HG|s_Jy*>v!Fz4}#xwy`>2QK}?{#1PleySI1^)mz&?Z_|$8UsARwJs_UI=UwN+f^b{I( zV@-gTx!|X5bYw4Fx^t?Fr)35f$^yIu!JM4gbBMf<1w1iHcXy4gAq4F>(AaDLGV<(T z4GjN$B#-eH{7yB2iyP%lYDCXW4s-belvn@|__T_#xJSO#m9yK1_8`oC=~hNCm40lt zfI$j1Op>2f+=9|6*M1%C$iN*&p!-}X2+4(~5t!nvp&V}V;~iVo+I&lmP!~x^E}%u< zP~>`}zEX$;Dtow5>~MenGty5R%1aB$7;4jhL1>__?Y*XPp0wD(~xho}$C)H*! zLS`R(TFg}VaJY^f;La$L-(bmI7$kL~M&2pAu5qMWyQsJq9JX&R5*L{HZrntev+Yx# z1#sWFRr6cx`&dr$VsoOG!%S(r#+TNdI9wzK`AQ_y30g?{e4aD2FMX&xrqIiHAE$eB zRfO{5&HyzzBGjeC8P^{Zk64_%cKCM?xx4%hA~f$`AfjZtGLBu|+c<;dsWPp!n))3? zM>rr_UImfx8i=44?x`c0=iM>?0-{8Zzd-b06+~@v7d*nRRCyG*cPKCY(a-8HP5;r) zE+#CBKeZcQtXC@f3WUj}KGjSR5IX! z)|vy21@moNW;yov?lEdo+p^4;xXPdl&NEeG8UEXRh0buw-TaM3u^)dr5bn!dBi}7B zEcERm<4pg7n<@>i?}r~QKHjrkUtf-JrTm?M{2=AAzRS+DTP9Kt2X5&*_6qb4rAyyD zVx6$_n_7l<$;ww*XfI4pDJ$nI(u_zB7`RqB(00N-c=N#_lO7$>IYTic?7$~i9;DSq z!GKUuR@f|3($9tT^72e135EV#X^LE@HXmWtnf)A+N{+ViIAg}j z7QI?o&E-n*uvpCM=$lY`etw=VWo3f_r!~KMrn((S!C8DuOwv|Nj0=i^i!7ySf6JIl za3|#A#oDMQ-)qvpzj^!r9eto(tYC-mrugSo^3iwNf*xJlc4uzq#W)d}Y@0}lCf$^* zPK%i;$Bql#z{h1nUz$2nXD(!JFnKM}cJYaeQTp|XQ_(H)((z?9K9tH>{9#?DUwLb6 zv_r{m`d>=a#jCWsNB>ia6gO_mP&|DcJbcS9?#$tl(MLQn z!?Wu9Bk)f@f}1B>==v>90dMHfEW)9!{~r zI)HwukqSqRVt%Pnoa#r88UbCcUMI9=5osZ3TjwQtE%vEUHdYXlW7hwOW=uzcOkbem z#$!xmwgmZN>%al+FQGrw$i4ngHER4rjr>wpj1z4N?wVpO%U7H-ep93AXX`Ukf2k3U z*Nosrk-8fpX_>(0?Bk~ZS(Y20Ez5Rmt<8vp8}D`~Jere@*9|9lQiAqeSJ-29GnE6Q zT8QNMZ!jur{tHGW$HiS;42Q~&ev^G9{WFyTuAWg5wp9GFK%^=U;NtA#ORvp{A~Nly z9p-fK-ahKzTqJQ1VH);E8J-~>}Sr1U{z`S;a z6kK@U^|xV>`G$9Yz{p#`gTWp`fRDu6vj;x#5zP}W(2=tpuT<<}AD}BGv z>#6sz@~2a4R`0!e0zhYe7p97byzlc%jtiZd{kk;B>3tTHHd~(&E?#0jSXyC@)O=nE z+8zk68F@(y(QVkqtuwP4!}9osp!6P?ZzWi2bhD9AI|3Wwa)ZC&v*aj-=Wb_-EjZtS zOU4^VZ|$A+L74TtW$@_W=Kkt(yc2vH?_H7{KqR*B!oeo}4aKT@jAWL3xVI!2iTUeJ z7;=ZG;OV|1U=ONZ=g}^&iXvO#SQmp;8$!fjVH=1|@_le$;k)*t>HUpr+e-X)U1y++ zE`Zf8_PW(s6xzKPgRkluYjbdi#<);?w#zq$9D;{%-5T#0!5Raalx!F1oPNg z7au|rz27|dSQpW~<%#inZNz%c1iL@c+0Jl!l~K#E zeCBVAQkimL=0Vs$^PA=&Tz|ORsmfJIaTt~RH%39Leq&Ua>zu@{UBHz+oUU3=@&>br zBFpKjD_576_%}?z`eSn9bnkIm>f4TK=dY#$=l@D>B-h`CDdsm}0_S;LuQ+V@t;ui> z=?2~W`zu2lhY`F@t1WfMT1zeMP!+N3%I<%8W$3|Qc-pp#Clb#I*sn z?|F?qX9TxzG5pvTRLhxTn}#6n44l%6s~h<-$DZ>U;y=5uxi{>mAx%g={;IuZNK+|$ z0#{lbgzv9BORYuda-ihyH&tEKRrU75dM-7xw1hzAt6u@_eUB--n)A9wV1S5`Fk60D ze-8O*X($4|MPJS){tWq|md9!MbNUsy?p(u__~o%BY{2yMdv=;b)(IfCTE;~E6hs?{ z^9D+*8b++dCD7HZTXE|)gwE@Z>kL`Bfp2{0QOC2BzVP{;={V;WWkPrl(zI-0+;j34BCJvm_aq!(m7s{6>w8;MbGTg_;4OzRa+(qmnB?-Rd zjhgc@hMVotCB9_2Y}N4k1`dz1b<|SlU3@k09~CrOVgnQe1w|rZdZg3RMRnF%n=L(bWl^Q@3#saKEYs^E7oRyB>7#z%})ar2_zwjQaw zZFx3yF-KxW7oMd)BGqC`P0>(v!gDTI{u-$Own$>9F(&8-sY-Z47asWRJjJF?m>}P* zqv3y&$}U@4+SX-+Ln@}jcT)AHZ@RMc@vbFdX}c5}kYDr2(FXW|9m5ci%CxGn;1SoO zPU7~J$QF_9YMYYGKyCdInDH#zYkv=U^wp5(w;J-y)gpJBt*cv3{{C`fn!UmwZPSs9 zf3;0vNrX3SIw-?~)65E=KXg(4w}6+E8g=y6&wxiyIxtF+vIDpEuddw`ZvYHDPKq^H z2#{TCx()O0T~`w@Sjcyv;!SfaTdZJaHXKr=_`Bu(Myey1CV!F2q}s8wD8bsF;qhY~ z``%ccg+|GbdOQ3k0L*0I&#cwk)e0W>Z|@7BOZI<%iQ~sR96e%m`%=z396e>L?{I)S z)yf=?{mZTm|I1&yHg%ggyEY3NkIl`cc%JP3Ez7Yv%Qi=n|MaItfDgv=#q=`AoLK9i z=RjMQ$I#wC%_-KPE8&Ktwf@SF;aOu%-O%N=;n}Ftr-`dAm^+UPo?3q5yS19&Dqh{x zo2hz#$WQ2&ky3@E_2#bSp9yaG>(Y=vC&A_JKWzLsv4~S38CT4H`#kf=!DuBIb<0N|j>b?S&C(9jV!HmY=S@0HD2GBJh2jef)UH{jD*H5hqvd5bGySv8UnaL*F$k94Bk`nE zXj1IzU*LLJ_!C_H-q}~(o}NE-3cm|#{T*Cr3*R}>z;hgMHN1B_xbg6GxE@h6`JUUe zg*RoiN_FjX^QBimhfPFvT+)u6nm$TX{85PKcn$w3#Ah-$VFsFi=D7XEn8HYPc?vvRX}1*Q%+BtcSiE z?NE&#jOpMXMY#({vM&CTtc;_59LdrFUK27?PN&e)IGX_xXNf4+zZd1Xt3`P>rznS{ z`a@B|CV}6?^S+}iKl?9qu~(M`bAMx(vG`>*loQ4>#m}|yH_PhWx1q58R}#$Np&f{--WtO<3FMv^D`v+ z(puERewn&{FHU{%Ovj+lTje1^&TD4Nf?pQv;D@W@ytrCkd5vuT=SOUki>m@nFBAE{h*P7mao=EcPagY|j zw@i`?M+O29;NH8s=xDmdvW>$~u`Z2B0<bTfO4Ijv+5U;FlNn0Et+`7p`3Wb(~H|k%w`Xqhbc?sD6Q{9)xL)rFk&x{#n5Q8Dh z&yE#x^weQAk26Bw13#U1Nx`k2Ojf2HAI|q%32n>_sX{Wxa2SN(;YB%X4=> zzvq2FzxVyT|Gc01Xa2m->pIWlyB)`IwyN6hKWF`sF4-ubs(%T3lFVx>wD2es@B$)w zB)Hr=YDJ%Ywzqw}&UG$(8>Khn^uZfsExE{&@@qB0*LX=e${{@ZopTNr-#V*L59JW{ zNM&F9InHDDiT@bq5!v#`7*}ox?UmKOBHZNr?$h9_ma75bkdCkK4r~v8l>RXKMara8 zGA55avAFX7ZFxJ_SSJs96VRY^uto>a!XjG z^;qY9uMGSDtuk!*tulnBbVx&w12aAKGffr0&GZ5)O8=heZHhDwIRBk$_5Yq~an}Bp zY9S?-Q$yL<6#?JOf7FB4N0G68TlL`3_j*w8OPKe-f9sutgZ}QFPXN7hp2tUSZmtKR z-IAWQ3H{Q`w!yZuC2w>5u9qD!eBu9f-|8Cxxga?h)#utXMaP)GkjwKSz(Tr$-97uO zN%e)3QTn4v^>v}D_j&D$qfd7RFWye{8IA4?yS6~n$iT)KHY_9W4s^gC+43WO zcha6~4)m)S+j_o7OFa;z3utRM3j|ZhQB=7zeGJGwECx0rUFUBfCkk?G2an`t{-6oOJ zaP0AzL)xXq!9UDC$JSHMrQ^Dr7xeB^Ie^u09uH&lGgQ`hSBfP21{$2O$#3EVd zxqFo4PLph89$s_0ALbv6lF6%d6;R24GI-)3Ye%DEJnCH1)7zoV(q$J8Dp4{u#%Rx8 zy+I^Dpx$io|5A_XE+j7bYOUDF5vzRZ!FX3@&FdbRr-it)!&F<$p$Om03Zt0AMxi;8 zU2m;AUiV%c3aVYhSx$y)?|x413(hkdE_%kC64-Tkk4>eDUF>#ci8|qkkGvxeA}3$b zLwGK}KHO?`+w0k49!Z!SBP0Rg9Y`#Z4k1|Z7xfeAp>mu+-FtaLVRtv z8e@?y1TK2;@=3rWZ_r5WmR8+$(a^MHLp~!twf4emt*RYjs2K(wZLH^}cvC;$$wb&b z&1QyJ)V?{$mi93cfIzf@Q~E080fIML4du>_f=;p@AS(8D8?niyYd>T;RTq6#B>oS_~WIQlV98~T#5Z~AQwTf7M5Uc^% z1z0ccoG$|G0u(d-4LG>TH3(7kKr^`;yhYkPY4pq+J=Ed0CJ;KH-i1V?HV**qIb~oP zB=QUcA?sQMwCll0W~)fdDrQf9(19?3zYs}8Y&iv7-X6eUQaSQda}bK>se^a6pPhY2 zo3R~kLiPjJ10noom^?tjp{xc&Nca$RIoYQO#^~d?WTTZ`_x9geq#W{YoaqO8T|77s zD?Lu}vwwYqPaQqlG-K9hvFqr;1J4cLKaSwP|8codpZ4kD$L9Hw!N+>vKJWU9?Bc+H z!oS>?f3Q%^45`vMYUuem^646tzf3Gyhv^naP@V?!H-HeWruu8?NdYOu7aJ}h{!5w5 zk#c>}I&xcZHbsTUPpr(;%TE+o1sw6~Q1|esOGy#8PvCPAO$*?*&wn5xTLUc1 zW#f&kck!6)n8RsZB~P0$q2qz!sIaR2Yb}4$?bbV`4%uJc{Q<-X&!=HuM|Bh{r`Y!d zPT}}N9w^DBVCs%}$ecDcf0|yIn)4Nhe?`5gPEWC~@<~^+D>jd4kmWN!Td*@|juSVg zjtxB6`W#zaWf@eAUbL5Bqd z$ovLJ2IJm#QYR|71kg#!lCKMnTBGCP35qA9{}3Yyu!oSL0z$;rQ0M88fK zR>bSK)e8Fvu3dmtZ4cgR+v}Q0nN#kF4OV0d!iLxjB1uP^$RtH};t_XV?5T}U1qV7y z*?{NPj{80<;0c$D8~Ki#s@BA$Xc+I%_CdQb5dT(Arg7WzqZE;E=`L7!*Nz8aLtRsk z!GdW>PS{-e0GEpajLY)uIwRHW9Pb}&?!C(lnH~{mw_5~Gu^9pshFY~@TVH9(FyLW+ zb?@KhX5Y}MU@;|N5<9C#aOaA(VHn~_q$#(=y&DW8p(pLL0%Qv#+YXc!8DR6eVcZJ% zY^tzC>A14oh;&!!WDZ_ZnoYaF@#R~LBVHvhqj_^C0VVQSnrrdkv9m4|ouG1iX5xD?)0Y^O7UhT=s za8M)ZeW7g1&@=8L%soGyzt@CsT;wKSJlN}Ug=GUiCt zt2N&uc|P1p6TBK(^`so==AX=|F;iiqWFGB(1$C7N8|E{qs7@o+pL^#AFnBJTRgf?G zWyys|(OSKgSlxLeJ75@C#Ej%X-Vg+6B-gYR8x@!!jg6Zpp)d|Cdkz?j7-w z*;!?l#K{knh5)7vMj&^^tF{jN=&L}5?ft&Bj_o_7Ru&K8dDb?$tLjTLZGu|6tzqI~ zt?Kzlo4U{dp$mUKyZs`<)Ux44bl_5u;pgkcA15c6tOW5C4j1hgba}M`iS=;wxkrKL zb9>eAp3M!Py)5Ap!hd8l`>upRZ~q>iyUf}?tX0y*y$!xhzU28AAIR-u-r3=|kh7oc ztmMU)Ep9)!6Ur-qRm~a?cfB_lmwaocR&(qtdpyoBXa9g8-|L{l1F3pv}>B(;vR#ayZIO%bma~DzJu}j~?uc1c3uk z)iSM79Ge24-@=jk6e+um5jcH-WXe!XAZ7_l_nD_-3|^Ad-xM8WsS1;A-`~j8-EaE( z?COxbHHq4Vk|lM_SQTUj>jp&HDNu@yuTj!<6pO5Bhl5^1DO^51QWoB9<2Rw=4M zH9-pkzN48swNjHM)#aJR?yu)3Lk3=V-3mKpo7Si%ozrH=lY;P43$#%4-3Z$G`*Oe_ z@t+^19r!4LhNPc_c>I7sTQq+=!#@y-#L-2C#=suPWEoPr?Qt}s7>A4AM7xQPa*vVd zN~Q^|GhMmn8BG_OoHJvOmmVzkEOZ{{7OQb7hR2MrSMufC=!AmXN04?U2b&Uam9YKg zndZjzoWi2rieuS_8&516a3T+|np_Kr3ImIeY|`f!ed083I+u8q_po`){_4Gz9=2gz zBxqLvjJd_6#zpeU$=s(*GWzO@jY*jxd7RN*g{+4jyCDIT0oU(3q91C#A1mVrw%ZV} zveH+-Rz`v&3%9mgnH?7v7b7Z6oFKuI2xOM)adejV2%gNZ;buNsa;P#{(Cv;-I```b z=}n9yEKa*=>8vis8qNOwiIVKctw$p4tKRApSQl)bDrnjdvvkv?Pr+jPx}<^>>xm+k zrz$BB$$}J}^ocQm9b~Q&x=pMsdPg|tk`}kEPNsG8m}KnkrHPCtrv%7MkjImZ&=_gw z?xC6XoFGgBG3-3H$DASh5ywG#UqmT}tDK#IGlnAyu+!lA^KXZU5{|82e#>z&}{Hsvd0_6I~1#7FUV(TdQ9DIMPmOK=eS}Luk(^S32>a6Qw!*r#kyy={rYI z@X`m#&l~+E&miGd2d>{ef-KvRfkj0~*A5E)uCC<%*JJsEz;Hb`g{+oKaG?z$xB;WZ zLtcctF0EkfuE%YZITVBMEeIM-F^gPAkd!aIE%8FZr-Twrzs}hA$}l>18uonc7rJfh zs%hBr>6zV0k}Jrk^nSlxbb{14P=6T@{#_J^B^dgADyV0;0-&K&!({4-9Nvb zoi1|ex^Rbrm$xryLfV>;XF=S~1p>E3P?15c(lKI5?e1ewnS^iR8E=ywQa+qWQWrS6Fwl4^FT5FzVK;9jl2%$tDPt{eptiIMgATV;!_2@xZh}OaY#gfOJ z)>A8Je;U&b>gho(StV*JH9?I!6vwVA-jOmwq?Q=fps;hoVO6V zYw=87zT}NlkW|lM7U#{EUt@&l;x2j2PnE5v7ZQpomt6Yq)|yS^Qd;iU7uWEK-QD|F z$LJT4*Q5tdu)@oTuH>iDo93Tk&ga#vV_`z_C?TENHyQTYhI;=*;$O?TwS`wdKMt_r zIxxAHr~wMuB>(MeG6*nR zIa**-?v(J-VVEgFP&>}|ZO_UMIi`UU*xO-shZrH9#x3i_VA&Q^>^_K!+MQA)>zTQ) zlmvR)*XSRw*f$GLH6u~yBg-AR79QP!OX@(fK9&>ml?SE6NbrH?CavyOPG8)u%x_-pF3R`F{p>R>fJEeeVN(YY@ z0Ktiwpt4<1+98_vn7SyqN%@~21PwsJHsG|B0v{v-YW4#PQ1GH$1M;S;N;XNrO)i|} zWIyStYTsc~jM+FaTC!c;1Fev1^4;?O$NBgh%7D{8>i;h& z`xyX5%Ir+@jN=&Uf~|IbBkf6>wh7{w=dgv8@(XJaF@cPpgRlb|3zrwgwK5Rf?-)h- z99PWJti0S9HH=}}G!>06t|v|PT{TRurx|g2TsJRgT#lPivbU==yJC6VQEhJQR2TBk znekI7T!v{x-V&_$R12l*#0PIJZfpAtg>gB(b^gM`*+956H#RRwUIQY2iyuYMet)X55sFgAS5%_m`1B{b~>cuNJY4c4>x0Bp!PJW~+}dP+4X`>p~>;MuH-HwT-X+*<8k2O937THY3ah8%t~ z!UB!@@2fJq-cfWiRRsU|TGvu)JE{JY>_m}L zM4BX+Mw#<_*-Mi!glKB7%$TzjTiTs%c(Wd*V{`&$QW-L&G((OOq4d>exp;${Qu~&* zUia6X-VA-0M3(GHKW8X1EB@ilc>U=;Y8zs^&%8sY8f_-Od;(p@i?Y2`rHgZ-bXvg9qeNrOteIG4vR$oMrOXBC-)vr5j z^pwET@9i)^&|&bcIWEr@*)TG8OMbFZlq2iFqJ$k3l!gm~m@Z2(s`A}sK@T^`jVXBh zh(z0qlitXIr`0e?!Ox;sc8Sq;fZs2X{QT{JB4%3WcclJNlWie&Ch+hwKjV!EE)dB8 zJmq0y3iP)(WJm%UyU)VuOqp<&W^5#7ZU@d3ul7x1lsls>_tZ4RPkwWcjdsOgQTPtLiu zMNywaV3c#-L>h3`WZ#Qe8~$5V--?I4z=Nj(4<7mREptQJ)?4-`8VK|#cV0WK*yP(V z-ORP*QWInC?k83I(qv(^93zu$iwb>g& z6o=IvvWTy;{7?cfa_-YTU^qk`efRo7lCY`3%=#Ix_F_b%NSWcen;n(j{6z7ERG*f_ zNaUMuS4RG9t%m)MrGH0?oZl++t((8xh$KFl-E2+n3^qLzegc?j3S}RTwkvMN$>#AtF>0#Swvh+${T`=@(gh!2B4|9{+`Z8uk z2A40$b&Gf|p{S!$g(tCR{SnT0J z94ffh3Pni%bNB-XJi6q6!PfuQ^Wvwo%(@jP1VrPW0(~N3@H4)zY5UdoE4-s^FmTRDv*w{u=RyawLa#jp^(ptaSas z`9}CyF$>uPHU5rhI|&BP5i3T+Uo0iJ(HMe4tr5$dVB`4_Sz&g zzXCVvTje1WhbD58%QK#FE${7a-wdOCn4Xn|mEVT<2`~uWmC40&Pd+;}oa%Bippnj> zYj{?`Q}|i(-YDB;q*b!=G*avI^k#;>9#peL`;5cz-d@XR+?rYRF)w+x=CjZEcl-+k z@lnNkL(+ZY841tL{Ag=i5pWIK3#T?U9+HIK$s_h3sAY3g}w0ceY&e2Xe?tK5#b*X=Q=l+R>3>d}`J@@|>?`ZtM-UyFfh^+AU*?QCNK!(kYcQ|fP0SsZfY>d-Qr%;P3)&_qE)0IpcZ)o`{g5@Q6}7k zJGDx*SzcA}B^*<`Wj?LB=uTJP=+m%_4Ai8WC|Hw`7Rd|>Bo6P$N$ppB(Z@=ZhVlwr zhDhLwAsQVzv~GO)%*)Pg&}?La?nzE2O-w?2iYiq^&83-Sxu%#aHDQju{iW$>Heu4- znWlIbPgG1^f{UTW&bYoU8;^V}7echIq^0y6dD9(T)a5MnP^(H?+C<0cJDZ+W4%Wq+d$uDE%KM=MXUcacX~Z=t-d)+w&9p(!2`qp`?n>%RRw zV1`uR#D3a?rvf+8DEBI}qHZg%E<9h1` z(3HhOZ;yRyOWMg7>M@fX!~g`iySDnVCq*Z#_1EI31k8h{rcH$9KN4CWIv0hj3rC}g zi+yTP TlWkV}pYBB5x-?+#Htzod^!<2X diff --git a/smiley_pack/icons/disgust/fartinbed.gif b/smiley_pack/icons/disgust/fartinbed.gif index 55536499fd61bf3345b89ed7471dd0141434b9c1..89e550cb0f55a104470291c880b0cae7de28a0f2 100644 GIT binary patch literal 20487 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 SRV5C&Ug0aCTw@v4*!wrkb1TsR literal 23289 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 aX-(X`QX!DpNK@~$VSg#An3M$o2LA=#ryG?3 literal 8936 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 literal 2727 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 L}5 diff --git a/smiley_pack/icons/drink/tea.gif b/smiley_pack/icons/drink/tea.gif index 474b98942216945652618469cd8778ffcd2f5907..fa6bcb51b0310e219fe86f075f1d428b193c9941 100644 GIT binary patch literal 9888 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 D0}^er literal 9915 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 S8CoXBk~l}A!C+uH7WHqTngh!K diff --git a/smiley_pack/icons/drool/drool.gif b/smiley_pack/icons/drool/drool.gif index 4093df65d7762244edce5ae52cb98191193a8201..c6d20226f754f89de4d686327282b747afcbe5ba 100644 GIT binary patch literal 1043 zcmZ?wbhEHblw^=(_{6~QABcdMf#JY`10WuV(*OjD|GE8KLxP)aPd#;JWtYBo&;bdTC zU}xX}TEP>dXS}n9fAJiXhTmLJH?V*dumF{CGB7anYHZnM&9}=_n^AbOfDoz*Hn0jl z4=0_&PY!ynW@TWL+T{;b0=9*dfe8p1n3!4up~B1{vq7eVgjsm>*jZ7HWCywnXsN{} ztuF?rJUtmC?)kthWn$3bhHGW!$qR?-1d8*(#aVn9+F?cl?c!iy21XNH_+kI9-B@Xy*_H5(0V28VuebAMqf%KoAQB$N)Plnq3VII;%4B1g+PnI z0$9)hLyQY3!3vaOU}9rQ%G^-{^9j(E+zbLhzc2&sVBuK0Wj3<&`GF2(1xoO7FrNus zvLancVVO{xoCiV)2LnGa3_wcwIjn9O9N}T>*?V!qTbV$Zn}FtX0L=%51W3)Uf`FWf zD>!si(svkyA*o>ls^JBz5#(@KypMN^`%MLt{wCwO^CrO(7tkbDpem4)fT6*Wb?bGr z!1W%>1R1xfDu-PqguhO8_-UFky%fn*CZK8&pxq42>Kt5~{{>9+IB0ow?y-V0naP4F zoxE)vQ*u@=kTdq=leGIhYyHO?`VhS-kh~(yAOW^ZieuLuzQ>-Pd~+&zlO;|v2x=+^ z*DYgXYPV2jQ2bXNl95@gkeHX5n^=;XqTuf7rjVAIld4djSgeqopI2N`RGJKuC@s#+ zOIHZZNlk<(as=zhFVayc%Ph_;0m>^RmMCPDloVL$>z9|8>y?6(>LusrDwN~{jm%3? Y$S*BX$jvWG)ng0|4i0ek4Pmeb0HG}YZU6uP literal 1379 zcmZ?wbhEHblw^=(c*+0*|A7dI85%&$|Nk2r8V(#d0OSt|p!lEL&ow02*)hP?NY8+o z5$I^epDc|04E78O3Eys7v?p(k-SWM9`>*x2(e-7G6#)%}{_fS8S=sd+eboWIeXiZp zX3m;DXYRcD3l=U~ykwdq!cI;GRt9zk4xpW)4hQlz{xI^fD;J%}v6_G3g}y^78zZtx z7NA;Aph^*tN*O+Ww>G-$3+ zYDQMc$-o4J3~a0i8a{}#pvtg-W!N1Y6F4N;nvmsKfKFxyIr+e0{tv=J^(U49&F7lX z_~f(rUsfb1a|2z0FhxTK**iQ)a*YqfC4`XN#lgS~lm!Kf)Pea48Y+DK9*hYqQ~u4n zu%g6ks?g#_^#`bq1%)9SP`Qu;gM)*J7_0Llpo8Q(8yOTh5bovxD&d5<+u`7QbrGR< zkh?>;dd?g$azJr6#C~p|fhq^&f%Y@;9ZvpK;b1n=CtWyTiCX=QHD#yYma*Pu5M9GN zV*ax?HiJaF|L-T085X59L;Kt78d`I;)esMk^`(#{J{JV z0vsIeEe9Ve$XLuj$(U$mE5~^V$w?eQ8$n5sflUmU^B#-ang&r+#y&*{@mMRYX%y0V-gzD`~(B2p$C%nnM>~?kNs$PgODUhrz%pd`_ zUm28@b)@Rs7YBJ7C``ZbFwsCkXpy~B&<@qI^>Lct(l6)%L-}8INJeI{LSkNKZemGl zih{eRn?hP?OFI^!tCp8hG$Pug~zeq=+EVDSX1SqeN zSfY?oQc_^0uU}qXu2%|Ds+XLft5A{;G%_zmA-}XlAveD$RgW<=I5@!BH-y0&0QaCw AWB>pF diff --git a/smiley_pack/icons/fantasy/alienmonster.gif b/smiley_pack/icons/fantasy/alienmonster.gif index e0ca7f65f58d5e1f7b58d4421508beb2f7b8e672..f43c7af5b98b45730073cd11115f80ca202f1cff 100644 GIT binary patch literal 6611 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 diff --git a/smiley_pack/icons/fantasy/dinosaur.gif b/smiley_pack/icons/fantasy/dinosaur.gif index e8c625c347bf6b16e41ca82e117c44a00fe9f76c..e8343cb3acd37d5b1f087ca0a04fff381e9f2624 100644 GIT binary patch delta 2381 zcmajgc|6qX9tZH}H@lfJBMf70Y#p-A*d@%2Vy1>hr`wS>3I_*~CHpKim^79#k}XNN zmLX9?n~0)OSt^H!(}p^t&gAgrzy z_)ZdG4L&d3(maqr>H(R;+?3J~$Qc6CO2`I6N$)~iAV{hP`;G?#R`y^WPzAWpC(`G# ze43?`OD&Ey^bdIlf2?lIYmIt+oe8dVXhOi~BSM7;zFvX;?F!B3=axpUpjpCf`eIc$ z)*Rn#&OTJ1;NBWFPF0p8bShRl4>^RKSHnLbZ*m4E9h%8Q?FjGp_rZxr zdW-v41FqcGj{7rl_NrM-(mxNt(N1u)grlUCRE=XlIb~`K%&f8dvo%GcXg>gX>H=IL zH8ClwG)=Zq1xAvf&)8z@Ym;RnxY!`5LPOGOThp$anwOiBmaAoXgXnMTc8!LPkPhAw zKTPQ&z|x1Y2UJ0e(#>UtxAtg5B}Xp)nu2gHVno<_kIX0l5}+3Kmmd)r{wqs^Lj6sF z$7#LypL+7&V#+pNsGU27z$Tc!*}5X@&KOfZV(8a+8AAr}5)~$Rj_b>ICs?@#`OP46 zV;ry#CbMfvV#|bf>KH6rR&Eg{i=3;0*d?2`2O%6~KJK+VJIPf3))9ulk?Z(qxGwLo zyQNC9raQ%WLM7>9q-)~JuG(r2RcSM-d3Y$dHOZ#C-}@9*ME*X_fT~6ZWifcK>juZi zZ=S(Ym=wb}5GaF7Zgc;QjorDS++?ST3zrUgxsHjXb|&22ct~2gg*&bR!V53{7Dg(K_gK21dAEQc##fi!9M86K94Q zRaKvH$NJSddoyTgL8D<)RUubj6{iYLUGP3AUqh_W?jd#;G^>x2Ga_Lz2e)*{6W1Jv zt-3X?}Q>bVYEr+4l~&HeK1rDUw<zhav+9B?Q*T#;+V%3<~*IZfPz^5se7M+578nGUUQ&U^W zGeer7If6eUI;{8BS=2og%Ho$8kz&at#pr+h0APL#>6bZk4y zRR(!NFB?^7JOTN}-A6IwtR*`4#9Xqc!2efb` zn?q3K#AEf=l&?;BotR%!?v->_rsqRM7`&A6a6Z8i3Gi3rFAZtxA#bR4Pu*_gsKOz% zdUgVJUf+_LZE6qk4d~I+XWwZ?3DkxdA}_JN;wazX>dph+HnqPn@0{RKsGCaTbfVbS z2B{0Z9Y-}V_jKJ34iC@w4rPO;5-5&k`bwaFA+^>xNr3kcb=)&Fl@xqwDBRxR`l3S#a70!ztvUJ|R6 zQ?MiOmWc;F-3~Lmc>KM+jylTD*O;%#BmAc!zRErL+7RF5mQBW!vUPTP zSXz>p6i$N5vH;HhP)>DNQiQt- zjI)P~u4u&Ynm3)56Y}fA$(I@(j#T9yyXMi|XU}YOL}%U(Ew#BzSo7+-$MmrOQb^tW zAsZ1yfECWu?_=YfJ}2^3k2njfh-`R1qH(yN2Rt>l`m6?`xYN8A7~0O|IXQAkg~5 zZ4B)%yf8((bzIr(}qDM2S(X&64*=?z~ zzwF1okf{x=&CB(Qh0r9c^JBZG|2Eyl#j)+b9&ldFpD zgT-gH7;*J>9>osm=;jt{`4@=F3m);x5KTX8h)kTj$mWn%*?q&2e{c*f4N=STW=E)OOi}j`l?l{@=`JGg4L#s+ zFnu4Sdv=Pk?9&G~+h^{0HTH#3lkUlIhrDB!Gh|sKfsCO5A}!upFO15_66L|WKzkhGOH-#U$wF>ee3EpnTZS1Yo`!gZUd0BjpFNR9A9uov210uCp$h@qSjXGu8wE Gx4!^X$EHyL delta 2454 zcmZ{ldpy(oAIHDn?>4*G1-Xo7E}=Pzxkkh0PEFG7AmpAT$#n{wVP*)MW$q)fdbQYR~%CV?~2C14*NvXh@^En}9s; zgzD>;3=F_JIt??2S_teZC&ewz>6!My8F>=M<&=}}91U5J)qnZom(Tcnc&K*!fQ91% zb6VYWj%-NT%mJLTzn%-(YTkzRc6vEMuLD&+B%z%DJi~de6N5KHjx_M#FU0DnP z^e_Qcn+~u!V7vPW*?2+H9YCztp|iAB3BntREY zGr%e|%Wk343%QwWWw4;3D%m{7P7ga09dG-lLQiw+tBq8R1(!eT zfopeT-@*QM;X2JA5}lrsnx~URVPKHCx(-3HU?E$Ti7qk3NK8+sB zYYb%9j={HzOsI+4Y3Eec{QQl{fpOnFllOQss({Ky*3DjF9XUFN_%LE2#tQ@c#)(Z? zVhEz9%5ZsFZ{2LK#r5ahb3;^r?FD+{Nc~0P#xK{z3zR+28C77O4GP<@2Wj}pvGU2w?CrB5@yJQ zL!Ecs=SGaobFRM{|Dba=^SqZ;s-`cS9eC*A=G;P88!pd?pS{*6jA@BETy78$A=Ie~ z)1^vEYPA}2NT4)V)n<21n|O0$6ST>Rh&!#^J=Pl%*dF2ubcV|KyI>t2Z^yLPh)3775_GKlo}r=FgtNdpmL;qh8fJ9 zzn0hoQ-M(I?xz7!Gbewtkx1PxUIG*2@Dqq}9)bs0`BS`;r5vcZKqoZ3_?W| zm%16mY9^+ezjv73fRi?D?X9S5E#-(5Ta=Az;6G{jBfdAdj-__#r1)|B<(FQtZ`;}~ zwab%@a0lnBNj*#`n{l7wcF3+?JiMhu?A$Ww6A?F*Q8N@rKrcGr6PaZ>)30w;?_8*vSg_)(#1=DoQIZ*DMVV|%cg*e|n7W;dmW=966I3R`!XJ(7Jn$X^mLzKpGJ(%sc|8Jm3fC@}3h z1wcJd7*{bV4ohCXl$Pkb4u+HKYkkT~aj-8Rw|Be<02O<;apCB=s8FZ0*OvC4$(K~I z#Ugh;NtVJPjil|N7K#>(QCLIkkxJ{+31NCaAD5kF{};SDG9l94cM!$caF>wp5k;mn zCp__2k50q%x^;Mq1vk$mq9X&|lzykhVwf6SuifWeAq#|t^WvlNrCucn5021m;mleo zU=)JmT-%}mj&}pl_5=-lD8-9c**zV23KX1*B}G;8)vsGuKEJlYcv&=r^Y<2A>R$l( zJ28Jm^|xt{ssz#@$zRgNMTRRY_d*M&n;K_qjkldfNmRTv=JZj>msew#)v# zk!dt@bxm2wFmI!QhcbemJT;l&!~#hG4$brUYb=sK-M8vr1l^F^B&`y~?N6Z*6! z4PvFstv-8|d-or#$2{(4^|W4lywlm=gLQc)&hPpTatdKEoFYf zFUQExDPhnteffeNg_S`XHp>iRr5Yj>yq5gXY;}^biKOWsB4nw0m-h zn=ia^Vw37|BPHR&?rjYUwzD->cRske@!*7+ENbs=@o!o1%9VvHM)mH_O%C46xhIQr z$hkj1knNpuCnQnp%84^l;p;Xv1xhWvZ@Jz%V`}N4EZGOXnZg<;cA2%_FPmK>_d0t8 z!?cyAg4x$jEt7a+Q8xFF&S3_JIlEUKl$mVKv7_ALFLUrk=XJD3KShImiBB5bz1dH_>fn)zxt=YsV!QHy@ zd|34xzBSjFq;pm?rC2*`5Nu&!Q2fcl%EiFMpd-e>3#6DB7?_wt6j(vxoLs=@2a5AS X#F?2n94A24Ga`vIF&|N4Wv~VSbTIHD literal 3431 zcmeIzSx{418o=?J4HDLbAQC_cTLc6}gcyN#0s%x6IzYlEAVDsRL^gpC)G_GDX zwbF8co0FGcQwUM=X^yjis@0vy;8sAJYxspIRfGbo$gEaf{URrzn%M>-o5_ao^+SYcCM_7;u>R6K~r>Xs3iz;hLG!b zoSPWzFu7)Jh)pPvaPVL8O$gJNULQW^dFKjbT1MIIQD$p(DdfN$_~*-zZV1llu>C zka|R~vl#3pW<5^fAKSPTV+x#Uvc<&Q{jouNhLm#ly~S-Qx#~)@2#-ugrU)JYK9KF1 z>$gt#Zq2%-a%JxrXtADt06c1f8Mw`E4ttzre=*_)^VEYpq*uwRL8QLU86(esM6`jn z3N2rinZtrF_e`g#|5f{7YUhx#X4=bv@CkZP(`=1wy_Knk)R}^LH|kcI=cT7RGfIbY zwyEwOIgWMecFV|ZLnv?7E!~7k@#IVx*giVG!)5z*oBqD+Rh;%Pdm%YBGEJqVku6b$98=ZkT%s!#in0 z^DQpBGVCcnv;xIcYMR++b6C{e0Em-=IBO&)d;A>ZpYs;+1r0RGk6uD=oBSmkVMbFf`CA zgrdouHh;MNbF}0`b881eTRE%grti_`YOQyny37`6xIJ0;QRPP>O8-+t(mxjxpa|=Y zh>;t4ux4aJZiJQb$;j;7uSS+BuLt?rzRT+(kkN}&J%=t>12lpV_ehe$P-`+RwY*3nj0{iMOc> zVk0ccf3`tarpr!+WEw)fooVUll5(E5WZS!-U=z40HsQ9^?;N+ll(a!tD7?jBW5IcD zuD<8$hEyM$i~EdJlH4Ariv*32a**ao{rzSNq4ZOJ&)v#X41Ftk#UDf+;*!no$<;+s zh|GtE+cnG-Q8eP%G<#JKchez;k=18E=WjAlX&sxTPik4n?h7V#=TVAk04i0Tspd5w z%UX6StiF&=adJ%OC2Pj5XxoLLL@&&mw9*&4$}Da^iGG+CVS`zSyTiLRxI@I#S~zpM zUBis7YWHlBS9+rv^l1Lx-8?6=D(xBo*94eaaJ1B1>nhaVx&1OhmkAL&B^>G)*I9~D z?d*qMS6V-zChvy9|ACNzwTOHMm)q|Zw>!bL~I;>8<9-iSD!~@H9UG{<9jQ~%W*;(^_d7;#_*eMxGOsm z(kIB}U{&c-iV=h0n!qfk_@N*Y_(?8wYBxhJBzGcEDC{?2YcS+OHhNA!WPK76Pm&9% zs;JIE&b`@~pD6XGV;k=fX(@)@xobjP=sSs+685g@b;HR8!*2B8ZzsVe$0MPJvD}``kqa?%mJ1=T35kTlE%y{wAH}&s9XY4L@z~{KMj@!HX5h4= zAD0%b+zZz@ki5tnbFLS9MY>Ug&E%8ZUY7#ySWX7@Zkzg#C$VdXi@nLNI5il_YOx%K}?sIYUalw1Lczo^ag15BX e<*+r05yk}N`;mi*(eX(i4@vB`L2TTwqhA2b`?jk9 diff --git a/smiley_pack/icons/fantasy/dragonwhelp.gif b/smiley_pack/icons/fantasy/dragonwhelp.gif index dbc4555969ed0283ab9a09512323757e23965c1f..b988172149846252f77f56d7f16850b7d2e460a9 100644 GIT binary patch delta 707 zcmZ1^G=WXP-P6s&GEsp+f#C}u0}xCURyV6=V7SM?@c;jRAOR914ov1{wy5W0&;h9i zndiXr|H4Vn)ms(rbE+svrE@fFDiKeRSY^fGG$Hjv!ur?Ji=(ZWH=NNBoAA}nhQF7^ z!D6zAgR>mk$pgH2+HQv1Xf+q$pA)8l=&z zV63dFZp)`-VHFo)Hp$8@Ftt81qld+)H%&jGyJwM1%KYB=seu#h*El)58kNW`G~Tey zxVUs-lXr|}O>DR^M`P20#adBEjyBCI)8**eoyEYDS=VqmtS9V{V|`ZaqzaXaNjXOf z&Zn^zJYh0Vi@!d7ifnjpyX7*a-z&b)ZrE^oV&++X)fO&`CP#rQi>fmpY%Hu7RKMWp z7MC}7=h4^h(rU%x&r%Msa69Pn9khG2G4#`uHL((rJEsURGARCJVHIHzWYA$`U}TU7 zLI&3V2`YUlnbRDymK}KMwnkyK#@|B?IveyIwye9N)5`FzZtESsh775EJ7s}{8fewq17N$kPYDUR!y_LuW4E8tiQGKzB2#LU=s$`+cy{9 zQOf7%;nOfsVOW3S*rv^&`M-X6c;L9kW!=mbat;Ly0$%GBLj|_Y5EnSU%k|p6si!SA zE)2z#Tg+kNuk|WdfWg;pST({`ckln6p8rc3{x9wMf34^L ze}@16*Zv;`qaiT7LO}69x1VcBu(M-;tC5}oGb1oVDE^an&rEa7%gj|ss#NgHPb$sG zEXr5#NGvJIFUn+4{K>*8!obL&1Ijy~T;#yLnB^(Nk=jX66 zS_BvrX`Gp)rupy5&JP+VW^pC9)4tB-*~j^1-8HTS zj$zvi+NGanhm@V!9yOcG&0BD7!n!R7|81*c(D}-!zBbU#wr)nj;l;7*)XXwSxzcV>?v~P#kQuN|P|<;9!S%!wyBMS*db&kbFRf4!R^KMM&A@Ap zA-B)js-oAfto(6WJu5$Cxlf4F<^J-kNG)>a3g`PQE4P{WY+wjG%{TMg*4&-~!L}{A zRpl}5*(Z&7t7dBz%oP?lIk5VJQUklC@uiq^zcbD(_Smd_{%+aF=p!o0ne3+8Cdpx& z11ATit@-dLd6n7RS?&v_Xy2XOztfDxvY{yT1hZy?l=Du;ga%KIzv=R6dM{a~IWY?e zM7zyr?3kIh;ce-SoT#&AQJE`xpN2$b+Ag^g$#CVGLUhv7@@qL;&xXomX|8e&aA07t F1^^ic1U3Kw diff --git a/smiley_pack/icons/fantasy/ghost.gif b/smiley_pack/icons/fantasy/ghost.gif index 4c5d85d895a78df089c80dadccfa4ad3b45fddd1..279b501299c0b48d16f7b4c30f06dca0f1c29ad1 100644 GIT binary patch delta 723 zcmbQm@rRw;-P6s&GEsp+f#K6eZVSeGW*|$Ffr0r##jfmsI;U=S3AFIISDUy>#LaqG zxga9tahc!BQ&BBH>$C;44jWwC?zQmwZ3`EP+qz#lWJ6CTyjdxf%F?g4ChF{qqPX{h z*L7{#j91SPye+x8e~YSs0>hNt&yjt5SQzx!+2XBzL&ZCoN+cWfnvFtY5*T`2)SBxV zvvMbSl)3a-G0o{*GFMWjiJ@yzKvqd<$r|kyD>rt|+#WY&N_Gx&!>W!_mYq}P+j?=a zvbh}W$~bZ;QSyY)=`*%0hi@`&O4w^qa3f>MCexGpd^eXrauj;2&&i7)o&<05b3nYQ&yM6xekX>`NbOtCif6svCbSC+VWo_ClUeZ2sQfEVrIOC$3C2^D4*%+7@nVOZ_CF>V2(O$k{)ta@|t7l3~*q69< z1@pvJdl-t2O_(${htIb4FvAX$xKl1(+^lT2EKGAU)+nz|l)NE-{q~*KC4JB2Wp24V sS$5F;e)Gw0pxX7B(LL+;Ch00bU{_2><{9 delta 694 zcmeyvK8u6f-P6s&GEsp+fnm``ZVN_E1|Um;fr0t-aLl}hJsrzWqHX_@=S~jCTz_Pfi11_Rf-)tT_IMPiIXOKSa&g+&q%PG zJ;j1)kyd}JPm+o)L)-F@O(|8?Ra>TWvoY-GpT9qe;V{G64Camvt<@|C4|~kvWo7d? z)z)+{)v<`{@)f6gmNO3+x1^*AmgPQJwR4^L{k1P`xITUU_Wj4tU&5RWia%L6MHtu_ zbQpjD;_5dQyYBomIQ6q$rM1@kK#Sq!qqq4T=H!Jk z@o_1hK52YqhTeH8b@MDu{~L0S1qVYm-8}EBE!Hg+lzYjj{=-eXv&|w`)(SIu_g4lk zF29|epl8I^Xd4hI+ttmepw${-ndzO%z~JT}JwdIYQ?{~q`V6btO&W|V=2s@oEMj0{ zWa?D!m0!8azGeN!O>;KPmz#Ddb*%~W^z{cA%1=$3v6x5Pq5C+)p5UZ&ZiQT|Y!1%gO42G!_ zC%IX5GMY_K2%a_BoN1v(UyFB|GaEzevWSgQl~t9Sr*W^_-ZyV=62n1;v<&9<^(|G= zC#x4b6tc6jxt(Zj+@Gpo#B=Gg1IwxVjGI%A2$bgBUn#Of$>rXfQtMqGKYay9`fpAK FYXCsQ8leCH diff --git a/smiley_pack/icons/fight/2guns.gif b/smiley_pack/icons/fight/2guns.gif index 9e1b66383cb4e272c5979086bd72dbdadf4c70c7..b9c9a1a2f83c941f180ca90f7f27339603586c6d 100644 GIT binary patch delta 622 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