diff --git a/sites/all/modules/unl/unl.module b/sites/all/modules/unl/unl.module index e36a11a69c5f5dec551eaac72f57177732635150..5d5979f5beca942c0b5e7087b7fb23b7db9acd3b 100644 --- a/sites/all/modules/unl/unl.module +++ b/sites/all/modules/unl/unl.module @@ -159,23 +159,25 @@ function unl_permission() { * Adds UNL Migration Tool to the Content menu for admin */ function unl_menu() { - $access = array(); + global $user; + + $items = array(); + // Returns confirmation 'user_loggedin' if user is logged into the system $items['user/unl/whoami'] = array( - 'title' => 'UNL Whoami Tool', - 'access callback' => TRUE, - 'page callback' => 'unl_whoami', - 'file' => 'unl_whoami.php', + 'title' => 'UNL Whoami Tool', + 'access callback' => TRUE, + 'page callback' => 'unl_whoami', + 'file' => 'unl_whoami.php', ); // Returns html technical feedback form $items['user/unl/technical_feedback'] = array( - 'title' => 'Technical Feedback', - 'description' => 'Returns a form to fill out to give technical feedback', - 'access callback' => TRUE, - 'page callback' => 'technical_feedback', - 'file' => 'technical_feedback.php' - + 'title' => 'Technical Feedback', + 'description' => 'Returns a form to fill out to give technical feedback', + 'access callback' => TRUE, + 'page callback' => 'technical_feedback', + 'file' => 'technical_feedback.php' ); $items['admin/content/unl/migration'] = array( @@ -188,6 +190,7 @@ function unl_menu() { 'file' => 'unl_migration.php', ); + // Redirect the Appearance link away from admin/appearance for users who can't Administer themes but can Change Theme Settings $items['admin/themes'] = array( 'title' => 'Appearance', 'description' => 'Configure your theme.', @@ -198,12 +201,38 @@ function unl_menu() { 'weight' => -6, ); + // Hello world type page for performance/uptime monitoring $items['_status'] = array( 'title' => 'Still Alive', 'page callback' => 'unl_still_alive', 'access callback' => TRUE, ); + if (module_exists('imce')) { + // Add IMCE file browser to Content section + $items['admin/content/imce-file-browser'] = array( + 'title' => 'File browser', + 'page callback' => 'imce_user_page', + 'page arguments' => array($user->uid), + 'access callback' => '_unl_imce_file_browser_access', + 'file' => 'inc/imce.page.inc', + 'file path' => drupal_get_path('module', 'imce'), + 'type' => MENU_LOCAL_TASK, + 'weight' => -10, + ); + // Add IMCE file browser to Add content list + $items['node/add/imce-file-upload'] = array( + 'title' => 'File upload', + 'description' => 'Upload files from your computer, such as PDF documents, to the file system.', + 'page callback' => 'imce_user_page', + 'page arguments' => array($user->uid), + 'access callback' => '_unl_imce_file_browser_access', + 'file' => 'inc/imce.page.inc', + 'file path' => drupal_get_path('module', 'imce'), + 'type' => MENU_NORMAL_ITEM, + ); + } + if (conf_path() == 'sites/default') { $items['admin/sites/unl'] = array( 'title' => 'UNL Site Creation Tool', @@ -256,8 +285,13 @@ function unl_menu_alter(&$items) { foreach (array('module', 'file', 'page arguments') as $key) { $items['admin/themes'][$key] = $items['admin/appearance/settings/' . variable_get('theme_default')][$key]; } - - return $items; + // Put all user pages in the admin theme + $items['user']['theme callback'] = '_unl_get_admin_theme'; + // Make sure all Workbench Moderation admin pages are in the admin theme + if (module_exists('workbench_moderation')) { + $items['node/%node/moderation']['theme callback'] = '_unl_get_admin_theme'; + $items['node/%node/moderation/%/unpublish']['theme callback'] = '_unl_get_admin_theme'; + } } /** @@ -592,7 +626,7 @@ function _unl_cron_import_wdn_registry_sites() { if (PHP_SAPI == 'cli') { return; } - + // We don't want this running on sub-sites. if (conf_path() != 'sites/default') { return; @@ -655,8 +689,8 @@ function _unl_cron_import_wdn_registry_sites() { } continue; } - - db_set_active('wdn_registry'); + + db_set_active('wdn_registry'); if (variable_get('unl_wdn_registry_production')) { db_update('site_request') ->fields(array('url' => $site_to_create['uri'])) @@ -703,7 +737,7 @@ function unl_sanitize_url_part($url_part) { $url_part = preg_replace('/[^a-z0-9]/', '-', $url_part); $url_part = preg_replace('/-+/', '-', $url_part); $url_part = preg_replace('/(^-)|(-$)/', '', $url_part); - + return $url_part; } @@ -847,3 +881,68 @@ function unl_still_alive() header('Content-type: text/plain'); echo '200 Still Alive'; } + +/** + * Implementation of hook_filter_info(). + */ +function unl_filter_info() { + return array( + 'unl_embed' => array( + 'title' => 'UNL Node Embed', + 'description' => "Allow a node's body to be embedded into another node by using tags.", + 'process callback' => 'unl_filter_embed_process', + 'cache' => FALSE, + ), + ); +} + +/** + * Implementation of hook_filter_FILTER_process pseudo-hook + * + * Replace any instances of [[node:X]] in the $text with the content of node X's body. + */ +function unl_filter_embed_process($text, $filter, $format, $langcode, $cache, $cache_id) { + static $processed_hashes = array(); + + $text_hash = hash('sha256', $text); + if (in_array($text_hash, array_keys($processed_hashes))) { + // Possible recursion detected, return the cache result. + return $processed_hashes[$text_hash]; + } + + // In case of recursion, set the cached result to this until we have the real result. + $processed_hashes[$text_hash] = 'Error: Cannot embed a node in itself..'; + + $matches = NULL; + preg_match_all('/\[\[node:([0-9]+)\]\]/', $text, $matches); + $node_ids = $matches[1]; + $nodes = entity_load('node', $node_ids); + $replace_array = array(); + foreach ($node_ids as $node_id) { + $content = node_view($nodes[$node_id]); + $replace_array["[[node:$node_id]]"] = PHP_EOL . "<!-- Node $node_id start -->" . PHP_EOL + . render($content['body']) + . PHP_EOL . "<!-- Node $node_id end -->" . PHP_EOL; + } + $text = strtr($text, $replace_array); + // Set the cached result to the real result. + $processed_hashes[$text_hash] = $text; + return $text; +} + +/** + * Custom function to return the current admin theme for use with hook_menu_alter(). + */ +function _unl_get_admin_theme(){ + return variable_get('admin_theme', '0'); +} + +/** + * Custom function for imce access on content administration pages since imce_user_page_access() + * can't be used because only one file can be included in a hook_menu item ($items['admin/content/filebrowser']) + */ +function _unl_imce_file_browser_access() { + global $user; + $profile = imce_user_profile($user); + return $profile['usertab']; +}