Commit Graph

1061 Commits

Author SHA1 Message Date
Brion Vibber
5f9a8ca64b OStatus: accept webfinger addresses as well as profile URLs in the explicit remote subscribe form. 2010-02-23 21:11:44 +00:00
Evan Prodromou
b09304a6c4 Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing
Conflicts:
	plugins/OStatus/OStatusPlugin.php
2010-02-23 16:02:27 -05:00
Evan Prodromou
a0c255e231 move mention detection before default in OStatusPlugin 2010-02-23 15:59:10 -05:00
Brion Vibber
90d34b26c6 OStatus: do PuSH subscription setup from subscribe/join event hooks, so resubscribing directly from a profile/group list works correctly if there aren't active subscriptions at the moment. 2010-02-23 20:44:27 +00:00
Brion Vibber
c79c70ea2c OStatus subscription UI tweak: if we're already subscribed/joined, say so and don't offer a 'subscribe'/'join' button on the profile preview page. 2010-02-23 11:56:17 -08:00
Brion Vibber
e070fcaaae OStatus: fix for avatars, submit button in updated remote profile preview 2010-02-23 11:37:49 -08:00
James Walker
1fe031844c er typo 2010-02-22 23:44:33 -05:00
James Walker
9494b0e5d7 magicsig shuffling 2010-02-22 23:30:32 -05:00
James Walker
17b8020d25 clean up error logging 2010-02-22 23:30:31 -05:00
James Walker
cd561657c2 missing return value check 2010-02-22 23:30:31 -05:00
James Walker
f4b34d67c5 generate keypairs for users, and put them in the XRD for discovery 2010-02-22 23:30:31 -05:00
James Walker
74f5c1e169 db_objectified magic sig - for persistence of local keypairs 2010-02-22 23:30:31 -05:00
James Walker
cb32b676fa moving magicsig.php to classes - to add storage 2010-02-22 23:30:31 -05:00
Sarven Capadisli
b67bb182b0 Refactored preview info and form for authorizing a remote subscription 2010-02-23 04:59:34 +01:00
Brion Vibber
193448d1be OStatus: cleanup on ostatussub preparing for final UI work on the remote sub/join forms. 2010-02-23 01:58:05 +00:00
Zach Copley
cbf6ebae01 Merge branch 'rationalize-activity' into testing
* rationalize-activity:
  Move ActivityObject and related stuff to core
  Add PoCo bits, avatar link, geo point, etc. to person activity obj output
2010-02-22 17:12:33 -08:00
Zach Copley
6a711c6cdc Move ActivityObject and related stuff to core 2010-02-22 17:10:50 -08:00
Brion Vibber
870e556faa Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing 2010-02-23 00:52:47 +00:00
Zach Copley
a3e800e67c Add PoCo bits, avatar link, geo point, etc. to person activity obj output 2010-02-22 16:46:54 -08:00
Brion Vibber
d410df0406 OStatus group delivery initial implementation.
- added rel="ostatus:attention" links for group delivery
- added events for plugins to override group profile/permalink pages
- pulled Notice::saveGroups up to save-time so we can override;
  it's relatively cheap and gives us a clean list of target
  groups for distrib time even with customized delivery.
- fixed notice::getGroups to return group objects as expected
- added some doc on new parameters to Notice::saveNew
 - 'groups' list of group IDs to push to in place of parsing
- messages that come in via PuSH and contain local group targets
  are delivered to local group members
- messages that come in via PuSH and contain remote group targets
  are delivered to local members of the remote group

Todo:
- handle group posts that only come through Salmon
- handle conflicts in case something comes in both through Salmon and PuSH
- better source verification
- need a cleaner interface to look up groups by URI
- need a way to handle remote groups with conflicting names
2010-02-23 00:44:45 +00:00
James Walker
caad5859b5 swapping pear error handling so Crypt_RSA can properly detect available
math libraries
2010-02-22 19:01:12 -05:00
Sarven Capadisli
3b823f8fbd Leaves the original URL alone and adds ? or & when it does the XHR. 2010-02-23 00:27:41 +01:00
Sarven Capadisli
8aa8e124cb Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing 2010-02-22 22:24:45 +01:00
Sarven Capadisli
3c00472999 Removed unnecessary assignment to SN.C.I.OStatusProfile. It can be
brought back in the future if the value is to be set directly from the
HTML script output.
2010-02-22 22:23:37 +01:00
Brion Vibber
06f155c02d OStatus: initial hookup of remote group membership (notice delivery not yet working quite right)
- added a temp config var to disable salmon magic signatures until they're working consistently
2010-02-22 12:13:57 -08:00
Sarven Capadisli
7e8c3ea418 Removed extra comma 2010-02-22 19:37:42 +01:00
Sarven Capadisli
a1549ebf87 Minor JSLinting 2010-02-22 19:36:03 +01:00
Sarven Capadisli
3ed3796135 Added licensing info and a note about migrating 2010-02-22 19:18:32 +01:00
Sarven Capadisli
85cb850cd5 Set and reuse a cookie with own profile value at a StatusNet instance 2010-02-22 19:13:30 +01:00
Brion Vibber
2b16532ffb OStatus: use 'profile' consistently as param on ostatussub and ostatusinit to help us stay sane. 2010-02-22 10:03:34 -08:00
Christopher Vollick
a6afc1cfd6 Made Blogspam Plugin Respect textlimit Setting.
The Blogspam plugin was setting a max-size to 140.
It was therefore rejecting posts with more characters as spam.

This kind of defeated the purpose of setting a higher limit...
2010-02-22 11:20:44 -05:00
Christopher Vollick
1e8e1e836d Rewrote How Blogspam Plugin Made HTTP Requests.
The old way didn't seem to work anymore.
It was just sending empty requests.
2010-02-22 11:19:16 -05:00
Sarven Capadisli
c88507fe11 Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing 2010-02-22 17:08:54 +01:00
Sarven Capadisli
3569493ba7 Added link to Subscriptions page to XHR get the ostatus sub form 2010-02-22 17:07:48 +01:00
Sarven Capadisli
e6ce04cbce Generalised Subscription XHR dialogbox 2010-02-22 17:05:43 +01:00
James Walker
2f65fa646a wiring in magicsig 2010-02-22 09:05:52 -05:00
James Walker
e0388cc1d3 adding magic sig stuff 2010-02-22 09:05:32 -05:00
James Walker
8fe097d7d1 Merge remote branch 'statusnet/testing' into testing 2010-02-22 09:03:42 -05:00
Evan Prodromou
75fdef2092 handle poco nicknames in Ostatus_profile 2010-02-22 07:57:44 -05:00
Evan Prodromou
074e3fa895 Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing 2010-02-22 07:09:08 -05:00
Evan Prodromou
e94800ced9 fix broken link in OpenID documentation 2010-02-22 07:08:57 -05:00
Sarven Capadisli
f54c9b70db Fixed error/warning message location in OStatus autorize subscription page 2010-02-22 11:53:34 +01:00
James Walker
7b2ea7aa22 Merge remote branch 'statusnet/testing' into testing 2010-02-22 01:40:03 -05:00
James Walker
effa4f5d1e adding extlib for Crypt_RSA 2010-02-22 01:39:00 -05:00
Brion Vibber
17ed30dffc OStatus: fix remote subscription when putting webfinger address in the little box 2010-02-22 06:00:13 +00:00
Evan Prodromou
891e002883 don't calculate replies for remote notices 2010-02-21 23:56:48 -05:00
Evan Prodromou
a9599d53c5 some info code for usersalmon.php 2010-02-21 23:39:52 -05:00
Evan Prodromou
e4c4f90c8a don't save Notices that already exist in Salmon 2010-02-21 23:32:20 -05:00
Evan Prodromou
48839a1fcf change erroneous common_sql_time() to common_sql_date() 2010-02-21 23:19:29 -05:00
Evan Prodromou
e39e6cdcc5 was using HTMLPurifier::purify() as a static method, which it is not 2010-02-21 23:16:42 -05:00
Evan Prodromou
aab7ce70dc Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing 2010-02-21 23:08:01 -05:00
Evan Prodromou
17c329ba89 add HTMLPurifier config 2010-02-21 23:07:46 -05:00
Brion Vibber
bd3051b85c Merge branch 'testing' of gitorious.org:statusnet/mainline into testing 2010-02-21 19:55:53 -08:00
Brion Vibber
5207783765 OStatus: record source profile & saving method in ostatus_source table; this allows us to distinguish posts that have come through an unverified group feed 2010-02-21 19:52:53 -08:00
Evan Prodromou
cc18f757a8 hook in OStatusPlugin to return Ostatus_profile URIs where applicable 2010-02-21 22:52:52 -05:00
Evan Prodromou
232b5efa7e Add error info for missing URI in attention 2010-02-21 22:44:58 -05:00
Evan Prodromou
13fb7bef78 reversed in_array() arguments in UsersalmonAction 2010-02-21 22:41:02 -05:00
Evan Prodromou
de522d7978 Wasn't putting in namespaces for reply salmons 2010-02-21 22:38:18 -05:00
Evan Prodromou
a0b64663be Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing 2010-02-21 22:35:04 -05:00
Evan Prodromou
bd21f48cee Notice::getReplies() returns array of profile IDs 2010-02-21 22:34:40 -05:00
Brion Vibber
892cd801d1 Merge branch 'testing' of gitorious.org:statusnet/mainline into testing 2010-02-21 19:02:23 -08:00
Brion Vibber
ad10e6e8da OStatus: drop the remnants of feedsubsettings, replaced by ostatussub and no longer linked in UI 2010-02-21 19:01:32 -08:00
Evan Prodromou
79c76f1a87 Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing 2010-02-21 21:57:32 -05:00
Evan Prodromou
be70dd3677 work harder to preserve info when creating new Ostatus_profile 2010-02-21 21:57:09 -05:00
Brion Vibber
d3996996e4 Merge branch 'testing' of gitorious.org:statusnet/mainline into testing 2010-02-21 18:54:06 -08:00
Brion Vibber
78ca45c7a0 OStatus PuSH fixes:
- hub now defers subscription state updates until after verification, per spec
- hub now supports synchronous verification when requested (if async is not requested after)
- client now requests synchronous verification (it's a bit safer)
- cleanup on subscription logging/error responses
2010-02-21 18:51:15 -08:00
Evan Prodromou
273c0e0363 Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing 2010-02-21 21:39:50 -05:00
Evan Prodromou
912814fb7f use some constants and do some extra output in webfinger output 2010-02-21 21:38:59 -05:00
Evan Prodromou
bd74f05a66 Do mention lookup for Webfinger accounts in OStatusPlugin 2010-02-21 21:38:16 -05:00
Evan Prodromou
bf23c35495 Add OStatus_profile::ensureWebfinger() 2010-02-21 21:37:12 -05:00
Evan Prodromou
fde64ddf26 make some of the Webfinger magic strings constants 2010-02-21 21:36:36 -05:00
Brion Vibber
aa0b2ce81a OStatus PuSH fixlets:
- set minimal error page output on PuSH callback
- allow hub to retry ($config['ostatus']['hub_retries']), simplify internal iface a bit. Retries are pushed to end of queue but otherwise not delayed yet; makes delivery more robust to one-off transitory errors but not yet against downtime.
2010-02-21 14:28:06 -08:00
Evan Prodromou
37179a91d5 Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing 2010-02-21 17:00:19 -05:00
Evan Prodromou
1c22bf20f1 fixup activity serialization so salmon notifications work 2010-02-21 17:00:05 -05:00
Brion Vibber
5349aa420e OStatus feedsub fixlets:
- actually udpate feedsub.last_update when we get a new PuSH update in
- move incoming PuSH processing to a queue handler to minimize time spent before POST return, as recommended by PuSH spec. When queues are disabled this'll still be handled immediately.
2010-02-21 13:40:59 -08:00
Evan Prodromou
10f6c023f4 include namespaces in posted activities in notifyActivity() 2010-02-21 16:23:55 -05:00
Evan Prodromou
4209082677 Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing 2010-02-21 14:18:16 -05:00
Evan Prodromou
ad3406a919 use Ostatus_profile::ensureActivityObjectProfile() in SalmonAction::ensureProfile() 2010-02-21 14:17:37 -05:00
Evan Prodromou
16a43b1154 slightly more robust remote profile creation 2010-02-21 14:14:45 -05:00
Brion Vibber
588fe5d603 OStatus: debug aid - log the received Salmon post when it can't be parsed properly as an <atom:entry> 2010-02-21 10:48:48 -08:00
Evan Prodromou
de093537f6 correct actor for OStatusPlugin::onEndUnsubscribe() 2010-02-21 13:32:24 -05:00
Evan Prodromou
068d8f9220 correct call to time() in Ostatus_profile::notify() 2010-02-21 13:31:58 -05:00
Evan Prodromou
f83941a67b correct name check in ActivityObject::fromProfile() 2010-02-21 13:31:31 -05:00
Evan Prodromou
5aeed9e041 add activity:subject to atom feeds 2010-02-21 13:11:00 -05:00
Evan Prodromou
1a86bf9c65 try different ways to get a profile from a feed 2010-02-21 12:56:46 -05:00
Evan Prodromou
d372a352ec make avatar attribute explicit for ActivityObject 2010-02-21 12:55:40 -05:00
Evan Prodromou
09e2d181be remove unused profile code from salmonaction 2010-02-21 12:54:52 -05:00
Evan Prodromou
727773cdfa redirect ostatussub if not logged in 2010-02-21 11:24:04 -05:00
Evan Prodromou
df7c6b37c8 use notifyActivity() for notifications in OStatusPlugin 2010-02-21 10:53:32 -05:00
Evan Prodromou
4e90bd34e9 activity notification in Ostatus_profile 2010-02-21 10:53:11 -05:00
Evan Prodromou
ff2efd314f let activities generate their own XML 2010-02-21 10:50:51 -05:00
Evan Prodromou
9898bbdeb2 Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing
Conflicts:
	plugins/OStatus/lib/activity.php
2010-02-21 09:19:27 -05:00
Evan Prodromou
7f471bde23 more tests for Activity parsing 2010-02-21 09:17:52 -05:00
Evan Prodromou
4a4c34de32 Save posted notices in usersalmon 2010-02-21 09:17:35 -05:00
Evan Prodromou
6169d8a877 saving notices in salmon actions 2010-02-21 09:16:27 -05:00
Evan Prodromou
229f9bd069 more complete content retrieval in ActivityObject::__construct() 2010-02-21 09:15:57 -05:00
Brion Vibber
5df61141d2 OStatus: fix regressions from merge 2010-02-20 18:25:40 -08:00
Evan Prodromou
6f1ccfc577 Subscription::start() should be enough, right? 2010-02-20 20:36:54 -05:00
Evan Prodromou
0c62c68675 do some double-checks on favor and disfavor handlers in OStatusPlugin 2010-02-20 20:34:29 -05:00
Evan Prodromou
5565216b42 Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing
Conflicts:
	plugins/OStatus/OStatusPlugin.php
2010-02-20 20:27:04 -05:00
Evan Prodromou
96c6019638 Add support for favor and disfavor notification
Added support for favoring and disfavoring in OStatusPlugin.

Needed to represent the Notice as an activity:object, so added
some code for that in lib/activity.php.

Also, made some small changes to OStatusPlugin so it handled
having a non-default argument $object correctly.
2010-02-20 19:58:20 -05:00
Brion Vibber
145a19954f OStatus: Salmon favorite & unfavorite events now handled 2010-02-20 16:45:30 -08:00
Brion Vibber
9c2fe8492f OStatus: send favorite/unfavorite notifications to remote authors 2010-02-20 15:56:36 -08:00
Brion Vibber
ea9d6f21ec OStatus subscription page fixups; works but needs lots of UI loving!
- ostatussub via subscribe button now works again (changed to take profile instead of feed, patched up to the new discovery)
- added a quickie hack to allow putting your remote profile URI in place of webfinger acct through the remote-sub button (needs to be patched up to do proper discovery via XRDS or a link or something)
2010-02-20 12:57:47 -08:00
Brion Vibber
f891b135fb OStatus: fix regressions in plugin & usersalmon action. Sub/unsub notifications are working again. 2010-02-20 10:26:32 -08:00
Brion Vibber
97b01432e7 drop no-longer-used XML_Feed_Parser extlib package from OStatus plugin 2010-02-20 10:06:28 -08:00
Evan Prodromou
866b647062 add hooks for OStatus notification on subscribe/unsubscribe 2010-02-20 11:48:42 -05:00
Evan Prodromou
ab4ec095e8 adjust URI, URL, and location in Ostatus_profile::processPost 2010-02-20 11:38:05 -05:00
Evan Prodromou
ed45df045f Cool bug! Technically good PHP syntax 2010-02-20 11:17:54 -05:00
Evan Prodromou
2df3bbc80b Move some salmon processing to a superclass
Moved some salmon processing to a superclass so we could handle group
salmon posts, too.
2010-02-20 11:12:43 -05:00
Brion Vibber
50db2d5d69 OStatus: Salmon notifications now being generated moderately correctly. :) Needs to be an <entry> not a <feed>. 2010-02-19 17:01:38 -08:00
Brion Vibber
557df3d3f7 OStatus: sub/unsub notifications working again. Fixed up autodetection of feed info at profile setup time 2010-02-19 16:21:17 -08:00
Evan Prodromou
d69f6dff6a Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing
Conflicts:
	plugins/OStatus/actions/salmon.php
2010-02-19 16:55:24 -05:00
Evan Prodromou
b0327506a4 some more salmon stuff 2010-02-19 16:37:07 -05:00
Brion Vibber
a1a3ab1c58 OStatus: hooked up follow/unfollow events on Salmon endpoint to create/destroy remote subscriber relationships 2010-02-19 12:08:07 -08:00
Brion Vibber
114eb310ca OStatus: fix up Salmon endpoint detection/saving, timestamp fixes. 2010-02-19 10:29:06 -08:00
Evan Prodromou
48edade751 add ActivityContext class and test it 2010-02-18 22:18:14 -05:00
Brion Vibber
0dac13d197 OStatus refactoring to clean up profile vs feed and fix up subscription issues.
PuSH subscription maintenance broken back out to FeedSub, letting Ostatus_profile deal with the profile level (user or group, with unique id URI)
2010-02-18 16:50:53 -08:00
Brion Vibber
22ff358ba8 OStatus sub/unsub updates:
- fix for PuSH unsub verification
- send Salmon notification on unsub
2010-02-18 18:20:48 +00:00
Evan Prodromou
b6e5d4ecc3 Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing 2010-02-18 06:36:47 -05:00
Evan Prodromou
80ef3946d0 more work on salmon 2010-02-18 06:36:32 -05:00
Zach Copley
73ba26efe3 Twitter bridge - fix for Ticket #2192 2010-02-17 20:58:32 +00:00
Zach Copley
05c50499c3 Better logging for Twitter bridge account linking process 2010-02-17 20:58:24 +00:00
Zach Copley
c201baffbf Upgrade Twitter bridge to use OAuth 1.0a. It's more secure, and allows
us to automatically send in a callback url instead of having to manually
configure one for each StatusNet instance.
2010-02-17 20:58:15 +00:00
Zach Copley
c498f6e1ba Twitter bridge - fix for Ticket #2192 2010-02-17 20:53:16 +00:00
Zach Copley
6b887728b2 Better logging for Twitter bridge account linking process 2010-02-17 19:24:38 +00:00
Brion Vibber
3cb6b1670b Merge branch 'master' into testing 2010-02-17 10:13:35 -08:00
Craig Andrews
8e07926a9c parse_url returns an associative array - not an object 2010-02-17 10:10:07 -08:00
Brion Vibber
9f3246124d PostDebug plugin - saves POST data to debug log or directory to help debug form submission and server-to-server communications.
Some sensitive items are sanitized but not all - don't just shove out the log results publicly!
2010-02-17 09:58:34 -08:00
Brion Vibber
e51e96d724 OStatus: override source link with the source domain and link to original message 2010-02-17 02:16:03 +00:00
Brion Vibber
454d0b5738 OStatus: moving parts of profile processing to Activity from feedmunger. Pausing before refactoring DB schema a bit to clean up feed vs person vs group info 2010-02-17 01:49:49 +00:00
Brion Vibber
4a139d1cc8 OStatus: migrated notice parsing to use Activity helper classes; on the way to killing FeedMunger 2010-02-16 23:31:11 +00:00
Brion Vibber
014a32e6b8 OStatus: check only direct children in ActivityUtil::child; fixes pulling actor's info when we wanted post info 2010-02-16 23:04:39 +00:00
Brion Vibber
440ab90391 OStatus: fix up some recent regressions in subscription setup; fix state checks and verification token, and avatar save on setup. Needs updates for new atom code next... 2010-02-16 22:03:24 +00:00
Brion Vibber
a116cde1a4 OStatus: fix for low-level remote subscribe 2010-02-16 20:11:48 +00:00
Evan Prodromou
201110ffaa restructure Activity classes to push more DOM stuff to ActivityUtils 2010-02-16 12:49:54 -05:00
Brion Vibber
81b6b58e33 Merge branch 'master' into testing
Conflicts:
	lib/stompqueuemanager.php
2010-02-16 09:22:02 -08:00
Brion Vibber
c74aea589d Stomp queue restructuring for mass scalability:
- Multiplexing queues into groups and for multiple sites.
- Sharing vs breakout configurable per site and per queue via $config['queue']['breakout']
- Detect how many times a message is redelivered, discard if it's killed too many daemons
 - count configurable with $config['queue']['max_retries']
 - can dump the items to files in $config['queue']['dead_letter_dir']

Queue daemon memory & resource leak fixes:
- avoid unnecessary reconnections to memcached server (switch persistent connections back in on second initialization, assuming it's child process)
- monkey-patch for leaky .ini loads in DB_DataObject::databaseStructure() - was leaking 200k per active switch
- applied leak fixes to Status_network as well, using intermediate base Safe_DataObject for both it and Memcache_DataObject

Misc queue fixes:
- correct handling of child processes exiting due to signal termination instead of regular exit
- shutdown instead of infinite respawn loop if we're already past the soft memory limit at startup
- Added --all option for xmppdaemon... still opens one xmpp connection per site that has xmpp active

Cache updates:
- add Cache::increment() method with native support for memcached atomic increment
2010-02-16 09:16:51 -08:00
Evan Prodromou
a8c2a8261e move some nickname-guessing code to lib/util.php from OpenID 2010-02-16 11:06:10 -05:00
Evan Prodromou
813451c9f9 add a couple of FIXME comments 2010-02-16 10:18:23 -05:00
Evan Prodromou
5a357d5399 change find() to staticGet() to use cache 2010-02-16 09:58:33 -05:00
Zach Copley
f414544d0d Upgrade Twitter bridge to use OAuth 1.0a. It's more secure, and allows
us to automatically send in a callback url instead of having to manually
configure one for each StatusNet instance.
2010-02-16 06:12:08 +00:00
Zach Copley
0ba3759171 Use static class method for looking up Twitter user 2010-02-15 22:14:54 +00:00
Zach Copley
9f8e25bfe7 Use static class method for looking up Twitter user 2010-02-15 22:13:10 +00:00
Zach Copley
01c428796f Twitter-bridge: lookup old foreign_user by primary key not url 2010-02-15 22:05:23 +00:00
Zach Copley
66f427c373 Twitter-bridge: lookup old foreign_user by primary key not url 2010-02-15 21:53:49 +00:00
Zach Copley
a69863eae6 Better log msgs. Removed debugging statement. 2010-02-15 21:24:31 +00:00
Zach Copley
fdf6ed7b1a Better log msgs. Removed debugging statement. 2010-02-15 21:23:26 +00:00
Zach Copley
5db40c440d Merge branch 'testing' of git@gitorious.org:statusnet/mainline into testing 2010-02-15 21:14:32 +00:00
Zach Copley
5cc1f8b001 Fix for regression introduced with my last update to the
TwitterStatusFetcher: the Twitter bridge was not saving a foreign user
record when making a foreign link.
2010-02-15 21:13:42 +00:00