* * @param array $page * @return NULL */ function dokuwiki_page_handler($page) { elgg_load_library('elgg:dokuwiki'); if ($page[0] === "all") { elgg_set_context("search"); include(elgg_get_plugins_path().'dokuwiki/index.php'); return true; } elgg_set_context("dokuwiki"); $dokuwiki_path = elgg_get_plugins_path().'dokuwiki/vendors/dokuwiki/'; $doku = current_dokuwiki_entity(); if (!$doku) // can fail if there is no user and wiki doesnt exist return false; $parsed_url = parse_url(elgg_get_site_url().'dokuwiki/'); $url_base = $parsed_url['path']; if (is_numeric($page[0])) { $entity_guid = $page[0]; $ent = get_entity($entity_guid); if (($ent && $ent instanceof ElggGroup) && $ent->dokuwiki_enable !== 'yes') { // wiki not activated for this group. bail out. elgg_pop_context(); return false; } if ($ent && (/*$ent instanceof ElggUser ||*/ $ent instanceof ElggGroup)) { elgg_set_page_owner_guid($entity_guid); $data_path = elgg_get_data_path().'wikis/'.$entity_guid; } else { // can't see the group elgg_pop_context(); return false; } $page = array_slice($page, 1); // pop first element define('DOKU_REL', $url_base.$entity_guid."/"); define('DOKU_BASE', $url_base.$entity_guid."/"); define('DOKU_URL', elgg_get_site_url().'dokuwiki/'.$entity_guid."/"); } else { $data_path = elgg_get_data_path().'wiki'; define('DOKU_REL', $url_base); define('DOKU_BASE', $url_base); define('DOKU_URL', elgg_get_site_url().'dokuwiki/'); } define('DOKU_INC', $dokuwiki_path); define('DOKU_MEDIA', elgg_get_site_url().'mod/dokuwiki/vendors/dokuwiki/'); define('DOKU_CONF', $dokuwiki_path."conf/"); dokuwiki_create_datafolder($data_path); define('DOKU_ELGGDATA',$data_path); if (empty($page) || (count($page)==1 && $page[0] == 'acl')) { $page = array('doku.php'); } else if ((count($page)==1 && $page[0] == 'usermanager')) { $page = array('doku.php'); } else if ((count($page)==1 && $page[0] == 'plugin')) { $page = array('doku.php'); } else if ((count($page)==1 && $page[0] == 'config')) { $page = array('doku.php'); } else if ((count($page)==1 && $page[0] == 'revert')) { $page = array('doku.php'); } else if ((count($page)==1 && $page[0] == 'popularity')) { $page = array('doku.php'); } if (empty($page) || (count($page)==1 && !$page[0])) { $page = array('doku.php'); } $_SERVER['PHP_AUTH_USER'] = elgg_get_logged_in_user_entity()->username; $_SERVER['PHP_AUTH_PW'] = elgg_get_logged_in_user_entity()->password; if (count($page) == 1) { $doku_body = elgg_view('dokuwiki/index',array('page'=>$page[0])); echo $doku_body; } else { // avoid inclusion over root $dest = realpath($dokuwiki_path.implode("/",$page)); if (strpos($dest, $dokuwiki_path) == 0) $doku_body = elgg_view('dokuwiki/index',array('page'=>implode("/",$page))); echo $doku_body; } return true; } /** * Add a menu item to an ownerblock */ function dokuwiki_owner_block_menu($hook, $type, $return, $params) { if (elgg_instanceof($params['entity'], 'group') && $params['entity']->dokuwiki_enable == "yes") { $url = "dokuwiki/{$params['entity']->guid}/"; $item = new ElggMenuItem('dokuwiki', elgg_echo('dokuwiki:group'), $url); $return[] = $item; } return $return; } function dokuwiki_icon_hook($hook, $entity_type, $returnvalue, $params) { if ($hook == 'entity:icon:url' && $params['entity']->getSubtype() == 'dokuwiki') { $owner = get_entity($params['entity']->container_guid); if ($owner) return $owner->getIcon($params['size']); } return $returnvalue; } function dokuwiki_url($entity) { return elgg_get_site_url() . "dokuwiki/".$entity->container_guid; } ?>