You are here

function elfinder_file_browser in elFinder file manager 7.3

Same name and namespace in other branches
  1. 6.2 elfinder.module \elfinder_file_browser()
  2. 6 elfinder.module \elfinder_file_browser()
  3. 7 elfinder.module \elfinder_file_browser()
  4. 7.2 elfinder.module \elfinder_file_browser()

File browser render

1 call to elfinder_file_browser()
elfinder_block_view in ./elfinder.module
Implements hook_block_view().
1 string reference to 'elfinder_file_browser'
elfinder_menu in ./elfinder.module
Implements hook_menu().

File

./elfinder.module, line 138

Code

function elfinder_file_browser($browser_mode = 'default') {
  $libpath = elfinder_lib_path() . '/';
  $p = elfinder_get_user_profile();
  $badfiles_exist_msg = elfinder_badfiles_exist();
  if ($badfiles_exist_msg) {
    drupal_set_message($badfiles_exist_msg, 'error');
  }
  if (is_readable(elfinder_connector_path())) {
    global $language;
    $path = drupal_get_path('module', 'elfinder');
    $editorApp = '';
    $langCode = isset($language->language) ? $language->language : 'en';
    if (isset($_GET['app'])) {
      if (preg_match("/^[a-zA-Z]+\$/", $_GET['app'])) {
        $editorApp = $_GET['app'];
      }
      elseif (preg_match("/^([a-zA-Z]+)|/", $_GET['app'], $m)) {
        $editorApp = $m[1];
      }
    }
    if (isset($_GET['langCode'])) {
      if (preg_match("/^[a-zA-z]{2}\$/", $_GET['langCode'])) {
        $langCode = $_GET['langCode'];
      }
    }

    /* Initial frontend settings */
    $elfinder_js_settings = array(
      'connectorUrl' => url('elfinder/connector'),
      'moduleUrl' => url('elfinder'),
      'editorApp' => $editorApp,
      'langCode' => $langCode,
      'rememberLastDir' => variable_get('elfinder_settings_misc_rememberlastdir', 'true') == 'true' ? TRUE : FALSE,
      // remember last opened directory
      'disabledCommands' => elfinder_get_disabled_commands(),
      'requestType' => variable_get('elfinder_settings_misc_requesttype', 'get') == 'get' ? 'get' : 'post',
      'browserMode' => $browser_mode,
      'token' => drupal_get_token('elFinder'),
      'sound' => FALSE,
      // TODO: Make this a UI setting.
      'soundPath' => base_path() . elfinder_lib_path() . '/sounds',
      'uiOptions' => array(
        'dialog' => array(
          'focusOnMouseOver' => FALSE,
        ),
      ),
    );
    if (($mheight = variable_get('elfinder_settings_misc_manager_height', '')) != '') {
      $elfinder_js_settings['height'] = (int) $mheight;
    }
    $elfinder_js_settings['resizable'] = $browser_mode == 'backend';
    if ($editorApp) {
      $elfinder_js_settings['editorCallback'] = 'elfinder_' . $editorApp . '_callback';
    }
    $options = array(
      'group' => CSS_DEFAULT,
      'every_page' => FALSE,
    );
    $sysjqver = variable_get('jquery_update_jquery_version', '1.5');
    if (!(module_exists('jquery_update') && preg_match('/1\\.(6|7)/', $sysjqver))) {
      drupal_add_js($path . '/js/elfinder.jquery.min.js');
      drupal_add_js($path . '/js/elfinder.jquery-ui.min.js');
    }
    else {
      drupal_add_library('system', 'ui.selectable');
      drupal_add_library('system', 'ui.draggable');
      drupal_add_library('system', 'ui.droppable');
    }
    elfinder_add_css($path . '/css/ui-themes/smoothness/jquery-ui.min.css', $options);
    elfinder_add_css($path . '/css/elfinder.common.css', $options);

    // Add library js and css.
    elfinder_add_css($libpath . 'css/theme.css');
    if (is_readable($libpath . 'css/elfinder.min.css') && is_readable($libpath . 'js/elfinder.min.js')) {
      elfinder_add_css($libpath . 'css/elfinder.min.css');
      drupal_add_js($libpath . 'js/elfinder.min.js');
    }
    else {
      if (is_readable($libpath . 'css/elfinder.full.css') && is_readable($libpath . 'js/elfinder.full.js')) {
        elfinder_add_css($libpath . 'css/elfinder.full.css');
        drupal_add_js($libpath . 'js/elfinder.full.js');
      }
      else {
        watchdog('Failed Requirement', 'elFinder unable to load required JS and CSS files', array(), WATCHDOG_ERROR);
      }
    }
    $langfile = $libpath . 'js/i18n/elfinder.' . $langCode . '.js';

    /* Adding localization */
    if (is_readable($langfile)) {
      drupal_add_js($langfile);
    }

    /* Getting updated frontend settings from hook_elfinder_js_settings */
    $newjssettings = module_invoke_all('elfinder_js_settings', $elfinder_js_settings);
    if (isset($newjssettings['all'])) {
      $elfinder_js_settings = array_merge($elfinder_js_settings, (array) $newjssettings['all']);
    }
    if (isset($newjssettings[$editorApp])) {
      $elfinder_js_settings = array_merge($elfinder_js_settings, (array) $newjssettings[$editorApp]);
    }

    /* Loading callbacks for returning url from file manager to caller */
    $editor_plugins = elfinder_system_listing("{$editorApp}\\.callback\\.js\$", $path . '/editors', 'name', 0);
    $callback_file = '';
    if (isset($editorApp)) {
      if (isset($editorApp) && isset($editor_plugins[$editorApp . '.callback'])) {
        $callback_file = $editor_plugins[$editorApp . '.callback']->uri;
        if (isset($callback_file)) {
          drupal_add_js($callback_file);
        }
      }
      if (isset($elfinder_js_settings['browserscripts'])) {
        foreach ((array) $elfinder_js_settings['browserscripts'] as $script) {
          drupal_add_js($script, array(
            'weight' => 999,
          ));
        }
        unset($elfinder_js_settings['browserscripts']);
      }
    }
    drupal_add_js($path . '/js/info.js');

    // drupal_add_js($path . '/js/mouseover.js');
    drupal_add_js($path . '/js/elfinder.callback.js');
    drupal_add_js(array(
      'elfinder' => $elfinder_js_settings,
    ), 'setting');
  }
  else {
    drupal_set_message(t('elFinder library was not found. Please download it from <a href="@url">@url</a> and install to @libpath.', array(
      '@url' => elfinder_download_url(),
      '@libpath' => elfinder_lib_path() ? $libpath : 'sites/all/libraries/elfinder',
    )), 'error');
  }
  if ($browser_mode && $browser_mode == 'backend') {
    return theme('elfinder_page_backend');
  }
  else {
    print theme('elfinder_page');
  }
  module_invoke_all('exit');
  exit;
}