Commit Graph

3627 Commits

Author SHA1 Message Date
Mikael Nordfeldth
62596d462b Get the values from the correct object. 2015-03-06 00:47:18 +01:00
Mikael Nordfeldth
f35ea45e09 Values of 0 would not be updated because of DB_DataObject
Upstream bug causing (int)0 to be interpreted as a "null string":
https://pear.php.net/bugs/bug.php?id=20291
2015-03-06 00:44:00 +01:00
Mikael Nordfeldth
ec4e432d55 Subscription::ensureStart skips AlreadyFulfilledException
Sometimes we just want to accept the user's wrong, but when it comes
to remote APIs etc. we probably want to let the client know it has
done something already (in this case multiple identical subscription
requests - which might indicate to it that it should refresh the sub
lists or something).
2015-03-04 11:38:04 +01:00
Mikael Nordfeldth
19bf975e56 Aahhh, gotta run php -l before pushing stuff!!! 2015-03-01 12:47:48 +01:00
Mikael Nordfeldth
1227d2d710 Forgot to make syntax edits on last commit. 2015-03-01 12:45:58 +01:00
Mikael Nordfeldth
bece816ec7 User class throws exception on register failure 2015-03-01 12:36:19 +01:00
Mikael Nordfeldth
8fac7a9f6c StatusNet class renamed GNUsocial
also added backward compatible StatusNet class for the two calls I know
third party plugins use, isHTTPS and getActivePlugins
2015-02-27 12:44:15 +01:00
Mikael Nordfeldth
f7553d73a2 501 Not Implemented on timelines for remote users. 2015-02-25 16:31:02 +01:00
buttle
b9d4a9c9f9 added DocNav EVENT
Event to overide DocNav
two small css changes to indent notice footer correctly.
2015-02-24 21:51:31 +01:00
Mikael Nordfeldth
df2cc09362 $this->scoped->getUser() instead of common_current_user(); 2015-02-19 17:46:37 +01:00
Mikael Nordfeldth
042cb1604a ROLLBACK if query failed in email settings savePreferences 2015-02-19 17:43:08 +01:00
Mikael Nordfeldth
0deaf6c50c use common_purify to purify HTML, one function to rule them all 2015-02-18 00:14:28 +01:00
Mikael Nordfeldth
282f4d6a89 Various $this->scoped fixes and protected prepare/handle in API actions 2015-02-17 17:20:00 +01:00
Mikael Nordfeldth
901a825b61 Non-functional "retweeted to me" API call modified (but not fixed)
For some reason the "retweeted to me" part of the Twitter API was removed
when Evan made some inbox changes back in the StatusNet days. We might
recover this functionality, but not yet. The proper function calls are
however fixed in this commit.
2015-02-17 16:48:24 +01:00
Mikael Nordfeldth
75f35bcfe7 apiauth action with ->user changed to ->scoped 2015-02-17 16:39:27 +01:00
Chimo
7cea3f9f11 Add 'statusnet_textarea' backward-compatibility 2015-02-10 10:53:24 -05:00
Chimo
d816af9aa9 Prepopulate newnotice from URL arg 2015-02-09 18:06:26 -05:00
Mikael Nordfeldth
8616055959 Can now delete lists/peopletags (thanks MrB)
Reported on https://bugz.foocorp.net/T79
Fix by MrB: https://gist.github.com/mrvdb/0f5d84c9b56c0a390c4a
2015-02-08 23:48:35 +01:00
Mikael Nordfeldth
341ee2c3db Network public feed name fixed (prev. not "Network") 2015-02-06 12:52:42 +01:00
Mikael Nordfeldth
a89e91da79 By default, don't allow nick changes for profiles
This goes for both users and groups, since they share nickname namespace.

If you want to enable nickname changes, just add this to your config:

   $config['profile']['changenick'] = true;

This commit should cover all changes in our usual web forms as well as through
the API.
2015-02-04 21:25:14 +01:00
Mikael Nordfeldth
33beb83e86 Variable name updates in apigroupleave.php 2015-02-04 17:30:50 +01:00
Mikael Nordfeldth
9c7f8f1643 Inform API users if notice was deleted. 2015-02-03 21:21:12 +01:00
Mikael Nordfeldth
eff3256f59 API notice access was not access restricted 2015-01-31 16:27:21 +01:00
Mikael Nordfeldth
d1ac9a4b44 this->target was not available in the listitem 2015-01-30 00:15:55 +01:00
Mikael Nordfeldth
acd36698b4 A bunch of clientError that were called as serverError
Calling serverError with a clientError status code (4xx) means it will
automatically default to Internal Server Error (500) which is in the
server error status code range (5xx). That is undesirable.
2015-01-29 23:35:49 +01:00
Mikael Nordfeldth
95751331de Network wide public feed auth check fix 2015-01-29 23:30:13 +01:00
Mikael Nordfeldth
4c14794cae ApiTimelineNetworkPublicAction available now
Feeds added in NetworkpublicAction too.
2015-01-29 23:01:53 +01:00
Mikael Nordfeldth
14e22b2985 Let an administrator set config public/localonly
Available on /panel/access
2015-01-29 21:07:23 +01:00
Mikael Nordfeldth
4daa2e4644 Use 'StartpageAction' to determine what to show on / 2015-01-29 20:48:49 +01:00
Mikael Nordfeldth
a5d27d9ce7 /main/all will give a network-wide public stream
Qvitter had implemented this as a "PublicAndExternal" stream, but
I figured we might as well put it into the GNU social core.
2015-01-28 20:25:39 +01:00
Mikael Nordfeldth
12058c30b4 Managed_DataObject->updateWithKeys throws its own exception 2015-01-25 12:54:08 +01:00
Mikael Nordfeldth
4917a422a1 updateKeys -> updateWithKeys (w/ functionality) 2015-01-25 12:07:26 +01:00
Mikael Nordfeldth
132ac624a2 Attachment_thumbnailAction is a ManagedAction (doPreparation) 2015-01-25 11:23:04 +01:00
Mikael Nordfeldth
4b65275e41 AttachmentAction is a ManagedAction, don't implement handle()
This also gives us more freedom in Attachment_thumbnailAction for example
2015-01-25 02:25:28 +01:00
Mikael Nordfeldth
ce8389443b Let's not risk mixing two object types up 2015-01-25 02:24:41 +01:00
Mikael Nordfeldth
ef0a703bdd No need to pre-generate thumbnails anymore
Qvitter fixed their queet-expand-view! By not making thumbnails on upload
we'll save a bit of time and resources, saving the post much quicker.
2015-01-24 11:38:10 +01:00
Mikael Nordfeldth
09de2a17b5 Hack to force thumbnail generation directly on upload
Remove this when we know that third party frontends like Qvitter have
improved attachment handling.
2015-01-23 14:52:02 +01:00
Mikael Nordfeldth
6f410eda5c scoped instead of auth_user->getProfile() 2015-01-23 14:32:39 +01:00
Mikael Nordfeldth
fac9f4e545 Merge branch 'nightly' of gitorious.org:social/mainline into nightly 2015-01-21 23:45:49 +01:00
Mikael Nordfeldth
ce9d18c29d Only check if a nickname exists if site is non-private 2015-01-21 22:08:21 +01:00
Mikael Nordfeldth
fcc97c87d1 Only check if a nickname exists if site is non-private 2015-01-21 22:07:41 +01:00
Mikael Nordfeldth
8b585ff647 MediaFile upload simplifying 2015-01-21 17:39:48 +01:00
Mikael Nordfeldth
305c9f33a7 Registration coding cleanup
Mainly there was an Undefined variable: code in apiaccountregister.php
2015-01-18 13:06:12 +01:00
Mikael Nordfeldth
98afab74e2 Bad variable reference (needed $this->) 2015-01-18 12:56:17 +01:00
Mikael Nordfeldth
1d339bb118 Better test to see if uploaded media exists 2015-01-13 13:22:23 +01:00
Mikael Nordfeldth
bc51c6b64f Those variables were set for a reason
The ->_subscription variable etc. were set because they were used later.
2015-01-13 12:56:56 +01:00
Mikael Nordfeldth
65c540478e newnotice action always returns the notice's URL
Maybe could return conversation URL, but this will do for now.
Courtesy of the Javascript haters.
2015-01-12 12:13:34 +01:00
Mikael Nordfeldth
c7df5594d0 Simplified by adding an abstract AtompubAction 2015-01-12 03:15:41 +01:00
Mikael Nordfeldth
930b09677c Actually use the PrimaryNoticeList in actions 2015-01-08 20:29:09 +01:00
Mikael Nordfeldth
370341ce31 Don't show notice form navs on newnotice action 2015-01-08 17:33:09 +01:00
Mikael Nordfeldth
48680942fd Avoid undefined variables. 2014-12-06 19:56:21 +01:00
Mikael Nordfeldth
e006b73505 Revert "Report a 404 not found if no posts found for User timeline"
This reverts commit 5295e8d4de.

Just reply with an empty timeline...
2014-12-04 19:45:27 +01:00
Hannes Mannerheim
b81857656f delete groups from groups directory, for admins 2014-12-02 15:31:27 +01:00
Mikael Nordfeldth
5295e8d4de Report a 404 not found if no posts found for User timeline 2014-11-22 12:29:13 +01:00
Mikael Nordfeldth
d1b10ee92b Don't define a variable in a function call 2014-11-22 12:26:51 +01:00
Mikael Nordfeldth
046d070ad4 MessageCommand moved to DirectMessage plugin 2014-11-07 16:23:34 +01:00
Mikael Nordfeldth
68143ff916 DirectMessage moved into a plugin, not done yet
We still have to move some API calls into the new plugin.
2014-11-07 15:53:35 +01:00
Mikael Nordfeldth
7ea067a0dc Notice_source checks in better code style 2014-11-05 19:44:22 +01:00
Roland Haeder
db704b5d10 Fixed type-hints + added assert + method getGroup().
Signed-off-by: Roland Haeder <roland@mxchange.org>
2014-10-25 14:26:18 +02:00
Hannes Mannerheim
54e27bc30c shows which user we are confirming to delete 2014-10-20 16:25:42 +02:00
Mikael Nordfeldth
56b07d84c5 AtomPub missing georss namespace merge from chimo 2014-08-24 13:08:41 +02:00
chimo
e3e076a935 Adds missing georss xmlns in subscriptions AtomPub
Fixes 'unbound prefix: georss' validation issue.
2014-08-13 00:45:34 -04:00
Mikael Nordfeldth
9a192473d5 declared "next_id" used to set the max_id for next link 2014-08-08 11:35:38 +02:00
Mikael Nordfeldth
2766c2aeec User timeline ActivityStreams output now has paging data 2014-08-07 22:40:55 +02:00
Mikael Nordfeldth
55db74291c Using empty on a function return value (thanks mrvdb)
Source: https://gist.github.com/mrvdb/0b49dd3c580bcfbe1358
2014-07-15 18:15:36 +02:00
Mikael Nordfeldth
eb955fe629 "Notice posted" message in Ajax title for NewnoticeAction 2014-07-14 17:11:54 +02:00
Mikael Nordfeldth
ae62b91940 Unifying HTML stripping functions to common_strip_html 2014-07-14 13:52:23 +02:00
Mikael Nordfeldth
0a20abf1d8 Email notify-on-fave moved to Profile_prefs (run upgrade.php) 2014-07-13 19:46:40 +02:00
Mikael Nordfeldth
933bf0b026 Start and End EmailSaveForm events now take a scoped profile 2014-07-13 15:42:15 +02:00
Mikael Nordfeldth
c8873de08b Start and End EmailFormData events include current profile 2014-07-13 15:33:44 +02:00
Mikael Nordfeldth
9ce06f3e82 Adapt NewnoticeAction to latest Form- and ManagedAction 2014-07-06 13:10:22 +02:00
Mikael Nordfeldth
182605cb6a TagAction extends ManagedAction 2014-07-04 19:32:57 +02:00
Mikael Nordfeldth
4b40d6bb2a TagprofileAction fiddled with, now doesn't require OStatus override
But it still doesn't quite work properly, so a lot of work is necessary for this.
2014-07-03 14:02:21 +02:00
Mikael Nordfeldth
2e77cbfa86 FormAction updates, also fixing NoticeForm CSS 2014-07-03 14:01:12 +02:00
Mikael Nordfeldth
138d26d488 Favorite "aside"-sections moved, also small fixes left from before
Action now has 'isAction' which compares the loaded Action with names
of classes in an array (added without the 'Action') to its own type.
2014-06-28 16:09:46 +02:00
Mikael Nordfeldth
7e597ea7cc More Favorite pluginification (favecount, cache, menus(favecount, cache, menus)) 2014-06-28 14:03:30 +02:00
Mikael Nordfeldth
7642f008fb Bad error message in atompubmembershipfeed 2014-06-28 12:58:24 +02:00
Mikael Nordfeldth
fcdd061b4f pluginified most of hasFave, getFaves and related calls
The code is now more event-driven when it comes to rendering notices
and their related HTML elements, since we can't have direct calls from
core to a plugin.

lib/activitymover.php has a function to move a Favorite activity which
will not happen now. The move must be pluginified and performed as an
event which plugins can catch on to.
2014-06-27 14:09:02 +02:00
Mikael Nordfeldth
db7cc7fa75 Favorite functionality put into plugin (not done yet)
Now we have to fix any code in the core which directly uses the Fave class
or any other favorite stuff, since it is pluginised and thus might not be
available on some installations.
2014-06-24 15:58:53 +02:00
Mikael Nordfeldth
53fb39a1d0 Nicknames in subscriptions list 2014-06-24 01:56:55 +02:00
Mikael Nordfeldth
414a95a784 Initial move towards microformats2
No validation has been attempted yet. Lots of changes left. This
is visibly not (very) different from the previous CSS layout. But
some simplifications have been made.

Might cause issues with local changes to themes and CSS. Also maybe
javascript which depends on certain legacy microformats elements.

The move to microformats2 is motivated by the announcement that all
microformats should be migrated to version 2, as of 2014-06-20 at:
http://microformats.org/2014/06/20/microformats-org-turns-9-upgrade-to-microformats2
2014-06-22 17:11:04 +02:00
Mikael Nordfeldth
e4f1c77d6b showAvatar functions deduplicated into Widget class 2014-06-21 23:25:50 +02:00
Mikael Nordfeldth
79824a3625 Could not update avatar due to Bad Thumbnail parameters 2014-06-17 12:48:10 +02:00
Mikael Nordfeldth
5a3d74d9a8 UseFileAsThumbnailException (helps support GIFs) 2014-06-17 12:15:11 +02:00
Mikael Nordfeldth
d596513e39 Stronger typing for NoticeListItem and so 2014-06-02 00:20:27 +02:00
Mikael Nordfeldth
eb7f964598 Modernising subscribers/subscriptions to use $this->scoped/target
They extend GalleryAction from ProfileAction, where $this->target is set.
2014-05-28 17:00:34 +02:00
Mikael Nordfeldth
49fa34e234 Make Profile::fromUri use UnknownUriException 2014-05-26 15:05:14 +02:00
Mikael Nordfeldth
d7c40e77b2 Show more links work with AJAX-retrieved HTML
Attachment_ajaxAction has been removed since AttachmentAction handles
AJAX calls splendidly.
2014-05-19 00:56:21 +02:00
Mikael Nordfeldth
b0cc9292b1 Notice->repeat() function takes Profile as argument now 2014-05-18 21:03:10 +02:00
Mikael Nordfeldth
0ddc2fc417 RepeatAction extends FormAction (and ManagedAction) 2014-05-18 20:50:15 +02:00
Mikael Nordfeldth
b48e3a22bf AttachmentAction extends to ManagedAction
Also moved AttachmentListItem and its extended class Attachment are moved
into separate files (autoloaded from lib/).
2014-05-18 12:59:33 +02:00
Mikael Nordfeldth
e086ef3a84 ProfileAction derivatives somewhat migrated to ManagedAction 2014-05-12 22:41:05 +02:00
Mikael Nordfeldth
cd3cff451f ConversationTree is now a plugin (not oldschool setting)
Conversation trees works pretty bad with the current layout, javascript
etc. So it's best if we separate it and work on it as a side-project. The
oldschool settings are currently being deprecated (or broken out like this).

I'll wait with removing User preferences for oldschool conversation tree,
since that might be reusable data. But I guess it will go in the near future.
2014-05-12 11:51:11 +02:00
Mikael Nordfeldth
1a81188355 Use an Event to present notices conversations 2014-05-12 11:03:21 +02:00
Mikael Nordfeldth
f9481467f8 ConversationAction extends from ManagedAction
Also added some of the nifty autoconfiguration, such as $this->scoped,
to ConversationAction for increased code consistency.
2014-05-11 21:11:09 +02:00
Mikael Nordfeldth
be14634c5f ConversationRepliesAction removed, Conversation is enough 2014-05-11 21:05:25 +02:00
Mikael Nordfeldth
ce23c68d1c FileAction removed (we have AttachmentAction).
It seems it was only used to get a _single_ file attachment from
the posted notice, with no possibility to get multiple attachments.

If one fetches metadata about attachments for the notice, we have
enough data there to fulfill anyone's fetching dreams.
2014-05-10 12:29:34 +02:00
Mikael Nordfeldth
c075b9f730 Removed 'bookmarklet' since we have Bookmark plugin 2014-05-10 02:50:56 +02:00
Mikael Nordfeldth
1776c90cb9 Moved oEmbed stuff out to a plugin (Oembed). 2014-05-06 23:32:13 +02:00
Mikael Nordfeldth
820a21e16d parent::handlePost() in CancelsubscriptionAction 2014-05-06 13:26:30 +02:00
Mikael Nordfeldth
10cbf8c45e Shorter, cleaner, smarter CancelsubscriptionAction 2014-05-06 00:21:54 +02:00
Mikael Nordfeldth
7028c16d1c Cleaning up FavorAction 2014-05-05 22:49:34 +02:00
Mikael Nordfeldth
4774a25040 Link notice posted time to local representation
Notice class got a 'getLocalUrl' function.
2014-05-01 14:28:53 +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
34b570352f Fix Direct Message functionality. 2014-04-29 20:37:58 +02:00
Mikael Nordfeldth
5fd6053220 Code cleanup and enabling User object's etc. getUri() 2014-04-28 14:08:42 +02:00
Mikael Nordfeldth
37ce1f4766 Better fallback on UnsupportedMediaException 2014-04-28 12:12:06 +02:00
Mikael Nordfeldth
c862b3f355 Redirect from Attachment_thumbnailAction
Noone should trust an <img/> tag delivered like that anyway.
2014-04-21 21:19:45 +02:00
Mikael Nordfeldth
d59eb5e184 Dynamically generate thumbnails (see full text)
The File object now stores width and height of files that can
supply this kind of information. Formats which we can not read
natively in PHP do not currently benefit from this. However an
event hook will be introduced later.

The CreateFileImageThumbnail event is renamed to:
CreateFileImageThumbnailSource to clarify that the hooks should not
generate their own thumbnails but only the source image. Also it now
accepts File objects, not MediaFile objects.

The thumbnail generation is documented in the source code. For
developers, call 'getThumbnail' on a File object and hope for the best.

Default thumbnail sizes have increased to be more appealing.
2014-04-21 20:46:11 +02:00
Mikael Nordfeldth
7f3611c51c use intval() instead of floor() for int return type 2014-04-21 19:32:08 +02:00
Mikael Nordfeldth
b3bf036975 Preparing File for dynamic thumbnail generation. 2014-04-21 12:33:26 +02:00
Mikael Nordfeldth
7ca6597c7f Missing semi colon in showNotice class. 2014-04-19 22:20:45 +02:00
Mikael Nordfeldth
132be99506 Improve ShownoticeAction remote redirect code 2014-04-19 22:13:48 +02:00
Mikael Nordfeldth
454a9bc1c4 Use getUrl() instead of ->url in OembedAction 2014-04-19 22:05:44 +02:00
Mikael Nordfeldth
418b3c3c53 Some files got updated coding style
Actions have $this->scoped as the current profile which we can gladly
replace all the $cur=common_current_user() with.

And we want the prepare/handle functions to be protected. Plus only
the prepare function uses $args (which _must_ be an array).
2014-04-15 10:49:20 +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
acbe94936f common_redirect and clientError exits, so refactor
One Event would never be called, and other stuff were redundant clauses.
2014-03-10 00:24:32 +01:00
Mikael Nordfeldth
5c34369460 Don't use PEAR MIME lib when we have PECL fileinfo 2014-03-08 01:20:08 +01:00
Mikael Nordfeldth
0bc7d9c6c6 We sent a User object instead of Profile to InboxNoticeStream (thanks postblue) 2014-03-07 01:27:14 +01:00
Mikael Nordfeldth
4b2a66ed29 New mechanism for "all" feed (InboxNoticeStream)
Also cleaned up and made typing stricter for the stream, so only
profiles can be submitted. This reasonably also means we can create
"inbox" or "all" streams for foreign profiles as well using the same
stream handler (but of course only for messages we already know about).

To avoid looking up posts for a long time in a large notice database,
the lookback period for the inbox is no longer than the profile creation
date. (this matches the behaviour of Inbox)

Inbox class can probably be removed now.
2014-03-06 04:18:54 +01:00
Mikael Nordfeldth
4baaf7274c Spiffing up all.php and making it more profile:y 2014-03-05 01:17:34 +01:00
Mikael Nordfeldth
fc047bd6e6 Minor code cleanup with group related actions (thanks brw12)
Originated from brw12 who noticed an incorrect variable name used in
an error message in actions/apigroupjoin.php:109
2014-03-01 12:01:17 +01:00
Mikael Nordfeldth
63102950b2 Compare to profile id of group, for backward compatibility 2014-02-23 21:28:52 +01:00
Mikael Nordfeldth
5487c596fc Remove callback sneakery by StatusNet 2014-02-23 14:57:12 +01:00
Mikael Nordfeldth
915d329b5a updating prepare and handle 2014-01-01 20:30:30 +01:00
Mikael Nordfeldth
4ab56f34dd Previous edit made translation notes incompatible 2014-01-01 20:09:11 +01:00
Mikael Nordfeldth
df43684196 apparently not only regex 'https?' urls are sent 2014-01-01 19:47:49 +01:00
Mikael Nordfeldth
3552bf4d94 No pagination when no groups shown... :) 2013-11-04 16:57:30 +01:00
Mikael Nordfeldth
f110fc5c9a Using GNUSOCIAL_VERSION instead of STATUSNET_VERSION 2013-11-01 13:51:41 +01:00
Mikael Nordfeldth
810495708d Version name strings updated, StatusNet only retained for copyright 2013-10-30 16:37:13 +01:00
Mikael Nordfeldth
8dafce34c3 LoginAction somewhat converted to FormAction 2013-10-30 12:23:10 +01:00
Mikael Nordfeldth
9b6633698c Group discovery from text functions polished
Also removed the entirely unused saveGroups function.

Now avoiding multiGet and using listFind in Profile->getGroups()
so we don't have to deal with ArrayWrapper.
2013-10-29 13:40:14 +01:00
Mikael Nordfeldth
f8b49e69d0 Protected function prepare with array $args defaulting to array() 2013-10-29 10:26:46 +01:00
Mikael Nordfeldth
23a6b4595f Reworked the ActivityContext->attention structure
Removing Evan's obscure attentionType solution and directly using the attention array
2013-10-28 22:21:14 +01:00
Mikael Nordfeldth
fcba540a14 Removed legacy OMB. Use OStatus for remote profiles. 2013-10-28 16:22:09 +01:00
Mikael Nordfeldth
362b6ad2fc ForceGroup and some qvitter API stuff still used staticGet 2013-10-25 13:20:53 +02: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
a6c52c5ca7 Prepare the RepeatAction for modernisation (more OOP) 2013-10-21 23:27:09 +02:00
Mikael Nordfeldth
145fbf1130 Move nick updating of User entry to Profile->update()
Also, timezone and language in User table weren't indexes. So no need
to do them separately.
2013-10-17 16:38:42 +02:00
Mikael Nordfeldth
274b70784f When updating a User_group nickname, correlate Local_group and Profile
...no need to make a separate call to Local_group's setNickname all the time,
or a bunch of redundant code for the Profile table.

Next up is User->update()...
2013-10-17 13:49:20 +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
080352b646 Minor changes to ApiCheckNicknameAction, syntax and exception handling mostly 2013-10-16 13:43:10 +02:00
Mikael Nordfeldth
29d0871e5a Making many of the API actions more consistent with coding style
clientError and serverError exit after they're done so no need for
break or return. Also, $this->format is default.

We also got rid of the incredibly verbose version of $this->isPost()
which was spread all over the place.

Not all of this cleaning up is done yet.
2013-10-15 03:07:40 +02:00
Mikael Nordfeldth
ffdbd8d729 Now using common_local_url properly 2013-10-15 01:20:21 +02:00
Mikael Nordfeldth
f46d675a20 GNU social is with a minor s. 2013-10-15 00:20:36 +02:00
Mikael Nordfeldth
9be368006c Naming stuff GNUsocial rather than StatusNet 2013-10-15 00:19:03 +02:00
Mikael Nordfeldth
6d739789f6 protected handle function without args for Action 2013-10-14 14:00:12 +02:00
Mikael Nordfeldth
390556d932 Remote Profile Action from ModPlus now more generic 2013-10-08 21:08:02 +02:00
Mikael Nordfeldth
1d8b19fe54 Let's not limit qvitter stuff to 'json' requests
Also, cleanup and report errors properly when we try unsupported media types.
2013-10-07 20:54:25 +02:00
Mikael Nordfeldth
cf0570fc99 Cleaning up clientError and serverError 2013-10-07 19:56:45 +02:00
Mikael Nordfeldth
ece8ba8ea4 Calling parent::handle in ApiCheckHubAction 2013-10-07 14:51:23 +02:00
Mikael Nordfeldth
8912cdc7a4 Validate::uri replaced with filter_var for HTTP[S] URL checks
Also, a bug in checking the OAuth callback URL for validity was fixed,
where it referenced the wrong variable when going through form data.
2013-10-07 14:46:09 +02:00
Mikael Nordfeldth
2c0790be54 Let the SearchEngine take care of the search, and showJsonTimeline is good enough for now
I bet JSONSearchResultsList is a good idea, but we have no immediate use of it right now.

And it's better if the SearchEngine can take care of all that jazz.
2013-10-06 23:09:57 +02:00
Mikael Nordfeldth
87370f0cb1 URL shortening can now be disabled for the 'maxurllength'
Also, URL shortening now consistently uses 'maxurllength'...
2013-10-06 22:35:49 +02:00
Mikael Nordfeldth
34a6624452 Qvitter API changes (thanks hannes2peer)
I implemented changes from quitter.se's new API that their front-end qvitter
uses, https://github.com/hannesmannerheim/qvitter/blob/master/api-changes-1.1.1/CHANGES

However I left out the URL shortening commens, since I believe whatever behaviour
they experienced that caused them to implement this was a bug (or many) and should
be fixed in their proper areas and that shortening should not be entirely left
out in API calls.
2013-10-06 21:51:50 +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
78f9629bf3 Moved shareLocation preference check to Profile class 2013-10-06 13:38:09 +02:00
Mikael Nordfeldth
cc34bb48c7 OAuth related syntax fixes, nothing big
Making better use of class autoloading too.
2013-10-06 12:43:18 +02:00
Mikael Nordfeldth
48da97f204 MediaFile code improvements, preparing to implement multi-attachments
Maybe in the future we can use this for anonymous file uploads too?
With some kind of anonymous/pseudonymous profile. That'd be neat.
2013-10-05 18:47:45 +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
7979918ba9 Various minor Avatar fixes, but pretty necessary.
One typing thing. And a missed exception case.

Get src from displayUrl() instead of url for example.
2013-10-02 14:49:01 +02:00
Mikael Nordfeldth
1d46ca45d1 PHP Notice: Undefined variable: logo
It was reported in actions/apitimelinetag.php on line 142
2013-10-01 17:07:16 +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
a23c4aa236 Avatar resizing improvements and better code reuse
* getOriginal added to Avatar class
    This is a static function that retrieves the original avatar in a leaner
    way than Profile->getOriginalAvatar() did (see below).
    This will throw an Exception if there was none to be found.

* getProfileAvatars added to Avatar class
    This gets all Avatars from a profile and returns them in an array.

* newSize added to Avatar class
    This will scale an original avatar or throw an Exception (originally from
    Avatar::getOriginal) if one wasn't found.

* deleteFromProfile added to Avatar class
    Deletes all avatars for a Profile. This makes the code much smarter when
    removing all avatars from a user.
    Previously only specific, hardcoded (through constants) sizes would be
    deleted. If you ever changed lib/framework.php then many oddsized avatars
    would remain with the old method.

* Migrated Profile class to new Avatar::getOriginal support
    Profile class now uses Avatar::getOriginal through its own
    $this->getOriginalAvatar and thus remains backwards compatible.

* Updating stock GNU Social to use Avatar::getOriginal
    All places where core StatusNet code used the
    $profile->getOriginalAvatar, it will now useAvatar::getOriginal with
    proper error handling.

* Updated Profile class to use Avatar::newSize
    When doing setOriginal, the scaling will be done with the new method
    introduced in this merge.
    This also edits the _fillAvatar function to avoid adding NULL values to
    the array (which causes errors when attempting to access array entries as
    objects). See issue #3478 at http://status.net/open-source/issues/3478
2013-09-30 22:23:03 +02:00
Mikael Nordfeldth
a0e107f17f Implemented WebFinger and replaced our XRD with PEAR XML_XRD
New plugins:
* LRDD
    LRDD implements client-side RFC6415 and RFC7033 resource descriptor
    discovery procedures. I.e. LRDD, host-meta and WebFinger stuff.

    OStatus and OpenID now depend on the LRDD plugin (XML_XRD).

* WebFinger
    This plugin implements the server-side of RFC6415 and RFC7033. Note:
    WebFinger technically doesn't handle XRD, but we serve both that and
    JRD (JSON Resource Descriptor), depending on Accept header and one
    ugly hack to check for old StatusNet installations.

    WebFinger depends on LRDD.

We might make this even prettier by using Net_WebFinger, but it is not
currently RFC7033 compliant (no /.well-known/webfinger resource GETs).

Disabling the WebFinger plugin would effectively render your site non-
federated (which might be desired on a private site).

Disabling the LRDD plugin would make your site unable to do modern web
URI lookups (making life just a little bit harder).
2013-09-30 22:04:52 +02:00
Joshua Judson Rosen
90858804bc Allow the hostmeta to indirect from one domain to another.
e.g.: rozzin@hackerposse.com => rozzin@status.hackerposse.com.
2013-09-29 23:13:45 +02:00
Mikael Nordfeldth
858d9cc3c4 maxNoticeLength test for url-shortening failed on maxContent==0
maxContent==0 implies that a notice text can be infinitely long, but
this value was directly transferred to maxNoticeLength, where 0 was
tested if it was longer than the notice length - which of course always
was false.

This commit fixes the problem for infinite length notices that always
got shortened.
2013-09-25 22:48:32 +02:00
Mikael Nordfeldth
64df40e409 Filling in missing endHTML calls for Action AJAX
This completes 1c6f9df80e where a lot
of other functions were fixed (by conforming to startHTML and endHTML)
2013-09-24 02:32:17 +02:00
Mikael Nordfeldth
1c6f9df80e PHP5.5 fix: Better use of startXML for Action classes (mostly AJAX)
I had a problem with PHP5.5 that caused ajax responses to be empty. This
fixes it, as the problem was related to pretty inconsistent calling to
headers, XMLWriter::startDocument etc. etc.
2013-09-24 01:18:33 +02:00
Marcel van der Boom
e9f2a1847d Wrong call signature used for Event::handle
Call needs 2nd parameter to be array.
2013-09-23 14:43:44 +02:00
Mikael Nordfeldth
5f1fea1488 FavorAction upgraded to extend FormAction
Includes some minor changes to other things as well, such as the session
token input element now having the same 'name' attribute as everyone else.
(it still retains a 'token-'+noticeid 'id' attribute for clientside JS)
2013-09-23 13:06:09 +02:00
Mikael Nordfeldth
63306081bc Subscription "get by" functions now don't use ArrayWrappers
They were getting in the way of some strict-typing stuff.
2013-09-21 18:38:14 +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
c3001ff82b url shortening fixes for api config and not ur1.ca
Will have to change the 'maxnoticelength' code to stop shortening ALL
links if the setting for infinitely long notices is configured.
2013-09-19 01:11:47 +02:00
Mikael Nordfeldth
31bace8cfd updated and moved jquery-jcrop (no longer .min.js)
This won't run properly if other scripts stop javascript execution before
it's time to crop (such as in the Bookmark plugin, which when writing this
hasn't been migrated to Jquery 2.x - so it stops on a '.die' call).

Some images were cleaned up from the theme/base/images/illustrations too.
2013-09-14 13:31:16 +02:00
Jean Baptiste Favre
f0d86cdb64 Add 'twitter:title' meta tag support. 2013-09-10 11:16:34 +02:00
Jean Baptiste Favre
ade8c6992e Twitter cards implementation. Currently only supports 'photo' cards. 2013-09-10 11:16:27 +02:00
Mikael Nordfeldth
a9c4bcd71f Removing unnecessary require_once lines (autoload!) 2013-09-09 23:06:56 +02:00
Mikael Nordfeldth
747fe9d59b Tidying up getUser calls to profiles and some events
getUser calls are much more strict, and one place where this was found was
in the (un)subscribe start/end event handlers, which resulted in making the
Subscription class a bit stricter, regarding ::start and ::cancel at least.
Several minor fixes in many files were made due to this.

This does NOT touch the Foreign_link function, which should also have a more
strict getUser call. That is a future project.
2013-09-09 23:03:34 +02:00
Mikael Nordfeldth
c5bf6cb05e Using a bit more of $this->scoped (Action parent class)
$this->scoped is the currently active profile, which is intended
to replace the $user object in the long run...
2013-09-09 20:45:20 +02:00
Mikael Nordfeldth
b2a0aa20bf NewapplicationAction converted to FormAction
Cutting down on a bunch of redundant code. We're reusing a lot of stuff
from FormAction and Action now instead of having copies of code all over.
2013-09-02 12:13:46 +02:00
Mikael Nordfeldth
f0e967fefd needLogin renamed checkLogin and made a property
Action extended classes now can set 'needLogin' as a protected property,
which is defaulted to 'false'. However, FormAction defaults this to 'true'
because most of the form actions will require a current login to be valid.

NewgroupAction, NewmessageAction, NewnoticeAction are all affected by this
commit and in the future we will migrate each potential formaction to the
proper class parent tree. :)
2013-09-02 11:58:47 +02:00
Mikael Nordfeldth
e5e3aeb4e6 newmessage (and Message class) fixed for FormAction
Also added a needLogin function to the Action class, which will do
redirect to login page with proper returnto setting.
2013-09-02 11:05:30 +02:00
Mikael Nordfeldth
89b10666bb IMPORTANT: parent::handlePost() in NewnoticeAction
otherwise we don't do csrf checking etc...
2013-09-02 11:05:21 +02:00
Mikael Nordfeldth
0612e5ec87 NewnoticeAction converted to extend FormAction
There are still several improvements which can be made, such as not
having an entirely separate setup of ajax form functions. Instead
those should be implemented in FormAction. But at least now we got
rid of the redundant code use in prepare/handle.
2013-09-01 20:56:35 +02:00
Mikael Nordfeldth
83000f6f5e Proper definition of $args array in NewgroupAction->prepare
Also, there is no need to do 'return' after throwing a ClientError
Exception. And we'll use the Action->clientError for logging benefits
until the error handling is properly done all the way to backend.
2013-09-01 19:44:09 +02:00
Mikael Nordfeldth
cfa699e445 NewgroupAction converted to extend FormAction
Had to change Action function 'prepare' to 'protected', as you can't
(of course) protect something that's been public in a parent class. The
other way around seems fine for PHP... Eventually all actions will have
protected 'prepare' (use execute/run)

A feature of the previously fixed initialization of Action classes, is
that we now have $this->scoped which is the current profile in use. As
of now that is always a local User, except the corresponding Profile
object.

Also, instead of calling 'showForm' everywhere, in case of an error we
just throw an exception of some sort and pass the message along there.

I've also introduced in FormAction the 'showInstructions' function in
order to get a unified instructions/info/error display method.

TODO: Improve info/error message handling, and what/when/where to show.
2013-08-31 18:01:13 +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
ea837cea67 added missing return statement after showForm call
Issue #3125 at http://status.net/open-source/issues/3125 (and its duplicate 3127) describe buggy behaviour when trying to create a new group - i.e. the group is still created but with nickname NULL.

The reason the group is created is that when failing Nickname::normalize, the function trySave() in actions/newgroup.php doesn't call 'return' - meaning it just keeps going despite the error thrown. It a

So the simple solution to this bug was adding a return call at line 128, inside the catch just after the showForm(...) call.
2013-08-12 12:44:19 +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
Jean Baptiste Favre
c23efdbdb0 PHP 5.4 compatibility: remove call-time pass by reference 2013-06-19 11:16:05 +02:00
Jean Baptiste Favre
fcdd4d2cf0 Fix introduced bug, trying to shorten an empty status. 2013-06-15 19:07:43 +02:00
Jean Baptiste Favre
58a2630933 Code cleaning. Do call shortenLinks only once, right before saving new notice. 2013-06-15 19:07:43 +02:00
Jean Baptiste Favre
344a10be8b Code cleaning, remove 'TEST' tags. 2013-06-15 19:07:43 +02:00
Jean Baptiste Favre
ec072e0af7 Notice update with media attachment may fail through API when status text + attachment length get higher than max notice length. Calling URL shortener can make global length less than maxlength, though allowing notice update. 2013-06-15 19:07:43 +02:00
Jean Baptiste Favre
6d47fadf42 Fix introduced bug, trying to shorten an empty status. 2013-06-15 19:04:32 +02:00
Jean Baptiste Favre
54374365e9 Code cleaning. Do call shortenLinks only once, right before saving new notice. 2013-06-15 19:04:31 +02:00
Jean Baptiste Favre
f803b22752 Code cleaning, remove 'TEST' tags. 2013-06-15 19:04:31 +02:00
Jean Baptiste Favre
6387e0a90d Notice update with media attachment may fail through API when status text + attachment length get higher than max notice length. Calling URL shortener can make global length less than maxlength, though allowing notice update. 2013-06-15 19:04:31 +02:00
Jean Baptiste Favre
180cc39c4a Fix for #3649 issue. 2013-06-15 17:01:10 +02:00
Jean Baptiste Favre
b23a744fba Fix for #3649 issue. 2013-06-15 16:58:50 +02:00
Jean Baptiste Favre
359f3ca113 Fix for #3651: oAuth apps list does only show the latest registered application 2013-06-15 14:19:15 +02:00
Jean Baptiste Favre
4284f28dec Fix for #3651: oAuth apps list does only show the latest registered application 2013-06-15 14:09:46 +02:00
Evan Prodromou
6aaee4e5fe $this->q => $q 2012-11-11 22:55:22 -05:00
Evan Prodromou
edf2879021 Divert tag and url searches 2012-11-11 21:27:11 -05:00
Evan Prodromou
64288a62f8 Adding a search notice stream object 2012-11-11 21:05:13 -05:00
Evan Prodromou
c809dd24c5 Don't show big invite button if invites are disabled 2012-10-17 10:10:42 -04:00
Evan Prodromou
86e3cbbcce Don't show big invite button if invites are disabled 2012-10-17 10:09:40 -04:00
Evan Prodromou
46f6b2c119 Don't call free on the results of a member query 2012-07-04 14:45:50 -04:00
Evan Prodromou
ae84e8f524 Use the current logged-in use for home timeline 2012-07-03 12:22:59 -04:00
Evan Prodromou
b4da5f3785 Merge branch 'master' into 1.0.x
Conflicts:
	plugins/Blacklist/BlacklistPlugin.php
2012-03-08 06:08:11 -06:00
Siebrand Mazeland
de7ad991f9 Consistency update. 2012-03-05 00:38:39 +01:00
Evan Prodromou
23bafaba26 add canonical rel 2012-01-26 11:02:29 -05:00
Evan Prodromou
25f1e16952 Revert "don't show profile page of silenced users"
This reverts commit 7bb59ad2a1.
2011-12-31 09:34:59 -08:00
Evan Prodromou
7bb59ad2a1 don't show profile page of silenced users 2011-12-31 09:09:07 -08:00
Evan Prodromou
c9fbe2ead7 remove common_debug() from search.json, search.atom 2011-12-30 22:23:50 -08:00
Evan Prodromou
eb05bdfcaf remove debug message I'm sick of seeing 2011-12-30 22:16:22 -08:00
Michele macno Azzolari
ad2fd9abd4 Fix whitescreen on recoverpassword with unknown user 2011-12-02 15:48:29 -05:00
Siebrand Mazeland
c2db2483a0 Remove trailing whitespace in UI text. 2011-10-29 14:34:50 +02:00
Evan Prodromou
b8079549ce Include the current profile in popular notice section for all 2011-10-20 10:54:33 -04:00
Evan Prodromou
22fead1b46 Squashed commit of the following:
commit fb1dfa9e98ded23fb5bdebae6465424a8cb8acd6
Author: Evan Prodromou <evan@status.net>
Date:   Thu Oct 20 10:40:07 2011 -0400

    Use popular notice stream for favorited page

commit e1d409ff738e39061ad35589d546ce9bed456975
Author: Evan Prodromou <evan@status.net>
Date:   Thu Oct 20 10:32:23 2011 -0400

    Use a caching stream for popular notice section

    Instead of a big cached query, we now use a caching notice stream for
    the popular notice section. It uses a single-table query at the
    bottom, then scopes the notices and filters for silenced users. This
    should be much nicer to our database servers.

    Also clears the popular cache when someone favors or disfavors
    something. A nice optimization would be to save the last weights and
    re-calculate them at invalidation time, adding the new notice (or not)
    depending on its own score. That will have to wait for another day,
    though.

commit e9b7ab4c26c95e755adaff53c3957dcfca31c16b
Author: Evan Prodromou <evan@status.net>
Date:   Thu Oct 20 10:31:14 2011 -0400

    Let CachingNoticeStream users skip the ';last' optimization
2011-10-20 10:40:39 -04:00
Siebrand Mazeland
7602f605d5 Remove unneeded trailing space. 2011-10-10 15:06:39 +02:00
Siebrand Mazeland
436068dc0d Use getBestName() instead of nickname per FIXMEs.
Update translator documentation.
2011-10-10 15:05:43 +02:00
Evan Prodromou
c85abebc36 Remove missing twittersettings page from subscriptions helper 2011-10-03 09:13:54 -04:00
Evan Prodromou
82badb19c7 Move docs menu to site primary menu 2011-09-30 14:24:27 -04:00
Evan Prodromou
636455ad82 Fix conflict between URL parameter and POST parameter with groups
Group edit page is at /group/:nickname/edit. There's also a form
parameter named 'nickname'. The two were conflicting.

I changed the form parameter to 'newnickname' and it works.

I'm not sure how this ever worked before, though.
2011-09-30 11:48:00 -04:00
Evan Prodromou
cd6e0a920f slightly better usergroups pagination 2011-09-30 11:38:54 -04:00
Evan Prodromou
9ba736c032 Add a dummy 'top' action to take you to the main page of the site 2011-09-30 09:45:17 -04:00
Evan Prodromou
32845a1051 Make lists work in single-user mode
Added routes to the router for list pages in single-user mode.

For each of the actions in those routes, use the global single-user
nickname rather than a nickname URL argument to determine the tagger ID.

In nav, and for Ajax, provide the right nicknames.
2011-09-29 12:29:12 -04:00
Evan Prodromou
9f954eddc5 remove unsupported hcard action 2011-09-27 11:43:41 -04:00
Evan Prodromou
5eddfd1eab remove unlinked publicpeopletagcloud 2011-09-27 10:55:10 -04:00
Evan Prodromou
2678b937b1 fix problem with missing list subscribers 2011-09-26 16:15:38 -04:00
Evan Prodromou
8e04dce947 Old-school settings page
A page to set or remove old-school settings.
2011-09-24 10:14:45 -04:00
Evan Prodromou
ae0b4d49c7 optional conversation tree view 2011-09-24 09:29:12 -04:00
Evan Prodromou
ddc121c085 New table for all old-school UI prefs 2011-09-24 07:12:34 -04:00
Evan Prodromou
02a30cf47c start using stream mode prefs instead of separate parameter 2011-09-23 17:50:38 -04:00
Evan Prodromou
66c97a1a1e switch between conversation and stream for public and group 2011-09-23 17:28:54 -04:00
Evan Prodromou
dba9d71abd Support mode in all 2011-09-23 17:18:21 -04:00
Evan Prodromou
642901f4ae No such path 'index', so redirect to home timeline 2011-09-21 16:33:10 -04:00
Evan Prodromou
d594c83a5a Merge commit 'refs/merge-requests/159' of git://gitorious.org/statusnet/mainline into merge-requests/159 2011-09-21 16:31:38 -04:00
Zach Copley
b6b13a6bc7 Don't access current user without session 2011-09-21 00:40:27 +00:00
Evan Prodromou
bd33036fae use a dummy notice stream for retweets_of_me under high load 2011-09-19 22:17:40 -04:00
Evan Prodromou
32f7d3edc2 inverted switch for performance on public page 2011-09-19 22:01:47 -04:00
Evan Prodromou
ddf166e144 setting to turn off expensive queries 2011-09-19 21:55:11 -04:00
Evan Prodromou
b44bb472eb disable public tag cloud on public sites 2011-09-19 19:37:58 -04:00
Evan Prodromou
319639a232 hide popular notice section on non-private sites 2011-09-19 16:19:12 -04:00
Evan Prodromou
e8785927a3 log the problem when there's an exception leaving a group 2011-09-18 19:28:44 -04:00
Evan Prodromou
cf2457f03f correct link for apitimelinegroup 2011-09-18 17:33:25 -04:00
Evan Prodromou
be4e3593f5 declare attributes of TagAction 2011-09-18 12:52:38 -04:00