diff options
-rw-r--r-- | engine/lib/pageowner.php | 56 |
1 files changed, 50 insertions, 6 deletions
diff --git a/engine/lib/pageowner.php b/engine/lib/pageowner.php index 3f0c58a5d..034349d67 100644 --- a/engine/lib/pageowner.php +++ b/engine/lib/pageowner.php @@ -26,6 +26,7 @@ function elgg_get_page_owner_guid($guid = 0) { return $page_owner_guid; } + // return guid of page owner entity $guid = elgg_trigger_plugin_hook('page_owner', 'system', NULL, 0); $page_owner_guid = $guid; @@ -61,14 +62,26 @@ function elgg_set_page_owner_guid($guid) { } /** - * Handles default page owners + * Sets the page owner based on request * - * @param string $hook page_owner - * @param string $entity_type system - * @param mixed $returnvalue Previous function's return value - * @param mixed $params Params + * Tries to figure out the page owner by looking at the URL or a request + * parameter. The request parameters used are 'username' and 'owner_guid'. If + * the page request is going through the page handling system, this function + * attempts to figure out the owner if the url fits the patterns of: + * pg/<handler>/owner/<username> + * pg/<handler>/friends/<username> + * pg/<handler>/view/<entity guid> + * pg/<handler>/add/<container guid> + * pg/<handler>/edit/<entity guid> + * pg/<handler>/group/<group guid> * - * @return int + * + * @param string $hook 'page_owner' + * @param string $entity_type 'system' + * @param int $returnvalue Previous function's return value + * @param array $params no parameters + * + * @return int GUID */ function default_page_owner_handler($hook, $entity_type, $returnvalue, $params) { @@ -78,6 +91,7 @@ function default_page_owner_handler($hook, $entity_type, $returnvalue, $params) $username = get_input("username"); if ($username) { + // @todo using a username of group:<guid> is deprecated if (substr_count($username, 'group:')) { preg_match('/group\:([0-9]+)/i', $username, $matches); $guid = $matches[1]; @@ -98,6 +112,36 @@ function default_page_owner_handler($hook, $entity_type, $returnvalue, $params) } } + $uri = $_SERVER['REQUEST_URI']; + if (strpos($uri, '/pg') === 0) { + $segments = explode('/', $uri); + if (isset($segments[3]) && isset($segments[4])) { + switch ($segments[3]) { + case 'owner': + case 'friends': + $user = get_user_by_username($segments[4]); + if ($user) { + return $user->getGUID(); + } + break; + case 'view': + case 'edit': + $entity = get_entity($segments[4]); + if ($entity) { + return $entity->getContainerGUID(); + } + break; + case 'add': + case 'group': + $entity = get_entity($segments[4]); + if ($entity) { + return $entity->getGUID(); + } + break; + } + } + } + return $returnvalue; } |