code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Georgian (http://www.transifex.com/gnu-social/gnu-social/language/ka/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ka\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Korean (http://www.transifex.com/gnu-social/gnu-social/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""

repo_name: andremichelle/gnu

license: mit


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:48+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Colognian (http://www.transifex.com/gnu-social/gnu-social/language/ksh/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ksh\n"
"Plural-Forms: nplurals=3; plural=(n==0) ? 0 : (n==1) ? 1 : 2;\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:30+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Luxembourgish (http://www.transifex.com/gnu-social/gnu-social/language/lb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: lb\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Lithuanian (http://www.transifex.com/gnu-social/gnu-social/language/lt/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: lt\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:39+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Latvian (http://www.transifex.com/gnu-social/gnu-social/language/lv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: lv\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-06 16:19+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Malagasy (http://www.transifex.com/gnu-social/gnu-social/language/mg/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: mg\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2012 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:30+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Macedonian (http://www.transifex.com/gnu-social/gnu-social/language/mk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: mk\n"
"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr "Спам"

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr "Испробување на забелешките со Службата за спам во активностите."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Malayalam (http://www.transifex.com/gnu-social/gnu-social/language/ml/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ml\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Malay (http://www.transifex.com/gnu-social/gnu-social/language/ms/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ms\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Burmese (http://www.transifex.com/gnu-social/gnu-social/language/my/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: my\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Norwegian Bokmål (http://www.transifex.com/gnu-social/gnu-social/language/nb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nb\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:30+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Nepali (http://www.transifex.com/gnu-social/gnu-social/language/ne/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ne\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2012 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:30+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Dutch (http://www.transifex.com/gnu-social/gnu-social/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr "Spam"

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr "Mededelingen testen tegen de dienst Activity Spam."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Norwegian Nynorsk (http://www.transifex.com/gnu-social/gnu-social/language/nn/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nn\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Polish (http://www.transifex.com/gnu-social/gnu-social/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=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Portuguese (http://www.transifex.com/gnu-social/gnu-social/language/pt/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pt\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
# Matheus Henrique Silva <hennsilvam@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-25 08:09+0000\n"
"Last-Translator: Matheus Henrique Silva <hennsilvam@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/gnu-social/gnu-social/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr "Isto é Spam"

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr "Notificações e testes realizados contra os serviços e atividades de Spam."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Romanian (Romania) (http://www.transifex.com/gnu-social/gnu-social/language/ro_RO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ro_RO\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
# Boris Konstantinovich Lissov <lissovbk@yandex.ru>, 2015
# Denis Gavrin <localmaster.ru@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-07-12 19:46+0000\n"
"Last-Translator: Boris Konstantinovich Lissov <lissovbk@yandex.ru>\n"
"Language-Team: Russian (http://www.transifex.com/gnu-social/gnu-social/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"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr "Спам"

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr "Протестируйте записи для сервиса Activity Spam."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Slovenian (http://www.transifex.com/gnu-social/gnu-social/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Serbian (http://www.transifex.com/gnu-social/gnu-social/language/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sr\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
# Kristoffer Grundström <kristoffer.grundstrom1983@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-05-12 01:12+0000\n"
"Last-Translator: Kristoffer Grundström <kristoffer.grundstrom1983@gmail.com>\n"
"Language-Team: Swedish (http://www.transifex.com/gnu-social/gnu-social/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr "Skräp-post"

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr "Testa notiser för aktiviteter mot spam-tjänsten."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 08:48+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Tamil (http://www.transifex.com/gnu-social/gnu-social/language/ta/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ta\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Telugu (http://www.transifex.com/gnu-social/gnu-social/language/te/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: te\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2012 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:30+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Tagalog (http://www.transifex.com/gnu-social/gnu-social/language/tl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: tl\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr "Manlulusob"

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr "Mga pabatid na pangsubok laban sa palingkuran ng Gawain ng Manlulusob."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
# Uğur KUYU <ukuyu34@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-03-02 11:05+0000\n"
"Last-Translator: Uğur KUYU <ukuyu34@gmail.com>\n"
"Language-Team: Turkish (http://www.transifex.com/gnu-social/gnu-social/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: tr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr "Spam"

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr "Spam faaliyetlerine karşı sınama bildirimleri"


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
# Петро Романчук <ixer@ixer.org.ua>, 2015
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-03-31 10:44+0000\n"
"Last-Translator: Петро Романчук <ixer@ixer.org.ua>\n"
"Language-Team: Ukrainian (http://www.transifex.com/gnu-social/gnu-social/language/uk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: uk\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr "Спам"

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr "Тест повідомлень від сервісу Активного Спам-захисту."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Urdu (Pakistan) (http://www.transifex.com/gnu-social/gnu-social/language/ur_PK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ur_PK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Vietnamese (http://www.transifex.com/gnu-social/gnu-social/language/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: vi\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Chinese (http://www.transifex.com/gnu-social/gnu-social/language/zh/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/gnu-social/gnu-social/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/gnu-social/gnu-social/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_TW\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: ActivitySpamPlugin.php:208
msgctxt "MENU"
msgid "Spam"
msgstr ""

#: ActivitySpamPlugin.php:225
msgid "Test notices against the Activity Spam service."
msgstr ""


code:
<?php
/*
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2013 StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));

$shortoptions = 'i:n:a';
$longoptions = array('id=', 'nickname=', 'all');

$helptext = <<<END_OF_SILENCESPAMMER_HELP
silencespammer.php [options]
Users who post a lot of spam get silenced

  -i --id       ID of user to test and silence
  -n --nickname nickname of the user to test and silence
  -a --all      All users
END_OF_SILENCESPAMMER_HELP;

require_once INSTALLDIR.'/scripts/commandline.inc';

function testAllUsers($filter, $minimum, $percent) {
    $found = false;
    $offset = 0;
    $limit  = 1000;

    do {

        $user = new User();
        $user->orderBy('created');
        $user->limit($offset, $limit);

        $found = $user->find();

        if ($found) {
            while ($user->fetch()) {
                try {
                    silencespammer($filter, $user, $minimum, $percent);
                } catch (Exception $e) {
                    printfnq("ERROR testing user %s\n: %s", $user->nickname, $e->getMessage());
                }
            }
            $offset += $found;
        }

    } while ($found > 0);
}

function silencespammer($filter, $user, $minimum, $percent) {

    printfnq("Testing user %s\n", $user->nickname);

    $profile = Profile::getKV('id', $user->id);

    if ($profile->isSilenced()) {
	printfnq("Already silenced %s\n", $user->nickname);
	return;
    }

    $cnt = $profile->noticeCount();

    if ($cnt < $minimum) {
        printfnq("Only %d notices posted (minimum %d); skipping\n", $cnt, $minimum);
	return;
    }

    $ss = new Spam_score();

    $ss->query(sprintf("SELECT count(*) as spam_count ".
                       "FROM notice join spam_score on notice.id = spam_score.notice_id ".
                       "WHERE notice.profile_id = %d AND spam_score.is_spam = 1", $profile->id));

    while ($ss->fetch()) {
        $spam_count = $ss->spam_count;
    }

    $spam_percent = ($spam_count * 100.0 / $cnt);

    if ($spam_percent > $percent) {
        printfnq("Silencing user %s (%d/%d = %0.2f%% spam)\n", $user->nickname, $spam_count, $cnt, $spam_percent);
        try {
            $profile->silence();
        } catch(Exception $e) {
            printfnq("Error: %s", $e->getMessage());
        }
    }
}

try {
    $filter = null;
    $minimum = 5;
    $percent = 80;
    Event::handle('GetSpamFilter', array(&$filter));
    if (empty($filter)) {
        throw new Exception(_("No spam filter."));
    }
    if (have_option('a', 'all')) {
        testAllUsers($filter, $minimum, $percent);
    } else {
        $user = getUser();
        silencespammer($filter, $user, $minimum, $percent);
    }
} catch (Exception $e) {
    print $e->getMessage()."\n";
    exit(1);
}


code:
<?php
/*
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2012 StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));

$shortoptions = 'i:n:a';
$longoptions = array('id=', 'nickname=', 'all');

$helptext = <<<END_OF_TESTUSER_HELP
testuser.php [options]
Test user activities against the spam filter

  -i --id       ID of user to export
  -n --nickname nickname of the user to export
  -a --all      All users
END_OF_TESTUSER_HELP;

require_once INSTALLDIR.'/scripts/commandline.inc';

function testAllUsers($filter) {
    $found = false;
    $offset = 0;
    $limit  = 1000;

    do {

        $user = new User();
        $user->orderBy('created');
        $user->limit($offset, $limit);

        $found = $user->find();

        if ($found) {
            while ($user->fetch()) {
                try {
                    testUser($filter, $user);
                } catch (Exception $e) {
                    printfnq("ERROR testing user %s\n: %s", $user->nickname, $e->getMessage());
                }
            }
            $offset += $found;
        }

    } while ($found > 0);
}

function testUser($filter, $user) {

    printfnq("Testing user %s\n", $user->nickname);

    $profile = Profile::getKV('id', $user->id);

    $str = new ProfileNoticeStream($profile, $profile);

    $offset = 0;
    $limit  = 100;

    do {
        $notice = $str->getNotices($offset, $limit);
        while ($notice->fetch()) {
            try {
                printfv("Testing notice %d...", $notice->id);
                $result = $filter->test($notice);
                Spam_score::save($notice, $result);
                printfv("%s\n", ($result->isSpam) ? "SPAM" : "HAM");
            } catch (Exception $e) {
                printfnq("ERROR testing notice %d: %s\n", $notice->id, $e->getMessage());
            }
        }
        $offset += $notice->N;
    } while ($notice->N > 0);
}

try {
    $filter = null;
    Event::handle('GetSpamFilter', array(&$filter));
    if (empty($filter)) {
        throw new Exception(_("No spam filter."));
    }
    if (have_option('a', 'all')) {
        testAllUsers($filter);
    } else {
        $user = getUser();
        testUser($filter, $user);
    }
} catch (Exception $e) {
    print $e->getMessage()."\n";
    exit(1);
}


code:
<?php
/*
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2012 StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));

$shortoptions = 'i:n:t:';
$longoptions = array('id=', 'nickname=', 'category=');

$helptext = <<<END_OF_TRAINUSER_HELP
trainuser.php [options]
Train user activities against the spam filter

  -i --id       ID of user to export
  -n --nickname nickname of the user to export
  -t --category Category; one of "spam" or "ham"

END_OF_TRAINUSER_HELP;

require_once INSTALLDIR.'/scripts/commandline.inc';

function trainUser($filter, $user, $category) {

    printfnq("Training user %s\n", $user->nickname);

    $profile = Profile::getKV('id', $user->id);

    $str = new ProfileNoticeStream($profile, $profile);

    $offset = 0;
    $limit  = 100;

    do {
        $notice = $str->getNotices($offset, $limit);
        while ($notice->fetch()) {
            try {
                printfv("Training notice %d...", $notice->id);
                $filter->trainOnError($notice, $category);
                $result = $filter->test($notice);
                $score = Spam_score::save($notice, $result);
                printfv("%s\n", ($result->isSpam) ? "SPAM" : "HAM");
            } catch (Exception $e) {
                printfnq("ERROR training notice %d\n: %s", $notice->id, $e->getMessage());
            }
        }
        $offset += $notice->N;
    } while ($notice->N > 0);
}

try {
    $filter = null;
    Event::handle('GetSpamFilter', array(&$filter));
    if (empty($filter)) {
        throw new Exception(_("No spam filter."));
    }
    $user = getUser();
    $category = get_option_value('t', 'category');
    if ($category !== SpamFilter::HAM &&
        $category !== SpamFilter::SPAM) {
        throw new Exception(_("No such category."));
    }
    trainUser($filter, $user, $category);
} catch (Exception $e) {
    print $e->getMessage()."\n";
    exit(1);
}


code:
<?php
/**
 * GNU social - a federating social network
 *
 * Plugin that handles activity verb interact (like 'favorite' etc.)
 *
 * PHP version 5
 *
 * LICENCE: This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @category  Plugin
 * @package   GNUsocial
 * @author    Mikael Nordfeldth <mmn@hethane.se>
 * @copyright 2014 Free Software Foundation http://fsf.org
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link      https://www.gnu.org/software/social/
 */

if (!defined('GNUSOCIAL')) { exit(1); }

class ActivityVerbPlugin extends Plugin
{
    const PLUGIN_VERSION = '2.0.0';

    public function onRouterInitialized(URLMapper $m)
    {
        $m->connect('notice/:id/:verb',
                    array('action' => 'activityverb'),
                    array('id'     => '[0-9]+',
                          'verb'   => '[a-z]+'));
        $m->connect('activity/:id/:verb',
                    array('action' => 'activityverb'),
                    array('id'     => '[0-9]+',
                          'verb'   => '[a-z]+'));
    }

    public function onPluginVersion(array &$versions)
    {
        $versions[] = array('name' => 'Activity Verb',
                            'version' => self::PLUGIN_VERSION,
                            'author' => 'Mikael Nordfeldth',
                            'homepage' => 'https://www.gnu.org/software/social/',
                            'rawdescription' =>
                            // TRANS: Plugin description.
                            _m('Adds more standardized verb handling for activities.'));
        return true;
    }
}


code:
<?php
/**
 * GNU social - a federating social network
 *
 * Class for deleting a notice
 *
 * PHP version 5
 *
 * LICENCE: This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @category  Plugin
 * @package   GNUsocial
 * @author    Mikael Nordfeldth <mmn@hethane.se>
 * @copyright 2015 Free Software Foundaction, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link      https://gnu.io/social
 */

if (!defined('GNUSOCIAL')) { exit(1); }

class ActivityverbAction extends ManagedAction
{
    protected $needLogin = true;
    protected $canPost   = true;

    protected $verb      = null;

    public function title()
    {
        $title = null;
        Event::handle('ActivityVerbTitle', array($this, $this->verb, $this->notice, $this->scoped, &$title));
        return $title;
    }

    protected function doPreparation()
    {
        $this->verb = $this->trimmed('verb');
        if (empty($this->verb)) {
            throw new ServerException('A verb has not been specified.');
        }

        $this->notice = Notice::getByID($this->trimmed('id'));

        if (!$this->notice->inScope($this->scoped)) {
            // TRANS: %1$s is a user nickname, %2$d is a notice ID (number).
            throw new ClientException(sprintf(_('%1$s has no access to notice %2$d.'),
                                        $this->scoped->getNickname(), $this->notice->getID()), 403);
        }

        Event::handle('ActivityVerbDoPreparation', array($this, $this->verb, $this->notice, $this->scoped));
    }

    protected function doPost()
    {
        if (Event::handle('ActivityVerbDoPost', array($this, $this->verb, $this->notice, $this->scoped))) {
            // TRANS: Error when a POST method for an activity verb has not been handled by a plugin.
            throw new ClientException(sprintf(_('Could not handle POST for verb "%1$s".'), $this->verb));
        }
    }

    protected function showContent()
    {
        if (Event::handle('ActivityVerbShowContent', array($this, $this->verb, $this->notice, $this->scoped))) {
            // TRANS: Error when a page for an activity verb has not been handled by a plugin.
            $this->element('div', 'error', sprintf(_('Could not show content for verb "%1$s".'), $this->verb));
        }
    }
}


code:
<?php
/*
 * GNU Social - a federating social network
 * Copyright (C) 2014, Free Software Foundation, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

if (!defined('GNUSOCIAL')) { exit(1); }

/**
 * @package     Activity
 * @maintainer  Mikael Nordfeldth <mmn@hethane.se>
 */
abstract class ActivityVerbHandlerPlugin extends ActivityHandlerPlugin
{
    public function onActivityVerbTitle(ManagedAction $action, $verb, Notice $target, Profile $scoped, &$title)
    {
        if (!$this->isMyVerb($verb)) {
            return true;
        }

        $title = $this->getActionTitle($action, $verb, $target, $scoped);
        return false;
    }
    abstract protected function getActionTitle(ManagedAction $action, $verb, Notice $target, Profile $scoped);

    public function onActivityVerbShowContent(ManagedAction $action, $verb, Notice $target, Profile $scoped)
    {
        if (!$this->isMyVerb($verb)) {
            return true;
        }

        return $this->showActionContent($action, $verb, $target, $scoped);
    }
    protected function showActionContent(ManagedAction $action, $verb, Notice $target, Profile $scoped)
    {
        if (!GNUsocial::isAjax()) {
            $nl = new NoticeListItem($target, $action, array('options'=>false, 'attachments'=>false,
                                                             'item_tag'=>'div', 'id_prefix'=>'fave'));
            $nl->show();
        }

        $form = $this->getActivityForm($action, $verb, $target, $scoped);
        $form->show();

        return false;
    }

    public function onActivityVerbDoPreparation(ManagedAction $action, $verb, Notice $target, Profile $scoped)
    {
        if (!$this->isMyVerb($verb)) {
            return true;
        }

        return $this->doActionPreparation($action, $verb, $target, $scoped);
    }
    abstract protected function doActionPreparation(ManagedAction $action, $verb, Notice $target, Profile $scoped);

    public function onActivityVerbDoPost(ManagedAction $action, $verb, Notice $target, Profile $scoped)
    {
        if (!$this->isMyVerb($verb)) {
            return true;
        }

        return $this->doActionPost($action, $verb, $target, $scoped);
    }
    abstract protected function doActionPost(ManagedAction $action, $verb, Notice $target, Profile $scoped);

    abstract protected function getActivityForm(ManagedAction $action, $verb, Notice $target, Profile $scoped);
}


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-06-08 18:20+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#. TRANS: Plugin description.
#: ActivityVerbPlugin.php:56
msgid "Adds more standardized verb handling for activities."
msgstr ""


code:
<?php
/*
 * GNU Social - a federating social network
 * Copyright (C) 2014, Free Software Foundation, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

if (!defined('GNUSOCIAL')) { exit(1); }

/**
 * @package     Activity
 * @maintainer  Mikael Nordfeldth <mmn@hethane.se>
 */
class ActivityVerbPostPlugin extends ActivityVerbHandlerPlugin
{
    const PLUGIN_VERSION = '2.0.0';

    // TODO: Implement a "fallback" feature which can handle anything _as_ an activityobject "note"

    public function tag()
    {
        return 'post';
    }

    public function types()
    {
        return array(ActivityObject::ARTICLE,
                     ActivityObject::BLOGENTRY,
                     ActivityObject::NOTE,
                     ActivityObject::STATUS,
                     ActivityObject::COMMENT,
                    // null,    // if we want to follow the original Ostatus_profile::processActivity code
                    );
    }

    public function verbs()
    {
        return array(ActivityVerb::POST);
    }

    // FIXME: Set this to abstract public in lib/activityhandlerplugin.php when all plugins have migrated!
    protected function saveObjectFromActivity(Activity $act, Notice $stored, array $options=array())
    {
        assert($this->isMyActivity($act));

        $stored->object_type = ActivityUtils::resolveUri($act->objects[0]->type);
        if (common_valid_http_url($act->objects[0]->link)) {
            $stored->url = $act->objects[0]->link;
        }

        // We don't have to do just about anything for a new, remote notice since the fields
        // are handled in the main Notice::saveActivity function. Such as content, attachments,
        // parent/conversation etc.

        // By returning true here instead of something that evaluates
        // to false, we show that we have processed everything properly.
        return true;
    }

    public function activityObjectFromNotice(Notice $notice)
    {
        $object = new ActivityObject();

        $object->type    = $notice->object_type ?: ActivityObject::NOTE;
        $object->id      = $notice->getUri();
        $object->title   = sprintf('New %1$s by %2$s', ActivityObject::canonicalType($object->type), $notice->getProfile()->getNickname());
        $object->content = $notice->getRendered();
        $object->link    = $notice->getUrl();

        $object->extra[] = array('statusnet:notice_id', null, $notice->getID());

        return $object;
    }

    public function deleteRelated(Notice $notice)
    {
        // No action needed as the table for data storage _is_ the notice table.
        return true;
    }

    /**
     * Command stuff
     */

    // FIXME: Move stuff from lib/command.php to here just as with Share etc.

    /**
     * Layout stuff
     */

    protected function showNoticeContent(Notice $stored, HTMLOutputter $out, Profile $scoped=null)
    {
        $out->raw($stored->getRendered());
    }

    protected function getActionTitle(ManagedAction $action, $verb, Notice $target, Profile $scoped)
    {
        // return page title
    }

    protected function doActionPreparation(ManagedAction $action, $verb, Notice $target, Profile $scoped)
    {
        // prepare Action?
    }

    protected function doActionPost(ManagedAction $action, $verb, Notice $target, Profile $scoped)
    {
        // handle POST
    }

    protected function getActivityForm(ManagedAction $action, $verb, Notice $target, Profile $scoped)
    {
        return new NoticeForm($action, array());
    }

    public function onPluginVersion(array &$versions)
    {
        $versions[] = array('name' => 'Post verb',
                            'version' => self::PLUGIN_VERSION,
                            'author' => 'Mikael Nordfeldth',
                            'homepage' => 'https://gnu.io/',
                            'rawdescription' =>
                            // TRANS: Plugin description.
                            _m('Post handling with ActivityStreams.'));

        return true;
    }
}


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-06-08 18:20+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#. TRANS: Plugin description.
#: ActivityVerbPostPlugin.php:138
msgid "Post handling with ActivityStreams."
msgstr ""


code:
<?php
/**
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2010, StatusNet, Inc.
 *
 * A plugin to allow anonymous users to favorite notices
 *
 * If you want to keep certain users from having anonymous faving for their
 * notices initialize the plugin with the restricted array, e.g.:
 *
 * addPlugin(
 *     'AnonymousFave',
 *     array('restricted' => array('spock', 'kirk', 'bones'))
 * );
 *
 *
 * PHP version 5
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @category  Plugin
 * @package   StatusNet
 * @author    Zach Copley <zach@status.net>
 * @copyright 2010 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    // This check helps protect against security problems;
    // your code file can't be executed directly from the web.
    exit(1);
}

define('ANONYMOUS_FAVE_PLUGIN_VERSION', '0.1.0');

/**
 * Anonymous Fave plugin to allow anonymous (not logged in) users
 * to favorite notices
 *
 * @category  Plugin
 * @package   StatusNet
 * @author    Zach Copley <zach@status.net>
 * @copyright 2010 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */
class AnonymousFavePlugin extends Plugin
{
    // Array of users who should not have anon faving. The default is
    // that anonymous faving is allowed for all users.
    public $restricted = array();

    function onArgsInitialize() {
        // We always want a session because we're tracking anon users
        common_ensure_session();
    }

    /**
     * Hook for ensuring our tables are created
     *
     * Ensures the fave_tally table is there and has the right columns
     *
     * @return boolean hook return
     */

    function onCheckSchema()
    {
        $schema = Schema::get();

        // For storing total number of times a notice has been faved
        $schema->ensureTable('fave_tally', Fave_tally::schemaDef());

        return true;
    }

    function onEndShowHTML($action)
    {
        if (!common_logged_in()) {
            // Set a place to return to when submitting forms
            common_set_returnto($action->selfUrl());
        }
    }

    function onEndShowScripts($action)
    {
        // Setup ajax calls for favoriting. Usually this is only done when
        // a user is logged in.
        $action->inlineScript('SN.U.NoticeFavor();');
    }

    function onStartInitializeRouter($m)
    {
        $m->connect('main/anonfavor', array('action' => 'AnonFavor'));
        $m->connect('main/anondisfavor', array('action' => 'AnonDisFavor'));

        return true;
    }

    function onStartShowNoticeOptions($item)
    {
        if (!common_logged_in()) {
            $item->out->elementStart('div', 'notice-options');
            $item->showFaveForm();
            $item->out->elementEnd('div');
        }

        return true;
    }

    function onStartShowFaveForm($item)
    {
        if (!common_logged_in() && $this->hasAnonFaving($item)) {

            $profile = AnonymousFavePlugin::getAnonProfile();
            if ($profile instanceof Profile) {
                if (Fave::existsForProfile($item->notice, $profile)) {
                    $disfavor = new AnonDisFavorForm($item->out, $item->notice);
                    $disfavor->show();
                } else {
                    $favor = new AnonFavorForm($item->out, $item->notice);
                    $favor->show();
                }
            }
        }

        return true;
    }

    function onEndFavorNoticeForm($form, $notice)
    {
        $this->showTally($form->out, $notice);
    }

    function onEndDisFavorNoticeForm($form, $notice)
    {
        $this->showTally($form->out, $notice);
    }

    function showTally($out, $notice)
    {
        $tally = Fave_tally::ensureTally($notice->id);

        if (!empty($tally)) {
            $out->elementStart(
                'div',
                array(
                    'id' => 'notice-' . $notice->id . '-tally',
                    'class' => 'notice-tally'
                )
            );
            $out->elementStart('span', array('class' => 'fave-tally-title'));
            // TRANS: Label for tally for number of times a notice was favored.
            $out->raw(sprintf(_m("Favored")));
            $out->elementEnd('span');
            $out->elementStart('span', array('class' => 'fave-tally'));
            $out->raw($tally->count);
            $out->elementEnd('span');
            $out->elementEnd('div');
        }
    }

    function onEndFavorNotice($profile, $notice)
    {
        $tally = Fave_tally::increment($notice->id);
    }

    function onEndDisfavorNotice($profile, $notice)
    {
        $tally = Fave_tally::decrement($notice->id);
    }

    static function createAnonProfile()
    {
        // Get the anon user's IP, and turn it into a nickname
        list($proxy, $ip) = common_client_ip();

        // IP + time + random number should help to avoid collisions
        $baseNickname = $ip . '-' . time() . '-' . common_random_hexstr(5);

        $profile = new Profile();
        $profile->nickname = $baseNickname;
        $id = $profile->insert();

        if (!$id) {
            // TRANS: Server exception.
            throw new ServerException(_m("Could not create anonymous user session."));
        }

        // Stick the Profile ID into the nickname
        $orig = clone($profile);

        $profile->nickname = 'anon-' . $id . '-' . $baseNickname;
        $result = $profile->update($orig);

        if (!$result) {
            // TRANS: Server exception.
            throw new ServerException(_m("Could not create anonymous user session."));
        }

        common_log(
            LOG_INFO,
            "AnonymousFavePlugin - created profile for anonymous user from IP: "
            . $ip
            . ', nickname = '
            . $profile->nickname
        );

        return $profile;
    }

    static function getAnonProfile()
    {

        $token = $_SESSION['anon_token'];
        $anon = base64_decode($token);

        $profile = null;

        if (!empty($anon) && substr($anon, 0, 5) == 'anon-') {
            $parts = explode('-', $anon);
            $id = $parts[1];
            // Do Profile lookup by ID instead of nickname for safety/performance
            $profile = Profile::getKV('id', $id);
        } else {
            $profile = AnonymousFavePlugin::createAnonProfile();
            // Obfuscate so it's hard to figure out the Profile ID
            $_SESSION['anon_token'] = base64_encode($profile->nickname);
        }

        return $profile;
    }

    /**
     * Determine whether a given NoticeListItem should have the
     * anonymous fave/disfave form
     *
     * @param NoticeListItem $item
     *
     * @return boolean false if the profile associated with the notice is
     *                       in the list of restricted profiles, otherwise
     *                       return true
     */
    function hasAnonFaving($item)
    {
        $profile = Profile::getKV('id', $item->notice->profile_id);
        if (in_array($profile->nickname, $this->restricted)) {
            return false;
        }

        return true;
    }

    /**
     * Provide plugin version information.
     *
     * This data is used when showing the version page.
     *
     * @param array &$versions array of version data arrays; see EVENTS.txt
     *
     * @return boolean hook value
     */
    function onPluginVersion(array &$versions)
    {
        $url = 'https://git.gnu.io/gnu/gnu-social/tree/master/plugins/AnonymousFave';

        $versions[] = array('name' => 'AnonymousFave',
            'version' => ANONYMOUS_FAVE_PLUGIN_VERSION,
            'author' => 'Zach Copley',
            'homepage' => $url,
            'rawdescription' =>
            // TRANS: Plugin description.
            _m('Allow anonymous users to favorite notices.'));

        return true;
    }
}


code:
The Anonymous Fave plugin allows anonymous (not logged in) users to favorite notices

Installation
============
add "addPlugin('AnonymousFave');"
to the bottom of your config.php

Settings
========
none

Example
=======
addPlugin('AnonymousFave');

path: plugins/AnonymousFave/README


code:
<?php
/**
 * Anonymous disfavor action
 *
 * PHP version 5
 *
 * @category Action
 * @package  StatusNet
 * @author   Zach Copley <zach@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 *
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2010, StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

if (!defined('GNUSOCIAL')) { exit(1); }

/**
 * Anonymous disfavor class
 *
 * @category Action
 * @package  StatusNet
 * @author   Zach Copley <zach@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 */
class AnonDisfavorAction extends RedirectingAction
{
    /**
     * Class handler.
     *
     * @param array $args query arguments
     *
     * @return void
     */
    function handle()
    {
        parent::handle();

        $profile = AnonymousFavePlugin::getAnonProfile();

        if (empty($profile) || $_SERVER['REQUEST_METHOD'] != 'POST') {
            $this->clientError(
                // TRANS: Client error.
                _m('Could not disfavor notice! Please make sure your browser has cookies enabled.')
            );
        }

        $id     = $this->trimmed('notice');
        $notice = Notice::getKV($id);
        $token  = $this->checkSessionToken();

        $fave            = new Fave();
        $fave->user_id   = $profile->id;
        $fave->notice_id = $notice->id;

        if (!$fave->find(true)) {
            throw new NoResultException($fave);
        }

        $result = $fave->delete();

        if (!$result) {
            common_log_db_error($fave, 'DELETE', __FILE__);
            // TRANS: Server error.
            $this->serverError(_m('Could not delete favorite.'));
        }

        Fave::blowCacheForProfileId($profile->id);

        if ($this->boolean('ajax')) {
            $this->startHTML('text/xml;charset=utf-8');
            $this->elementStart('head');
            // TRANS: Title.
            $this->element('title', null, _m('Add to favorites'));
            $this->elementEnd('head');
            $this->elementStart('body');
            $favor = new AnonFavorForm($this, $notice);
            $favor->show();
            $this->elementEnd('body');
            $this->endHTML();
        } else {
            $this->returnToPrevious();
        }
    }

    /**
     * If returnto not set, return to the public stream.
     *
     * @return string URL
     */
    function defaultReturnTo()
    {
        $returnto = common_get_returnto();
        if (empty($returnto)) {
            return common_local_url('public');
        } else {
            return $returnto;
        }
    }
}


code:
<?php
/**
 * Anonyous favor action
 *
 * PHP version 5
 *
 * @category Action
 * @package  StatusNet
 * @author   Zach Copley <zach@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 *
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2010, StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

if (!defined('GNUSOCIAL')) { exit(1); }

/**
 * Anonymous favor class
 *
 * @category Action
 * @package  StatusNet
 * @author   Zach Copley <zach@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 */
class AnonFavorAction extends RedirectingAction
{
    /**
     * Class handler.
     *
     * @param array $args query arguments
     *
     * @return void
     */
    function handle()
    {
        parent::handle();

        $profile = AnonymousFavePlugin::getAnonProfile();

        if (empty($profile) || $_SERVER['REQUEST_METHOD'] != 'POST') {
            // TRANS: Client error.
            $this->clientError(_m('Could not favor notice! Please make sure your browser has cookies enabled.'));
        }

        $id     = $this->trimmed('notice');
        $notice = Notice::getKV($id);
        $token  = $this->checkSessionToken();

        // Throws exception
        $stored = Fave::addNew($profile, $notice);

        if ($this->boolean('ajax')) {
            $this->startHTML('text/xml;charset=utf-8');
            $this->elementStart('head');
            // TRANS: Title.
            $this->element('title', null, _m('Disfavor favorite'));
            $this->elementEnd('head');
            $this->elementStart('body');
            $disfavor = new AnonDisFavorForm($this, $notice);
            $disfavor->show();
            $this->elementEnd('body');
            $this->endHTML();
        } else {
            $this->returnToPrevious();
        }
    }

    /**
     * If returnto not set, return to the public stream.
     *
     * @return string URL
     */
    function defaultReturnTo()
    {
        $returnto = common_get_returnto();
        if (empty($returnto)) {
            return common_local_url('public');
        } else {
            return $returnto;
        }
    }
}


code:
<?php
/**
 * Data class for favorites talley
 *
 * PHP version 5
 *
 * @category Data
 * @package  StatusNet
 * @author   Zach Copley <zach@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 *
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2010, StatusNet, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

if (!defined('STATUSNET')) {
    exit(1);
}

require_once INSTALLDIR . '/classes/Memcached_DataObject.php';

/**
 * Data class for favorites tally
 *
 * A class representing a total number of times a notice has been favored
 *
 * @category Action
 * @package  StatusNet
 * @author   Zach Copley <zach@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 */
class Fave_tally extends Managed_DataObject
{
    ###START_AUTOCODE
    /* the code below is auto generated do not remove the above tag */

    public $__table = 'fave_tally';          // table name
    public $notice_id;                       // int(4)  primary_key not_null
    public $count;                           // int(4)  not_null
    public $created;                         // datetime()   not_null
    public $modified;                        // datetime   not_null default_0000-00-00%2000%3A00%3A00

    /* the code above is auto generated do not remove the tag below */
    ###END_AUTOCODE

    public static function schemaDef()
    {
        return array(
            'fields' => array(
                'notice_id' => array('type' => 'int', 'not null' => true, 'description' => 'notice id'),
                'count' => array('type' => 'int', 'not null' => true, 'description' => 'the fave tally count'),
                'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
            ),
            'primary key' => array('notice_id'),
            'foreign keys' => array(
                'fave_tally_notice_id_fkey' => array('notice', array('notice_id' => 'id')),
            ),
        );
    }

    /**
     * Increment a notice's tally
     *
     * @param integer $noticeID ID of notice we're tallying
     *
     * @return Fave_tally $tally the tally data object
     */
    static function increment($noticeID)
    {
        $tally = Fave_tally::ensureTally($noticeID);

        $orig = clone($tally);
        $tally->count++;
        $result = $tally->update($orig);

        if (!$result) {
            $msg = sprintf(
                // TRANS: Server exception.
                // TRANS: %d is the notice ID (number).
                _m("Could not update favorite tally for notice ID %d."),
                $noticeID
            );
            throw new ServerException($msg);
        }

        return $tally;
    }

    /**
     * Decrement a notice's tally
     *
     * @param integer $noticeID ID of notice we're tallying
     *
     * @return Fave_tally $tally the tally data object
     */
    static function decrement($noticeID)
    {
        $tally = Fave_tally::ensureTally($noticeID);

        if ($tally->count > 0) {
            $orig = clone($tally);
            $tally->count--;
            $result = $tally->update($orig);

            if (!$result) {
                $msg = sprintf(
                    // TRANS: Server exception.
                    // TRANS: %d is the notice ID (number).
                    _m("Could not update favorite tally for notice ID %d."),
                    $noticeID
                );
                throw new ServerException($msg);
            }
        }

        return $tally;
    }

    /**
     * Ensure a tally exists for a given notice. If we can't find
     * one create one with the total number of existing faves
     *
     * @param integer $noticeID
     *
     * @return Fave_tally the tally data object
     */
    static function ensureTally($noticeID)
    {
        $tally = Fave_tally::getKV('notice_id', $noticeID);

        if (!$tally) {
            $tally = new Fave_tally();
            $tally->notice_id = $noticeID;
            $tally->count = Fave_tally::countExistingFaves($noticeID);
            $result = $tally->insert();
            if (!$result) {
                $msg = sprintf(
                    // TRANS: Server exception.
                    // TRANS: %d is the notice ID (number).
                    _m("Could not create favorite tally for notice ID %d."),
                    $noticeID
                );
                throw new ServerException($msg);
            }
        }

        return $tally;
    }

    /**
     * Count the number of faves a notice already has. Used to initalize
     * a tally for a notice.
     *
     * @param integer $noticeID ID of the notice to count faves for
     *
     * @return integer $total total number of time the notice has been favored
     */
    static function countExistingFaves($noticeID)
    {
        $fave = new Fave();
        $fave->notice_id = $noticeID;
        $total = $fave->count();
        return $total;
    }
}


code:
<?php
/**
 * StatusNet, the distributed open-source microblogging tool
 *
 * Form for disfavoring a notice anonymously
 *
 * PHP version 5
 *
 * LICENCE: This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @category  Form
 * @package   StatusNet
 * @author    Zach Copley <zach@status.net>
 * @copyright 2010 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    exit(1);
}

require_once INSTALLDIR.'/lib/form.php';

/**
 * Form for disfavoring a notice anonymously
 *
 * @category Form
 * @package  StatusNet
 * @author   Zach Copley <zach@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link     http://status.net/
 *
 * @see      DisFavorForm
 */
class AnonDisfavorForm extends DisFavorForm
{
    /**
     * Constructor
     *
     * @param HTMLOutputter $out    output channel
     * @param Notice        $notice notice to disfavor
     */
    function __construct($out=null, $notice=null)
    {
        parent::__construct($out, $notice);
    }

    /**
     * Action of the form
     *
     * @return string URL of the action
     */
    function action()
    {
        return common_local_url('AnonDisFavor');
    }
}


code:
<?php
/**
 * StatusNet, the distributed open-source microblogging tool
 *
 * Form for favoring a notice anonymously
 *
 * PHP version 5
 *
 * LICENCE: This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @category  Form
 * @package   StatusNet
 * @author    Zach Copley <zach@status.net>
 * @copyright 20010 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    exit(1);
}

require_once INSTALLDIR.'/lib/form.php';

/**
 * Form for favoring a notice anonymously
 *
 * @category Form
 * @package  StatusNet
 * @author   Zach Copley <zach@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link     http://status.net/
 *
 * @see      AnonDisfavorForm
 */
class AnonFavorForm extends FavorForm
{
    /**
     * Constructor
     *
     * @param HTMLOutputter $out    output channel
     * @param Notice        $notice notice to favor
     */
    function __construct($out=null, $notice=null)
    {
        parent::__construct($out, $notice);
    }

    /**
     * Action of the form
     *
     * @return string URL of the action
     */
    function action()
    {
        return common_local_url('AnonFavor');
    }
}


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-06-08 18:20+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#. TRANS: Client error.
#: actions/anondisfavor.php:59
msgid ""
"Could not disfavor notice! Please make sure your browser has cookies enabled."
msgstr ""

#. TRANS: Server error.
#: actions/anondisfavor.php:80
msgid "Could not delete favorite."
msgstr ""

#. TRANS: Title.
#: actions/anondisfavor.php:89
msgid "Add to favorites"
msgstr ""

#. TRANS: Client error.
#: actions/anonfavor.php:58
msgid ""
"Could not favor notice! Please make sure your browser has cookies enabled."
msgstr ""

#. TRANS: Title.
#: actions/anonfavor.php:72
msgid "Disfavor favorite"
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:96 classes/Fave_tally.php:125
#, php-format
msgid "Could not update favorite tally for notice ID %d."
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:156
#, php-format
msgid "Could not create favorite tally for notice ID %d."
msgstr ""

#. TRANS: Label for tally for number of times a notice was favored.
#: AnonymousFavePlugin.php:165
msgid "Favored"
msgstr ""

#. TRANS: Server exception.
#: AnonymousFavePlugin.php:198 AnonymousFavePlugin.php:209
msgid "Could not create anonymous user session."
msgstr ""

#. TRANS: Plugin description.
#: AnonymousFavePlugin.php:284
msgid "Allow anonymous users to favorite notices."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:33+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Afrikaans (http://www.transifex.com/gnu-social/gnu-social/language/af/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: af\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client error.
#: actions/anonfavor.php:58
msgid ""
"Could not favor notice! Please make sure your browser has cookies enabled."
msgstr ""

#. TRANS: Client error.
#: actions/anonfavor.php:67
msgid "This notice is already a favorite!"
msgstr ""

#. TRANS: Server error.
#: actions/anonfavor.php:73
msgid "Could not create favorite."
msgstr ""

#. TRANS: Title.
#: actions/anonfavor.php:82
msgid "Disfavor favorite"
msgstr ""

#. TRANS: Client error.
#: actions/anondisfavor.php:59
msgid ""
"Could not disfavor notice! Please make sure your browser has cookies "
"enabled."
msgstr ""

#. TRANS: Server error.
#: actions/anondisfavor.php:80
msgid "Could not delete favorite."
msgstr ""

#. TRANS: Title.
#: actions/anondisfavor.php:89
msgid "Add to favorites"
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:96 classes/Fave_tally.php:125
#, php-format
msgid "Could not update favorite tally for notice ID %d."
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:156
#, php-format
msgid "Could not create favorite tally for notice ID %d."
msgstr ""

#. TRANS: Label for tally for number of times a notice was favored.
#: AnonymousFavePlugin.php:165
msgid "Favored"
msgstr ""

#. TRANS: Server exception.
#: AnonymousFavePlugin.php:198 AnonymousFavePlugin.php:209
msgid "Could not create anonymous user session."
msgstr ""

#. TRANS: Plugin description.
#: AnonymousFavePlugin.php:284
msgid "Allow anonymous users to favorite notices."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2011 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:40+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Arabic (http://www.transifex.com/gnu-social/gnu-social/language/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"

#. TRANS: Client error.
#: actions/anonfavor.php:58
msgid ""
"Could not favor notice! Please make sure your browser has cookies enabled."
msgstr ""

#. TRANS: Client error.
#: actions/anonfavor.php:67
msgid "This notice is already a favorite!"
msgstr "هذا الإشعار مفضل سابقا!"

#. TRANS: Server error.
#: actions/anonfavor.php:73
msgid "Could not create favorite."
msgstr "تعذّر إنشاء مفضلة."

#. TRANS: Title.
#: actions/anonfavor.php:82
msgid "Disfavor favorite"
msgstr "إلغاء التفضيل"

#. TRANS: Client error.
#: actions/anondisfavor.php:59
msgid ""
"Could not disfavor notice! Please make sure your browser has cookies "
"enabled."
msgstr ""

#. TRANS: Server error.
#: actions/anondisfavor.php:80
msgid "Could not delete favorite."
msgstr "تعذّر حذف المفضلة."

#. TRANS: Title.
#: actions/anondisfavor.php:89
msgid "Add to favorites"
msgstr "أضف إلى المفضلات"

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:96 classes/Fave_tally.php:125
#, php-format
msgid "Could not update favorite tally for notice ID %d."
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:156
#, php-format
msgid "Could not create favorite tally for notice ID %d."
msgstr ""

#. TRANS: Label for tally for number of times a notice was favored.
#: AnonymousFavePlugin.php:165
msgid "Favored"
msgstr "مفضل"

#. TRANS: Server exception.
#: AnonymousFavePlugin.php:198 AnonymousFavePlugin.php:209
msgid "Could not create anonymous user session."
msgstr ""

#. TRANS: Plugin description.
#: AnonymousFavePlugin.php:284
msgid "Allow anonymous users to favorite notices."
msgstr "اسمح للمستخدمين المجهولين بتفضيل الإشعارات."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:33+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Arabic (Egypt) (http://www.transifex.com/gnu-social/gnu-social/language/ar_EG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ar_EG\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"

#. TRANS: Client error.
#: actions/anonfavor.php:58
msgid ""
"Could not favor notice! Please make sure your browser has cookies enabled."
msgstr ""

#. TRANS: Client error.
#: actions/anonfavor.php:67
msgid "This notice is already a favorite!"
msgstr ""

#. TRANS: Server error.
#: actions/anonfavor.php:73
msgid "Could not create favorite."
msgstr ""

#. TRANS: Title.
#: actions/anonfavor.php:82
msgid "Disfavor favorite"
msgstr ""

#. TRANS: Client error.
#: actions/anondisfavor.php:59
msgid ""
"Could not disfavor notice! Please make sure your browser has cookies "
"enabled."
msgstr ""

#. TRANS: Server error.
#: actions/anondisfavor.php:80
msgid "Could not delete favorite."
msgstr ""

#. TRANS: Title.
#: actions/anondisfavor.php:89
msgid "Add to favorites"
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:96 classes/Fave_tally.php:125
#, php-format
msgid "Could not update favorite tally for notice ID %d."
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:156
#, php-format
msgid "Could not create favorite tally for notice ID %d."
msgstr ""

#. TRANS: Label for tally for number of times a notice was favored.
#: AnonymousFavePlugin.php:165
msgid "Favored"
msgstr ""

#. TRANS: Server exception.
#: AnonymousFavePlugin.php:198 AnonymousFavePlugin.php:209
msgid "Could not create anonymous user session."
msgstr ""

#. TRANS: Plugin description.
#: AnonymousFavePlugin.php:284
msgid "Allow anonymous users to favorite notices."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:33+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Asturian (http://www.transifex.com/gnu-social/gnu-social/language/ast/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ast\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client error.
#: actions/anonfavor.php:58
msgid ""
"Could not favor notice! Please make sure your browser has cookies enabled."
msgstr ""

#. TRANS: Client error.
#: actions/anonfavor.php:67
msgid "This notice is already a favorite!"
msgstr ""

#. TRANS: Server error.
#: actions/anonfavor.php:73
msgid "Could not create favorite."
msgstr ""

#. TRANS: Title.
#: actions/anonfavor.php:82
msgid "Disfavor favorite"
msgstr ""

#. TRANS: Client error.
#: actions/anondisfavor.php:59
msgid ""
"Could not disfavor notice! Please make sure your browser has cookies "
"enabled."
msgstr ""

#. TRANS: Server error.
#: actions/anondisfavor.php:80
msgid "Could not delete favorite."
msgstr ""

#. TRANS: Title.
#: actions/anondisfavor.php:89
msgid "Add to favorites"
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:96 classes/Fave_tally.php:125
#, php-format
msgid "Could not update favorite tally for notice ID %d."
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:156
#, php-format
msgid "Could not create favorite tally for notice ID %d."
msgstr ""

#. TRANS: Label for tally for number of times a notice was favored.
#: AnonymousFavePlugin.php:165
msgid "Favored"
msgstr ""

#. TRANS: Server exception.
#: AnonymousFavePlugin.php:198 AnonymousFavePlugin.php:209
msgid "Could not create anonymous user session."
msgstr ""

#. TRANS: Plugin description.
#: AnonymousFavePlugin.php:284
msgid "Allow anonymous users to favorite notices."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2010 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:41+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Belarusian (Tarask) (http://www.transifex.com/gnu-social/gnu-social/language/be@tarask/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: be@tarask\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"

#. TRANS: Client error.
#: actions/anonfavor.php:58
msgid ""
"Could not favor notice! Please make sure your browser has cookies enabled."
msgstr "Немагчыма пазначыць паведамленьне як улюблёнае. Калі ласка, упэўніцеся ў тым, што ў Вашым браўзэры ўключаныя закладкі (cookie)."

#. TRANS: Client error.
#: actions/anonfavor.php:67
msgid "This notice is already a favorite!"
msgstr "Гэтае паведамленьне ўжо знаходзіцца ў ліку ўлюблёных!"

#. TRANS: Server error.
#: actions/anonfavor.php:73
msgid "Could not create favorite."
msgstr "Немагчыма стварыць як улюблёны."

#. TRANS: Title.
#: actions/anonfavor.php:82
msgid "Disfavor favorite"
msgstr "Выдаліць з улюблёных"

#. TRANS: Client error.
#: actions/anondisfavor.php:59
msgid ""
"Could not disfavor notice! Please make sure your browser has cookies "
"enabled."
msgstr "Немагчыма выдаліць паведамленьне са сьпісу ўлюблёных! Калі ласка, упэўніцеся, што ў Вашым браўзэры дазволеныя закладкі (cookie)."

#. TRANS: Server error.
#: actions/anondisfavor.php:80
msgid "Could not delete favorite."
msgstr "Немагчыма выдаліць са сьпісу ўлюблёных."

#. TRANS: Title.
#: actions/anondisfavor.php:89
msgid "Add to favorites"
msgstr "Дадаць ва ўлюблёныя"

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:96 classes/Fave_tally.php:125
#, php-format
msgid "Could not update favorite tally for notice ID %d."
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:156
#, php-format
msgid "Could not create favorite tally for notice ID %d."
msgstr ""

#. TRANS: Label for tally for number of times a notice was favored.
#: AnonymousFavePlugin.php:165
msgid "Favored"
msgstr "Улюблёнае"

#. TRANS: Server exception.
#: AnonymousFavePlugin.php:198 AnonymousFavePlugin.php:209
msgid "Could not create anonymous user session."
msgstr ""

#. TRANS: Plugin description.
#: AnonymousFavePlugin.php:284
msgid "Allow anonymous users to favorite notices."
msgstr "Дазволіць ананімным карыстальнікам дадаваць паведамленьні ў улюблёныя."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:33+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Bulgarian (http://www.transifex.com/gnu-social/gnu-social/language/bg/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: bg\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client error.
#: actions/anonfavor.php:58
msgid ""
"Could not favor notice! Please make sure your browser has cookies enabled."
msgstr ""

#. TRANS: Client error.
#: actions/anonfavor.php:67
msgid "This notice is already a favorite!"
msgstr ""

#. TRANS: Server error.
#: actions/anonfavor.php:73
msgid "Could not create favorite."
msgstr ""

#. TRANS: Title.
#: actions/anonfavor.php:82
msgid "Disfavor favorite"
msgstr ""

#. TRANS: Client error.
#: actions/anondisfavor.php:59
msgid ""
"Could not disfavor notice! Please make sure your browser has cookies "
"enabled."
msgstr ""

#. TRANS: Server error.
#: actions/anondisfavor.php:80
msgid "Could not delete favorite."
msgstr ""

#. TRANS: Title.
#: actions/anondisfavor.php:89
msgid "Add to favorites"
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:96 classes/Fave_tally.php:125
#, php-format
msgid "Could not update favorite tally for notice ID %d."
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:156
#, php-format
msgid "Could not create favorite tally for notice ID %d."
msgstr ""

#. TRANS: Label for tally for number of times a notice was favored.
#: AnonymousFavePlugin.php:165
msgid "Favored"
msgstr ""

#. TRANS: Server exception.
#: AnonymousFavePlugin.php:198 AnonymousFavePlugin.php:209
msgid "Could not create anonymous user session."
msgstr ""

#. TRANS: Plugin description.
#: AnonymousFavePlugin.php:284
msgid "Allow anonymous users to favorite notices."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-05 17:33+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Bengali (India) (http://www.transifex.com/gnu-social/gnu-social/language/bn_IN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: bn_IN\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client error.
#: actions/anonfavor.php:58
msgid ""
"Could not favor notice! Please make sure your browser has cookies enabled."
msgstr ""

#. TRANS: Client error.
#: actions/anonfavor.php:67
msgid "This notice is already a favorite!"
msgstr ""

#. TRANS: Server error.
#: actions/anonfavor.php:73
msgid "Could not create favorite."
msgstr ""

#. TRANS: Title.
#: actions/anonfavor.php:82
msgid "Disfavor favorite"
msgstr ""

#. TRANS: Client error.
#: actions/anondisfavor.php:59
msgid ""
"Could not disfavor notice! Please make sure your browser has cookies "
"enabled."
msgstr ""

#. TRANS: Server error.
#: actions/anondisfavor.php:80
msgid "Could not delete favorite."
msgstr ""

#. TRANS: Title.
#: actions/anondisfavor.php:89
msgid "Add to favorites"
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:96 classes/Fave_tally.php:125
#, php-format
msgid "Could not update favorite tally for notice ID %d."
msgstr ""

#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: classes/Fave_tally.php:156
#, php-format
msgid "Could not create favorite tally for notice ID %d."
msgstr ""

#. TRANS: Label for tally for number of times a notice was favored.
#: AnonymousFavePlugin.php:165
msgid "Favored"
msgstr ""

#. TRANS: Server exception.
#: AnonymousFavePlugin.php:198 AnonymousFavePlugin.php:209
msgid "Could not create anonymous user session."
msgstr ""

#. TRANS: Plugin description.
#: AnonymousFavePlugin.php:284
msgid "Allow anonymous users to favorite notices."
msgstr ""