2 Commits

Author SHA1 Message Date
Diogo Cordeiro
ea647d80ee [VersionBump] Patch e2e3c1cdcd 2020-06-11 21:52:18 +01:00
Alexei Sorokin
e2e3c1cdcd [CORE] Another fix for the inboxnoticestream query 2020-06-10 13:28:33 +03:00
5997 changed files with 133212 additions and 400706 deletions

1
.gitignore vendored
View File

@@ -16,4 +16,3 @@ TODO.rym
config-*.php config-*.php
good-config.php good-config.php
*.mo *.mo
/vendor/

View File

@@ -1,109 +0,0 @@
# GNU social - Log of Changes
## 2.0.0 - THIS. IS. GNU SOCIAL!!! [WIP]
Release name chosen after 300 by Frank Miller where the main protagonist Leonidas, King of Sparta, declines peace with the
Persians, after being disrespected, by shouting at the Persian Messenger "This is Sparta!" and kicking him into a large well
proceeded by the killing of the other Persian messengers.
### Major changes from previous release:
Load and Storage:
- New media handling system
- GS is now structurely divided in includes and public
- OEmbed upgraded to Embed plugin (Now we provide Open Graph information too)
- Added Redis based caching and queues
- Improved memcached support
Federation:
- Added ActivityPub support
- RemoteFollow: Remote follow ActivityPub and OStatus remote actors via the click of a button
- ActorLists: Allow to create collections of Actors and to interact with them - supports both OStatus and ActivityPub
- The Free Network: Automagically migrate internal remote profiles between Free Network protocols
- Enabled the search box to import remote notices and profiles
- Improvements on Nodeinfo (and new route)
General:
- Composer was integrated
Modules:
- Restored built-in plugins
- New modules system: core plugins and plugins physically separated
- Bug fixes of core modules logic
- Improved plugin management tool (now all available plugins are shown and third party can be uploaded and deleted)
## v1.20.9release - The Invicta Crusade
Dropped Support for PHP5.6.x. Minimum PHP version now is 7.0.0.
Release name chosen after Porto city. Porto is one of the oldest cities in Europe and thanks to its fierce resistance during
two battles and sieges in history, it has earned the epithet of Cidade Invicta (Invincible City). The dev team behind this
release studies in Porto, Portugal.
Major changes from previous release:
- Various patches on PEAR related components
- Various database related improvements
- Improved XMPP support
- Added Nodeinfo support
- Various i18n and l10n bug fixes
- Improvements on Internal Session Handler
- Improvements on OpenID support
- Improved Media handling and safer upload
- Redirect to previous page after login
- Initial work on full conversion to PHP7
- Initial work on a better documentation
- Allow login with email
- Various bug fixes
## v1.2.0beta4 - The good reign of PHP5
Dropped support for PHP5.4.
New this version
This is the development branch for the 1.2.x version of GNU social. All daring 1.1.x admins should upgrade to this version.
So far it includes the following changes:
- Backing up a user's account is more and more complete.
- Emojis 😸 (utf8mb4 support)
The last release, 1.1.3, gave us these improvements:
- XSS security fix (thanks Simon Waters, https://www.surevine.com/)
- Many improvements to ease adoption of the Qvitter front-end https://github.com/hannesmannerheim/qvitter
- Protocol adaptions for improved performance and stability
Upgrades from StatusNet 1.1.1 will also experience these improvements:
- Fixes for SQL injection errors in profile lists.
- Improved ActivityStreams JSON representation of activities and objects.
- Upgrade to the Twitter 1.1 API.
- More robust handling of errors in distribution.
- Fix error in OStatus subscription for remote groups.
- Fix error in XMPP distribution.
- Tracking of conversation URI metadata (more coherent convos)
## v1.1.3release - The Spanish Invasion
New this version
This is a security fix and bug fix release since 1.1.3-beta2. All 1.1.x sites should upgrade to this version.
So far it includes the following changes:
- XSS security fix (thanks Simon Waters, https://www.surevine.com/)
- Many improvements to ease adoption of the Qvitter front-end https://github.com/hannesmannerheim/qvitter
- Protocol adaptions for improved performance and stability
- Backing up a user's account now appears to work as it should
Upgrades from StatusNet 1.1.1 will also experience these improvements:
- Fixes for SQL injection errors in profile lists.
- Improved ActivityStreams JSON representation of activities and objects.
- Upgrade to the Twitter 1.1 API.
- More robust handling of errors in distribution.
- Fix error in OStatus subscription for remote groups.
- Fix error in XMPP distribution.
- Tracking of conversation URI metadata (more coherent convos)

View File

@@ -1 +1,112 @@
GNU social's contributing resources and instructions are made available at [DOCUMENTATION/DEVELOPERS](https://notabug.org/diogo/gnu-social/src/nightly/DOCUMENTATION/DEVELOPERS). # Contributing to GNU social
First of all, if you're reading this intending to contribute to GNU social,
thanks! Free software development only happens when people like you take an
interest in giving back to the software they themselves use, and their
community.
When contributing to this repository, please first discuss the change you wish to
make via issue, email, or any other method with the owners of this repository before
making a change.
There's a few files you should read before going forward with a merge request
or a patch submission. They detail what this file touches on in brief. They
are:
* `DOCUMENTATION/DEVELOPERS/CONTRIBUTING/coding_standards.md`: How your code should be structured and formatted to be
accepted into the GNU social codebase.
* `/DOCUMENTATION/DEVELOPERS/CONTRIBUTING/merge_request_checklist.md`: A quick checklist to review before submission.
## Merge Request Process
1. Ensure you strip any trailing spaces off and checked the file with php-cs-fixer
2. Increase the version numbers in any examples files and the README.md to the new version that this
Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/).
3. You may merge the Pull Request in once you have the sign-off of two other developers, or if you
do not have permission to do that, you may request the second reviewer to merge it for you.
## Coding Standards
Since we will be expected to maintain your code once it's submitted, we ask you
to adhere to certain coding standards that make it easier for us to do so. If
code doesn't follow them, it will be rejected, so please read up on these.
## Bug Reports
Please report bugs to the issue tracker at
<https://notabug.org/diogo/gnu-social/issues> Avoid assigning the labels
yourself, as these are for the development team to assign priority and area of
coverage to a subject. Please only submit something here if you are certain it
is a bug or represents a feature enhancement that we do not presently have. If
you are uncertain whether it's a bug, please feel free to ask
at #social IRC channel on freenode.net https://www.freenode.net/.
When reporting a bug, please try to include as much information as possible,
including the environment being run on (if it's a common LAMP stack just give
us version numbers of the main stack components, that's fine), and the specific
error you get. If you do not get a client-facing error, please check the PHP
error_log and ensure there isn't something silently reported there, as well as
the GNU social log. Try to include steps to reproduce the error as well, as if
we cannot reproduce the error, we can't fix it!
It is perfectly acceptable to reference the archive page of a discussion on the
mailing list for the bug report, by the way, as long as it includes all the
information we need for a bug report.
## Submitting Feature Requests / Enhancement Requests
Social media is constantly evolving, and we welcome ideas about how we can
change and evolve GNU social to keep it the excellent piece of software that it
is. However, there are a few things we ask you do when submitting feature
requests:
1. Understand that since we have a limited amount of developers and these people
contribute in their free time, we may prioritize things differently than you
value them. Oftentimes this is because certain requests involve less changes
to the existing codebase than others, and therefore this makes them easier
to add.
2. Please search the existing feature requests and enhancements to see if a
similar request exists. If one does but you have different ideas about how
to do it or what it should entail, please add a comment to the existing idea
rather than create a new one for your "version" of it. Duplicate submissions
mean we spend more time maintaining the tracker and less time actually
working on the codebase!
3. When outlining the way that you see something working, don't be afraid to be
as detailed as possible! We may not implement it exactly as you describe for
any variety of reasons, but the more concrete and fleshed out an idea is, the
easier it is for us to know what you want and be able to implement it in a
sane and secure fashion.
4. When describing a possible new idea and its mechanisms of operation, the key
words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in the issue submission
are to be interpreted as described in RFC 2119.
<https://tools.ietf.org/html/rfc2119>
Finally, and just as a call back to the first point, realize just because we
might not rush to implement something, doesn't mean that we don't want to
implement it! We would rather take the time to do something right the first
time, then hurriedly apply a new idea, or a fix, only to have to patch it later.
## Branch of Code Submissions
Unless you've been specifically directed otherwise, all submissions of code
should be against the `nightly` branch, so make sure any modifications are based
on Nightly.
## Copyright / Licensing
You acknowledge that by submitting code to GNU social, you are licensing it under
the GNU AGPLv3 unless there is an extenuating circumstance where it would be
licensed differently (such as modifications to an external library we include
such as Stomp).
You also acknowledge that unless you assign a copyright explicitly, it will be
assumed to be assigned to GNU social.
Thanks for considering submission, and happy hacking!

View File

@@ -3,22 +3,20 @@ Credits for GNU social
The following is an incomplete list of developers The following is an incomplete list of developers
who've worked on GNU social, or its predecessors who've worked on GNU social, or its predecessors
StatusNet and Free Social. Apologies for any StatusNet and Free Social. Apologies for any
oversight; please let mail@diogo.site know if oversight; please let mattl@gnu.org know if
anyone's been overlooked in error. anyone's been overlooked in error.
V2 team Current team
------- ------------
* Diogo Cordeiro
* Alexei Sorokin
* Bruno Casteleiro
Credits for GNU social v1
------------------------
Leads
* Mikael Nordfeldth
* Matt Lee * Matt Lee
* Mikael Nordfeldth
* Diogo Cordeiro
* Bruno Casteleiro
* Miguel Dantas
* Alexei Sorokin
Additional Contributors Additional Contributors
-----------------------
* Ciaran Gultnieks * Ciaran Gultnieks
* Michael Landers * Michael Landers
* Ori Avtalion * Ori Avtalion
@@ -48,7 +46,7 @@ Additional Contributors
* Blaine Cook * Blaine Cook
* Henry Story * Henry Story
* Melvin Carvalho * Melvin Carvalho
* Stéphane Bérubé (chimo) * chimo
* Akio * Akio
* Maiyannah Bishop * Maiyannah Bishop
* Bob Mottram * Bob Mottram
@@ -57,9 +55,8 @@ Additional Contributors
* Moonman * Moonman
* Normandy * Normandy
* Verius * Verius
* Diogo Peralta Cordeiro * Alexei Sorokin
* Daniel Supernault * Daniel Supernault
* Miguel Dantas
Credits for StatusNet Credits for StatusNet
-------------- --------------

View File

@@ -27,7 +27,7 @@ namespace samples;
defined('GNUSOCIAL') || die(); defined('GNUSOCIAL') || die();
require_once __DIR__ . DIRECTORY_SEPARATOR . 'SampleHandler.php'; require_once(__DIR__ . DIRECTORY_SEPARATOR . 'SampleHandler.php');
/** /**
* Description of this class. * Description of this class.
@@ -43,7 +43,7 @@ class MySampleClass
* @param string $dummy_word just because. * @param string $dummy_word just because.
* @param int $result another just because. * @param int $result another just because.
*/ */
public function __construct(string $dummy_word = '', ?int $result = null) public function __construct(string $dummy_word = '', int $result = null)
{ {
global $demo; global $demo;
$this->niceWorld(); $this->niceWorld();
@@ -54,7 +54,7 @@ class MySampleClass
* *
* @return string * @return string
*/ */
public function niceWorld(): string public function niceWorld() : string
{ {
return 'hello, world.'; return 'hello, world.';
} }

View File

@@ -1,7 +1,7 @@
GNU social Coding Style GNU social Coding Style
=========================== ===========================
Please comply with [PSR-12](https://www.php-fig.org/psr/psr-12/) and the following standard when working on GNU social Please comply with [PSR-2](https://www.php-fig.org/psr/psr-2/) and the following standard when working on GNU social
if you want your patches accepted and modules included in supported releases. if you want your patches accepted and modules included in supported releases.
If you see code which doesn't comply with the below, please fix it :) If you see code which doesn't comply with the below, please fix it :)
@@ -118,7 +118,7 @@ Some short hands are evil:
Naming conventions Naming conventions
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Respect PSR-12 first. Respect PSR2 first.
- Classes use PascalCase (e.g. MyClass). - Classes use PascalCase (e.g. MyClass).
- Functions/Methods use camelCase (e.g. myFunction). - Functions/Methods use camelCase (e.g. myFunction).
@@ -145,29 +145,11 @@ Also, whereever possible, avoid ambiguous terms. For example, don't use text
as a term for a variable. Call back to "contents" above. as a term for a variable. Call back to "contents" above.
Arrays
-------------------------------------------------------------------------------
Even though PSR-12 doesn't specifically specify rules for array formatting, it
is in the spirit of it to have every array element on a new line like is done
for function and class method arguments and condition expressions, if there is
more than one element.
In this case, even the last element should end on a comma, to ease later
element addition.
$foo = ['first' => 'unu'];
$bar = [
'first' => 'once',
'second' => 'twice',
'third' => 'thrice',
];
Comparisons Comparisons
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Always use symbol based comparison operators (&&, ||) instead of text based Always use symbol based comparison operators (&&, ||) instead of text based
operators (and, or) in an "if" clause as they are evaluated in different order operators (AND, OR) as they are evaluated in different orders and at different
and at different speeds. speeds. This is will prevent any confusion or strange results.
This is will prevent any confusion or strange results.
Use English Use English

View File

@@ -1,7 +1,7 @@
Submission Checklist Submission Checklist
================================================================================ ================================================================================
This document serves as a handy checklist for submitted merges and patches to This document serves as a handy checklist for submitted merges and patches to
the GNU social project. Following it isn't a gaurantee a patch will be accepted, the postActiv project. Following it isn't a gaurantee a patch will be accepted,
but it will help you avoid common problems. but it will help you avoid common problems.
1. Ensure all code control paths in all functions return a value. 1. Ensure all code control paths in all functions return a value.

View File

@@ -229,6 +229,12 @@ StartPersonalGroupNav: beginning of personal group nav menu
EndPersonalGroupNav: end of personal group nav menu (good place to add a menu item) EndPersonalGroupNav: end of personal group nav menu (good place to add a menu item)
- $action: action object being shown - $action: action object being shown
StartGroupGroupNav: Showing the group nav menu
- $action: the current action
EndGroupGroupNav: At the end of the group nav menu
- $action: the current action
StartEndHTML: just before the </html> tag StartEndHTML: just before the </html> tag
- $action: action object being shown - $action: action object being shown
@@ -349,12 +355,6 @@ EndAvatarSaveForm: after saving the avatar
StartNewQueueManager: before trying to start a new queue manager; good for plugins implementing new queue manager classes StartNewQueueManager: before trying to start a new queue manager; good for plugins implementing new queue manager classes
- $qm: empty queue manager to set - $qm: empty queue manager to set
StartInitializeQueueManager: about to register queue handlers in the queue manager; good for plugins to register own handlers
- $qm: queue manager
EndInitializeQueueManager: after registering queue handlers in the queue manager; good for plugins to register own handlers
- $qm: queue manager
RedirectToLogin: event when we force a redirect to login (like when going to a settings page on a remembered login) RedirectToLogin: event when we force a redirect to login (like when going to a settings page on a remembered login)
- $action: action object being shown - $action: action object being shown
- $user: current user - $user: current user
@@ -1447,7 +1447,7 @@ CreateFileImageThumbnailSource: Hook to create image thumbnail source from a Fil
StartResizeImageFile: Hook to resize an image and output it to a file. No matching End event yet. StartResizeImageFile: Hook to resize an image and output it to a file. No matching End event yet.
- $imagefile: ImageFile object we're resizing. - $imagefile: ImageFile object we're resizing.
- $outpath: string with output filepath - $outpath: string with output filepath
- $box: array with size ('width', 'height') and boundary box('x', 'y', 'w', 'h'). - $box: array with size ('width', 'height') and boundary box('x', 'y', 'w', 'h').
FillImageFileMetadata: Get more metadata about the ImageFile if it is perhaps not a real local file FillImageFileMetadata: Get more metadata about the ImageFile if it is perhaps not a real local file
@@ -1496,16 +1496,3 @@ StartDocNav: Before outputting the docs Nav
EndDocNav: After outputting the docs Nav EndDocNav: After outputting the docs Nav
- $nav: The DoclNav widget - $nav: The DoclNav widget
StartNoticeSearch: Before finding notices that match the given query
- string $query: The text query
StartNoticeSearchShowResults: Before displaying notices matching the query
- $out: HTMLOutputter used to output
- $query: The text query
- $notices: Array of DB notice objects
EndNoticeSearchShowResults: After displaying notices matching the query
- $out: HTMLOutputter used to output
- $query: The text query
- $notices: Array of DB notice objects

View File

@@ -1,8 +1,8 @@
Plugin Development Plugin Development
================== =======================
SamplePlugin.php SamplePlugin.php
---------------- -----------------------
Each plugin requires a main class to interact with the GNU social system. Each plugin requires a main class to interact with the GNU social system.
@@ -15,7 +15,7 @@ have pre-defined arguments, based on which event they're handling. A typical
event handler: event handler:
```php ```php
public function onSomeEvent($paramA, &$paramB): bool function onSomeEvent($paramA, &$paramB)
{ {
if ($paramA == 'jed') { if ($paramA == 'jed') {
throw new Exception(sprintf(_m("Invalid parameter %s"), $paramA)); throw new Exception(sprintf(_m("Invalid parameter %s"), $paramA));
@@ -26,7 +26,7 @@ public function onSomeEvent($paramA, &$paramB): bool
``` ```
Event Handlers Event Handlers
-------------- -----------------------
Event handlers must return a Boolean value. Event handlers must return a Boolean value.
@@ -41,43 +41,50 @@ If the handler throws an exception, processing will stop, and the exception's
error will be shown to the user. error will be shown to the user.
Installation Installation
------------ ------------------
To enable a plugin (like the SamplePlugin), site admins add the following code to their To install a plugin (like this one), site admins add the following code to their
config.php file: config.php file:
```php ```php
addPlugin('Sample'); addPlugin('Sample');
``` ```
Third Party Plugins must be installed in `local/plugins/{$name}/{$pluginclass}.php` Plugins must be installed in one of the following directories:
* local/plugins/{$pluginclass}.php
* local/plugins/{$name}/{$pluginclass}.php
* local/{$pluginclass}.php
* local/{$name}/{$pluginclass}.php
* plugins/{$pluginclass}.php
* plugins/{$name}/{$pluginclass}.php
Here, `{$name}` is the name of the plugin, like 'Sample', and `{$pluginclass}` Here, `{$name}` is the name of the plugin, like 'Sample', and `{$pluginclass}`
is the name of the main class, like 'SamplePlugin'. Plugins that are part of is the name of the main class, like 'SamplePlugin'. Plugins that are part of
the main GNU social distribution go in 'plugins' and third-party or local ones the main GNU social distribution go in 'plugins' and third-party or local ones
go in 'local'. go in 'local'.
Simple plugins can be implemented as a single plugin. Others are more complex Simple plugins can be implemented as a single module. Others are more complex
and require additional plugins; these should use their own directory, like and require additional modules; these should use their own directory, like
'local/plugins/{$name}/'. All files related to the plugin, including images, 'local/plugins/{$name}/'. All files related to the plugin, including images,
JavaScript, CSS, external libraries or PHP plugins should go in the plugin JavaScript, CSS, external libraries or PHP modules should go in the plugin
directory. directory.
Plugin Configuration Plugin Configuration
-------------------- ------------------
Plugins are configured using public instance attributes. To set their values, Plugins are configured using public instance attributes. To set their values,
site administrators use this syntax: site administrators use this syntax:
```php ```php
addPlugin('Sample', ['attr1' => 'foo', 'attr2' => 'bar']); addPlugin('Sample', ('attr1' => 'foo', 'attr2' => 'bar'));
``` ```
The same plugin class can be initialized multiple times with different arguments: The same plugin class can be initialized multiple times with different arguments:
```php ```php
addPlugin('EmailNotify', ['sendTo' => 'evan@status.net']); addPlugin('EmailNotify', array('sendTo' => 'evan@status.net'));
addPlugin('EmailNotify', ['sendTo' => 'brionv@status.net']); addPlugin('EmailNotify', array('sendTo' => 'brionv@status.net'));
``` ```
```php ```php
@@ -89,34 +96,34 @@ class SamplePlugin extends Plugin
``` ```
Initialization Initialization
-------------- ------------------
Plugins overload this method to do any initialization they need, like connecting Plugins overload this method to do any initialization they need, like connecting
to remote servers or creating paths or so on. @return bool hook value; true to remote servers or creating paths or so on. @return boolean hook value; true
means continue processing, false means stop. means continue processing, false means stop.
```php ```php
public function initialize(): bool function initialize()
{ {
return true; return true;
} }
``` ```
Clean Up Clean Up
-------- ------------------
Plugins overload this method to do any cleanup they need, like disconnecting from Plugins overload this method to do any cleanup they need, like disconnecting from
remote servers or deleting temp files or so on. remote servers or deleting temp files or so on.
```php ```php
public function cleanup(): bool function cleanup()
{ {
return true; return true;
} }
``` ```
Database schema setup Database schema setup
--------------------- ------------------
Plugins can add their own tables to the GNU social database. Plugins should use Plugins can add their own tables to the GNU social database. Plugins should use
GNU social's schema interface to add or delete tables. The ensureTable() method GNU social's schema interface to add or delete tables. The ensureTable() method
@@ -128,26 +135,25 @@ the checkschema.php script is run, greatly improving performance. However, they
need to remember to run that script after installing or upgrading a plugin! need to remember to run that script after installing or upgrading a plugin!
```php ```php
public function onCheckSchema(): bool function onCheckSchema()
{ {
$schema = Schema::get(); $schema = Schema::get();
// '''For storing user-submitted flags on profiles''' // '''For storing user-submitted flags on profiles'''
$schema->ensureTable('user_greeting_count',[ $schema->ensureTable('user_greeting_count',
new ColumnDef('user_id', 'integer', null, true, 'PRI'), array(new ColumnDef('user_id', 'integer', null,
new ColumnDef('greeting_count', 'integer') true, 'PRI'),
] new ColumnDef('greeting_count', 'integer')));
);
return true; return true;
} }
``` ```
Load related plugins when needed Load related modules when needed
-------------------------------- ------------------
Most non-trivial plugins will require extra plugins to do their work. Typically Most non-trivial plugins will require extra modules to do their work. Typically
these include data classes, action classes, widget classes, or external libraries. these include data classes, action classes, widget classes, or external libraries.
This method receives a class name and loads the PHP file related to that class. This method receives a class name and loads the PHP file related to that class.
@@ -160,26 +166,26 @@ in this plugin! So, make sure to return true by default to let other plugins,
and the core code, get a chance. and the core code, get a chance.
```php ```php
public function onAutoload($cls): bool function onAutoload($cls)
{ {
$dir = __DIR__; $dir = dirname(__FILE__);
switch ($cls) switch ($cls)
{ {
case 'HelloAction': case 'HelloAction':
include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php';
return false; return false;
case 'User_greeting_count': case 'User_greeting_count':
include_once $dir . '/'.$cls.'.php'; include_once $dir . '/'.$cls.'.php';
return false; return false;
default: default:
return true; return true;
} }
} }
``` ```
Map URLs to actions Map URLs to actions
------------------- ------------------
This event handler lets the plugin map URLs on the site to actions (and thus an This event handler lets the plugin map URLs on the site to actions (and thus an
action handler class). Note that the action handler class for an action will be action handler class). Note that the action handler class for an action will be
@@ -187,28 +193,28 @@ named 'FoobarAction', where action = 'foobar'. The class must be loaded in the
onAutoload() method. onAutoload() method.
```php ```php
public function onRouterInitialized($m): bool function onRouterInitialized($m)
{ {
$m->connect('main/hello', $m->connect('main/hello',
['action' => 'hello']); array('action' => 'hello'));
return true; return true;
} }
``` ```
Modify the default menu to link to our custom action Modify the default menu to link to our custom action
----------------------------------------------------- ------------------
Using event handlers, it's possible to modify the default UI for pages almost Using event handlers, it's possible to modify the default UI for pages almost
without limit. In this method, we add a menu item to the default primary menu without limit. In this method, we add a menu item to the default primary menu
for the interface to link to our action. for the interface to link to our action.
Action Class Action Class
------------ ------------------
The Action class provides a rich set of events to hook, as well as output methods. The Action class provides a rich set of events to hook, as well as output methods.
```php ```php
public function onEndPrimaryNav($action): bool function onEndPrimaryNav($action)
{ {
// '''common_local_url()''' gets the correct URL for the action name we provide // '''common_local_url()''' gets the correct URL for the action name we provide
@@ -217,22 +223,20 @@ public function onEndPrimaryNav($action): bool
return true; return true;
} }
public function onPluginVersion(&$versions): bool function onPluginVersion(&$versions)
{ {
$versions[] = [ $versions[] = array('name' => 'Sample',
'name' => 'Sample', 'version' => STATUSNET_VERSION,
'version' => GNUSOCIAL_VERSION, 'author' => 'Brion Vibber, Evan Prodromou',
'author' => 'Brion Vibber, Evan Prodromou', 'homepage' => 'http://example.org/plugin',
'homepage' => 'http://example.org/plugin', 'rawdescription' =>
'rawdescription' => _m('A sample plugin to show basics of development for new hackers.'));
_m('A sample plugin to show basics of development for new hackers.')
];
return true; return true;
} }
``` ```
hello.php hello.php
--------- ------------------
This section is taken directly from the 'hello.php'. ( plugins/Sample/hello.php ) This section is taken directly from the 'hello.php'. ( plugins/Sample/hello.php )
@@ -251,7 +255,7 @@ class HelloAction extends Action
``` ```
Take arguments for running Take arguments for running
-------------------------- ------------------
This method is called first, and it lets the action class get all its arguments This method is called first, and it lets the action class get all its arguments
and validate them. It's also the time to fetch any relevant data from the database. and validate them. It's also the time to fetch any relevant data from the database.
@@ -260,7 +264,7 @@ Action classes should run parent::prepare(array $args = []) as the first line
of this method to make sure the default argument-processing happens. of this method to make sure the default argument-processing happens.
```php ```php
public function prepare(array $args = []): bool function prepare(array $args = [])
{ {
parent::prepare($args); parent::prepare($args);
@@ -275,14 +279,14 @@ public function prepare(array $args = []): bool
``` ```
Handle request Handle request
-------------- ------------------
This is the main method for handling a request. Note that most preparation This is the main method for handling a request. Note that most preparation
should be done in the prepare() method; by the time handle() is called the should be done in the prepare() method; by the time handle() is called the
action should be more or less ready to go. action should be more or less ready to go.
```php ```php
public function handle(): void function handle()
{ {
parent::handle(); parent::handle();
@@ -296,7 +300,7 @@ Title of this page
Override this method to show a custom title. Override this method to show a custom title.
```php ```php
public function title(): string function title()
{ {
if (empty($this->user)) { if (empty($this->user)) {
return _m('Hello'); return _m('Hello');
@@ -307,7 +311,7 @@ public function title(): string
``` ```
Show content in the content area Show content in the content area
-------------------------------- ------------------
The default GNU social page has a lot of decorations: menus, logos, tabs, all The default GNU social page has a lot of decorations: menus, logos, tabs, all
that jazz. This method is used to show content in the content area of the that jazz. This method is used to show content in the content area of the
@@ -315,15 +319,15 @@ page; it's the main thing you want to overload. This method also demonstrates
use of a plural localized string. use of a plural localized string.
```php ```php
public function showContent(): void function showContent()
{ {
if (empty($this->user)) { if (empty($this->user)) {
$this->element('p', ['class' => 'greeting'], $this->element('p', array('class' => 'greeting'),
_m('Hello, stranger!')); _m('Hello, stranger!'));
} else { } else {
$this->element('p', ['class' => 'greeting'], $this->element('p', array('class' => 'greeting'),
sprintf(_m('Hello, %s'), $this->user->nickname)); sprintf(_m('Hello, %s'), $this->user->nickname));
$this->element('p', ['class' => 'greeting_count'], $this->element('p', array('class' => 'greeting_count'),
sprintf(_m('I have greeted you %d time.', sprintf(_m('I have greeted you %d time.',
'I have greeted you %d times.', 'I have greeted you %d times.',
$this->gc->greeting_count), $this->gc->greeting_count),
@@ -333,7 +337,7 @@ public function showContent(): void
``` ```
Return true if read only. Return true if read only.
------------------------- ------------------
Some actions only read from the database; others read and write. The simple Some actions only read from the database; others read and write. The simple
database load-balancer built into GNU social will direct read-only actions to database load-balancer built into GNU social will direct read-only actions to
@@ -343,8 +347,9 @@ This defaults to false to avoid data integrity issues, but you should make sure
to overload it for performance gains. to overload it for performance gains.
```php ```php
public function isReadOnly($args): bool function isReadOnly($args)
{ {
return false; return false;
} }
``` ```

View File

@@ -1,90 +0,0 @@
<?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social 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.
//
// GNU social 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 GNU social. If not, see <http://www.gnu.org/licenses/>.
defined('GNUSOCIAL') || die();
/**
* Fun sample plugin: tweaks input data and adds a 'Cornify' widget to sidebar.
*
* @category Plugin
* @package GNUsocial
* @author Jeroen De Dauw <jeroendedauw@gmail.com>
* @copyright 2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*/
class AwesomenessPlugin extends Plugin
{
const PLUGIN_VERSION = '13.37.42';
public function onPluginVersion(array &$versions): bool
{
$versions[] = [
'name' => 'Awesomeness',
'version' => self::PLUGIN_VERSION,
'author' => 'Jeroen De Dauw',
'homepage' => GNUSOCIAL_ENGINE_REPO_URL . 'tree/master/plugins/Awesomeness',
// TRANS: Plugin description for a sample plugin.
'rawdescription' => _m('The Awesomeness plugin adds additional awesomeness ' .
'to a GNU social installation.')
];
return true;
}
/**
* Add the conrnify button
*
* @param Action $action the current action
*
* @return void
*/
public function onEndShowSections(Action $action)
{
$action->elementStart('div', ['id' => 'cornify_section',
'class' => 'section']);
$action->raw(
<<<EOT
<a href="https://www.cornify.com" onclick="cornify_add();return false;">
<img src="https://www.cornify.com/assets/cornify.gif" width="61" height="16" border="0" alt="Cornify" />
</a>
EOT
);
$action->elementEnd('div');
}
public function onEndShowScripts(Action $action)
{
$action->script($this->path('js/cornify.js'));
}
/**
* Hook for new-notice form processing to take our HTML goodies;
* won't affect API posting etc.
*
* @param NewNoticeAction $action
* @param User $user
* @param string $content
* @param array $options
* @return bool hook return
*/
public function onStartSaveNewNoticeWeb($action, $user, &$content, &$options)
{
$content = htmlspecialchars($content);
$options['rendered'] = preg_replace("/(^|\s|-)((?:awesome|awesomeness)[\?!\.\,]?)(\s|$)/i", " <b>$2</b> ", $content);
}
}

View File

@@ -1,25 +0,0 @@
# 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-08-14 14:51+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: Module description for a sample plugin.
#: AwesomenessModule.php:67
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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-06 15:02+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: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "Дапаўненьне Awesomeness дадае незвычайныя магчымасьці ў усталяваньне GNU social."

View File

@@ -1,25 +0,0 @@
# 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 14:56+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: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Breton (http://www.transifex.com/gnu-social/gnu-social/language/br/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: br\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Catalan (http://www.transifex.com/gnu-social/gnu-social/language/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Czech (http://www.transifex.com/gnu-social/gnu-social/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Danish (http://www.transifex.com/gnu-social/gnu-social/language/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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: 2019-08-21 14:01+0100\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: German (http://www.transifex.com/gnu-social/gnu-social/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "Das Awesomeness-Plugin fügt zusätzliche Großartigkeit zu einer GNU social-Installation hinzu."

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Greek (http://www.transifex.com/gnu-social/gnu-social/language/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,26 +0,0 @@
# 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:
# Luke Hollins <luke@farcry.ca>, 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-07 12:44+0000\n"
"Last-Translator: Luke Hollins <luke@farcry.ca>\n"
"Language-Team: English (United Kingdom) (http://www.transifex.com/gnu-social/gnu-social/language/en_GB/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: en_GB\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "The Awesomeness plugin adds additional awesomeness to a GNU social installation."

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Esperanto (http://www.transifex.com/gnu-social/gnu-social/language/eo/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: eo\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,26 +0,0 @@
# 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:
# Juan Riquelme González <soulchainer@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-26 08:53+0000\n"
"Last-Translator: Juan Riquelme González <soulchainer@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/gnu-social/gnu-social/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "El complemento Awesomeness ('Molonosidad') incrementa en +20 la molonosidad de un sitio GNU social. (Este es un complemento de ejemplo, con un toque de humor)."

View File

@@ -1,25 +0,0 @@
# 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-06 15:02+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Basque (http://www.transifex.com/gnu-social/gnu-social/language/eu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: eu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "Awesomeness pluginak informazio osagarria gehitzen dio GNU social instalatzioari."

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Persian (http://www.transifex.com/gnu-social/gnu-social/language/fa/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fa\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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-06 15:02+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Finnish (http://www.transifex.com/gnu-social/gnu-social/language/fi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fi\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "Awesomeness-liitännäinen lisää ylimääräistä upeutta (awesomeness) GNU social-asennukseesi."

View File

@@ -1,25 +0,0 @@
# 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-06 15:02+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: French (http://www.transifex.com/gnu-social/gnu-social/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "Le plugin Awesomeness ajoute des suppléments impressionnants à une installation de GNU social."

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Friulian (http://www.transifex.com/gnu-social/gnu-social/language/fur/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fur\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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-06 15:02+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Galician (http://www.transifex.com/gnu-social/gnu-social/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "O complemento impresionante engade suplementos impresionantes á instalación do GNU social."

View File

@@ -1,25 +0,0 @@
# 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-06 15:02+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Hebrew (http://www.transifex.com/gnu-social/gnu-social/language/he/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: he\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "תוסף מגניבות מוסיף עוד מגניבות להתקנה של סטטוסנט."

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Upper Sorbian (http://www.transifex.com/gnu-social/gnu-social/language/hsb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hsb\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Hungarian (http://www.transifex.com/gnu-social/gnu-social/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Armenian (Armenia) (http://www.transifex.com/gnu-social/gnu-social/language/hy_AM/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hy_AM\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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-06 15:02+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Interlingua (http://www.transifex.com/gnu-social/gnu-social/language/ia/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ia\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "Le plug-in Awesomeness rende un installation de GNU social plus impressionante."

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Indonesian (http://www.transifex.com/gnu-social/gnu-social/language/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,26 +0,0 @@
# 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:
# Ciencisto Dementa <maliktunga@users.noreply.github.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-06-15 01:03+0000\n"
"Last-Translator: Ciencisto Dementa <maliktunga@users.noreply.github.com>\n"
"Language-Team: Ido (http://www.transifex.com/gnu-social/gnu-social/language/io/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: io\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "L'extensilo Awesomeness adjuntas impresanta suplemento a GNU social-instaluro."

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Icelandic (http://www.transifex.com/gnu-social/gnu-social/language/is/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: is\n"
"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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-06 15:02+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Italian (http://www.transifex.com/gnu-social/gnu-social/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "Il plugin Awesomeness aggiunge ulteriore imponenza all'installazione di GNU social."

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Japanese (http://www.transifex.com/gnu-social/gnu-social/language/ja/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ja\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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-06 15:02+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "Приклучокот „Феноменалност“ ѝ дава дополнителна феноменалност на инсталацијата на GNU social."

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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-06 15:02+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "De Awesomenessplug-in voegt extra awesomeness toe aan een GNU socialinstallatie."

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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-06 15:02+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "Wtyczka Awesomeness dodaje dodatkowe niesamowitości do instalacji GNU social."

View File

@@ -1,25 +0,0 @@
# 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-06 15:02+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "O plugin de Espectacularidade adiciona espectacularidade adicional a uma instalação de GNU social."

View File

@@ -1,26 +0,0 @@
# 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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "O plugin Awesomeness adiciona incríveis bonus à instalação de GNU social."

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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-06 15:02+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "Потрясающий плагин добавляет потрясающие вещи в GNU social."

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,26 +0,0 @@
# 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-09-15 18:38+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "Insticksprogrammet Awesomeness lägger till ytterligare ypperlighet till en GNU social-installation."

View File

@@ -1,25 +0,0 @@
# 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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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-06 15:02+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "Ang pampasak ng Pagiging Kahanga-hanga ay nagdaragdag ng karagdagang pagiging kahanga-hanga sa isang pagtatalaga ng GNU social."

View File

@@ -1,25 +0,0 @@
# 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 14:56+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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-06 15:02+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr "Напрочуд дивовижний додаток додає додаткову напрочуд дивовижну функціональність до вашої інсталяції GNU social."

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,25 +0,0 @@
# 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 14:56+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"
#. TRANS: Plugin description for a sample plugin.
#: AwesomenessPlugin.php:55
msgid ""
"The Awesomeness plugin adds additional awesomeness to a GNU social "
"installation."
msgstr ""

View File

@@ -1,241 +0,0 @@
/*
_______ ,-----. .-------. ,---. .--..-./`) ________ ____ __
/ __ \ .' .-, '. | _ _ \ | \ | |\ .-.')| | \ \ / /
| ,_/ \__) / ,-.| \ _ \ | ( ' ) | | , \ | |/ `-' \| .----' \ _. / '
,-./ ) ; \ '_ / | :|(_ o _) / | |\_ \| | `-'`"`| _|____ _( )_ .'
\ '_ '`) | _`,/ \ _/ || (_,_).' __ | _( )_\ | .---. |_( )_ | ___(_ o _)'
> (_) ) __: ( '\_/ \ ;| |\ \ | || (_ o _) | | | (_ o._)__|| |(_,_)'
( . .-'_/ )\ `"/ \ ) / | | \ `' /| (_,_)\ | | | |(_,_) | `-' /
`-'`-' / '. \_/``".' | | \ / | | | | | | | | \ /
`._____.' '-----' ''-' `'-' '--' '--' '---' '---' `-..-'
*/
var cornify_count = 0;
var cornify_add = function(options) {
// Track how often we cornified.
cornify_count += 1;
var cornify_url = 'https://www.cornify.com/';
// Create a container DIV for our 'corn or 'bow.
var div = document.createElement('div');
div.style.position = 'fixed';
// Prepare our lovely variables.
var numType = 'px';
var heightRandom = Math.random() * 0.75;
var windowHeight = 768;
var windowWidth = 1024;
var height = 0;
var width = 0;
var de = document.documentElement;
// Get the window width and height - requires some cross browser checking.
if(typeof(window.innerHeight) == 'number') {
windowHeight = window.innerHeight;
windowWidth = window.innerWidth;
} else if(de && de.clientHeight) {
windowHeight = de.clientHeight;
windowWidth = de.clientWidth;
} else {
numType = '%';
height = Math.round(height*100) + '%';
}
div.onclick = cornify_add; // Click for more magic.
div.style.zIndex = 10;
div.style.outline = 0;
if(cornify_count == 15) {
// Clicking 15 times summons the grand unicorn - which is centered on the screen.
div.style.top = Math.max( 0, Math.round((windowHeight-530)/2)) + 'px';
div.style.left = Math.round((windowWidth-530)/2) + 'px';
div.style.zIndex = 1000;
} else {
// Otherwise we randomize the position.
if(numType == 'px') {
div.style.top = Math.round( windowHeight*heightRandom ) + numType;
} else {
div.style.top = height;
}
div.style.left = Math.round(Math.random()*90) + '%';
}
var img = document.createElement('img');
var currentTime = new Date();
// Used as a cache buster so the browser makes a new request every time instead of usign the previous, cached one.
var submitTime = currentTime.getTime();
if( cornify_count==15 ) submitTime = 0;
// Construct our unicorn & rainbow request.
var url = cornify_url+'getacorn.php?r='+submitTime+'&url='+document.location.href;
// Add younicorns if requested.
if(options && (options.y || options.younicorns)) {
url += '&y='+(options.y ? options.y : options.younicorns);
if(Math.random() > 0.5) {
// Flip horizontally at random.
div.style.transform = 'scaleX(-1)';
};
}
img.setAttribute('src', url);
// Add a nice hover transition.
var ease = "all .1s linear";
div.style.WebkitTransition = ease;
div.style.WebkitTransform = "rotate(1deg) scale(1.01,1.01)";
div.style.transition = "all .1s linear";
div.onmouseover = function() {
var size = 1 + Math.round(Math.random()*10)/100;
var angle = Math.round(Math.random()*20-10);
var result = "rotate("+angle+"deg) scale("+size+","+size+")";
this.style.transform = result;
this.style.WebkitTransform = result;
};
div.onmouseout = function() {
var size = .9+Math.round(Math.random()*10)/100;
var angle = Math.round(Math.random()*6-3);
var result = "rotate("+angle+"deg) scale("+size+","+size+")";
this.style.transform = result;
this.style.WebkitTransform = result;
};
// Append our container DIV to the page.
var body = document.getElementsByTagName('body')[0];
body.appendChild(div);
div.appendChild(img);
// Hooray - now we have a sparkly unicorn (or rainbow) on the page. Another cornification well done. Congrats!
// When clicking 5 times, add a custom stylesheet to make the page look awesome.
if(cornify_count == 5) {
var cssExisting = document.getElementById('__cornify_css');
if(!cssExisting) {
var head = document.getElementsByTagName("head")[0];
var css = document.createElement('link');
css.id = '__cornify_css';
css.type = 'text/css';
css.rel = 'stylesheet';
css.href = 'https://www.cornify.com/css/cornify.css';
css.media = 'screen';
head.appendChild(css);
}
cornify_replace();
}
cornify_updatecount();
};
// Tracks how often we cornified.
var cornify_updatecount = function() {
var p = document.getElementById('cornifycount');
if(p == null) {
var p = document.createElement('p');
p.id = 'cornifycount';
p.style.position = 'fixed';
p.style.bottom = '5px';
p.style.left = '0px';
p.style.right = '0px';
p.style.zIndex = '1000000000';
p.style.color = '#ff00ff';
p.style.textAlign = 'center';
p.style.fontSize = '24px';
p.style.fontFamily = "'Comic Sans MS', 'Comic Sans', 'Marker Felt', serif"; // Only the best!
var body = document.getElementsByTagName('body')[0];
body.appendChild(p);
}
if(cornify_count == 1) {
p.innerHTML = cornify_count+' UNICORN OR RAINBOW CREATED';
} else {
p.innerHTML = cornify_count+' UNICORNS &AMP; RAINBOWS CREATED';
}
// Stores our count in a cookie for our next session.
cornify_setcookie('cornify', cornify_count+'', 1000);
};
var cornify_setcookie = function(name, value, days) {
var d = new Date();
d.setTime(d.getTime()+(days*24*60*60*1000));
var expires = "expires="+d.toGMTString();
document.cookie = name + "=" + value + "; " + expires;
};
var cornify_getcookie = function(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i].trim();
if(c.indexOf(name)==0) {
return c.substring(name.length,c.length);
}
}
return "";
};
// Retrieve our click count from the cookie when we start up.
cornify_count = parseInt(cornify_getcookie('cornify'));
if(isNaN(cornify_count)) {
cornify_count = 0;
}
// Adds happy words at the beginning of all headers on the page.
var cornify_replace = function() {
// Replace text.
var hc = 6;
var hs;
var h;
var k;
var words = ['Happy','Sparkly','Glittery','Fun','Magical','Lovely','Cute','Charming','Amazing','Wonderful'];
while(hc >= 1) {
hs = document.getElementsByTagName('h' + hc);
for (k = 0; k < hs.length; k++) {
h = hs[k];
h.innerHTML = words[Math.floor(Math.random()*words.length)] + ' ' + h.innerHTML;
}
hc-=1;
}
};
/*
* Adapted from http://www.snaptortoise.com/konami-js/
*/
var cornami = {
input:"",
pattern:"38384040373937396665",
clear:setTimeout('cornami.clear_input()', 5000),
load: function() {
window.document.onkeydown = function(e) {
if (cornami.input == cornami.pattern) {
cornify_add();
clearTimeout(cornami.clear);
return;
}
else {
cornami.input += e ? e.keyCode : event.keyCode;
if (cornami.input == cornami.pattern) cornify_add();
clearTimeout(cornami.clear);
cornami.clear = setTimeout("cornami.clear_input()", 5000);
}
};
},
clear_input: function() {
cornami.input="";
clearTimeout(cornami.clear);
}
};
cornami.load();

View File

@@ -1,246 +0,0 @@
<?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social 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.
//
// GNU social 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 GNU social. If not, see <http://www.gnu.org/licenses/>.
/**
* A sample plugin to show best practices for GNU social plugins
*
* @package GNU social
* @author Brion Vibber <brionv@status.net>
* @author Evan Prodromou <evan@status.net>
* @copyright 2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*/
// This check helps protect against security problems;
// your code file can't be executed directly from the web.
defined('GNUSOCIAL') || die();
/**
* Sample plugin main class
*
* Each plugin requires a main class to interact with the StatusNet system.
*
* The main class usually extends the Plugin class that comes with StatusNet.
*
* The class has standard-named methods that will be called when certain events
* happen in the code base. These methods have names like 'onX' where X is an
* event name (see EVENTS.txt for the list of available events). Event handlers
* have pre-defined arguments, based on which event they're handling. A typical
* event handler:
*
* function onSomeEvent($paramA, &$paramB)
* {
* if ($paramA == 'jed') {
* throw new Exception(sprintf(_m("Invalid parameter %s"), $paramA));
* }
* $paramB = 'spock';
* return true;
* }
*
* Event handlers must return a boolean value. If they return false, all other
* event handlers for this event (in other plugins) will be skipped, and in some
* cases the default processing for that event would be skipped. This is great for
* replacing the default action of an event.
*
* If the handler returns true, processing of other event handlers and the default
* processing will continue. This is great for extending existing functionality.
*
* If the handler throws an exception, processing will stop, and the exception's
* error will be shown to the user.
*
* To install a plugin (like this one), site admins add the following code to
* their config.php file:
*
* addPlugin('Sample');
*
* Plugins must be installed in one of the following directories:
*
* local/plugins/{$pluginclass}.php
* local/plugins/{$name}/{$pluginclass}.php
* local/{$pluginclass}.php
* local/{$name}/{$pluginclass}.php
* plugins/{$pluginclass}.php
* plugins/{$name}/{$pluginclass}.php
*
* Here, {$name} is the name of the plugin, like 'Sample', and {$pluginclass} is
* the name of the main class, like 'SamplePlugin'. Plugins that are part of the
* main StatusNet distribution go in 'plugins' and third-party or local ones go
* in 'local'.
*
* Simple plugins can be implemented as a single plugin. Others are more complex
* and require additional plugins; these should use their own directory, like
* 'local/plugins/{$name}/'. All files related to the plugin, including images,
* JavaScript, CSS, external libraries or PHP plugins should go in the plugin
* directory.
*
* @category Sample
* @package GNU social
* @author Brion Vibber <brionv@status.net>
* @author Evan Prodromou <evan@status.net>
* @copyright 2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*/
class SamplePlugin extends Plugin
{
// Versions start at 0.1.0 in Semver
const PLUGIN_VERSION = '0.1.0';
/**
* Plugins are configured using public instance attributes. To set
* their values, site administrators use this syntax:
*
* addPlugin('Sample', ['attr1' => 'foo', 'attr2' => 'bar']);
*
* The same plugin class can be initialized multiple times with different
* arguments:
*
* addPlugin('EmailNotify', ['sendTo' => 'evan@status.net']);
* addPlugin('EmailNotify', ['sendTo' => 'brionv@status.net']);
*
*/
public $attr1 = null;
public $attr2 = null;
/**
* Initializer for this plugin
*
* Plugins overload this method to do any initialization they need,
* like connecting to remote servers or creating paths or so on.
*
* @return bool hook value; true means continue processing, false means stop.
*/
public function initialize(): bool
{
return true;
}
/**
* Cleanup for this plugin
*
* Plugins overload this method to do any cleanup they need,
* like disconnecting from remote servers or deleting temp files or so on.
*
* @return bool hook value; true means continue processing, false means stop.
*/
public function cleanup(): bool
{
return true;
}
/**
* Database schema setup
*
* Plugins can add their own tables to the StatusNet database. Plugins
* should use StatusNet's schema interface to add or delete tables. The
* ensureTable() method provides an easy way to ensure a table's structure
* and availability.
*
* By default, the schema is checked every time StatusNet is run (say, when
* a Web page is hit). Admins can configure their systems to only check the
* schema when the checkschema.php script is run, greatly improving performance.
* However, they need to remember to run that script after installing or
* upgrading a plugin!
*
* @return bool hook value; true means continue processing, false means stop.
* @see Schema
* @see ColumnDef
*/
public function onCheckSchema(): bool
{
$schema = Schema::get();
// For storing user-submitted flags on profiles
$schema->ensureTable('user_greeting_count', User_greeting_count::schemaDef());
return true;
}
/**
* Map URLs to actions
*
* This event handler lets the plugin map URLs on the site to actions (and
* thus an action handler class). Note that the action handler class for an
* action will be named 'FoobarAction', where action = 'foobar'. The class
* must be loaded in the onAutoload() method.
*
* @param URLMapper $m path-to-action mapper
*
* @return bool hook value; true means continue processing, false means stop.
* @throws Exception If it can't connect our required routes
*/
public function onRouterInitialized(URLMapper $m): bool
{
$m->connect(
'main/hello',
['action' => 'hello']
);
return true;
}
/**
* Modify the default menu to link to our custom action
*
* Using event handlers, it's possible to modify the default UI for pages
* almost without limit. In this method, we add a menu item to the default
* primary menu for the interface to link to our action.
*
* The Action class provides a rich set of events to hook, as well as output
* methods.
*
* @param Action $action The current action handler. Use this to
* do any output.
*
* @return bool hook value; true means continue processing, false means stop.
*
* @throws Exception
* @see Action
*/
public function onEndPrimaryNav(Action $action): bool
{
// common_local_url() gets the correct URL for the action name
// we provide
$action->menuItem(
common_local_url('hello'),
// TRANS: Menu item in sample plugin.
_m('Hello'),
// TRANS: Menu item title in sample plugin.
_m('A warm greeting'),
false,
'nav_hello'
);
return true;
}
/**
* Plugin version information/meta-data
*
* @param array $versions
* @return bool hook true
* @throws Exception
*/
public function onPluginVersion(array &$versions): bool
{
$versions[] = [
'name' => 'Sample',
'version' => self::PLUGIN_VERSION,
'author' => 'Brion Vibber, Evan Prodromou',
'homepage' => GNUSOCIAL_ENGINE_REPO_URL . 'tree/master/plugins/Sample',
'rawdescription' =>
// TRANS: Plugin description.
_m('A sample plugin to show basics of development for new hackers.')
];
return true;
}
}

View File

@@ -1,180 +0,0 @@
<?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social 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.
//
// GNU social 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 GNU social. If not, see <http://www.gnu.org/licenses/>.
/**
* Give a warm greeting to our friendly user
*
* @package GNU social
* @author Brion Vibber <brionv@status.net>
* @author Evan Prodromou <evan@status.net>
* @copyright 2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*/
defined('GNUSOCIAL') || die();
/**
* This sample action shows some basic ways of doing output in an action
* class.
*
* Action classes have several output methods that they override from
* the parent class.
*
* @category Sample
* @package GNU social
* @author Evan Prodromou <evan@status.net>
* @copyright 2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*/
class HelloAction extends Action
{
public $user = null;
public $gc = null;
/**
* Take arguments for running
*
* This method is called first, and it lets the action class get
* all its arguments and validate them. It's also the time
* to fetch any relevant data from the database.
*
* Action classes should run parent::prepare($args) as the first
* line of this method to make sure the default argument-processing
* happens.
*
* @param array $args $_REQUEST args
*
* @return bool success flag
* @throws ClientException
*/
public function prepare(array $args = [])
{
parent::prepare($args);
$this->user = common_current_user();
if (!empty($this->user)) {
$this->gc = User_greeting_count::inc($this->user->getID());
}
return true;
}
/**
* Handle request
*
* This is the main method for handling a request. Note that
* most preparation should be done in the prepare() method;
* by the time handle() is called the action should be
* more or less ready to go.
*
* @return void
* @throws ClientException
* @throws ReflectionException
* @throws ServerException
*/
public function handle()
{
parent::handle();
$this->showPage();
}
/**
* Title of this page
*
* Override this method to show a custom title.
*
* @return string Title of the page
* @throws Exception
*/
public function title()
{
if (empty($this->user)) {
// TRANS: Page title for sample plugin.
return _m('Hello');
} else {
// TRANS: Page title for sample plugin. %s is a user nickname.
return sprintf(_m('Hello, %s!'), $this->user->getNickname());
}
}
/**
* Show content in the content area
*
* The default StatusNet page has a lot of decorations: menus,
* logos, tabs, all that jazz. This method is used to show
* content in the content area of the page; it's the main
* thing you want to overload.
*
* This method also demonstrates use of a plural localized string.
*
* @return void
* @throws Exception
*/
public function showContent()
{
if (empty($this->user)) {
$this->element(
'p',
['class' => 'greeting'],
// TRANS: Message in sample plugin.
_m('Hello, stranger!')
);
} else {
$this->element(
'p',
['class' => 'greeting'],
// TRANS: Message in sample plugin. %s is a user nickname.
sprintf(_m('Hello, %s'), $this->user->getNickname())
);
$this->element(
'p',
['class' => 'greeting_count'],
// TRANS: Message in sample plugin.
// TRANS: %d is the number of times a user is greeted.
sprintf(
_m(
'I have greeted you %d time.',
'I have greeted you %d times.',
$this->gc->greeting_count
),
$this->gc->greeting_count
)
);
}
}
/**
* Return true if read only.
*
* Some actions only read from the database; others read and write.
* The simple database load-balancer built into StatusNet will
* direct read-only actions to database mirrors (if they are configured),
* and read-write actions to the master database.
*
* This defaults to false to avoid data integrity issues, but you
* should make sure to overload it for performance gains.
*
* @param array $args other arguments, if RO/RW status depends on them.
*
* @return bool is read only action?
*/
public function isReadOnly($args)
{
return false;
}
}

View File

@@ -1,120 +0,0 @@
<?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social 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.
//
// GNU social 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 GNU social. If not, see <http://www.gnu.org/licenses/>.
/**
* Data class for counting greetings
*
* @package GNUsocial
* @author Brion Vibber <brionv@status.net>
* @author Evan Prodromou <evan@status.net>
* @copyright 2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*/
defined('GNUSOCIAL') || die();
/**
* We use the DB_DataObject framework for data classes in GNU social. Each
* table maps to a particular data class, making it easier to manipulate
* data.
*
* Data classes should extend Memcached_DataObject, the (slightly misnamed)
* extension of DB_DataObject that provides caching, internationalization,
* and other bits of good functionality to StatusNet-specific data classes.
*
* @category Action
* @package GNUsocial
* @author Evan Prodromou <evan@status.net>
* @copyright 2019 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
*
* @see DB_DataObject
*/
class User_greeting_count extends Managed_DataObject
{
public $__table = 'user_greeting_count'; // table name
public $user_id; // int(4) primary_key not_null
public $greeting_count; // int(4)
public $created; // datetime()
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
public static function schemaDef()
{
return [
'fields' => [
'user_id' => ['type' => 'int', 'not null' => true, 'description' => 'user id'],
'greeting_count' => ['type' => 'int', 'not null' => true, 'description' => 'the greeting count'],
'created' => ['type' => 'datetime', 'description' => 'date this record was created'],
'modified' => ['type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'],
],
'primary key' => ['user_id'],
'foreign keys' => [
'user_greeting_count_user_id_fkey' => ['user', ['user_id' => 'id']],
],
];
}
/**
* Increment a user's greeting count and return instance
*
* This method handles the ins and outs of creating a new greeting_count for a
* user or fetching the existing greeting count and incrementing its value.
*
* @param integer $user_id ID of the user to get a count for
*
* @return User_greeting_count instance for this user, with count already incremented.
* @throws Exception
*/
public static function inc($user_id)
{
$gc = User_greeting_count::getKV('user_id', $user_id);
if (empty($gc)) {
$gc = new User_greeting_count();
$gc->user_id = $user_id;
$gc->greeting_count = 1;
$result = $gc->insert();
if (!$result) {
// TRANS: Exception thrown when the user greeting count could not be saved in the database.
// TRANS: %d is a user ID (number).
throw new Exception(sprintf(
_m('Could not save new greeting count for %d.'),
$user_id
));
}
} else {
$orig = clone($gc);
++$gc->greeting_count;
$result = $gc->update($orig);
if (!$result) {
// TRANS: Exception thrown when the user greeting count could not be saved in the database.
// TRANS: %d is a user ID (number).
throw new Exception(sprintf(
_m('Could not increment greeting count for %d.'),
$user_id
));
}
}
return $gc;
}
}

View File

@@ -1,112 +0,0 @@
# Contributing to GNU social
First of all, if you're reading this intending to contribute to GNU social,
thanks! Free software development only happens when people like you take an
interest in giving back to the software they themselves use, and their
community.
When contributing to this repository, please first discuss the change you wish to
make via issue, email, or any other method with the owners of this repository before
making a change.
There's a few files you should read before going forward with a merge request
or a patch submission. They detail what this file touches on in brief. They
are:
* `DOCUMENTATION/DEVELOPERS/CONTRIBUTING/coding_standards.md`: How your code should be structured and formatted to be
accepted into the GNU social codebase.
* `/DOCUMENTATION/DEVELOPERS/CONTRIBUTING/merge_request_checklist.md`: A quick checklist to review before submission.
## Merge Request Process
1. Run php-cs-fixer. We also recommend you to use tools like phpstan, phpactor, phpcs and phpmd
2. Run our unit tests (`./vendor/bin/phpunit --testsuite Core`)
3. Respect our [VERSIONING](https://notabug.org/diogo/gnu-social/src/nightly/DOCUMENTATION/VERSIONING.md) system
4. You may merge the Merge Request in once you have the sign-off of two other developers, or if you
do not have permission to do that, you may request the second reviewer to merge it for you
## Coding Standards
Since we will be expected to maintain your code once it's submitted, we ask you
to adhere to certain coding standards that make it easier for us to do so. If
code doesn't follow them, it will be rejected, so please read up on these.
## Bug Reports
Please report bugs to the issue tracker at
<https://notabug.org/diogo/gnu-social/issues> Avoid assigning the labels
yourself, as these are for the development team to assign priority and area of
coverage to a subject. Please only submit something here if you are certain it
is a bug or represents a feature enhancement that we do not presently have. If
you are uncertain whether it's a bug, please feel free to ask
at #social IRC channel at irc.libera.chat https://libera.chat/.
When reporting a bug, please try to include as much information as possible,
including the environment being run on (if it's a common LAMP stack just give
us version numbers of the main stack components, that's fine), and the specific
error you get. If you do not get a client-facing error, please check the PHP
error_log and ensure there isn't something silently reported there, as well as
the GNU social log. Try to include steps to reproduce the error as well, as if
we cannot reproduce the error, we can't fix it!
It is perfectly acceptable to reference the archive page of a discussion on the
mailing list for the bug report, by the way, as long as it includes all the
information we need for a bug report.
## Submitting Feature Requests / Enhancement Requests
Social media is constantly evolving, and we welcome ideas about how we can
change and evolve GNU social to keep it the excellent piece of software that it
is. However, there are a few things we ask you do when submitting feature
requests:
1. Understand that since we have a limited amount of developers and these people
contribute in their free time, we may prioritize things differently than you
value them. Oftentimes this is because certain requests involve less changes
to the existing codebase than others, and therefore this makes them easier
to add.
2. Please search the existing feature requests and enhancements to see if a
similar request exists. If one does but you have different ideas about how
to do it or what it should entail, please add a comment to the existing idea
rather than create a new one for your "version" of it. Duplicate submissions
mean we spend more time maintaining the tracker and less time actually
working on the codebase!
3. When outlining the way that you see something working, don't be afraid to be
as detailed as possible! We may not implement it exactly as you describe for
any variety of reasons, but the more concrete and fleshed out an idea is, the
easier it is for us to know what you want and be able to implement it in a
sane and secure fashion.
4. When describing a possible new idea and its mechanisms of operation, the key
words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in the issue submission
are to be interpreted as described in RFC 2119.
<https://tools.ietf.org/html/rfc2119>
Finally, and just as a call back to the first point, realize just because we
might not rush to implement something, doesn't mean that we don't want to
implement it! We would rather take the time to do something right the first
time, then hurriedly apply a new idea, or a fix, only to have to patch it later.
## Branch of Code Submissions
Unless you've been specifically directed otherwise, all submissions of code
should be against the `nightly` branch, so make sure any modifications are based
on Nightly.
## Copyright / Licensing
You acknowledge that by submitting code to GNU social, you are licensing it under
the GNU AGPLv3 unless there is an extenuating circumstance where it would be
licensed differently (such as modifications to an external library we include
such as Stomp).
You also acknowledge that unless you assign a copyright explicitly, it will be
assumed to be assigned to GNU social.
Thanks for considering submission, and happy hacking!

View File

@@ -146,13 +146,6 @@ This section is a catch-all for site-wide variables.
be fine-tuned for notices, messages, profile bios and group descriptions. be fine-tuned for notices, messages, profile bios and group descriptions.
Zero indicates no limit. Zero indicates no limit.
* favicon: the path to a custom favicon, eg: favicon.png
* `x-static-delivery` (string, default null): when a string, use this
as the header with wich to serve static files. Possible values are
'X-Sendfile' (for Apache and others) and 'X-Accel-Redirect' (for
nginx).
db db
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
@@ -164,18 +157,26 @@ The ones that you may want to set are listed below for clarity.
* `database` (string, required, default null): a DSN (Data Source Name) for your * `database` (string, required, default null): a DSN (Data Source Name) for your
GNU social database. This is in the format GNU social database. This is in the format
'protocol://username:password@hostname/databasename', where 'protocol' is 'protocol://username:password@hostname/databasename', where 'protocol' is '
'mysqli' or 'pgsql' or 'mysql', 'username' is the username, 'password' is mysql' or 'mysqli' (or possibly 'postgresql', if you really know what
the password, and etc. you're doing), 'username' is the username, 'password' is the password,
and etc.
* `ini_yourdbname` (string, default null): if your database is not named 'statusnet', * `ini_yourdbname` (string, default null): if your database is not named 'statusnet',
you'll need to set this to point to the location of the statusnet.ini file. you'll need to set this to point to the location of the statusnet.ini file.
Note that the real name of your database should go in there, not literally Note that the real name of your database should go in there, not literally
'yourdbname'. 'yourdbname'.
* `type` (enum["mysql", "pgsql"], default 'mysql'): Used for certain * `db_driver`(enum['DB','MDB2'], default null): You can try changing this to
database-specific optimization code. Assumes mysql if not set. "mysql" 'MDB2' to use the other driver type for DB_DataObject, but note that it
covers MariaDB, Oracle MySQL, mysqli or otherwise. breaks the OpenID libraries, which only support PEAR::DB.
* `quote_identifiers`(boolean, default false): Set this to true if you're using
postgresql.
* `type` (enum["mysql", "postgresql"], default 'mysql'): Used for certain
database-specific optimization code. Assumes mysql if not set. MySQL also
covers MySQLi and MariaDB.
* `mirror` (array, default null): you can set this to an array of DSNs, in the * `mirror` (array, default null): you can set this to an array of DSNs, in the
format of the above 'database' value. If it's set, certain read-only format of the above 'database' value. If it's set, certain read-only
@@ -190,14 +191,13 @@ The ones that you may want to set are listed below for clarity.
until they get their databases fixed up. See "UTF-8 database" above for until they get their databases fixed up. See "UTF-8 database" above for
details. details.
* `schemacheck` (enum["runtime", "script"], default "runtime"): when * `schemacheck` (enum["runtime", "script"], default "runtime"): when to let
to let plugins check the database schema to add tables or update plugins check the database schema to add tables or update them. 'runtime'
them. 'runtime' can be costly (plugins check the schema on every can be costly (plugins check the schema on every hit, adding potentially
hit, adding potentially several db queries, some quite long), but several db queries, some quite long), but not everyone knows how to run a
not everyone knows how to run a script or has the access in their script or has the access in their hosting environment to do so. If you can,
hosting environment to do so. If you can, set this to 'script' and set this to 'script' and run scripts/checkschema.php whenever you install
run scripts/checkschema.php whenever you install or upgrade a or upgrade a plugin.
plugin.
syslog syslog
@@ -224,7 +224,7 @@ sending out SMS email or XMPP messages, for off-line processing. See
* `enabled` (boolean, default false): Whether to uses queues. * `enabled` (boolean, default false): Whether to uses queues.
* `daemon` (boolean, default false): Whether to use queuedaemon. False means * `daemon` (boolean, default false): Wather to use queuedaemon. False means
you'll use OpportunisticQM plugin. you'll use OpportunisticQM plugin.
* `subsystem` (enum["db", "stomp"], default 'db'): Which kind of queueserver to * `subsystem` (enum["db", "stomp"], default 'db'): Which kind of queueserver to
@@ -606,10 +606,10 @@ Profile management.
* `biolimit`: max character length of bio; 0 means no limit; null means to use * `biolimit`: max character length of bio; 0 means no limit; null means to use
the site text limit default. the site text limit default.
* `backup`: whether users can backup their own profiles. Defaults to false. * `backup`: whether users can backup their own profiles. Defaults to true.
* `restore`: whether users can restore their profiles from backup files. Defaults * `restore`: whether users can restore their profiles from backup files. Defaults
to false. to true.
* `delete`: whether users can delete their own accounts. Defaults to false. * `delete`: whether users can delete their own accounts. Defaults to false.
@@ -667,19 +667,12 @@ in php.ini to be large enough to handle your upload. In httpd.conf
(if you're using apache), check that the LimitRequestBody directive isn't (if you're using apache), check that the LimitRequestBody directive isn't
set too low (it's optional, so it may not be there at all). set too low (it's optional, so it may not be there at all).
* `extblacklist`: associative array to either deny certain extensions or
change them to a different one. For example:
$config['attachments']['extblacklist']['php'] = 'phps'; // this turns .php into .phps
$config['attachments']['extblacklist']['exe'] = false; // this would deny any uploads
// of files with the "exe" extension
* `process_links`: follow redirects and save all available file information * `process_links`: follow redirects and save all available file information
(mimetype, date, size, oembed, etc.). Defaults to true. (mimetype, date, size, oembed, etc.). Defaults to true.
* `file_quota`: maximum size for a single file upload in bytes. A user can send * `file_quota`: maximum size for a single file upload in bytes. A user can send
any amount of notices with attachments as long as each attachment any amount of notices with attachments as long as each attachment
is smaller than file_quota. Defaults to PHP's configured upload limit. is smaller than file_quota.
* `user_quota`: total size in bytes a user can store on this server. Each user * `user_quota`: total size in bytes a user can store on this server. Each user
can store any number of files as long as their total size does can store any number of files as long as their total size does
@@ -717,28 +710,6 @@ set too low (it's optional, so it may not be there at all).
* `filename_base`: for new files, choose one: 'upload', 'hash'. Defaults to hash. * `filename_base`: for new files, choose one: 'upload', 'hash'. Defaults to hash.
* `memory_limit`: PHP's memory limit to use temporarily when handling images. Defaults to `1024M`.
* `prefer_remote`: when a user uploads a file, if the first time this file was
retrieved was from an URL, prefer redirect to the attachment with the first known URL.
thumbnail
-------------------------------------------------------------------------------
The software lets users upload media with their notes. You can configure
the way thumbnails are generated for them.
* `dir`: Where to store, defaults to `File::path('thumb')` (equivalent to `['attachments']['dir']/thumb/`).
* `path`: URL path, relative to the server, to find thumbnails. Defaults to `File::url('thumb/$filename')` (equivalent to `['attachments']['path']/thumb/`).
* `server`: Only used if `['thumbnail']['path']` is NOT empty. In which case it defaults to `['site']['server']`, schema is decided from `GNUsocial::useHTTPS()`
* `crop`: Crop to the size (not preserving aspect ratio). Defaults to false.
* `maxsize`: Thumbs with an edge larger than this will not be generated. Defaults to 1000.
* `width`: Max width for the thumbnail. Defaults to 450.
* `height`: Max height for the thumbnail. Defaults to 600.
* `upscale`: Whether or not to scale smaller images up to larger thumbnail sizes. Defaults to false.
* `animated`: `null` means use file as thumbnail. `false` means that a still frame can be used. `true` requires `ImageMagickPlugin`. Defaults to false.
group group
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
@@ -762,9 +733,11 @@ search
Some stuff for search. Some stuff for search.
* `type`: type of search. Ignored if PostgreSQL or Sphinx are enabled. Can either * `type`: type of search. Ignored if PostgreSQL or Sphinx are enabled. Can either
be 'like' or 'fulltext' (default). The latter is faster and more efficient be 'fulltext' or 'like' (default). The former is faster and more efficient
but if your storage engine of choice does not support it, then feel free to but requires the lame old MyISAM engine for MySQL. The latter
choose 'like', but it could be miserably slow on large databases. will work with InnoDB but could be miserably slow on large
systems. We'll probably add another type sometime in the future,
with our own indexing system (maybe like MediaWiki's).
sessions sessions

View File

@@ -1,15 +0,0 @@
#Simple way to Webfinger enable your domain -- needs PHP
##Step 1
Put the 'dot-well-known' on your website, so it loads at:
https://another_cool.org/.well-known/
(Remember the . at the beginning of this one, which is common practice
for "hidden" files and why we have renamed it "dot-")
## Step 2
Edit the .well-known/webfinger/index.php file and replace "https://www.example.org/gnusocial/index.php" with the domain name
you're hosting the .well-known handler on.

View File

@@ -0,0 +1,56 @@
Initial simple way to Webfinger enable your domain -- needs PHP.
================================================================
This guide needs some updating, since it will only guide you to present
XML data (while the curl command likely gives you JSON). The workaround
is to simply make curl get 'webfinger.xml' instead, and/or have another
file that contains JSON, but that requires editing the PHP file as well.
Step 1
======
Put the 'dot-well-known' on your website, so it loads at:
https://example.com/.well-known/
(Remember the . at the beginning of this one, which is common practice
for "hidden" files and why we have renamed it "dot-")
Step 2
======
Edit the .well-known/host-meta file and replace "example.com" with the
domain name you're hosting the .well-known directory on.
Using vim you can do this as a quick method:
$ vim .well-known/host-meta [ENTER]
:%s/example.com/domain.com/ [ENTER]
:wq [ENTER]
Step 3
======
For each user on your site, and this might only be you...
In the webfinger directory, make a copy of the example@example.com.xml file
so that it's called (replace username and example.com with appropriate
values, the domain name should be the same as you're "socialifying"):
username@example.com.xml
Then edit the file contents, replacing "social.example.com" with your
GNU social instance's base path, and change the user ID number (and
nickname for the FOAF link) to that of your account on your social
site. If you don't know your user ID number, you can see this on your
GNU social profile page by looking at the destination URLs in the
Feeds links.
PROTIP: You can get the bulk of the contents (note the <Subject> element though)
from curling down your real webfinger data:
$ curl https://social.example.com/.well-known/webfinger?resource=acct:username@social.example.com
Finally
=======
Using this method, though fiddly, you can now be @user@domain without
the need for any prefixes for subdomains, etc.

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0" xmlns:hm="http://host-meta.net/xrd/1.0">
<Link rel="lrdd" type="application/xrd+xml"
template="https://example.com/.well-known/webfinger?resource={uri}"/>
</XRD>

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
<Subject>acct:username@example.com</Subject>
<Alias>acct:username@social.example.com</Alias>
<Alias>https://social.example.com/user/1</Alias>
<Link rel="http://webfinger.net/rel/profile-page"
type="text/html"
href="https://social.example.com/user/1"/>
<Link rel="http://schemas.google.com/g/2010#updates-from"
type="application/atom+xml"
href="https://social.example.com/api/statuses/user_timeline/1.atom"/>
<!-- Is this/was this ever supported?
<Link rel="http://microformats.org/profile/hcard"
type="text/html"
href="https://social.example.com/hcard"/> -->
<Link rel="http://gmpg.org/xfn/11"
type="text/html"
href="https://social.example.com/user/1"/>
<Link rel="describedby"
type="application/rdf+xml"
href="https://social.example.com/username/foaf"/>
<Link rel="http://salmon-protocol.org/ns/salmon-replies"
href="https://social.example.com/main/salmon/user/1"/>
<Link rel="http://salmon-protocol.org/ns/salmon-mention"
href="https://social.example.com/main/salmon/user/1"/>
<Link rel="http://ostatus.org/schema/1.0/subscribe"
template="https://social.example.com/main/ostatussub?profile={uri}"/>
</XRD>

View File

@@ -1,56 +1,43 @@
<?php <?php
// FIXME: REPLACE \/ here /*
define('MY_GNUSOCIAL', 'https://www.example.org/gnusocial/index.php'); * GNU social
* Copyright (C) 2010, Free Software Foundation, Inc
/** *
* This is a general solution for when you can't have your GNU social instance in the domain root and for when you want to * This program is free software: you can redistribute it and/or modify
* socialfy from another domain. * 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/>.
*/ */
// From https://www.php.net/manual/en/function.getallheaders.php#84262 (joyview at gmail dot com)
if (!function_exists('getallheaders')) { // basename should make sure we can't escape this directory
function getallheaders() $u = basename($_GET['resource']);
{
$headers = []; if (!strpos($u, '@')) {
foreach ($_SERVER as $name => $value) { throw new Exception('Bad resource');
if (substr($name, 0, 5) == 'HTTP_') { exit(1);
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
}
} }
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, getallheaders());
curl_setopt($ch, CURLOPT_URL, MY_GNUSOCIAL . str_replace('webfinger/', 'webfinger', $_SERVER['REQUEST_URI']));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$response = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$body = substr($response, $header_size);
// From https://stackoverflow.com/a/10590242 (c.hill)
function get_headers_from_curl_response($response)
{
$headers = array();
$header_text = substr($response, 0, strpos($response, "\r\n\r\n")); if (mb_strpos($u, 'acct:')===0) {
$u = substr($u, 5);
foreach (explode("\r\n", $header_text) as $i => $line) {
if ($i === 0) {
$headers['http_code'] = $line;
} else {
list($key, $value) = explode(': ', $line);
$headers[$key] = $value;
}
}
return $headers;
} }
$headers = get_headers_from_curl_response($response);
foreach ($headers as $name => $value) { // Just to be a little bit safer, you know, with all the unicode stuff going on
header("{$name}: $value"); $u = filter_var($u, FILTER_SANITIZE_EMAIL);
$f = $u . ".xml";
if (file_exists($f)) {
header('Content-Disposition: attachment; filename="'.urlencode($f).'"');
header('Content-type: application/xrd+xml');
echo file_get_contents($f);
} }
echo $body;
curl_close($ch);

View File

@@ -44,11 +44,6 @@
# RewriteRule (.*) index.php/$1 [L,QSA] # RewriteRule (.*) index.php/$1 [L,QSA]
</IfModule> </IfModule>
# Enable X-Sendfile if available. Still needs to be enabled in the config
<IfModule mod_xsendfile.c>
XSendFile On
</IfModule>
<FilesMatch "\.(ini)"> <FilesMatch "\.(ini)">
<IfVersion < 2.3> <IfVersion < 2.3>
Order allow,deny Order allow,deny

View File

@@ -6,15 +6,7 @@ server {
server_name social.example.org; server_name social.example.org;
# redirect all traffic to HTTPS # redirect all traffic to HTTPS
return 301 https://$host$request_uri; rewrite ^ https://$host$request_uri? permanent;
}
map $sent_http_content_type $gnusocial_expires_policy {
default off;
text/css 30d;
application/javascript 30d;
~image/ 30d;
~video/ 30d;
} }
server { server {
@@ -24,8 +16,8 @@ server {
listen 443 ssl http2; listen 443 ssl http2;
# Root # Root
# FIXME: Change the path below to where you installed GNU social (GNU social's root + /public) # FIXME: Change the path below to where you installed GNU social
root /var/www/gnusocial/public; root /path/to/gnusocial/root;
# Server name # Server name
# FIXME: Change "social.example.org" to your site's domain name # FIXME: Change "social.example.org" to your site's domain name
@@ -39,36 +31,14 @@ server {
# Index # Index
index index.php; index index.php;
# Enable browser caching for JS, CSS, images, audio, video
expires $gnusocial_expires_policy;
# X-Accel/X-Sendfile. Still needs to be enabled in the config
location ^~ /file {
internal;
# FIXME: Change "/path/to/gnusocial/root/" to the folder where
# attachments are stored (normally the same as the site root)
root /path/to/gnusocial/root/;
# Enable compression for images, audio, video to save bandwidth
# gzip on;
# gzip_comp_level 4;
}
# PHP # PHP
# FIXME: Change "php7.X" to your version of fpm location ~ ^/(index|install)\.php$ {
location ~ ^/(index|install)\.php(/.*)?$ {
#location ^~ /index.php { #location ^~ /index.php {
include fastcgi_params; include fastcgi_params;
include snippets/fastcgi-php.conf;
fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_pass unix:/run/php/php-fpm.sock;
set $path_info $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $request_filename;
try_files $fastcgi_script_name =404;
fastcgi_pass unix:/run/php/php7.X-fpm.sock;
fastcgi_index index.php;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
} }
# Don't allow any PHP file other than index.php to be executed # Don't allow any PHP file other than index.php to be executed
@@ -83,11 +53,6 @@ server {
try_files $uri $uri/ @index_handler; try_files $uri $uri/ @index_handler;
} }
# If avatars are located at /path/to/gnusocial/root/file (default)
location ^~ /avatar {
rewrite ^(.*)$ /file/$1 last;
}
# Fancy URLs # Fancy URLs
error_page 404 @index_handler; error_page 404 @index_handler;
location @index_handler { location @index_handler {
@@ -112,4 +77,13 @@ server {
# client_max_body_size 15M; # client_max_body_size 15M;
# client_body_buffer_size 128k; # client_body_buffer_size 128k;
# gzip_vary on; # gzip_vary on;
#
# location ~* \.(?:css|js|woff|svg|gif|png|webp|ttf|ico|jpe?g)$ {
# gzip on;
# gzip_comp_level 4;
# add_header Cache-Control "public";
# expires 30d;
# access_log off;
# log_not_found off;
# }
} }

View File

@@ -1,17 +0,0 @@
# Versioning
## Release cycle
We follow Semantic Versioning as defined on [https://semver.org/](https://semver.org).
The GNU social platform has a monthly release cycle. That is, we only increment the version number on day 1 of each month.
For GNU social plugins, we increment version number by commit. Plugins update have a propagation of the same type in the
GNU social's monthly version bump.
If we have various patch type updates in a month, we only bump it by one in the end of the month. If in the same month
we have a minor too, we will only bump the minor value.
# Lifecycle
GNU social has 'dev', 'alpha', 'beta', 'rc' and 'release' cycles. We usually are in `dev` during summer. When we finish a `dev` cycle we release an `alpha` (`dev`s aren't tagged as releases). From `alpha` to `release` it depends on how perfect GNU social is after the end of the `dev` cycle. But we use the number after `alpha` instead of `patch` number for small bug fixes when in this cycle. When we finally go from a `r`elease `c`andidate to a `release`, we party... and we use semver for all the small changes until we start working in another `dev` cycle (usually on another summer).

View File

@@ -27,8 +27,8 @@ PHP modules
The following software packages are *required* for this software to The following software packages are *required* for this software to
run correctly. run correctly.
- PHP 7.3+ - PHP 7+ PHP7.x is also supported.
- MariaDB 10.3+ - MariaDB 5+ MariaDB 10.x is also supported.
- Web server Apache, lighttpd and nginx will all work. CGI mode is - Web server Apache, lighttpd and nginx will all work. CGI mode is
recommended and also some variant of 'suexec' (or a recommended and also some variant of 'suexec' (or a
proper setup php-fpm pool) proper setup php-fpm pool)
@@ -50,6 +50,7 @@ functional setup of GNU social:
- php-opcache Improved PHP performance by precompilation - php-opcache Improved PHP performance by precompilation
- php-readline For interactive scripts - php-readline For interactive scripts
- php-xml XML parser - php-xml XML parser
- php-ds Faster data structures
NOTE: Some distros require manual enabling in the relevant php.ini for some modules. NOTE: Some distros require manual enabling in the relevant php.ini for some modules.
@@ -69,6 +70,7 @@ For some functionality, you will also need the following extensions:
- gettext For multiple languages. Default on many PHP installs; - gettext For multiple languages. Default on many PHP installs;
will be emulated if not present. will be emulated if not present.
- exif For thumbnails to be properly oriented. - exif For thumbnails to be properly oriented.
- php-ds For faster data structures; will be emulated if not present.
You may also experience better performance from your site if you configure You may also experience better performance from your site if you configure
a PHP cache/accelerator. Most distributions come with "opcache" support. a PHP cache/accelerator. Most distributions come with "opcache" support.

View File

@@ -7,9 +7,6 @@ plugin_mo = $(patsubst %.po,%.mo,$(wildcard plugins/*/locale/*/LC_MESSAGES/*.po)
translations : $(core_mo) $(plugin_mo) translations : $(core_mo) $(plugin_mo)
upgrade :
php scripts/upgrade.php
clean : clean :
rm -f $(core_mo) $(plugin_mo) rm -f $(core_mo) $(plugin_mo)

View File

@@ -1,5 +1,5 @@
# GNU social 2.0.x # GNU social 1.20.x
(c) 2010-2021 Free Software Foundation, Inc (c) 2010-2019 Free Software Foundation, Inc
This is the README file for GNU social, the free This is the README file for GNU social, the free
software social networking platform. It includes software social networking platform. It includes
@@ -36,7 +36,7 @@ XMPP), and specially-designed desktop clients that
support the Twitter API. support the Twitter API.
GNU social supports open standards (such as OStatus GNU social supports open standards (such as OStatus
<https://www.w3.org/community/ostatus/> and ActivityPub <https://activitypub.rocks/>) that lets users in <https://www.w3.org/community/ostatus/>) that lets users in
different networks follow each other. It enables a different networks follow each other. It enables a
distributed social network spread all across the distributed social network spread all across the
Web. Web.
@@ -102,20 +102,44 @@ unless you configured a separate logfile. This is
probably the first place to look if you're getting probably the first place to look if you're getting
weird behaviour from GNU social. weird behaviour from GNU social.
Do __not__ forget to run `/scripts/upgrade.php` if you're upgrading to this release. If you're tracking the unstable version of
GNU social in the git repository (see below), and you
get a compilation error ("unexpected T_STRING") in
the browser, check to see that you don't have any
conflicts in your code.
### Unstable version
If you're adventurous or impatient, you may want
to install the development version of GNU social.
To get it, use the git version control tool
<http://git-scm.com/> like so:
git clone git@notabug.org:diogo/gnu-social.git
In the current phase of development it is probably
recommended to use git as a means to stay up to date
with the source code. You can choose between these
branches:
* 1.20.x "oldstable", few updates, well tested coded
* master "stable", usually working well
* nightly "testing", most updates, not always working as expected
To keep it up-to-date, use `git pull`. Watch for conflicts!
As in any upgrade, do __not__ forget to run `/scripts/upgrade.php`.
## Further information ## Further information
There are several ways to get more information about GNU social. There are several ways to get more information about GNU social.
* The #social IRC channel at irc.libera.chat <https://libera.chat/>. * The #social IRC channel on freenode.net <https://www.freenode.net/>.
* The #social:libera.chat Matrix room * The unofficial XMPP room linked to IRC on <xmpp:gnusocial@conference.bka.li>
* The bridged XMPP room at <xmpp:gnusocial@conference.bka.li?join> * The GNU social website <https://gnu.io/social/>
* The GNU social website <https://gnusocial.rocks/>
* GNU social has a bug tracker for any defects you may find, or ideas for * GNU social has a bug tracker for any defects you may find, or ideas for
making things better. <https://notabug.org/diogo/gnu-social/issues> making things better. <https://notabug.org/diogo/gnu-social/issues>
* Patches are welcome, preferably to our repository on notabug.org. <https://notabug.org/diogo/gnu-social> * Patches are welcome, preferrably to our repository on notabug.org. <https://notabug.org/diogo/gnu-social>
## Credits ## Credits
@@ -123,9 +147,11 @@ An incomplete list of developers who've worked on GNU social,
or its predecessors StatusNet and Free Social has been made available or its predecessors StatusNet and Free Social has been made available
in `CREDITS.md`. in `CREDITS.md`.
### Release development team ### Current team
* Matt Lee
* Mikael Nordfeldth
* Diogo Cordeiro * Diogo Cordeiro
* Bruno Casteleiro
* Miguel Dantas
* Alexei Sorokin * Alexei Sorokin
* Many important contributions from GNU social Summer of Code students such as Bruno Casteleiro and Hugo Sales.

View File

@@ -1,47 +0,0 @@
# GNU social v2.0.0 - THIS. IS. GNU SOCIAL!!!
Release name chosen after 300 by Frank Miller where the main protagonist Leonidas, King of Sparta, declines peace with the
Persians, after being disrespected, by shouting at the Persian Messenger "This is Sparta!" and kicking him into a large well
proceeded by the killing of the other Persian messengers.
## For users/sysadmins
### Web server changes
- GS is now structurally divided in includes and public
- New media handling system, new important settings, refer to CONFIGURE doc and web server conf
- `$config['site']['x-static-delivery']`
- You must also review the [attachments section of CONFIGURE](https://notabug.org/diogo/gnu-social/src/new_modules_system/DOCUMENTATION/SYSTEM_ADMINISTRATORS/CONFIGURE.md#attachments).
- OEmbed upgraded to Embed plugin (and now we provide Open Graph information too)
- Composer was integrated
### Functionality
- Restored broken built-in plugins
- A more powerful Plugins management tool for sysadmins
### Federation
- Added ActivityPub support
- Enabled the search box to import remote notices and profiles
- Direct messages are now via ActivityPub only
### Load and Storage
- New queues system
- Support for Redis was added
- Support for PostgreSQL was added
## For developers
### APIs
- New Internal Session Handler and consequently a new API, migration should be simple enough
- Dropped support for StatusNet plugins, devs should now use GNUsocial class instead
### Modules
- Composer was integrated
- GS is now structurely divided in includes and public
- A more powerful Plugins management tool for sysadmins
Now plugins can be installed via the sysadmin UI. Therefore, now you should package your plugins either in tar or zip. The
package name must be the same as the plugin's internal name. For example, a plugin
named `Chuck Norris (social@chuck.norris)` must be in a file named: `ChuckNorris.tar`.
Inside there MUST be two directories, one named 'includes' with everything that should be unpacked
in `local/plugins/{plugin_name}` and another named 'public' with everything that should be unpacked
in `public/local/plugins/{plugin_name}`.

33
TODO.md
View File

@@ -1,33 +0,0 @@
# TODO
Hi! Thank you for your interest in contributing, please refer to
[DOCUMENTATION/DEVELOPERS](https://notabug.org/diogo/gnu-social/src/nightly/DOCUMENTATION/DEVELOPERS)
to learn how you can contribute.
## Pending
### [Core]
- Improve Cronish
- Run session garbage collection
- Cleanup Email Registration
- [Security] Review confirmation codes
```
<includeals> my guess is that the author intent was that the admin wouldn't have to verify his account, but has misread the User::register docblock
<xmpp-gnu> [XRevan86] https://notabug.org/diogo/gnu-social/src/nightly/plugins/EmailRegistration/EmailRegistrationPlugin.php#L114
<xmpp-gnu> [XRevan86] https://notabug.org/diogo/gnu-social/src/nightly/classes/Confirm_address.php#L52-L68
<xmpp-gnu> [XRevan86] Here's why 13 symbols
<xmpp-gnu> [XRevan86] https://notabug.org/diogo/gnu-social/src/nightly/classes/User.php#L343-L349 I wonder why parts of the code reinvent the wheel.
<xmpp-gnu> [XRevan86] $result = Confirm_address::saveNew($user->id, $email, 'email');
<xmpp-gnu> [XRevan86] I think it can be replaced with that.
<xmpp-gnu> [XRevan86] https://notabug.org/diogo/gnu-social/src/nightly/actions/emailsettings.php#L357-L364
<xmpp-gnu> [XRevan86] https://notabug.org/diogo/gnu-social/src/nightly/actions/imsettings.php#L316-L325
<xmpp-gnu> [XRevan86] The last one is a bit different, as it's not email. But I think it still applies.
<xmpp-gnu> [XRevan86] diogo: Maybe saveNew can be extended to accept variable bitsize (or better charsize).
<xmpp-gnu> [XRevan86] https://notabug.org/diogo/gnu-social/src/nightly/actions/smssettings.php#L320-L328 then this also can be altered
<xmpp-gnu> [XRevan86] but with keeping the original 40 bitsize
```
- [Database] Move from Pear DB to [PDO_DataObject](https://github.com/roojs/PDO_DataObject)
There are more pending tasks/ideas to implement in this
[repo's issues](https://notabug.org/diogo/gnu-social/issues).

View File

@@ -1,38 +1,42 @@
<?php <?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social 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.
//
// GNU social 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 GNU social. If not, see <http://www.gnu.org/licenses/>.
/** /**
* StatusNet, the distributed open-source microblogging tool
*
* Site access administration panel * Site access administration panel
* *
* 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 Settings * @category Settings
* @package GNUsocial * @package StatusNet
* @author Zach Copley <zach@status.net> * @author Zach Copley <zach@status.net>
* @copyright 2010 StatusNet, Inc. * @copyright 2010 StatusNet, Inc.
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/ */
defined('GNUSOCIAL') || die(); if (!defined('GNUSOCIAL')) { exit(1); }
/** /**
* Administer site access settings * Administer site access settings
* *
* @category Admin * @category Admin
* @package GNUsocial * @package StatusNet
* @author Zach Copley <zach@status.net> * @author Zach Copley <zach@status.net>
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/ */
class AccessadminpanelAction extends AdminPanelAction class AccessadminpanelAction extends AdminPanelAction
{ {
@@ -41,7 +45,7 @@ class AccessadminpanelAction extends AdminPanelAction
* *
* @return string page title * @return string page title
*/ */
public function title() function title()
{ {
// TRANS: Page title for Access admin panel that allows configuring site access. // TRANS: Page title for Access admin panel that allows configuring site access.
return _('Access'); return _('Access');
@@ -52,7 +56,7 @@ class AccessadminpanelAction extends AdminPanelAction
* *
* @return string instructions * @return string instructions
*/ */
public function getInstructions() function getInstructions()
{ {
// TRANS: Page notice. // TRANS: Page notice.
return _('Site access settings'); return _('Site access settings');
@@ -63,7 +67,7 @@ class AccessadminpanelAction extends AdminPanelAction
* *
* @return void * @return void
*/ */
public function showForm() function showForm()
{ {
$form = new AccessAdminPanelForm($this); $form = new AccessAdminPanelForm($this);
$form->show(); $form->show();
@@ -75,7 +79,7 @@ class AccessadminpanelAction extends AdminPanelAction
* *
* @return void * @return void
*/ */
public function saveSettings() function saveSettings()
{ {
static $booleans = array('site' => array('private', 'inviteonly', 'closed'), static $booleans = array('site' => array('private', 'inviteonly', 'closed'),
'public' => array('localonly')); 'public' => array('localonly'));
@@ -88,7 +92,7 @@ class AccessadminpanelAction extends AdminPanelAction
$config = new Config(); $config = new Config();
$config->query('START TRANSACTION'); $config->query('BEGIN');
foreach ($booleans as $section => $parts) { foreach ($booleans as $section => $parts) {
foreach ($parts as $setting) { foreach ($parts as $setting) {
@@ -109,7 +113,7 @@ class AccessAdminPanelForm extends AdminForm
* *
* @return int ID of the form * @return int ID of the form
*/ */
public function id() function id()
{ {
return 'form_site_admin_panel'; return 'form_site_admin_panel';
} }
@@ -119,7 +123,7 @@ class AccessAdminPanelForm extends AdminForm
* *
* @return string class of the form * @return string class of the form
*/ */
public function formClass() function formClass()
{ {
return 'form_settings'; return 'form_settings';
} }
@@ -129,7 +133,7 @@ class AccessAdminPanelForm extends AdminForm
* *
* @return string URL of the action * @return string URL of the action
*/ */
public function action() function action()
{ {
return common_local_url('accessadminpanel'); return common_local_url('accessadminpanel');
} }
@@ -139,7 +143,7 @@ class AccessAdminPanelForm extends AdminForm
* *
* @return void * @return void
*/ */
public function formData() function formData()
{ {
$this->out->elementStart('fieldset', array('id' => 'settings_admin_account_access')); $this->out->elementStart('fieldset', array('id' => 'settings_admin_account_access'));
// TRANS: Form legend for registration form. // TRANS: Form legend for registration form.
@@ -150,24 +154,18 @@ class AccessAdminPanelForm extends AdminForm
// TRANS: Checkbox instructions for admin setting "Invite only". // TRANS: Checkbox instructions for admin setting "Invite only".
$instructions = _('Make registration invitation only.'); $instructions = _('Make registration invitation only.');
// TRANS: Checkbox label for configuring site as invite only. // TRANS: Checkbox label for configuring site as invite only.
$this->out->checkbox( $this->out->checkbox('inviteonly', _('Invite only'),
'inviteonly', (bool) $this->value('inviteonly'),
_('Invite only'), $instructions);
(bool) $this->value('inviteonly'),
$instructions
);
$this->unli(); $this->unli();
$this->li(); $this->li();
// TRANS: Checkbox instructions for admin setting "Closed" (no new registrations). // TRANS: Checkbox instructions for admin setting "Closed" (no new registrations).
$instructions = _('Disable new registrations.'); $instructions = _('Disable new registrations.');
// TRANS: Checkbox label for disabling new user registrations. // TRANS: Checkbox label for disabling new user registrations.
$this->out->checkbox( $this->out->checkbox('closed', _('Closed'),
'closed', (bool) $this->value('closed'),
_('Closed'), $instructions);
(bool) $this->value('closed'),
$instructions
);
$this->unli(); $this->unli();
$this->out->elementEnd('ul'); $this->out->elementEnd('ul');
@@ -175,32 +173,26 @@ class AccessAdminPanelForm extends AdminForm
// Public access settings (login requirements for feeds etc.) // Public access settings (login requirements for feeds etc.)
$this->out->elementStart('fieldset', ['id' => 'settings_admin_public_access']); $this->out->elementStart('fieldset', array('id' => 'settings_admin_public_access'));
// TRANS: Form legend for registration form. // TRANS: Form legend for registration form.
$this->out->element('legend', null, _('Feed access')); $this->out->element('legend', null, _('Feed access'));
$this->out->elementStart('ul', 'form_data'); $this->out->elementStart('ul', 'form_data');
$this->li(); $this->li();
// TRANS: Checkbox instructions for admin setting "Private". // TRANS: Checkbox instructions for admin setting "Private".
$instructions = _('Prohibit anonymous users (not logged in) from viewing site?'); $instructions = _('Prohibit anonymous users (not logged in) from viewing site?');
// TRANS: Checkbox label for prohibiting anonymous users from viewing site. // TRANS: Checkbox label for prohibiting anonymous users from viewing site.
$this->out->checkbox( $this->out->checkbox('private', _m('LABEL', 'Private'),
'private', (bool) $this->value('private'),
_m('LABEL', 'Private'), $instructions);
(bool) $this->value('private'),
$instructions
);
$this->unli(); $this->unli();
$this->li(); $this->li();
// TRANS: Description of the full network notice stream views.. // TRANS: Description of the full network notice stream views..
$instructions = _('The full network view includes (public) remote notices which may be unrelated to local conversations.'); $instructions = _('The full network view includes (public) remote notices which may be unrelated to local conversations.');
// TRANS: Checkbox label for hiding remote network posts if they have not been interacted with locally. // TRANS: Checkbox label for hiding remote network posts if they have not been interacted with locally.
$this->out->checkbox( $this->out->checkbox('localonly', _('Restrict full network view to accounts'),
'localonly', (bool) $this->value('localonly', 'public'),
_('Restrict full network view to accounts'), $instructions);
(bool) $this->value('localonly', 'public'),
$instructions
);
$this->unli(); $this->unli();
$this->out->elementEnd('ul'); $this->out->elementEnd('ul');
@@ -212,7 +204,7 @@ class AccessAdminPanelForm extends AdminForm
* *
* @return void * @return void
*/ */
public function formActions() function formActions()
{ {
// TRANS: Button title to save access settings in site admin panel. // TRANS: Button title to save access settings in site admin panel.
$title = _('Save access settings.'); $title = _('Save access settings.');

View File

@@ -31,7 +31,7 @@ if (!defined('STATUSNET')) {
exit(1); exit(1);
} }
require_once INSTALLDIR . '/lib/profile/togglepeopletag.php'; require_once INSTALLDIR . '/lib/togglepeopletag.php';
/** /**
* *

View File

@@ -1,45 +1,55 @@
<?php <?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social 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.
//
// GNU social 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 GNU social. If not, see <http://www.gnu.org/licenses/>.
/** /**
* StatusNet, the distributed open-source microblogging tool
*
* Show the newest groups * Show the newest groups
* *
* 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 API * @category API
* @package GNUsocial * @package StatusNet
* @author Craig Andrews <candrews@integralblue.com> * @author Craig Andrews <candrews@integralblue.com>
* @author Evan Prodromou <evan@status.net> * @author Evan Prodromou <evan@status.net>
* @author Jeffery To <jeffery.to@gmail.com> * @author Jeffery To <jeffery.to@gmail.com>
* @author Zach Copley <zach@status.net> * @author Zach Copley <zach@status.net>
* @copyright 2009 StatusNet, Inc. * @copyright 2009 StatusNet, Inc.
* @copyright 2009 Free Software Foundation, Inc http://www.fsf.org * @copyright 2009 Free Software Foundation, Inc http://www.fsf.org
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/ */
defined('GNUSOCIAL') || die(); if (!defined('STATUSNET')) {
exit(1);
}
/** /**
* Returns of the lastest 20 groups for the site * Returns of the lastest 20 groups for the site
* *
* @copyright 2009 StatusNet, Inc. * @category API
* @copyright 2009 Free Software Foundation, Inc http://www.fsf.org * @package StatusNet
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later * @author Craig Andrews <candrews@integralblue.com>
* @author Evan Prodromou <evan@status.net>
* @author Jeffery To <jeffery.to@gmail.com>
* @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/
*/ */
class ApiGroupListAllAction extends ApiPrivateAuthAction class ApiGroupListAllAction extends ApiPrivateAuthAction
{ {
public $groups = null; var $groups = null;
/** /**
* Take arguments for running * Take arguments for running
@@ -48,7 +58,7 @@ class ApiGroupListAllAction extends ApiPrivateAuthAction
* *
* @return boolean success flag * @return boolean success flag
*/ */
public function prepare(array $args = []) function prepare(array $args = array())
{ {
parent::prepare($args); parent::prepare($args);
@@ -67,7 +77,7 @@ class ApiGroupListAllAction extends ApiPrivateAuthAction
* *
* @return void * @return void
*/ */
public function handle() function handle()
{ {
parent::handle(); parent::handle();
@@ -80,7 +90,7 @@ class ApiGroupListAllAction extends ApiPrivateAuthAction
// TRANS: Message is used as a subtitle when listing the latest 20 groups. %s is a site name. // TRANS: Message is used as a subtitle when listing the latest 20 groups. %s is a site name.
$subtitle = sprintf(_("groups on %s"), $sitename); $subtitle = sprintf(_("groups on %s"), $sitename);
switch ($this->format) { switch($this->format) {
case 'xml': case 'xml':
$this->showXmlGroups($this->groups); $this->showXmlGroups($this->groups);
break; break;
@@ -118,23 +128,25 @@ class ApiGroupListAllAction extends ApiPrivateAuthAction
* *
* @return array groups * @return array groups
*/ */
public function getGroups() function getGroups()
{ {
$qry = 'SELECT user_group.* '.
'from user_group join local_group on user_group.id = local_group.group_id '.
'order by created desc ';
$offset = intval($this->page - 1) * intval($this->count);
$limit = intval($this->count);
if (common_config('db', 'type') == 'pgsql') {
$qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset;
} else {
$qry .= ' LIMIT ' . $offset . ', ' . $limit;
}
$group = new User_group(); $group = new User_group();
$group->selectAdd(); $group->query($qry);
$group->selectAdd('user_group.*');
$group->joinAdd(['id', 'local_group:group_id']);
$group->orderBy('user_group.created DESC, user_group.id DESC');
$offset = ((int) $this->page - 1) * (int) $this->count; $groups = array();
$group->limit($offset, $this->count); while ($group->fetch()) {
$groups[] = clone($group);
$groups = [];
if ($group->find()) {
while ($group->fetch()) {
$groups[] = clone $group;
}
} }
return $groups; return $groups;
@@ -147,7 +159,7 @@ class ApiGroupListAllAction extends ApiPrivateAuthAction
* *
* @return boolean true * @return boolean true
*/ */
public function isReadOnly($args) function isReadOnly($args)
{ {
return true; return true;
} }
@@ -157,7 +169,7 @@ class ApiGroupListAllAction extends ApiPrivateAuthAction
* *
* @return string datestamp of the site's latest group * @return string datestamp of the site's latest group
*/ */
public function lastModified() function lastModified()
{ {
if (!empty($this->groups) && (count($this->groups) > 0)) { if (!empty($this->groups) && (count($this->groups) > 0)) {
return strtotime($this->groups[0]->created); return strtotime($this->groups[0]->created);
@@ -174,9 +186,10 @@ class ApiGroupListAllAction extends ApiPrivateAuthAction
* *
* @return string etag * @return string etag
*/ */
public function etag() function etag()
{ {
if (!empty($this->groups) && (count($this->groups) > 0)) { if (!empty($this->groups) && (count($this->groups) > 0)) {
$last = count($this->groups) - 1; $last = count($this->groups) - 1;
return '"' . implode( return '"' . implode(

View File

@@ -1,38 +1,44 @@
<?php <?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social 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.
//
// GNU social 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 GNU social. If not, see <http://www.gnu.org/licenses/>.
/** /**
* StatusNet, the distributed open-source microblogging tool
*
* Update a group's profile * Update a group's profile
* *
* 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 API * @category API
* @package GNUsocial * @package StatusNet
* @author Zach Copley <zach@status.net> * @author Zach Copley <zach@status.net>
* @copyright 2010 StatusNet, Inc. * @copyright 2010 StatusNet, Inc.
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/ */
defined('GNUSOCIAL') || die(); if (!defined('STATUSNET')) {
exit(1);
}
/** /**
* API analog to the group edit page * API analog to the group edit page
* *
* @category API * @category API
* @package GNUsocial * @package StatusNet
* @author Zach Copley <zach@status.net> * @author Zach Copley <zach@status.net>
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/ */
class ApiGroupProfileUpdateAction extends ApiAuthAction class ApiGroupProfileUpdateAction extends ApiAuthAction
{ {
@@ -94,21 +100,20 @@ class ApiGroupProfileUpdateAction extends ApiAuthAction
$this->clientError(_('You must be an admin to edit the group.'), 403); $this->clientError(_('You must be an admin to edit the group.'), 403);
} }
$this->group->query('START TRANSACTION'); $this->group->query('BEGIN');
$orig = clone($this->group); $orig = clone($this->group);
try { try {
if (common_config('profile', 'changenick') == true && $this->group->nickname !== $this->nickname) { if (common_config('profile', 'changenick') == true && $this->group->nickname !== $this->nickname) {
try { try {
$this->group->nickname = Nickname::normalize($this->nickname, true); $this->group->nickname = Nickname::normalize($this->nickname, true);
} catch (NicknameException $e) { } catch (NicknameException $e) {
throw new ApiValidationException($e->getMessage()); throw new ApiValidationException($e->getMessage());
} }
$this->group->mainpage = common_local_url( $this->group->mainpage = common_local_url('showgroup',
'showgroup', array('nickname' => $this->group->nickname));
['nickname' => $this->group->nickname]
);
} }
if (!empty($this->fullname)) { if (!empty($this->fullname)) {
@@ -130,6 +135,7 @@ class ApiGroupProfileUpdateAction extends ApiAuthAction
$this->validateLocation(); $this->validateLocation();
$this->group->location = $this->location; $this->group->location = $this->location;
} }
} catch (ApiValidationException $ave) { } catch (ApiValidationException $ave) {
$this->clientError($ave->getMessage(), 400); $this->clientError($ave->getMessage(), 400);
} }
@@ -161,7 +167,7 @@ class ApiGroupProfileUpdateAction extends ApiAuthAction
$this->group->query('COMMIT'); $this->group->query('COMMIT');
switch ($this->format) { switch($this->format) {
case 'xml': case 'xml':
$this->showSingleXmlGroup($this->group); $this->showSingleXmlGroup($this->group);
break; break;
@@ -174,7 +180,7 @@ class ApiGroupProfileUpdateAction extends ApiAuthAction
} }
} }
public function validateHomepage() function validateHomepage()
{ {
if (!is_null($this->homepage) if (!is_null($this->homepage)
&& (strlen($this->homepage) > 0) && (strlen($this->homepage) > 0)
@@ -186,7 +192,7 @@ class ApiGroupProfileUpdateAction extends ApiAuthAction
} }
} }
public function validateFullname() function validateFullname()
{ {
if (!is_null($this->fullname) && mb_strlen($this->fullname) > 255) { if (!is_null($this->fullname) && mb_strlen($this->fullname) > 255) {
throw new ApiValidationException( throw new ApiValidationException(
@@ -196,21 +202,19 @@ class ApiGroupProfileUpdateAction extends ApiAuthAction
} }
} }
public function validateDescription() function validateDescription()
{ {
if (User_group::descriptionTooLong($this->description)) { if (User_group::descriptionTooLong($this->description)) {
// TRANS: API validation exception thrown when description does not validate. // TRANS: API validation exception thrown when description does not validate.
// TRANS: %d is the maximum description length and used for plural. // TRANS: %d is the maximum description length and used for plural.
throw new ApiValidationException(sprintf( throw new ApiValidationException(sprintf(_m('Description is too long (maximum %d character).',
_m('Description is too long (maximum %d character).', 'Description is too long (maximum %d characters).',
'Description is too long (maximum %d characters).', User_group::maxDescription()),
User_group::maxDescription()), User_group::maxDescription()));
User_group::maxDescription()
));
} }
} }
public function validateLocation() function validateLocation()
{ {
if (!is_null($this->location) && mb_strlen($this->location) > 255) { if (!is_null($this->location) && mb_strlen($this->location) > 255) {
throw new ApiValidationException( throw new ApiValidationException(
@@ -220,13 +224,11 @@ class ApiGroupProfileUpdateAction extends ApiAuthAction
} }
} }
public function validateAliases() function validateAliases()
{ {
try { try {
$aliases = array_map( $aliases = array_map(array('Nickname', 'normalize'),
['Nickname', 'normalize'], array_unique(preg_split('/[\s,]+/', $this->aliasstring)));
array_unique(preg_split('/[\s,]+/', $this->aliasstring))
);
} catch (NicknameException $e) { } catch (NicknameException $e) {
throw new ApiValidationException(sprintf('Error processing aliases: %s', $e->getMessage())); throw new ApiValidationException(sprintf('Error processing aliases: %s', $e->getMessage()));
} }
@@ -234,12 +236,10 @@ class ApiGroupProfileUpdateAction extends ApiAuthAction
if (count($aliases) > common_config('group', 'maxaliases')) { if (count($aliases) > common_config('group', 'maxaliases')) {
// TRANS: API validation exception thrown when aliases do not validate. // TRANS: API validation exception thrown when aliases do not validate.
// TRANS: %d is the maximum number of aliases and used for plural. // TRANS: %d is the maximum number of aliases and used for plural.
throw new ApiValidationException(sprintf( throw new ApiValidationException(sprintf(_m('Too many aliases! Maximum %d allowed.',
_m('Too many aliases! Maximum %d allowed.', 'Too many aliases! Maximum %d allowed.',
'Too many aliases! Maximum %d allowed.', common_config('group', 'maxaliases')),
common_config('group', 'maxaliases')), common_config('group', 'maxaliases')));
common_config('group', 'maxaliases')
));
} }
return $aliases; return $aliases;

View File

@@ -30,7 +30,7 @@ if (!defined('STATUSNET')) {
exit(1); exit(1);
} }
require_once INSTALLDIR . '/lib/api/apilistusers.php'; require_once INSTALLDIR . '/lib/apilistusers.php';
class ApiListMembersAction extends ApiListUsersAction class ApiListMembersAction extends ApiListUsersAction
{ {

Some files were not shown because too many files have changed in this diff Show More