Siebrand Mazeland
ba6538ed78
* i18n/L10n updates
...
* whitespace updates.
2010-09-18 17:45:18 +02:00
Siebrand Mazeland
1c5e00df30
Fix typo.
2010-09-18 17:16:48 +02:00
Siebrand Mazeland
cfe60815bc
Remove superfluous whitespace.
2010-09-18 17:14:00 +02:00
Siebrand Mazeland
326e351d44
Fix typo.
2010-09-18 15:38:15 +02:00
Siebrand Mazeland
52ccc8e521
* update L10n
...
* remove superfluous whitespace
2010-09-18 15:26:48 +02:00
Siebrand Mazeland
edb411b4ae
* L10n updates and translator documentation added.
...
* superfluous whitespace removed.
2010-09-18 15:23:17 +02:00
Siebrand Mazeland
34f95c26fd
* FIXME/CHECKMEs added for (possible) bad i18n
...
* translator hints added
* superfluous whitespace removed
2010-09-18 15:10:49 +02:00
Siebrand Mazeland
977472bcf6
remove superfluous whitespace
2010-09-18 14:39:06 +02:00
Siebrand Mazeland
09c99461e5
* update L10n
...
* remove superfluous whitespace
2010-09-18 14:35:04 +02:00
Siebrand Mazeland
03e600b797
Update i18n/L10n
2010-09-18 14:31:03 +02:00
Siebrand Mazeland
f8e91ab33f
Add translator hints.
2010-09-18 12:05:27 +02:00
Siebrand Mazeland
26a9963dad
Update L10n.
2010-09-18 11:52:35 +02:00
Siebrand Mazeland
1ee1f6621f
* update i18n/L10n
...
* remove superfluous whitespace
2010-09-18 11:50:27 +02:00
Siebrand Mazeland
f0716819ec
* update i18n/L10n
...
* remove superfluous whitespace
2010-09-18 11:45:50 +02:00
Siebrand Mazeland
2d119df6d3
* update i18n/L10n
...
* remove superfluous whitespace
2010-09-18 11:43:17 +02:00
Siebrand Mazeland
b99b0555fd
Update L10n.
2010-09-18 11:36:40 +02:00
Siebrand Mazeland
11a98ea41f
* L10n update
...
* superfluous whitespace removed.
2010-09-18 11:27:37 +02:00
Siebrand Mazeland
eed0b24f23
* i18n/L10n updates
...
* superfluous whitespace removed
2010-09-18 11:25:11 +02:00
Siebrand Mazeland
596d2c212a
Update i18n/L10n.
2010-09-18 10:41:13 +02:00
Siebrand Mazeland
90ce201684
Update L10n.
2010-09-18 10:32:54 +02:00
Siebrand Mazeland
14fa758983
Update L10n
2010-09-18 10:30:45 +02:00
Siebrand Mazeland
ca3d803f1d
Update i18n/L10n.
2010-09-18 10:25:13 +02:00
Brion Vibber
89c561c9cf
Ticket #2731 : Fix for regression in posting to remote groups (regression in 2d4e0693c8
)
...
Changes in 2d4e0693c8
changed Ostatus_profile::filterReplies() (which sorts out the local, remote, and group recipients on incoming remote messages) from checking for remote profiles with a safe call to Ostatus_profile::staticGet() to calls through Ostatus_profile::ensureProfileURL() and Ostatus_profile::ensureWebfinger(), which throw exceptions and thus abort processing.
Since this was done before checking for local groups, the filter would fail when the ensure* functions determined it was looking at a local group and rightfully refused to create a remote group profile for it.
Changing the calls to the ensure* functions was done so we can record remote reply recipients for future reply-to-reply processing (the staticGet() call was a cheaper way to do a lookup when we knew we only actually had to process groups that somebody signed up to); most important fix is simply to actually check for the exception! :)
Here I'm changing the order of processing so we do the local group lookup first -- where it's nice and safe -- and then when we do the remote checks, we'll go ahead and gracefully skip that entry if the full remote lookup fails, so we'll still process any following recipients.
2010-09-16 14:50:23 -07:00
Brion Vibber
097d0bd2fa
Ticket #2731 : Fix for regression in posting to remote groups (regression in 2d4e0693c8
)
...
Changes in 2d4e0693c8
changed Ostatus_profile::filterReplies() (which sorts out the local, remote, and group recipients on incoming remote messages) from checking for remote profiles with a safe call to Ostatus_profile::staticGet() to calls through Ostatus_profile::ensureProfileURL() and Ostatus_profile::ensureWebfinger(), which throw exceptions and thus abort processing.
Since this was done before checking for local groups, the filter would fail when the ensure* functions determined it was looking at a local group and rightfully refused to create a remote group profile for it.
Changing the calls to the ensure* functions was done so we can record remote reply recipients for future reply-to-reply processing (the staticGet() call was a cheaper way to do a lookup when we knew we only actually had to process groups that somebody signed up to); most important fix is simply to actually check for the exception! :)
Here I'm changing the order of processing so we do the local group lookup first -- where it's nice and safe -- and then when we do the remote checks, we'll go ahead and gracefully skip that entry if the full remote lookup fails, so we'll still process any following recipients.
2010-09-16 14:43:27 -07:00
Evan Prodromou
670ad53215
Merge branch '0.9.x' into activityexport
2010-09-15 23:31:20 -04:00
Brion Vibber
95b534c5ce
Move standalone plugin files into subdirectories so they can have locale data, etc added to them at leisure.
2010-09-15 14:10:18 -07:00
Evan Prodromou
b2abae433d
Merge remote branch 'gitorious/0.9.x' into 0.9.x
2010-09-15 15:57:41 -04:00
Siebrand Mazeland
db1d348135
Update/add pot files for plugins.
2010-09-15 01:16:45 +02:00
Siebrand Mazeland
987651c8a4
* i18n/L10n updates
...
* superfluous whitespace removed
2010-09-14 21:45:13 +02:00
Siebrand Mazeland
04b7af4620
* i18n/L10n updates
...
* superfluous whitespace removed
2010-09-14 21:33:57 +02:00
Evan Prodromou
a881ce23e7
note on why we don't use Group_member::asActivity() in OStatusPlugin
2010-09-14 11:02:54 -04:00
Evan Prodromou
00c4662ee4
add a link to cometd.org in Comet plugin README
2010-09-14 10:41:35 -04:00
Brion Vibber
0021c16bd1
Declare public options on DisqusPlugin to avoid notice warnings on access if not set.
2010-09-13 12:06:10 -07:00
Evan Prodromou
d9b959fc64
move code for making activities from OStatus plugin to Subscription and Fave classes
2010-09-13 11:44:20 -04:00
Evan Prodromou
9aadd3cb42
Merge remote branch 'gitorious/0.9.x' into 0.9.x
2010-09-13 09:29:32 -04:00
Siebrand Mazeland
a9fad9a7ac
Add translator hint.
2010-09-12 17:08:49 +02:00
Brion Vibber
f17512cfe6
Catch exceptions during SubMirror mirror attempt; log & skip that one if found.
...
Should avoid things like RequireValidatedEmailPlugin causing infinite retry loops if the mirror-er isn't validated yet.
2010-09-10 11:50:19 -07:00
Evan Prodromou
cfcb860317
use capturing parens for matching at-mentions in twitterstatusfetcher
2010-09-10 09:32:56 -04:00
Evan Prodromou
262eb7120f
make our own twitter links if Twitter doesn't give us entities
2010-09-10 09:32:39 -04:00
Evan Prodromou
398df867de
use capturing parens for matching at-mentions in twitterstatusfetcher
2010-09-10 09:21:01 -04:00
Evan Prodromou
deb8f2a38b
make our own twitter links if Twitter doesn't give us entities
2010-09-10 09:10:53 -04:00
Evan Prodromou
42f1ec85ea
change the event we use for deleting a linked status on Twitter
2010-09-08 16:40:37 -04:00
Evan Prodromou
e40ed1fd56
move notice_to_status initialization code to run-once script
2010-09-08 16:10:07 -04:00
Brion Vibber
c758b2b000
Merge branch 'testing' into 0.9.x
2010-09-08 11:48:09 -07:00
Brion Vibber
7407754c27
Merge branch 'master' into testing
2010-09-08 11:47:44 -07:00
Brion Vibber
f2574fdd01
Fix for #2663 : fix for original/96px-size avatars getting saved with bad permissions, causing failure to see images if background queues are different user from web server.
...
The original-size file is now forced to 0644 (all-readable), which should help. Not sure this is 100% ideal, but it's better than 0600!
(The other sizes were being created in other code and had sane read perms already.)
Watch out for similar issues in Twitter bridge etc; avatar import code should get cleaned up and consolidated.
2010-09-07 16:52:02 -07:00
Brion Vibber
d470c007fc
Quick fix for #2659 : unable to login with Livejournal OpenID
...
The Net::OpenID::Server perl module that LJ uses appears to be very picky about input, and rejects most request types unless the data comes in as GET parameters (apparently following OpenID 1.1 rules, rather than OpenID 2.0 rules which permit any request to be POSTed but requires that if so, the data must all be in the POST body).
Apparently something got updated on LJ at some point that's either added that behavior or (more likely) added the OpenID 2.0 namespace info to discovery, which tells the Janrain-based OpenID libraries that they should go ahead and do POST requests instead of redirects to GET requests... thus breaking everything. ;)
GET should be just fine for both 1.1 and 2.0 though, and also saves having to sit through that lame autosubmit page.
Switched the authentication submission from checking whether it should redirect to GET or do a form POST, to simply always doing the redirect to GET.
Tested against providers:
* LiveJournal
* Google
* LaunchPad
* identi.ca
2010-09-07 16:22:51 -07:00
Brion Vibber
51b272d078
Merge branch 'openid-fix' into 0.9.x
2010-09-07 16:20:27 -07:00
Brion Vibber
961aba68fc
Quick fix for #2659 : unable to login with Livejournal OpenID
...
The Net::OpenID::Server perl module that LJ uses appears to be very picky about input, and rejects most request types unless the data comes in as GET parameters (apparently following OpenID 1.1 rules, rather than OpenID 2.0 rules which permit any request to be POSTed but requires that if so, the data must all be in the POST body).
Apparently something got updated on LJ at some point that's either added that behavior or (more likely) added the OpenID 2.0 namespace info to discovery, which tells the Janrain-based OpenID libraries that they should go ahead and do POST requests instead of redirects to GET requests... thus breaking everything. ;)
GET should be just fine for both 1.1 and 2.0 though, and also saves having to sit through that lame autosubmit page.
Switched the authentication submission from checking whether it should redirect to GET or do a form POST, to simply always doing the redirect to GET.
Tested against providers:
* LiveJournal
* Google
* LaunchPad
* identi.ca
2010-09-07 16:15:32 -07:00
Evan Prodromou
5c98dfd58c
text substitution is Unicode-aware for twitterstatusfetcher
2010-09-07 15:54:06 -04:00
Evan Prodromou
2d18963b4c
Fix pkeyget call
...
Fix the pkeyget call in Twitter_synch_Status
2010-09-07 15:34:10 -04:00
Evan Prodromou
b6440a206d
staticGet -> pkeyGet in Twitter_synch_status
2010-09-07 15:29:36 -04:00
Evan Prodromou
d37f0da077
debug statements for setting/getting last id
2010-09-07 11:53:26 -04:00
Evan Prodromou
9793e4ceb4
Store foreign ID for synch info, not user ID
2010-09-07 10:53:11 -04:00
Evan Prodromou
21bea14140
remove data dump of retrieved statuses
2010-09-07 04:42:23 -04:00
Evan Prodromou
8facfdcfee
Correct DB_DataObject constant in Twitter_synch_status
2010-09-07 04:35:14 -04:00
Evan Prodromou
98e9fa19c8
Missing comma in column list in Twitter_synch_status
2010-09-07 04:33:28 -04:00
Evan Prodromou
49af35b44d
add modified column to twitter_synch_status
2010-09-07 04:32:01 -04:00
Evan Prodromou
e53e152d6f
use and save since_id parameter for home_timeline
2010-09-07 04:22:55 -04:00
Evan Prodromou
86b6d7b722
save synch status for different timelines
2010-09-07 04:17:36 -04:00
Evan Prodromou
a46ba0b548
save Twitter mentions as StatusNet replies
2010-09-07 04:00:59 -04:00
Evan Prodromou
c2c6acbfd2
add back in # and @ for links
2010-09-07 04:00:59 -04:00
Evan Prodromou
2de6d0b03d
add Twitter-approved links to Twitter statuses
2010-09-07 04:00:59 -04:00
Evan Prodromou
28fecf70b9
better handling of params in oauthget
2010-09-07 04:00:59 -04:00
Evan Prodromou
a844aaaea6
better param handling in hometimeline
2010-09-07 04:00:59 -04:00
Evan Prodromou
86d37ba59c
include entities in the results of home_timeline
2010-09-07 04:00:59 -04:00
Evan Prodromou
b059a19e0f
delete Twitter notice if it was posted from here
2010-09-07 04:00:59 -04:00
Evan Prodromou
ba8a24073f
Notify Twitter when StatusNet user faves/disfaves a Twitter notice
2010-09-07 04:00:59 -04:00
Evan Prodromou
5944fe57e6
using null variable in twitter_status_id()
2010-09-07 04:00:59 -04:00
Evan Prodromou
a5554bc11e
check status_id before trying to retweet it
2010-09-07 04:00:59 -04:00
Evan Prodromou
702d36257c
truncate retweeted stuff if it's too long
2010-09-07 04:00:58 -04:00
Evan Prodromou
9847bffe99
correctly mark repeats from Twitter as non-local
2010-09-07 04:00:58 -04:00
Evan Prodromou
e20dc9fec3
correctly check for local notice to status mappings when notice originated here
2010-09-07 04:00:58 -04:00
Evan Prodromou
df88624d49
use bigint for status_ids
2010-09-07 04:00:58 -04:00
Evan Prodromou
a9bb1c7528
debug output when saving new mapping
2010-09-07 04:00:58 -04:00
Evan Prodromou
d986537c43
do a uniqueness check before saving new notice-to-status mapping
2010-09-07 04:00:58 -04:00
Evan Prodromou
299da9e462
SQL syntax error when initializing notice_to_status table
2010-09-07 04:00:58 -04:00
Evan Prodromou
6c7262c8ca
Delete Notice_to_status when a notice is deleted
2010-09-07 04:00:58 -04:00
Evan Prodromou
e9e06879bb
use Notice_to_status to check for duplicates
2010-09-07 04:00:58 -04:00
Evan Prodromou
a1981770ce
Save notice-to-status mapping in its own table
...
Introduce a table mapping notices to Twitter statuses. Initialize
this table at checkSchema() time. Save the mapping when we push
or pull statuses. Use the table to determine if a notice has a
Twitter equivalent.
2010-09-07 04:00:58 -04:00
Evan Prodromou
17a16026ff
add in_reply_to_status_id if notice is from twitter
2010-09-07 04:00:58 -04:00
Evan Prodromou
928239ecf8
do our own repeating so we can pass in a uri
2010-09-07 04:00:58 -04:00
Evan Prodromou
1bf4972cc0
remove require_once for disappeared TwitterBasicAuthClient
2010-09-07 04:00:57 -04:00
Evan Prodromou
23dfadd9a6
remove basic auth code for Twitter since it's no longer supported
2010-09-07 04:00:57 -04:00
Evan Prodromou
e45b6df419
use home_timeline instead of friends_timeline
2010-09-07 04:00:57 -04:00
Evan Prodromou
a8c90d0243
switch twitterstatusfetcher from friends_timeline to home_timeline
2010-09-07 04:00:57 -04:00
Evan Prodromou
1a54291cc7
debug code to dump new status data
2010-09-07 04:00:57 -04:00
Evan Prodromou
184ee7fc1f
move inbox insert code to status saver main loop
2010-09-07 04:00:57 -04:00
Evan Prodromou
20f6ea4840
some info notices in twitter status fetch for repeats and replies
2010-09-07 04:00:57 -04:00
Evan Prodromou
5651f79466
if something's a retweet, save it as a repeat in bridge
2010-09-07 04:00:57 -04:00
Evan Prodromou
d6719760d6
do a real retweet for a local repeat
2010-09-07 04:00:57 -04:00
Evan Prodromou
2b56d3b534
push notices through the bridge if they're in reply to a twitter notice
2010-09-07 04:00:57 -04:00
Evan Prodromou
4d70ba9597
save reply status for Twitter notices
2010-09-07 04:00:57 -04:00
Evan Prodromou
ed99fd51e8
don't save statuses from protected users
2010-09-07 04:00:57 -04:00
Brion Vibber
6786bbcfbf
Drop RSSCloud queue items if the notice has a bogus profile, rather than attempting to rerun it due to the initial erroring-out. That's not a recoverable error
2010-09-03 12:34:05 -07:00
Brion Vibber
43b0c65a86
Fix output bug in DisqusPlugin -- 'Comments' link contents was in attributes instead of comments, which broke output and spewed errors
2010-09-03 11:57:33 -07:00
Evan Prodromou
4aac47de03
syntax error in exception string in discovery.php
2010-09-03 01:41:01 -04:00
Siebrand Mazeland
1bfbe9badf
* i18n/L10n updates and FIXMEs added
...
* whitespace fixes
2010-09-03 01:35:04 +02:00
Brion Vibber
e365e709c5
Merge branch 'master' into testing
2010-09-02 14:58:11 -07:00
Evan Prodromou
925381707b
show notice title on shownotice page
2010-09-02 17:16:10 -04:00
Brion Vibber
c24458a9f0
Ticket #2638 : allow themes to specify a base theme to load with 'include' setting in a theme.ini file
2010-09-02 14:11:52 -07:00
Evan Prodromou
82b1d6daef
Merge branch 'swat0' into 0.9.x
2010-09-02 16:58:55 -04:00
Evan Prodromou
7517409bf1
Merge branch 'testing' into 0.9.x
2010-09-02 16:56:52 -04:00
Brion Vibber
4cbbfdab84
Fix for #2635 : use ssl-sometimes settings for Twitter settings & auth pages
2010-09-02 10:55:26 -07:00
Evan Prodromou
ebcd8644a5
Revert "debugging replyToID"
...
This reverts commit bb9353f6e0
.
2010-09-01 18:22:54 -04:00
Evan Prodromou
bb9353f6e0
debugging replyToID
2010-09-01 17:59:49 -04:00
Evan Prodromou
27626c3abf
Correctly check for user's id in replies in user salmon post
2010-09-01 17:10:29 -04:00
Evan Prodromou
ab88123373
correctly return oprofile from Ostatus_profile::ensureProfileURI()
2010-09-01 17:05:11 -04:00
Evan Prodromou
2d4e0693c8
save URIs of remote profiles marked for attention
2010-09-01 16:17:18 -04:00
Evan Prodromou
3baff9aa98
Handle profile-from-uri hook to return ostatus profile if there's a match
2010-09-01 16:16:38 -04:00
Evan Prodromou
c82b1cda82
send a salmon slap to mentioned person when we reply to a notice
2010-09-01 14:35:43 -04:00
Evan Prodromou
468a15db00
Merge branch 'master' into 0.9.x
2010-09-01 14:21:36 -04:00
Evan Prodromou
8ebb858964
remove noop function from OStatusPlugin
2010-09-01 14:21:24 -04:00
Evan Prodromou
a507f04bc4
fix incorrect function name in updateostatus.php script
2010-08-25 12:32:10 -04:00
Brion Vibber
b77c029aa8
Merge branch 'testing'
...
Conflicts:
plugins/OStatus/classes/Ostatus_profile.php
2010-08-16 10:06:52 -07:00
Evan Prodromou
5110275a38
fix use of activity rather than act in salmonaction subclasses, too
2010-08-16 10:03:44 -07:00
Evan Prodromou
54b93aede6
typo mixing up and in salmonaction
2010-08-16 10:03:38 -07:00
Evan Prodromou
c1cab9bfb8
Notice title constructor doesn't check class of Notice
2010-08-14 18:02:08 -07:00
Evan Prodromou
7df78c7c6a
Merge branch '0.9.x' of gitorious.org:statusnet/mainline into 0.9.x
2010-08-14 12:08:15 -07:00
Evan Prodromou
21bf50bad6
Merge branch 'noticetitle' into 0.9.x
2010-08-14 12:03:25 -07:00
Evan Prodromou
401cf36de3
handle deletion of notice
2010-08-14 11:58:54 -07:00
Evan Prodromou
9e4f40806a
Merge branch 'master' into noticetitle
2010-08-14 11:46:12 -07:00
Zach Copley
fa4b360ba0
- Remove extraneous style stuff from Echo plugin - that stuff should
...
be handled via CSS in the theme.
- Updated installation instructions on Echo and Disqus plugins
2010-08-14 00:07:12 +00:00
Zach Copley
20d0723dec
Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x
2010-08-13 23:53:44 +00:00
Zach Copley
614b12ea51
A plugin to add Disqus commenting to notice pages
2010-08-13 23:53:05 +00:00
Evan Prodromou
926c77246b
Merge branch '0.9.x' of gitorious.org:statusnet/mainline into 0.9.x
...
Conflicts:
plugins/OStatus/classes/Ostatus_profile.php
2010-08-13 14:35:49 -07:00
Evan Prodromou
029aa0c61c
fix use of activity rather than act in salmonaction subclasses, too
2010-08-13 14:18:54 -07:00
Zach Copley
61ab21b711
Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x
2010-08-13 20:53:19 +00:00
Zach Copley
028f9a7b1d
A plugin for adding the Echo (formerly JS-Kit) commenting widget to
...
notice pages
2010-08-13 20:52:05 +00:00
Evan Prodromou
8dec16aeeb
add hooks to allow plugins to handle different kinds of activities
2010-08-13 13:14:47 -07:00
Evan Prodromou
4217277d14
typo mixing up and in salmonaction
2010-08-13 13:07:25 -07:00
Brion Vibber
16f75b95c6
Fixes for RSS subscriptions: accept posts with no ActivityStreams object-type set; be more liberal about accepting posts from feeds where the author info doesn't match (we'll post under the feed's profile and just not try to update the profile info).
2010-08-13 12:23:42 -07:00
Brion Vibber
60c36c1868
SubMirror: check feel-url discovery if profile-url discovery failed; should help when giving direct feeds to subscribe to
2010-08-13 12:23:32 -07:00
Brion Vibber
f7b2bb09e6
Suppress whinging during HTML parsing in profile page discovery for things that turn out to be XML feeds with funny namespaces.
2010-08-13 12:23:28 -07:00
Evan Prodromou
9b7536351b
hide the Whats Up Nickname if notice title enabled
2010-08-13 12:22:58 -07:00
Evan Prodromou
e6da476c16
make notice title phpcs-clean
2010-08-13 12:04:30 -07:00
Evan Prodromou
eff0b8e1aa
make notice title phpcs-clean
2010-08-13 12:01:29 -07:00
Evan Prodromou
96705b4ec5
set notice titles in RSS and Atom output
2010-08-13 11:50:33 -07:00
Brion Vibber
185f18024a
Fixes for RSS subscriptions: accept posts with no ActivityStreams object-type set; be more liberal about accepting posts from feeds where the author info doesn't match (we'll post under the feed's profile and just not try to update the profile info).
2010-08-13 11:41:44 -07:00
Evan Prodromou
91c914fa3b
show notice title for notices in a notice list
2010-08-13 11:35:36 -07:00
Evan Prodromou
67ff9ea490
helper static method to get title text based on a notice
2010-08-13 11:35:16 -07:00
Evan Prodromou
e2128b2019
save the notice title when the notice is saved
2010-08-13 11:29:18 -07:00
Brion Vibber
8569388499
SubMirror: check feel-url discovery if profile-url discovery failed; should help when giving direct feeds to subscribe to
2010-08-13 11:02:21 -07:00
Brion Vibber
115231f917
Suppress whinging during HTML parsing in profile page discovery for things that turn out to be XML feeds with funny namespaces.
2010-08-13 10:51:00 -07:00
Evan Prodromou
79b5f1cea5
add title element to notice form
2010-08-12 22:11:26 -07:00
Evan Prodromou
ac6486f12e
Plugin file and data file for notice title
2010-08-12 21:19:12 -07:00
Brion Vibber
c3475e6ebe
Merge branch 'master' into 0.9.x
2010-08-12 12:55:36 -07:00
Brion Vibber
34995df879
TinyMCE: counter support (may not be 100% exact match to server-side count, but there's already discrepencies due to URL shortening)
...
Fix for bad char conversions also, caused short text to not be saved in some cases.
2010-08-12 12:47:07 -07:00
Brion Vibber
f14f252a16
TinyMCE: fixes to attachment handling
2010-08-12 11:39:42 -07:00
Brion Vibber
3370a326d8
work in progress: tinymce image attachments
2010-08-11 17:01:38 -07:00