diff options
Diffstat (limited to 'mod/ecml/start.php')
-rw-r--r-- | mod/ecml/start.php | 298 |
1 files changed, 0 insertions, 298 deletions
diff --git a/mod/ecml/start.php b/mod/ecml/start.php deleted file mode 100644 index 4fa13b7c9..000000000 --- a/mod/ecml/start.php +++ /dev/null @@ -1,298 +0,0 @@ -<?php -/** - * Provides the ECML service to plugins. - * - * @package ECML - * - * @todo - * Granular access to keywords based upon view. - * Update docs / help - * Check for SQL injection problems. - * Check entity keyword views against fullview. Force to FALSE? - */ - -/** - * Init ECML - */ -function ecml_init() { - require_once(dirname(__FILE__) . '/ecml_functions.php'); - global $CONFIG; - - define('ECML_ATTR_SEPARATOR', ' '); - define('ECML_ATTR_OPERATOR', '='); - - // find alphanumerics (keywords) possibly followed by everything that is not a ] (args) and all surrounded by [ ]s - define('ECML_KEYWORD_REGEX', '/\[([a-z0-9\.]+)([^\]]+)?\]/'); - - // help page - register_page_handler('ecml', 'ecml_help_page_handler'); - - // admin access page - register_page_handler('ecml_admin', 'ecml_admin_page_handler'); - - // ecml validator for embed - register_page_handler('ecml_generate', 'ecml_generate_page_handler'); - - // CSS for admin access - elgg_extend_view('css/screen', 'ecml/admin/css'); - - // admin action to save permissions - elgg_register_action('settings/ecml/save', dirname(__FILE__) . '/actions/save_permissions.php', 'admin'); - - // show ECML-enabled icon on free-text input areas - //elgg_extend_view('input/longtext', 'ecml/input_ext', 0); - //elgg_extend_view('input/plaintext', 'ecml/input_ext'); - //elgg_extend_view('input/text', 'ecml/input_ext'); - - // add parsing for core views. - elgg_register_plugin_hook_handler('get_views', 'ecml', 'ecml_views_hook'); - - // get register the views we want to parse for ecml - // @todo will need to do profiling to see if it would be faster - // to foreach through this list and register to specific views or - // do the check in a single plugin hook. - // Wants array('view_name' => 'Short Description') - $CONFIG->ecml_parse_views = elgg_trigger_plugin_hook('get_views', 'ecml', NULL, array()); - - foreach ($CONFIG->ecml_parse_views as $view => $desc) { - elgg_register_plugin_hook_handler('view', $view, 'ecml_parse_view'); - } - - // provide a few built-in ecml keywords. - // @todo could pull this out into an array here to save an API call. - elgg_register_plugin_hook_handler('get_keywords', 'ecml', 'ecml_keyword_hook'); - - // grab the list of keywords and their views from plugins - $CONFIG->ecml_keywords = elgg_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 = unserialize(get_plugin_setting('ecml_permissions', 'ecml')); - - // 3rd party media embed section - elgg_register_plugin_hook_handler('embed_get_sections', 'all', 'ecml_embed_web_services_hook'); - - // remove ecml when stripping tags - elgg_register_plugin_hook_handler('format', 'strip_tags', 'ecml_strip_tags'); -} - -/** - * Display a help page for valid ECML keywords on this page. - * - * @param array $page - */ -function ecml_help_page_handler($page) { - if (!isset($page[0]) || empty($page[0])) { - $content = elgg_view('ecml/help'); - $body = elgg_view_layout('one_column_with_sidebar', array('content' => $content)); - echo elgg_view_page(elgg_echo('ecml:help'), $body); - } else { - // asking for detailed help about a keyword - $keyword = $page[0]; - $content = elgg_view('ecml/keyword_help', array('keyword' => $keyword)); - - if (get_input('ajax', FALSE)) { - echo $content; - exit; - } else { - $body = elgg_view_layout('one_column_with_sidebar', array('content' => $content)); - echo elgg_view_page(elgg_echo('ecml:help'), $body); - } - } - - return TRUE; -} - -/** - * Generate ECML given a URL or embed link and service. - * Doesn't check if the resource actually exists. - * Outputs JSON. - * - * @param unknown_type $page - */ -function ecml_generate_page_handler($page) { - $service = trim(get_input('service')); - $resource = trim(get_input('resource')); - - // if standard ECML is passed, guess the service from that instead - // only support one. - if (elgg_substr($resource, 0, 1) == '[') { - if ($keywords = ecml_extract_keywords($resource)) { - $keyword = $keywords[0]['keyword']; - $ecml_info = ecml_get_keyword_info($keyword); - $html = ecml_parse_string($resource); - - echo json_encode(array( - 'status' => 'success', - 'ecml' => $resource, - 'html' => $html - )); - - exit; - } - } - - if (!$service || !$resource) { - echo json_encode(array( - 'status' => 'error', - 'message' => elgg_echo('ecml:embed:invalid_web_service_keyword') - )); - - exit; - } - - $ecml_info = ecml_get_keyword_info($service); - - if ($ecml_info) { - // don't allow embedding for restricted. - if (isset($ecml_info['restricted'])) { - $result = array( - 'status' => 'error', - 'message' => elgg_echo('ecml:embed:cannot_embed'), - ); - } else { - // @todo pull this out into a function. allow optional arguments. - $ecml = "[$service " . sprintf($ecml_info['embed_format'], $resource) . ']'; - $html = ecml_parse_string($ecml, NULL); - $result = array( - 'status' => 'success', - 'ecml' => $ecml, - 'html' => $html - ); - } - } else { - $result = array( - 'status' => 'error', - 'message' => elgg_echo('ecml:embed:invalid_web_service_keyword') - ); - } - - echo json_encode($result); - exit; -} - -/** - * Display a admin area for ECML - * - * @param array $page - */ -function ecml_admin_page_handler($page) { - admin_gatekeeper(); - elgg_set_context('admin'); - $content = elgg_view('ecml/admin/ecml_admin'); - $body = elgg_view_layout('one_column_with_sidebar', array('content' => $content)); - echo elgg_view_page(elgg_echo('ecml:admin'), $body); -} - -/** - * 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; - - return ecml_parse_string($return_value, $params['view']); -} - - -/** - * Register default keywords. - * - * @param unknown_type $hook - * @param unknown_type $type - * @param unknown_type $value - * @param unknown_type $params - * @return unknown_type - */ -function ecml_keyword_hook($hook, $type, $value, $params) { - // I keep going back and forth about entity and view. They're powerful, but - // a great way to let a site get hacked if the admin doesn't lock them down. - $keywords = array( - 'youtube' => array('params' => array('src', 'width', 'height'), 'embed_format' => 'src="%s"'), - 'slideshare' => array('params' => array('id', 'width', 'height'), 'embed_format' => 'id="%s"'), - 'vimeo' => array('params' => array('src', 'width', 'height'), 'embed_format' => 'src="%s"'), - 'googlemaps' => array('params' => array('src', 'width', 'height'), 'embed_format' => 'src="%s"'), - //'scribd' - 'blip.tv' => array('params' => array('width', 'height'), 'embed_format' => '%s'), - 'dailymotion' => array('params' => array('src', 'width', 'height'), 'embed_format' => 'src="%s"'), - 'livevideo' => array('params' => array('src', 'width', 'height'), 'embed_format' => 'src="%s"'), - 'redlasso' => array('params' => array('id', 'width', 'height'), 'embed_format' => 'id="%s"'), - ); - - foreach ($keywords as $keyword => $info) { - $value[$keyword] = array( - 'name' => elgg_echo("ecml:keywords:$keyword"), - 'view' => "ecml/keywords/$keyword", - 'description' => elgg_echo("ecml:keywords:$keyword:desc"), - 'usage' => elgg_echo("ecml:keywords:$keyword:usage"), - 'type' => 'web_service', - 'params' => $info['params'], - 'embed_format' => $info['embed_format'] - ); - } - - // default entity keyword - $value['entity'] = array( - 'name' => elgg_echo('ecml:keywords:entity'), - 'view' => "ecml/keywords/entity", - 'description' => elgg_echo("ecml:keywords:entity:desc"), - 'usage' => elgg_echo("ecml:keywords:entity:usage") - ); - - return $value; -} - -/** - * Register default views to parse - * - * @param unknown_type $hook - * @param unknown_type $type - * @param unknown_type $value - * @param unknown_type $params - */ -function ecml_views_hook($hook, $type, $value, $params) { - $value['annotation/generic_comment'] = elgg_echo('ecml:views:annotation_generic_comment'); - - return $value; -} - -/** - * Show the special Web Services embed section. - * - * @param unknown_type $hook - * @param unknown_type $type - * @param unknown_type $value - * @param unknown_type $params - */ -function ecml_embed_web_services_hook($hook, $type, $value, $params) { - // we're using a view override for this section's content - // so only need to pass the name. - $value['web_services'] = array( - 'name' => elgg_echo('ecml:embed:web_services') - ); - - return $value; -} - -/** - * Remove ecml code for elgg_strip_tags() - * - * @param unknown_type $hook - * @param unknown_type $type - * @param unknown_type $value - * @param unknown_type $params - */ -function ecml_strip_tags($hook, $type, $value, $params) { - return preg_replace(ECML_KEYWORD_REGEX, '', $value); -} - -// be sure to run after other plugins -elgg_register_event_handler('init', 'system', 'ecml_init', 9999);
\ No newline at end of file |