Mikael Nordfeldth
871912a00a
Plugins didn't match lib/plugin.php onPluginVersion function definition
...
I ran:
for i in `grep -R onPluginVersion...version plugins/|cut -d: -f1`; do sed -i '{ s/\(onPluginVersion(\)\(\&\$versions\)/\1array \2/ }' $i; done
2015-06-06 22:04:01 +02:00
Mikael Nordfeldth
fe6498e7c8
Send objects instead of integers to File_to_post::processNew
2015-06-04 17:36:11 +02:00
Mikael Nordfeldth
1e89540c3f
Merge branch 'nightly', beginning of 1.2.x
...
Conflicts:
plugins/APC/locale/APC.pot
plugins/APC/locale/ast/LC_MESSAGES/APC.po
plugins/APC/locale/be-tarask/LC_MESSAGES/APC.po
plugins/APC/locale/br/LC_MESSAGES/APC.po
plugins/APC/locale/de/LC_MESSAGES/APC.po
plugins/APC/locale/es/LC_MESSAGES/APC.po
plugins/APC/locale/eu/LC_MESSAGES/APC.po
plugins/APC/locale/fr/LC_MESSAGES/APC.po
plugins/APC/locale/gl/LC_MESSAGES/APC.po
plugins/APC/locale/he/LC_MESSAGES/APC.po
plugins/APC/locale/ia/LC_MESSAGES/APC.po
plugins/APC/locale/id/LC_MESSAGES/APC.po
plugins/APC/locale/it/LC_MESSAGES/APC.po
plugins/APC/locale/mk/LC_MESSAGES/APC.po
plugins/APC/locale/ms/LC_MESSAGES/APC.po
plugins/APC/locale/nb/LC_MESSAGES/APC.po
plugins/APC/locale/nl/LC_MESSAGES/APC.po
plugins/APC/locale/pl/LC_MESSAGES/APC.po
plugins/APC/locale/pt/LC_MESSAGES/APC.po
plugins/APC/locale/pt_BR/LC_MESSAGES/APC.po
plugins/APC/locale/ru/LC_MESSAGES/APC.po
plugins/APC/locale/tl/LC_MESSAGES/APC.po
plugins/APC/locale/uk/LC_MESSAGES/APC.po
plugins/APC/locale/zh_CN/LC_MESSAGES/APC.po
plugins/Adsense/locale/Adsense.pot
plugins/Adsense/locale/be-tarask/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/br/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/ca/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/de/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/es/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/eu/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/fr/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/gl/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/he/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/ia/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/it/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/ja/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/ka/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/lb/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/lt/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/mk/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/ms/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/nb/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/nl/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/pl/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/pt/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/pt_BR/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/ru/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/sv/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/tl/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/tr/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/uk/LC_MESSAGES/Adsense.po
plugins/Adsense/locale/zh_CN/LC_MESSAGES/Adsense.po
plugins/Aim/locale/Aim.pot
plugins/Aim/locale/af/LC_MESSAGES/Aim.po
plugins/Aim/locale/ca/LC_MESSAGES/Aim.po
plugins/Aim/locale/de/LC_MESSAGES/Aim.po
plugins/Aim/locale/es/LC_MESSAGES/Aim.po
plugins/Aim/locale/eu/LC_MESSAGES/Aim.po
plugins/Aim/locale/fi/LC_MESSAGES/Aim.po
plugins/Aim/locale/fr/LC_MESSAGES/Aim.po
plugins/Aim/locale/gl/LC_MESSAGES/Aim.po
plugins/Aim/locale/ia/LC_MESSAGES/Aim.po
plugins/Aim/locale/it/LC_MESSAGES/Aim.po
plugins/Aim/locale/mk/LC_MESSAGES/Aim.po
plugins/Aim/locale/ms/LC_MESSAGES/Aim.po
plugins/Aim/locale/nl/LC_MESSAGES/Aim.po
plugins/Aim/locale/pl/LC_MESSAGES/Aim.po
plugins/Aim/locale/pt/LC_MESSAGES/Aim.po
plugins/Aim/locale/sv/LC_MESSAGES/Aim.po
plugins/Aim/locale/tl/LC_MESSAGES/Aim.po
plugins/Aim/locale/uk/LC_MESSAGES/Aim.po
plugins/Blog/locale/Blog.pot
plugins/Blog/locale/ar/LC_MESSAGES/Blog.po
plugins/Blog/locale/br/LC_MESSAGES/Blog.po
plugins/Blog/locale/ca/LC_MESSAGES/Blog.po
plugins/Blog/locale/de/LC_MESSAGES/Blog.po
plugins/Blog/locale/es/LC_MESSAGES/Blog.po
plugins/Blog/locale/eu/LC_MESSAGES/Blog.po
plugins/Blog/locale/fr/LC_MESSAGES/Blog.po
plugins/Blog/locale/gl/LC_MESSAGES/Blog.po
plugins/Blog/locale/ia/LC_MESSAGES/Blog.po
plugins/Blog/locale/it/LC_MESSAGES/Blog.po
plugins/Blog/locale/lt/LC_MESSAGES/Blog.po
plugins/Blog/locale/mk/LC_MESSAGES/Blog.po
plugins/Blog/locale/nl/LC_MESSAGES/Blog.po
plugins/Blog/locale/tl/LC_MESSAGES/Blog.po
plugins/Blog/locale/tr/LC_MESSAGES/Blog.po
plugins/Irc/locale/Irc.pot
plugins/Irc/locale/ca/LC_MESSAGES/Irc.po
plugins/Irc/locale/de/LC_MESSAGES/Irc.po
plugins/Irc/locale/es/LC_MESSAGES/Irc.po
plugins/Irc/locale/eu/LC_MESSAGES/Irc.po
plugins/Irc/locale/fi/LC_MESSAGES/Irc.po
plugins/Irc/locale/fr/LC_MESSAGES/Irc.po
plugins/Irc/locale/gl/LC_MESSAGES/Irc.po
plugins/Irc/locale/ia/LC_MESSAGES/Irc.po
plugins/Irc/locale/it/LC_MESSAGES/Irc.po
plugins/Irc/locale/ja/LC_MESSAGES/Irc.po
plugins/Irc/locale/mk/LC_MESSAGES/Irc.po
plugins/Irc/locale/nl/LC_MESSAGES/Irc.po
plugins/Irc/locale/sv/LC_MESSAGES/Irc.po
plugins/Irc/locale/tl/LC_MESSAGES/Irc.po
plugins/Irc/locale/tr/LC_MESSAGES/Irc.po
plugins/Irc/locale/uk/LC_MESSAGES/Irc.po
plugins/Spotify/locale/Spotify.pot
plugins/Spotify/locale/de/LC_MESSAGES/Spotify.po
plugins/Spotify/locale/es/LC_MESSAGES/Spotify.po
plugins/Spotify/locale/fr/LC_MESSAGES/Spotify.po
plugins/Spotify/locale/gl/LC_MESSAGES/Spotify.po
plugins/Spotify/locale/he/LC_MESSAGES/Spotify.po
plugins/Spotify/locale/ia/LC_MESSAGES/Spotify.po
plugins/Spotify/locale/mk/LC_MESSAGES/Spotify.po
plugins/Spotify/locale/nl/LC_MESSAGES/Spotify.po
plugins/Spotify/locale/sv/LC_MESSAGES/Spotify.po
plugins/Spotify/locale/tl/LC_MESSAGES/Spotify.po
plugins/TinyMCE/locale/TinyMCE.pot
plugins/TinyMCE/locale/ca/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/de/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/eo/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/es/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/fr/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/gl/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/he/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/ia/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/id/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/ja/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/mk/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/ms/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/nb/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/nl/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/pt/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/pt_BR/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/ru/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/tl/LC_MESSAGES/TinyMCE.po
plugins/TinyMCE/locale/uk/LC_MESSAGES/TinyMCE.po
plugins/XCache/locale/XCache.pot
plugins/XCache/locale/ast/LC_MESSAGES/XCache.po
plugins/XCache/locale/br/LC_MESSAGES/XCache.po
plugins/XCache/locale/de/LC_MESSAGES/XCache.po
plugins/XCache/locale/es/LC_MESSAGES/XCache.po
plugins/XCache/locale/eu/LC_MESSAGES/XCache.po
plugins/XCache/locale/fi/LC_MESSAGES/XCache.po
plugins/XCache/locale/fr/LC_MESSAGES/XCache.po
plugins/XCache/locale/gl/LC_MESSAGES/XCache.po
plugins/XCache/locale/he/LC_MESSAGES/XCache.po
plugins/XCache/locale/ia/LC_MESSAGES/XCache.po
plugins/XCache/locale/id/LC_MESSAGES/XCache.po
plugins/XCache/locale/mk/LC_MESSAGES/XCache.po
plugins/XCache/locale/ms/LC_MESSAGES/XCache.po
plugins/XCache/locale/nb/LC_MESSAGES/XCache.po
plugins/XCache/locale/nl/LC_MESSAGES/XCache.po
plugins/XCache/locale/pl/LC_MESSAGES/XCache.po
plugins/XCache/locale/pt/LC_MESSAGES/XCache.po
plugins/XCache/locale/pt_BR/LC_MESSAGES/XCache.po
plugins/XCache/locale/ru/LC_MESSAGES/XCache.po
plugins/XCache/locale/tl/LC_MESSAGES/XCache.po
plugins/XCache/locale/tr/LC_MESSAGES/XCache.po
plugins/XCache/locale/uk/LC_MESSAGES/XCache.po
plugins/YammerImport/locale/YammerImport.pot
plugins/YammerImport/locale/br/LC_MESSAGES/YammerImport.po
plugins/YammerImport/locale/de/LC_MESSAGES/YammerImport.po
plugins/YammerImport/locale/es/LC_MESSAGES/YammerImport.po
plugins/YammerImport/locale/eu/LC_MESSAGES/YammerImport.po
plugins/YammerImport/locale/fr/LC_MESSAGES/YammerImport.po
plugins/YammerImport/locale/gl/LC_MESSAGES/YammerImport.po
plugins/YammerImport/locale/ia/LC_MESSAGES/YammerImport.po
plugins/YammerImport/locale/mk/LC_MESSAGES/YammerImport.po
plugins/YammerImport/locale/ms/LC_MESSAGES/YammerImport.po
plugins/YammerImport/locale/nl/LC_MESSAGES/YammerImport.po
plugins/YammerImport/locale/pl/LC_MESSAGES/YammerImport.po
plugins/YammerImport/locale/ru/LC_MESSAGES/YammerImport.po
plugins/YammerImport/locale/tl/LC_MESSAGES/YammerImport.po
plugins/YammerImport/locale/tr/LC_MESSAGES/YammerImport.po
plugins/YammerImport/locale/uk/LC_MESSAGES/YammerImport.po
2015-03-09 11:01:17 +01:00
digital dreamer
a452a3b1a0
Snapshot of the Transifex translation project - February 2015
2015-03-08 09:34:38 +01:00
Mikael Nordfeldth
bece816ec7
User class throws exception on register failure
2015-03-01 12:36:19 +01:00
Mikael Nordfeldth
2f86cd8602
utf8mb4 conversion on database with index adjusts
2015-02-12 18:18:55 +01:00
Mikael Nordfeldth
dc495a52ea
Merge commit 'refs/merge-requests/39' of https://gitorious.org/social/mainline into merge-requests/39
2015-02-09 11:35:19 +01:00
Chimo
74d4e2fa10
TwitterBridge: don't array_merge() non-arrays
...
Fixes: ErrorException: [2] array_merge(): Argument #2 is not an array
2015-02-08 20:11:50 -05:00
Chimo
55321af4c8
Make TwitterBridge less noisy
...
Empty timelines are no longer warnings, but debug information
2015-02-08 20:07:23 -05:00
Mikael Nordfeldth
faae9d069a
We're using URLMapper, not Net_URL_Mapper
2014-11-07 15:24:05 +01:00
Mikael Nordfeldth
fb1b80c915
Updating TwitterBridge README to be clearer on installation
2014-10-26 23:17:43 +01:00
Mats Sjöberg
376e63db77
TwitterBridge should not try to send replies to tweets back to Twitter if user hasn't selected to import tweets.
2014-08-21 21:04:06 +03:00
Mikael Nordfeldth
9933c00c4f
TwitterBridge PHP require_once paths now relative
2014-08-06 09:29:47 +02:00
Mikael Nordfeldth
7e597ea7cc
More Favorite pluginification (favecount, cache, menus(favecount, cache, menus))
2014-06-28 14:03:30 +02:00
Marcel van der Boom
42104612bd
Make sure the Attention::saveNew does not cause an exception so queue items get removed
...
It's less of a problem that one queue-item does not get handled, attention wise,
than that the queue keeps filling up. The typical error raised here is 'already exists'
so it's not even the case that the item won't get handled (it already has been).
The real problem is that the queue_item table accepts duplicates (content-wise) which it
should not.
2014-06-22 17:22:04 +02:00
Mikael Nordfeldth
db443e9374
File::processNew now static and always throws exception on failure
2014-06-02 02:11:23 +02:00
Mikael Nordfeldth
888ac77906
"Twitter card" support had badly referenced HTML outputter
2014-05-10 02:01:58 +02:00
Mikael Nordfeldth
b77a09fdee
Notice URIs are not necessarily URLs.
...
Let's use getUrl() for URL retrieval. May throw exceptions, but
only if it's a Notice that cannot be linked like that anyway.
2014-04-30 20:44:23 +02:00
Mikael Nordfeldth
c00491cd7a
Cosmetic changes to common_redirect, clientError, serverError
...
Since these functions exit (or throw exception) after running, there
is no need to have a 'return' statement or similar afterwards.
2014-03-10 00:25:57 +01:00
Mikael Nordfeldth
4e8697c96e
We don't add to inbox anymore.
2014-03-07 00:05:21 +01:00
Mikael Nordfeldth
aff6a66178
Add Attention stuff to TwitterBridge
2014-03-06 14:28:27 +01:00
Mikael Nordfeldth
2272cc244d
Removed Inbox from core (unused since 4b2a66ed29
)
...
Added the following FIXME:
How should a Twitter user get their Inbox filled with foreign tweets?
Every imported Twitter user has a profile in the Profile table, so we
could setup a Subscription entry for each of those, meaning they get
collected in the InboxNoticeStream... But this would mean a lot of
unnecessary entries and listings that generally just point to the
locked down Twitter service.
Let's figure out a good relation so we can connect any profile to any
imported foreign notice, so it shows up in the "all" feed.
2014-03-06 04:46:29 +01:00
Mikael Nordfeldth
5c505d8539
Conversation ID now gets set from initial notice.
...
This will work without much extra effort because there will always be
more notices (higher value) than conversations (so no collisions).
But please run upgrade.php to avoid having an autoincrement id on
conversation table.
Installations using code after 2014-03-01 will have identical
conversation IDs to the initial (conversation root) notice IDs. This
will not affect older installations, which will have very different
values.
2014-03-01 17:12:40 +01:00
Jean Baptiste Favre
711f938892
Fiw TwitterBridge after SSL enforcement ( https://dev.twitter.com/discussions/24239 )
2014-01-26 22:27:16 +01:00
Mikael Nordfeldth
b09b968f96
Twitter search server has changed domain name (thanks mrvdb)
2013-12-04 13:43:04 +01:00
Mikael Nordfeldth
729c6eef36
Inbox class a bit more consistent in argument order and type
2013-11-09 01:18:44 +01:00
Mikael Nordfeldth
f110fc5c9a
Using GNUSOCIAL_VERSION instead of STATUSNET_VERSION
2013-11-01 13:51:41 +01:00
Mikael Nordfeldth
255943d78f
User agents and generators changed to GNU social
2013-11-01 13:46:05 +01:00
Mikael Nordfeldth
fcba540a14
Removed legacy OMB. Use OStatus for remote profiles.
2013-10-28 16:22:09 +01:00
Mikael Nordfeldth
a38ed0057a
Moved jbfavre's Twitter card support to Twitter plugin
...
It was causing problems with an undefined TWITTER_SERVICE constant.
2013-10-22 20:35:03 +02:00
Mikael Nordfeldth
6ed66d9c76
Local_group and User are now assumed to be in same namespace
2013-10-17 01:27:01 +02:00
Mikael Nordfeldth
db7ef52d13
Better use of Nickname validation functions
...
Nickname verifications on registration and updates for profiles (not yet
groups) have been improved.
Minor bugs in RegisterAction were also fixed, where multiple forms would
be outputed because the function did not return after showForm(). This
will be solved more permanently with throwing exceptions in the future.
2013-10-16 15:38:54 +02:00
Mikael Nordfeldth
fb94a16217
Moved Avatar retrieval into Avatar class
...
Backwards compatible functions are still in Profile class.
2013-10-06 15:55:06 +02:00
Mikael Nordfeldth
1c042028dc
PCRE modifier /e is deprecated in favour of preg_replace_callback()
2013-10-06 03:27:16 +02:00
Mikael Nordfeldth
d1558a1d8b
Fix Avatar-unlink plus better logging in TwitterImport
2013-10-05 11:32:43 +02:00
Mikael Nordfeldth
fb4e9b234d
Twitter Import improvements. Still buggy?
...
Apparently mrvdb has problems with duplicate inserts and missing files when
unlinking. It could be due to coding, or it could be due to parallelizing.
2013-10-04 13:36:45 +02:00
Mikael Nordfeldth
cd6fa512ac
Twitter Import + avatar fixes (cleaning up + fixing)
...
...there was also a typo in OstatussubAction ($avatarUrl not defined)
2013-10-03 15:28:51 +02:00
Mikael Nordfeldth
39f43e415d
Do not name anything getOriginal (because DB_DataObject calls that)
...
Avatar->getOriginal has been renamed getUploaded
Notice->getOriginal has been renamed getParent
2013-10-02 15:01:11 +02:00
Mikael Nordfeldth
b0dfc70a54
Properly unlink all old avatars when deleting/uploading a new
...
We're also now using $config['image']['jpegquality'] to determine the
quality setting for resized images.
To set Avatar max size, adjust $config['avatar']['maxsize']
The getAvatar call now throws exceptions too. Related changes applied.
Now let's move Profile->avatarUrl to the Avatar class!
2013-10-01 17:00:10 +02:00
Mikael Nordfeldth
93e878d7ca
Make better use of Subscription class
...
removed lib/subs.php as it was essentially only a wrapper for Subscription
2013-09-19 17:29:05 +02:00
Mikael Nordfeldth
de55d8f83b
plugins onAutoload now only overloads if necessary (extlibs etc.)
...
lib/plugin.php now has a parent onAutoload function that finds most common
files that are used in plugins (actions, dataobjects, forms, libs etc.) if
they are put in the standardised directories ('actions', 'classes', 'forms',
'lib' and perhaps some others in the future).
2013-08-28 16:10:30 +02:00
Mikael Nordfeldth
3a7261f70a
IMPORTANT: Making prev. Memcached_DataObject working again with schemaDef
...
Lots of the Memcached_DataObject classes stopped working when upgraded to
Managed_DataObject because they lacked schemaDef().
I have _hopefully_ made it so that all the references to the table uses
each class' schemaDef, rather than the more manual ColumnDef stuff. Not
all plugins have been tested thoroughly yet.
NOTE: This is applied with getKV calls instead of staticGet, as it was
important for PHP Strict Standards compliance to avoid calling the non-
static functions statically. (unfortunately DB and DB_DataObject still do
this within themselves...)
2013-08-21 09:48:42 +02:00
Mikael Nordfeldth
861e838add
pkeyGet is now static and more similar to getKV
...
Memcached_DataObject now defines
* pkeyGetClass to avoid collision with Managed_DataObject pkeyGet
* getClassKV to avoid collision with Managed_DataObject getKV
2013-08-18 15:42:51 +02:00
Mikael Nordfeldth
2a4dc77a63
The overloaded DB_DataObject function staticGet is now called getKV
...
I used this hacky sed-command (run it from your GNU Social root, or change the first grep's path to where it actually lies) to do a rough fix on all ::staticGet calls and rename them to ::getKV
sed -i -s -e '/DataObject::staticGet/I!s/::staticGet/::getKV/Ig' $(grep -R ::staticGet `pwd`/* | grep -v -e '^extlib' | grep -v DataObject:: |grep -v "function staticGet"|cut -d: -f1 |sort |uniq)
If you're applying this, remember to change the Managed_DataObject and Memcached_DataObject function definitions of staticGet to getKV!
This might of course take some getting used to, or modification fo StatusNet plugins, but the result is that all the static calls (to staticGet) are now properly made without breaking PHP Strict Standards. Standards are there to be followed (and they caused some very bad confusion when used with get_called_class)
Reasonably any plugin or code that tests for the definition of 'GNUSOCIAL' or similar will take this change into consideration.
2013-08-18 13:13:56 +02:00
Mikael Nordfeldth
e95f77d34c
Updating all Memcached_DataObject extended classes to Managed_DataObject
...
In some brief tests, this causes no problems.
In this state however, you would need to modify DB_DataObject to have a static declaration of staticget (and probably pkeyGet). The next commit will change the staticGet overload to a unique function name (like getKV for getKeyValue), which means we can properly call the function by PHP Strict Standards.
2013-08-18 12:32:32 +02:00
Mikael Nordfeldth
3ad3535cd8
Merge commit 'refs/merge-requests/230' of git://gitorious.org/statusnet/mainline into merge-requests/230
2013-08-12 12:37:46 +02:00
Evan Prodromou
3fc1d245a1
Merge 1.1.x into master
2013-07-16 10:57:06 -07:00
Jean Baptiste Favre
f1a3d5a386
PHP 5.4 Fix GetValidDaemons function definition for Xmpp & TwitterBridge plugins
2013-06-19 13:25:28 +02:00
Jean Baptiste Favre
707dd44f6b
Merge commit 'merge-requests/192' into statusnet_1.1.x
2013-06-15 20:11:24 +02:00
Jean Baptiste Favre
80da81ba14
Get rid of t.co links for notice's text version. Usefull for client using API. Complements merge-request #205 by @mmn
2013-06-15 11:30:17 +02:00