aboutsummaryrefslogtreecommitdiff
path: root/mod/ecml/start.php
diff options
context:
space:
mode:
Diffstat (limited to 'mod/ecml/start.php')
-rw-r--r--mod/ecml/start.php298
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