Mercurial > hg > rr-repo
diff sites/all/modules/imce/imce.module @ 0:ff03f76ab3fe
initial version
author | danieleb <danielebarchiesi@me.com> |
---|---|
date | Wed, 21 Aug 2013 18:51:11 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sites/all/modules/imce/imce.module Wed Aug 21 18:51:11 2013 +0100 @@ -0,0 +1,201 @@ +<?php + +/** + * @file + * Implements the necessary hooks for the file browser to work properly. + */ + +/** + * Implements hook_menu(). + */ +function imce_menu() { + $items = array(); + $access = array('administer imce'); + $items['imce'] = array( + 'title' => 'File browser', + 'page callback' => 'imce', + 'access callback' => 'imce_access', + 'access arguments' => array(FALSE, 1), + 'file' => 'inc/imce.page.inc', + 'type' => MENU_CALLBACK, + ); + $items['user/%user/imce'] = array( + 'title' => 'File browser', + 'page callback' => 'imce_user_page', + 'page arguments' => array(1), + 'access callback' => 'imce_user_page_access', + 'access arguments' => array(1), + 'file' => 'inc/imce.page.inc', + 'type' => MENU_LOCAL_TASK, + 'weight' => 10, + ); + $items['admin/config/media/imce'] = array( + 'title' => 'IMCE', + 'description' => 'Control how your image/file browser works.', + 'page callback' => 'imce_admin', + 'access arguments' => $access, + 'file' => 'inc/imce.admin.inc', + ); + $items['admin/config/media/imce/profile'] = array( + 'title' => 'Add new profile', + 'page callback' => 'imce_profile_operations', + 'access arguments' => $access, + 'type' => MENU_VISIBLE_IN_BREADCRUMB, + 'file' => 'inc/imce.admin.inc', + ); + return $items; +} + +/** + * Implements hook_permission(). + */ +function imce_permission() { + return array( + 'administer imce' => array( + 'title' => t('Administer IMCE'), + 'restrict access' => TRUE, + ), + ); +} + +/** + * Implements hook_theme(). + */ +function imce_theme() { + $path = drupal_get_path('module', 'imce') . '/tpl'; + $theme['imce_admin'] = array('function' => 'imce_admin_theme', 'render element' => 'form'); + $theme['imce_directories'] = array('function' => 'imce_directories_theme', 'render element' => 'form'); + $theme['imce_thumbnails'] = array('function' => 'imce_thumbnails_theme', 'render element' => 'form'); + $theme['imce_root_text'] = array( + 'variables' => array('imce_ref' => NULL), + ); + $theme['imce_user_page'] = array( + 'variables' => array('account' => NULL), + ); + $theme['imce_file_list'] = array( + 'template' => 'imce-file-list', + 'variables' => array('imce_ref' => NULL), + 'path' => $path, + ); + $theme['imce_content'] = array( + 'template' => 'imce-content', + 'variables' => array('tree' => NULL, 'forms' => NULL, 'imce_ref' => NULL), + 'path' => $path, + ); + $theme['imce_page'] = array( + 'template' => 'imce-page', + 'variables' => array('content' => NULL), + 'path' => $path, + ); + return $theme; +} + +/** + * Implements hook_file_download(). + * Support private downloads if not disabled. + */ +function imce_file_download($uri) { + $serve = file_uri_scheme($uri) == 'private' && !variable_get('imce_settings_disable_private', 1) && file_exists($uri) && strpos(basename($uri), '.'); + if ($serve) { + return array( + 'Content-type' => file_get_mimetype($uri), + 'Content-Length' => filesize($uri), + ); + } +} + +/** + * Implements hook_element_info(). + */ +function imce_element_info() { + return array('textarea' => array('#process' => array('imce_textarea'))); +} + +/** + * Inline image/link insertion to textareas. + */ +function imce_textarea($element) { + static $regexp; + if (!isset($regexp)) { + $regexp = FALSE; + if (imce_access() && $regexp = str_replace(' ', '', variable_get('imce_settings_textarea', ''))) { + $regexp = '@^(' . str_replace(',', '|', implode('.*', array_map('preg_quote', explode('*', $regexp)))) . ')$@'; + } + } + if ($regexp && preg_match($regexp, $element['#id'])) { + drupal_add_js(drupal_get_path('module', 'imce') . '/js/imce_set_inline.js'); + $element['#description'] = (isset($element['#description']) ? $element['#description'] : '') . '<div class="imce-inline-wrapper" style="display:none">' . t('Insert !image or !link.', array('!image' => l(t('image'), 'imce', array('attributes' => array('name' => $element['#id'] . '-IMCE-image', 'class' => array('imce-inline-image')))), '!link' => l(t('link'), 'imce', array('attributes' => array('name' => $element['#id'] . '-IMCE-link', 'class' => array('imce-inline-link')))))) . '</div>'; + } + return $element; +} + +/** + * Returns the configuration profile assigned to a user for a specific file scheme. + */ +function imce_user_profile($user, $scheme = NULL) { + static $ups = array(); + + // Set scheme + if (empty($scheme)) { + $scheme = variable_get('file_default_scheme', 'public'); + } + + // Return from cache. + if (isset($ups[$scheme][$user->uid])) { + return $ups[$scheme][$user->uid]; + } + $ups[$scheme][$user->uid] = FALSE; + + // Check scheme + $swrappers = file_get_stream_wrappers(); + if (!isset($swrappers[$scheme])) { + return FALSE; + } + + $profiles = variable_get('imce_profiles', array()); + $scinfo = array('scheme' => $scheme); + + // Handle user#1 separately + if ($user->uid == 1) { + return $ups[$scheme][$user->uid] = isset($profiles[1]) ? $profiles[1] + $scinfo : FALSE; + } + + // Handle regular users. + $roles_profiles = variable_get('imce_roles_profiles', array()); + $sckey = $scheme . '_pid'; + foreach ($roles_profiles as $rid => $conf) { + if (isset($user->roles[$rid]) && isset($conf[$sckey]) && isset($profiles[$conf[$sckey]])) { + return $ups[$scheme][$user->uid] = $profiles[$conf[$sckey]] + $scinfo; + } + } + + return FALSE; +} + +/** + * Checks if the user is assigned an imce profile. + * A more detailed assignment check is performed before imce loads. + */ +function imce_access($user = FALSE, $scheme = NULL) { + if ($user === FALSE) { + global $user; + } + return imce_user_profile($user, $scheme) ? TRUE : FALSE; +} + +/** + * Checks access to user/{$account->uid}/imce for the $user. + */ +function imce_user_page_access($account, $user = FALSE) { + if ($user === FALSE) { + global $user; + } + return ($user->uid == 1 || $account->uid == $user->uid) && ($profile = imce_user_profile($account)) && $profile['usertab']; +} + +/** + * Check if the directory name is regular. + */ +function imce_reg_dir($dirname) { + return $dirname == '.' || is_int($dirname) || (is_string($dirname) && $dirname != '' && !preg_match('@(^\s)|(^/)|(^\./)|(\s$)|(/$)|(/\.$)|(\.\.)|(//)|(\\\\)|(/\./)@', $dirname)); +} \ No newline at end of file