summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--EVENTS.txt8
-rw-r--r--classes/Profile.php39
2 files changed, 35 insertions, 12 deletions
diff --git a/EVENTS.txt b/EVENTS.txt
index f333c5442..90242fa13 100644
--- a/EVENTS.txt
+++ b/EVENTS.txt
@@ -722,6 +722,10 @@ StartRobotsTxt: Before outputting the robots.txt page
EndRobotsTxt: After the default robots.txt page (good place for customization)
- &$action: RobotstxtAction being shown
-GetProfileUri: When determining the canonical URI for a given profile
-- &$profile: the current profile
+StartGetProfileUri: When determining the canonical URI for a given profile
+- $profile: the current profile
+- &$uri: the URI
+EndGetProfileUri: After determining the canonical URI for a given profile
+- $profile: the current profile
+- &$uri: the URI
diff --git a/classes/Profile.php b/classes/Profile.php
index 5a86619fd..494c697e4 100644
--- a/classes/Profile.php
+++ b/classes/Profile.php
@@ -769,7 +769,7 @@ class Profile extends Memcached_DataObject
$xs->elementStart('author');
$xs->element('name', null, $this->nickname);
- $xs->element('uri', null, $this->profileurl);
+ $xs->element('uri', null, $this->getUri());
$xs->elementEnd('author');
return $xs->getString();
@@ -832,21 +832,40 @@ class Profile extends Memcached_DataObject
return $xs->getString();
}
+ /**
+ * Returns the best URI for a profile. Plugins may override.
+ *
+ * @return string $uri
+ */
function getUri()
{
- if (Event::handle('GetProfileUri', array($this))) {
+ $uri = null;
- $remote = Remote_profile::staticGet('id', $this->id);
+ // check for a local user first
+ $user = User::staticGet('id', $this->id);
- if (!empty($remote)) {
- return $remote->uri;
- } else {
- return common_local_url(
- 'userbyid',
- array('id' => $this->id)
- );
+ if (!empty($user)) {
+ $uri = common_local_url(
+ 'userbyid',
+ array('id' => $user->id)
+ );
+ } else {
+
+ // give plugins a chance to set the URI
+ if (Event::handle('StartGetProfileUri', array($this, &$uri))) {
+
+ // return OMB profile if any
+ $remote = Remote_profile::staticGet('id', $this->id);
+
+ if (!empty($remote)) {
+ $uri = $remote->uri;
+ }
+
+ Event::handle('EndGetProfileUri', array($this, &$uri));
}
}
+
+ return $uri;
}
}