'Short Description') $CONFIG->ecml_parse_views = trigger_plugin_hook('get_views', 'ecml', NULL, array()); // provide a few built-in ecml keywords. // @todo could pull this out into an array here to save an API call. register_plugin_hook('get_keywords', 'ecml', 'ecml_keyword_hook'); // grab the list of keywords and their views from plugins $CONFIG->ecml_keywords = trigger_plugin_hook('get_keywords', 'ecml', NULL, array()); // grab permissions for specific views/contexts // this is a black list. // it's more efficient to use this as a blacklist // but probably makes more sense from a UI perspective as a whitelist. // uses [views][view_name] = array(keywords, not, allowed) $CONFIG->ecml_permissions = array( 'views' => array() ); } /** * Page setup. Adds admin controls to the admin panel for granular permission */ function ecml_pagesetup(){ if (get_context() == 'admin' && isadminloggedin()) { global $CONFIG; add_submenu_item(elgg_echo('ecml'), $CONFIG->wwwroot . 'pg/ecml_admin'); } } /** * Display a help page for valid ECML keywords on this page. * * @param array $page */ function ecml_help_page_handler($page) { $content = elgg_view('ecml/help'); echo page_draw(elgg_echo('ecml:help'), $content); } /** * Display a help page for valid ECML keywords on this page. * * @param array $page */ function ecml_admin_page_handler($page) { $content = elgg_view('ecml/admin'); echo page_draw(elgg_echo('ecml:admin'), $content); } /** * Parses a registered view / context for supported keywords. * * @param unknown_type $hook * @param unknown_type $entity_type * @param unknown_type $return_value * @param unknown_type $params * @return string */ function ecml_parse_view($hook, $entity_type, $return_value, $params) { global $CONFIG; // give me everything that is not a ], possibly followed by a :, and surrounded by [[ ]]s $keyword_regex = '/\[\[([a-z0-9_]+):?([^\]]+)?\]\]/'; if (array_key_exists($params['view'], $CONFIG->ecml_parse_views)) { $CONFIG->ecml_current_view = $params['view']; $return_value = preg_replace_callback($keyword_regex, 'ecml_parse_view_match', $return_value); } return $return_value; } /** * Register some default keywords. * * @param unknown_type $hook * @param unknown_type $entity_type * @param unknown_type $return_value * @param unknown_type $params * @return unknown_type */ function ecml_keyword_hook($hook, $entity_type, $return_value, $params) { $return_value['login_box'] = array( 'view' => 'account/forms/login', 'description' => elgg_echo('ecml:keywords:login_box') ); $return_value['user_list'] = array( 'view' => 'ecml/keywords/user_list', 'description' => elgg_echo('ecml:keywords:user_list') ); $return_value['site_stats'] = array( 'view' => 'ecml/keywords/site_stats', 'description' => elgg_echo('ecml:keywords:site_stats') ); return $return_value; } register_elgg_event_handler('init', 'system', 'ecml_init');