123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473 |
- <?php
- /**
- * elFinder Integration
- *
- * Copyright (c) 2010-2019, Alexey Sukhotin. All rights reserved.
- */
- define('ELFINDER_POPUP_WIDTH', 700);
- define('ELFINDER_POPUP_HEIGHT', 400);
- include_once dirname(elfinder_connector_path()) . DIRECTORY_SEPARATOR . 'elFinder.class.php';
- if (class_exists('elFinder')) {
- include_once drupal_get_path('module', 'elfinder') . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'elfinder.drupal.inc';
- }
- function elfinder_check_badpaths() {
- $ret = array('result' => TRUE, 'message' => '');
- $libpath = elfinder_lib_path();
- $badfiles = array('connectors/php/connector.php', 'php/connector.php', 'php/connector.minimal.php');
- $badpaths = array();
- foreach ($badfiles as $badfile) {
- $path = $libpath . '/' . $badfile;
- if (file_exists($path)) {
- $badpaths[] = $path;
- }
- }
- if (count($badpaths) > 0) {
- $message = t('elFinder library directory containing features test files :files. Please remove these files to avoid security hole.', array(':files' => implode(', ', $badpaths)));
- watchdog('elfinder', $message, array(), WATCHDOG_ALERT);
- drupal_set_message($message, 'error');
- $ret['result'] = FALSE;
- $ret['message'] = $message;
- }
- return $ret;
- }
- function elfinder_init() {
- elfinder_check_badpaths();
- }
- /**
- * Implements hook_menu().
- */
- function elfinder_menu() {
- $items = array();
- $access = array('use file manager');
- $items['admin/content/files'] = array(
- 'title' => 'Files',
- 'page callback' => 'elfinder_file_browser',
- 'page arguments' => array('backend'),
- 'description' => 'Manage media files.',
- 'access arguments' => array('administer file manager'),
- );
- $items['admin/content/files']['type'] = MENU_LOCAL_TASK;
- $items['elfinder'] = array(
- 'title' => 'File browser',
- 'page callback' => 'elfinder_file_browser',
- 'page arguments' => array('default'),
- 'access arguments' => $access,
- 'type' => MENU_CALLBACK,
- );
- $items['elfinder/connector'] = array(
- 'title' => 'File browser',
- 'page callback' => 'elfinder_filesystemconnector',
- 'page arguments' => array(NULL),
- 'access arguments' => $access,
- 'type' => MENU_CALLBACK,
- );
- // Forced connector relative url mode. For filefield_sources support.
- $items['elfinder/connector/relative'] = array(
- 'title' => 'File browser',
- 'page callback' => 'elfinder_filesystemconnector',
- 'page arguments' => array('relative'),
- 'access arguments' => $access,
- 'type' => MENU_CALLBACK,
- );
- $settings_page = array(
- 'title' => 'elFinder',
- 'description' => 'elFinder file manager settings',
- 'page callback' => 'elfinder_admin',
- 'access arguments' => array('administer file manager'),
- 'file' => 'inc/elfinder.admin.inc',
- );
- $items['admin/config/elfinder'] = $items['admin/config/media/elfinder'] = $settings_page;
- $items['admin/config/elfinder']['type'] = MENU_CALLBACK;
- $items['admin/config/media/elfinder/profile'] = array(
- 'title' => 'Add Profile',
- 'page callback' => 'elfinder_admin_profiles',
- 'page arguments' => array('profile_add'),
- 'access arguments' => array('administer file manager'),
- 'type' => MENU_CALLBACK,
- 'file' => 'inc/elfinder.admin.profiles.inc',
- );
- $items['admin/config/media/elfinder/profile/%/delete'] = array(
- 'title' => 'Delete Profile',
- 'page callback' => 'elfinder_admin_profiles',
- 'page arguments' => array('profile_delete', 5),
- 'access arguments' => array('administer file manager'),
- 'type' => MENU_CALLBACK,
- 'file' => 'inc/elfinder.admin.profiles.inc',
- );
- $items['admin/config/media/elfinder/profile/%/edit'] = array(
- 'title' => 'Edit Profile',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('elfinder_admin_profile', 'profile_edit', 5),
- 'access arguments' => array('administer file manager'),
- 'type' => MENU_CALLBACK,
- 'file' => 'inc/elfinder.admin.profiles.inc',
- );
- $items['elfinder/ahah/dir'] = array(
- 'title' => 'JavaScript Volume Add Item',
- 'page callback' => 'elfinder_admin_form_dir_js',
- 'page arguments' => array('item_add'),
- 'access arguments' => array('administer file manager'),
- 'type' => MENU_CALLBACK,
- 'file' => 'inc/elfinder.admin.profiles.inc',
- );
- $items['elfinder/ahah/rmdir/%'] = array(
- 'title' => 'JavaScript Volume Remove Item',
- 'page callback' => 'elfinder_admin_form_dir_js',
- 'page arguments' => array('item_remove', 3),
- 'access arguments' => array('administer file manager'),
- 'type' => MENU_CALLBACK,
- 'file' => 'inc/elfinder.admin.profiles.inc',
- );
- $items['elfinder/upload/fckeditor'] = array(
- 'title' => 'FCKeditor Quick Upload',
- 'page callback' => 'elfinder_editor_upload_fckeditor',
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- 'file' => 'editors/fckeditor/fckeditor.upload.inc',
- );
- $items['elfinder/upload/ckeditor'] = array(
- 'title' => 'CKeditor Quick Upload',
- 'page callback' => 'elfinder_editor_upload_ckeditor',
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- 'file' => 'editors/ckeditor/ckeditor.upload.inc',
- );
- /* Getting updated menu items from hook_elfinder_menu */
- $newitems = module_invoke_all('elfinder_menu', $items);
- return ($newitems) ? $newitems : $items;
- }
- function elfinder_js_alter(&$javascript) {
- //$javascript['misc/jquery.js']['data'] = drupal_get_path('module', 'elfinder') . '/js/elfinder.jquery.min.js';
- }
- /**
- * File browser render
- */
- function elfinder_file_browser($browser_mode = 'default') {
- $libpath = elfinder_lib_path() . '/';
- $p = elfinder_get_user_profile();
- 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'),
- 'soundPath' => base_path() . elfinder_lib_path() . '/sounds',
- 'commandsOptions' => array('dummy' => array()),
- );
- if (variable_get('elfinder_settings_filesystem_external_preview', 'disabled') != 'disabled') {
- $elfinder_js_settings['commandsOptions']['quicklook'] = array(
- 'sharecadMimes' => array('image/vnd.dwg', 'image/vnd.dxf', 'model/vnd.dwf', 'application/vnd.hp-hpgl', 'application/plt', 'application/step', 'model/iges', 'application/vnd.ms-pki.stl', 'application/sat', 'image/cgm', 'application/x-msmetafile'),
- 'googleDocsMimes' => array('application/pdf', 'image/tiff', 'application/vnd.ms-office', 'application/msword', 'application/vnd.ms-word', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/postscript', 'application/rtf'),
- 'officeOnlineMimes' => array('application/msword', 'application/vnd.ms-word', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'),
- );
- }
- if ($browser_mode == 'backend') {
- //$elfinder_js_settings['commandsOptions']['help'] = array('view' => array('about', 'shortcuts', 'integrations'));
- }
- 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 = '1.4.4';
- $sysuiver = '1.8.7';
- $sys_ui_lib = drupal_get_library('system','ui');
- $sys_jq_lib = drupal_get_library('system','jquery');
- if ($sys_jq_lib != false) {
- $sysjqver = $sys_jq_lib['version'];
- }
- if ($sys_ui_lib != false) {
- $sysuiver = $sys_ui_lib['version'];
- }
- if (preg_match('/1\.(4|5|6|8|9|10|11|12)\.?/', $sysjqver) || preg_match('/1\.(8|9|10)\.?/', $sysuiver)) {
- if (property_exists('elFinder', 'ApiVersion')) {
- drupal_add_js($path . '/js/elfinder.jquery.min.js');
- drupal_add_js($path . '/js/elfinder.jquery-ui.min.js');
- } else {
- drupal_add_js($path . '/js/elfinder.jquery.legacy.min.js');
- drupal_add_js($path . '/js/elfinder.jquery-ui.legacy.min.js');
- }
- } else {
- drupal_add_library('system', 'ui.button');
- drupal_add_library('system', 'ui.dialog');
- drupal_add_library('system', 'ui.draggable');
- drupal_add_library('system', 'ui.droppable');
- drupal_add_library('system', 'ui.resizable');
- drupal_add_library('system', 'ui.selectable');
- drupal_add_library('system', 'ui.slider');
- }
- elfinder_add_css($path . '/css/ui-themes/smoothness/jquery-ui.min.css', $options);
- elfinder_add_css($path . '/css/elfinder.common.css', $options);
- 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 if (is_readable($libpath . 'css/common.css') && is_readable($libpath . 'js/elFinder.js')) {
- elfinder_add_css($libpath . 'css/common.css');
- elfinder_add_css($libpath . 'css/dialog.css');
- elfinder_add_css($libpath . 'css/toolbar.css');
- elfinder_add_css($libpath . 'css/navbar.css');
- elfinder_add_css($libpath . 'css/statusbar.css');
- elfinder_add_css($libpath . 'css/cwd.css');
- elfinder_add_css($libpath . 'css/quicklook.css');
- elfinder_add_css($libpath . 'css/commands.css');
- elfinder_add_css($libpath . 'css/contextmenu.css');
- elfinder_add_css($libpath . 'css/theme.css');
- drupal_add_js($libpath . 'js/elFinder.js');
- drupal_add_js($libpath . 'js/elFinder.version.js');
- drupal_add_js($libpath . 'js/jquery.elfinder.js');
- drupal_add_js($libpath . 'js/elFinder.resources.js');
- drupal_add_js($libpath . 'js/elFinder.options.js');
- drupal_add_js($libpath . 'js/elFinder.history.js');
- drupal_add_js($libpath . 'js/elFinder.command.js');
- drupal_add_js($libpath . 'js/ui/overlay.js');
- drupal_add_js($libpath . 'js/ui/workzone.js');
- drupal_add_js($libpath . 'js/ui/navbar.js');
- drupal_add_js($libpath . 'js/ui/dialog.js');
- drupal_add_js($libpath . 'js/ui/tree.js');
- drupal_add_js($libpath . 'js/ui/cwd.js');
- drupal_add_js($libpath . 'js/ui/toolbar.js');
- drupal_add_js($libpath . 'js/ui/button.js');
- drupal_add_js($libpath . 'js/ui/uploadButton.js');
- drupal_add_js($libpath . 'js/ui/viewbutton.js');
- drupal_add_js($libpath . 'js/ui/searchbutton.js');
- drupal_add_js($libpath . 'js/ui/panel.js');
- drupal_add_js($libpath . 'js/ui/contextmenu.js');
- drupal_add_js($libpath . 'js/ui/path.js');
- drupal_add_js($libpath . 'js/ui/stat.js');
- drupal_add_js($libpath . 'js/ui/places.js');
- drupal_add_js($libpath . 'js/commands/back.js');
- drupal_add_js($libpath . 'js/commands/forward.js');
- drupal_add_js($libpath . 'js/commands/reload.js');
- drupal_add_js($libpath . 'js/commands/up.js');
- drupal_add_js($libpath . 'js/commands/home.js');
- drupal_add_js($libpath . 'js/commands/copy.js');
- drupal_add_js($libpath . 'js/commands/cut.js');
- drupal_add_js($libpath . 'js/commands/paste.js');
- drupal_add_js($libpath . 'js/commands/open.js');
- drupal_add_js($libpath . 'js/commands/rm.js');
- drupal_add_js($libpath . 'js/commands/duplicate.js');
- drupal_add_js($libpath . 'js/commands/rename.js');
- drupal_add_js($libpath . 'js/commands/help.js');
- drupal_add_js($libpath . 'js/commands/getfile.js');
- drupal_add_js($libpath . 'js/commands/mkdir.js');
- drupal_add_js($libpath . 'js/commands/mkfile.js');
- drupal_add_js($libpath . 'js/commands/upload.js');
- drupal_add_js($libpath . 'js/commands/download.js');
- drupal_add_js($libpath . 'js/commands/edit.js');
- drupal_add_js($libpath . 'js/commands/quicklook.js');
- drupal_add_js($libpath . 'js/commands/quicklook.plugins.js');
- drupal_add_js($libpath . 'js/commands/extract.js');
- drupal_add_js($libpath . 'js/commands/archive.js');
- drupal_add_js($libpath . 'js/commands/search.js');
- drupal_add_js($libpath . 'js/commands/view.js');
- drupal_add_js($libpath . 'js/commands/resize.js');
- drupal_add_js($libpath . 'js/commands/info.js');
- drupal_add_js($libpath . 'js/commands/sort.js');
- drupal_add_js($libpath . 'js/commands/netmount.js');
- drupal_add_js($libpath . 'js/proxy/elFinderSupportVer1.js');
- drupal_add_js($libpath . 'js/jquery.dialogelfinder.js');
- } else {
- watchdog('Failed Requirement', 'elFinder unable to load required JS and CSS files', array(), WATCHDOG_ERROR);
- }
- $langfile = $libpath . 'js/i18n/elfinder.' . $langCode . '.js';
- if (is_readable($libpath . 'css/theme.css')) {
- elfinder_add_css($libpath . 'css/theme.css');
- }
- // thumbnail size hack
- /*
- $tmbSize = (int)variable_get('elfinder_settings_thumbnail_size', '48');
-
- $tmbSizeFinal = $tmbSize . 'px';
-
- $tmbWrapperSize = $tmbSize + 4;
-
- $tmbWrapperSizeFinal = $tmbWrapperSize . 'px';
-
- drupal_add_css(".elfinder-cwd-icon { width: $tmbSizeFinal; height: $tmbSizeFinal;} .elfinder-cwd-view-icons .elfinder-cwd-file-wrapper { width: $tmbWrapperSizeFinal; height: $tmbWrapperSizeFinal; }", array('type' => 'inline'));
- */
- /* Adding localization */
- if (is_readable($langfile)) {
- drupal_add_js($langfile);
- }
- if (is_readable($libpath . 'js/extras/editors.default.min.js')) {
- drupal_add_js($libpath . 'js/extras/editors.default.min.js');
- }
- if (is_readable($libpath . 'js/extras/quicklook.googledocs.min.js')) {
- drupal_add_js($libpath . 'js/extras/quicklook.googledocs.min.js');
- }
- //drupal_add_js('http://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.5/require.min.js');
- /* 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']);
- }
- }
- if (property_exists('elFinder', 'ApiVersion')) {
- $elfinder_js_settings['api21'] = true;
- } else {
- drupal_add_js($path . '/js/info.js');
- }
- // drupal_add_js($path . '/js/mouseover.js');
- drupal_add_js(array('elfinder' => $elfinder_js_settings), 'setting');
- drupal_add_js($path . '/js/elfinder.callback.js');
-
- //drupal_add_js(array('elfinder' => $elfinder_js_settings), 'setting');
- $libs = elfinder_get_libraries('tinymce');
- if (count($libs) > 0 && !empty($libs['tinymce'])) {
- $path = $libs['tinymce'] . '/jscripts/tiny_mce/tiny_mce_popup.js';
- $abspath = base_path() . "/$path";
- drupal_add_js($path);
- }
- } 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' => $libpath)), 'error');
- }
- if ($browser_mode && $browser_mode == 'backend') {
- return theme('elfinder_page_backend');
- } else {
- print theme('elfinder_page');
- }
- module_invoke_all('exit');
- exit();
- }
- function elfinder_get_disabled_commands() {
- $disabled_commands = array();
- $permissions = elfinder_permission();
- $commands = elfinder_cmd_permissions();
- // Disable not allowed commands
- foreach ($permissions as $perm_name => $perm_data) {
- if (array_key_exists($perm_name, $commands) && !user_access($perm_name)) {
- array_push($disabled_commands, $commands[$perm_name]);
- }
- }
- /* if (!user_access('download own uploaded files') && !user_access('download all uploaded files')) {
- $disabled_commands[] = 'getfile';
- }*/
- return $disabled_commands;
- }
- function elfinder_user_roles() {
- global $user;
- return array_reverse(array_keys($user->roles));
- }
- function elfinder_get_user_profile() {
- /* Get role id list sorted by weight descending */
- $profiles = elfinder_admin_profile_get();
- if (!is_array($profiles)) {
- $profiles = array($profiles);
- }
- $first_profile = NULL;
- $rids = elfinder_user_roles();
- $rids[] = 1; // anonymous user
- /* Get first matching profile for higest weight user role */
- foreach ($rids as $rid) {
- foreach ($profiles as $profile) {
- if (isset($profile->settings['profile_role']) && in_array($rid, $profile->settings['profile_role'])) {
- if (is_null($first_profile)) {
- $first_profile = $profile;
- } else if (isset($profile->settings['volume'])) {
- /* Adding all available to current user volumes from other profiles */
- $found = FALSE;
- foreach ($profile->settings['volume'] as $volume) {
- foreach ($first_profile->settings['volume'] as $fp_volume) {
- if ($volume['path'] == $fp_volume['path'] && $volume['label'] == $fp_volume['label']) {
- $found = TRUE;
- }
- }
- if (!$found) {
- $first_profile->settings['volume'][] = $volume;
- }
- }
- }
- }
- }
- }
- return $first_profile;
- }
- /**
- * File browser to filesystem php connector callback
- */
- function elfinder_filesystemconnector($mode = 'default') {
- global $base_root, $user;
- $p = elfinder_get_user_profile();
- $path = drupal_get_path('module', 'elfinder');
- include_once dirname(elfinder_connector_path()) . DIRECTORY_SEPARATOR . 'elFinderConnector.class.php';
- include_once dirname(elfinder_connector_path()) . DIRECTORY_SEPARATOR . 'elFinderVolumeDriver.class.php';
- include_once dirname(elfinder_connector_path()) . DIRECTORY_SEPARATOR . 'elFinderVolumeLocalFileSystem.class.php';
- include_once $path . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'elfinder.drupalfs.driver.inc';
- include_once $path . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'elfinder.drupalfs.acl.inc';
- include_once $path . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'elfinder.admin.profiles.inc';
- if (is_readable(dirname(elfinder_connector_path()) . DIRECTORY_SEPARATOR . 'elFinderPlugin.php')) {
- include_once dirname(elfinder_connector_path()) . DIRECTORY_SEPARATOR . 'elFinderPlugin.php';
- }
- if (is_readable(dirname(elfinder_connector_path()) . DIRECTORY_SEPARATOR . 'editors' . DIRECTORY_SEPARATOR . 'editor.php')) {
- include_once dirname(elfinder_connector_path()) . DIRECTORY_SEPARATOR . 'editors' . DIRECTORY_SEPARATOR . 'editor.php';
- }
- /**
- * Emulate json_encode required by filesystem connector for old php without JSON support
- */
- if (!function_exists('json_encode')) {
- function json_encode($arg) {
- return drupal_json($arg);
- }
- }
- /* Disabling incompartible devel module features */
- if (module_exists('devel')) {
- $devel_incompat = array('dev_timer', 'devel_query_display', 'dev_mem', 'devel_redirect_page');
- $flag = FALSE;
- foreach ($devel_incompat as $di) {
- if (variable_get($di, 0)) {
- $flag = TRUE;
- variable_set($di, 0);
- }
- }
- if ($flag) {
- drupal_set_message(t('elFinder disabled incompatible devel module features.'), 'warning');
- }
- }
- // Set absolute/relative url variable.
- if (!isset($mode) && variable_get('elfinder_settings_filesystem_fileurl', 'true') == 'false') {
- $mode = 'relative';
- }
- $disabled_commands = elfinder_get_disabled_commands();
- $acl = new elFinderDrupalACL();
- $pubFiles = file_stream_wrapper_get_instance_by_uri('public://');
- $pvtFiles = file_stream_wrapper_get_instance_by_uri('private://');
- $roots = array();
- if ($p) {
- $profile = $p->settings;
- } else {
- $profile = array();
- }
- $options_defs = array(
- 'disabled' => $disabled_commands, // list of not allowed commands
- 'debug' => FALSE,
- 'dirSize' => FALSE,
- 'tmbSize' => isset($profile['tmbsize']) ? (int)$profile['tmbsize'] : (int)variable_get('elfinder_settings_thumbnail_size', '48'), // thumbnail image size
- 'tmbPath' => variable_get('elfinder_settings_thumbnail_dirname', 'tmb'), // thumbnail images directory (tmbPath in 2.x)
- 'tmbCrop' => variable_get('elfinder_settings_thumbnail_tmbcrop', 'true') == 'true' ? TRUE : FALSE, // crop thumbnail image
- 'dateFormat' => variable_get('date_format_long', 'j M Y H:i'), // file modification date format
- 'mimeDetect' => isset($profile['mime_detect']) ? $profile['mime_detect'] : variable_get('elfinder_settings_filesystem_mimedetect', 'auto'), // file type detection method
- 'imgLib' => isset($profile['imglib']) ? $profile['imglib'] : variable_get('elfinder_settings_thumbnail_imglib', 'auto'), // image manipulation library
- 'fileMode' => isset($profile['file_perm']) ? octdec($profile['file_perm']) : octdec(variable_get('elfinder_settings_filesystem_fileperm', '0666')), // created file permissions
- 'dirMode' => isset($profile['dir_perm']) ? octdec($profile['dir_perm']) : octdec(variable_get('elfinder_settings_filesystem_dirperm', '0777')), // created directory permissions
- 'accessControlData' => array('uid' => $user->uid),
- 'acceptedName' => '/^[^\.]+/',
- 'uploadMaxSize' => parse_size(variable_get('elfinder_settings_filesystem_maxfilesize', '')),
- 'userProfile' => $p,
- 'jpgQuality' => variable_get('image_jpeg_quality', 75),
- 'dispInlineRegex' => variable_get('elfinder_settings_filesystem_inlinepreviewregex', '^$'),
- 'statCorrector' => 'elFinderVolumeDrupal::stat_corrector',
- );
- if (is_object($pubFiles) && user_access('access public files')) {
- $roots[] = array_merge($options_defs, array(
- 'driver' => 'Drupal',
- 'path' => drupal_realpath('public://'), // path to root directory (named 'path' in elFinder 2.0)
- 'URL' => $mode == 'relative' ? base_path() . $pubFiles->getDirectoryPath() : $pubFiles->getExternalUrl(), // root directory URL
- 'alias' => variable_get('elfinder_settings_filesystem_public_root_label', '') != '' ? variable_get('elfinder_settings_filesystem_public_root_label', '') : t('Public Files'), // display this instead of root directory name (named 'alias' in elFinder 2.0)
- 'accessControl' => array($acl, 'fsAccessPublic'),
- ));
- }
- if (is_object($pvtFiles) && user_access('access private files')) {
- $roots[] = array_merge($options_defs, array(
- 'driver' => 'Drupal',
- 'path' => drupal_realpath('private://'), // path to root directory (named 'path' in elFinder 2.0)
- 'URL' => $mode == 'relative' ? base_path() . $pvtFiles->getDirectoryPath() : $pvtFiles->getExternalUrl(), // root directory URL
- 'alias' => variable_get('elfinder_settings_filesystem_private_root_label', '') != '' ? variable_get('elfinder_settings_filesystem_private_root_label', '') : t('Private Files'), // display this instead of root directory name (named 'alias' in elFinder 2.0)
- 'accessControl' => array($acl, 'fsAccessPrivate'),
- ));
- }
- if (user_access('access unmanaged files')) {
- $roots[] = array_merge($options_defs, array(
- 'driver' => 'LocalFileSystem',
- 'path' => elfinder_file_directory_path(TRUE), // path to root directory (named 'path' in elFinder 2.0)
- 'URL' => elfinder_file_directory_url($mode == 'relative' ? TRUE : FALSE), // root directory URL
- 'alias' => variable_get('elfinder_settings_filesystem_unmanaged_root_label', '') != '' ? variable_get('elfinder_settings_filesystem_unmanaged_root_label', '') : t('Unmanaged Files'), // display this instead of root directory name (named 'alias' in elFinder 2.0)
- 'accessControl' => array($acl, 'fsAccessUnmanaged'),
- ));
- }
- if (isset($profile['volume'])) {
- foreach ($profile['volume'] as $volume) {
- $root = array(
- 'alias' => $volume['label'],
- );
- $rootpath = '';
- if (isset($volume['path']) && substr($volume['path'], 0, 1) != DIRECTORY_SEPARATOR) {
- $root['driver'] = 'Drupal';
- $scheme = file_uri_scheme($volume['path']);
- if ($scheme == FALSE) {
- if (is_object(file_stream_wrapper_get_instance_by_uri('private://'))) {
- $scheme = 'private';
- } else {
- $scheme = 'public';
- }
- }
- $rootpath = $volume['path'];
- $rootpath = elfinder_parse_path_tokens($rootpath);
- $relpath = '';
- if ($pos = strpos($rootpath, '://')) {
- $relpath = substr($rootpath, $pos + 3);
- } else {
- $relpath = $rootpath;
- }
- $streamWrapper = file_stream_wrapper_get_instance_by_scheme($scheme);
- $volpath = '';
- if (is_object($streamWrapper)) {
- $streamWrapper->setUri($streamWrapper->getUri() . $relpath);
- $volpath = $streamWrapper->realpath();
- $volurl = $mode == 'relative' ? base_path() . $streamWrapper->getDirectoryPath() : $streamWrapper->getExternalUrl();
- $url = isset($volume['url']) && $volume['url'] != '' ? elfinder_parse_path_tokens($volume['url']) : $volurl;
- }
- $rootpath = $volpath;
- $url = rtrim($url, '/');
- if (!file_prepare_directory($rootpath, FILE_CREATE_DIRECTORY)) {
- drupal_set_message(t('Error. Cannot initialize directory %dir', array('%dir' => $rootpath)), 'error');
- }
- $root['path'] = drupal_realpath($rootpath);
- $root['URL'] = $url;
- $root['tmbPath'] = $volpath . DIRECTORY_SEPARATOR . variable_get('elfinder_settings_thumbnail_dirname', 'tmb');
- $root['tmbURL'] = $volurl . '/' . variable_get('elfinder_settings_thumbnail_dirname', 'tmb');
- } else {
- $rootpath = elfinder_parse_path_tokens($volume['path']);
- $root['driver'] = 'LocalFileSystem';
- $root['path'] = $rootpath;
- if (isset($volume['url'])) {
- $root['URL'] = elfinder_parse_path_tokens($volume['url']);
- }
- }
- $root = array_merge($options_defs, $root);
- $roots[] = $root;
- }
- }
- $opts = array(
- 'roots' => $roots,
- 'driver_defaults' => $options_defs,
- );
- $newopts = module_invoke_all('elfinder_connector_config', $opts);
- if ($newopts) {
- $opts = $newopts;
- }
- class elFinderConnectorDrupal extends elFinderConnector {
- public function test() {
- }
- }
- try {
- $elFinderObj = new elFinderDrupal($opts);
- } catch (Exception $e) {
- module_invoke_all('exit');
- exit(drupal_json_encode(array('error' => array(t('Unable to initialize elFinder object. :msg', array(':msg' => basename($e->getFile()) . ": " . $e->getMessage()))))));
- }
- $bindcmds = module_invoke_all('elfinder_bind');
- foreach ($bindcmds as $cmd => $cmdfunc) {
- $elFinderObj->bind($cmd, $cmdfunc);
- }
- try {
- $elFinderConnectorObj = new elFinderConnectorDrupal($elFinderObj);
- } catch (Exception $e) {
- module_invoke_all('exit');
- exit(drupal_json_encode(array('error' => array(t('Unable to initialize elFinder connector object. :msg', array(':msg' => basename($e->getFile()) . ": " . $e->getMessage()))))));
- }
- module_invoke_all('elfinder_connector_init', $elFinderConnectorObj);
- if (!drupal_valid_token($_REQUEST['token'], 'elFinder', TRUE)) {
- module_invoke_all('exit');
- exit(drupal_json_encode(array('error' => array(t('Access denied')))));
- } else {
- try {
- $elFinderConnectorObj->run();
- } catch (Exception $e) {
- module_invoke_all('exit');
- exit(drupal_json_encode(array('error' => array(t('Unable to run elFinder connector. :msg', array(':msg' => basename($e->getFile()) . ": " . $e->getMessage()))))));
- }
- module_invoke_all('exit');
- exit();
- }
- }
- function elfinder_elfinder_bind() {
- return array('test' => 'test2');
- }
- /**
- * Implements hook_theme().
- */
- function elfinder_theme() {
- $theme = array();
- $theme['elfinder_page'] = array(
- 'template' => 'elfinder-page',
- 'arguments' => array('libPath' => '/' . elfinder_lib_path()),
- 'path' => drupal_get_path('module', 'elfinder') . '/tpl',
- );
- $theme['elfinder_page_backend'] = array(
- 'template' => 'elfinder-page-backend',
- 'arguments' => array('libPath' => '/' . elfinder_lib_path()),
- 'path' => drupal_get_path('module', 'elfinder') . '/tpl',
- );
- return $theme;
- }
- /**
- * Implements hook_permission(), D7
- */
- function elfinder_permission() {
- $perm = array(
- 'use file manager' => array(
- 'title' => t('Use elFinder file manager'),
- 'description' => t('Allow accessing elFinder file manager module'),
- ),
- 'administer file manager' => array(
- 'title' => t('Administer file manager'),
- 'description' => t('Allow users to administer file manager'),
- ),
- 'create new directories' => array(
- 'title' => t('Create new directories'),
- 'description' => t('Allow users to create new directories'),
- ),
- 'create new files' => array(
- 'title' => t('Create new files'),
- 'description' => t('Allow users to create new files'),
- ),
- 'rename files and directories' => array(
- 'title' => t('Rename files and directories'),
- 'description' => t('Allow users to rename files and directories'),
- ),
- 'file uploads' => array(
- 'title' => t('File uploads'),
- 'description' => t('Allow users to upload files'),
- ),
- 'paste from clipboard' => array(
- 'title' => t('Paste from clipboard'),
- 'description' => t('Allow users to paste files from clipboard'),
- ),
- 'copy to clipboard' => array(
- 'title' => t('Copy to clipboard'),
- 'description' => t('Allow users to copy files to clipboard'),
- ),
- 'cut to clipboard' => array(
- 'title' => t('Cut to clipboard'),
- 'description' => t('Allow users to cut files to clipboard'),
- ),
- 'view file info' => array(
- 'title' => t('View file info'),
- 'description' => t('Allow users to view file info'),
- ),
- 'preview files' => array(
- 'title' => t('Preview files'),
- 'description' => t('Allow users to preview files'),
- ),
- 'delete files and directories' => array(
- 'title' => t('Delete files and directories'),
- 'description' => t('Allow users to delete files and directories'),
- ),
- 'duplicate files' => array(
- 'title' => t('Duplicate files'),
- 'description' => t('Allow users to duplicate files'),
- ),
- 'edit files' => array(
- 'title' => t('Edit files'),
- 'description' => t('Allow users to edit files'),
- ),
- 'add files to archive' => array(
- 'title' => t('Add files to archive'),
- 'description' => t('Allow users add files to archive'),
- ),
- 'extract files from archive' => array(
- 'title' => t('Extract files from archive'),
- 'description' => t('Allow users to extract files from archive'),
- ),
- 'resize images' => array(
- 'title' => t('Resize images'),
- 'description' => t('Allow users to resize images'),
- ),
- 'download own uploaded files' => array(
- 'title' => t('Download own uploaded files'),
- 'description' => t('Allow users to download own uploaded files'),
- ),
- 'download all uploaded files' => array(
- 'title' => t('Download all uploaded files'),
- 'description' => t('Allow users to download all uploaded files'),
- ),
- 'access public files' => array(
- 'title' => t('Access public files'),
- 'description' => t('Allow users to access public files directory'),
- ),
- 'access private files' => array(
- 'title' => t('Access private files'),
- 'description' => t('Allow users to access private files directory'),
- ),
- 'access unmanaged files' => array(
- 'title' => t('Access unmanaged files'),
- 'description' => t('Allow users to access unmanaged files in custom directory'),
- ),
- 'write public files' => array(
- 'title' => t('Write public files'),
- 'description' => t('Allow users write access to public files directory'),
- ),
- 'write private files' => array(
- 'title' => t('Write private files'),
- 'description' => t('Allow users write access to private files directory'),
- ),
- 'access unmanaged files' => array(
- 'title' => t('Access unmanaged files'),
- 'description' => t('Allow users write access to unmanaged files in custom directory'),
- ),
- 'view file description' => array(
- 'title' => t('View file descriptions'),
- 'description' => t('Allow users to view file descriptions'),
- ),
- 'edit file description' => array(
- 'title' => t('Edit file descriptions'),
- 'description' => t('Allow users to edit file descriptions'),
- ),
- 'view file owner' => array(
- 'title' => t('View file owner'),
- 'description' => t('Allow users to view file owner'),
- ),
- 'view file downloads' => array(
- 'title' => t('View file downloads'),
- 'description' => t('Allow users to view file downloads'),
- ),
- 'mount network volumes' => array(
- 'title' => t('Mount network volumes'),
- 'description' => t('Allow users to mount remote network volumes'),
- ),
- );
- $newperms = module_invoke_all('elfinder_perms', $perm);
- return ($newperms) ? $newperms : $perm;
- }
- /**
- * elFider commandsto permissions assignment
- */
- function elfinder_cmd_permissions() {
- $perm = array(
- 'create new directories' => 'mkdir',
- 'create new files' => 'mkfile',
- 'rename files and directories' => 'rename',
- 'file uploads' => 'upload',
- 'copy to clipboard' => 'copy',
- 'cut to clipboard' => 'cut',
- 'paste from clipboard' => 'paste',
- 'preview files' => 'quicklook',
- 'view file info' => 'info',
- 'delete files and directories' => 'rm',
- 'duplicate files' => 'duplicate',
- 'edit files' => 'edit',
- 'add files to archive' => 'archive',
- 'extract files from archive' => 'extract',
- 'resize images' => 'resize',
- 'download own uploaded files' => 'download',
- 'view file description' => 'desc',
- 'edit file description' => 'editdesc',
- 'view file owner' => 'owner',
- 'view file downloads' => 'downloadcount',
- 'mount network volumes' => 'netmount',
- );
- $newcperms = module_invoke_all('elfinder_cmd_perms', $perm);
- return ($newcperms) ? $newcperms : $perm;
- }
- /**
- * Implements hook_wysiwyg_plugin().
- */
- function elfinder_wysiwyg_plugin($editor, $version) {
- $path = drupal_get_path('module', 'elfinder');
- drupal_add_js($path . '/js/elfinder.wysiwyg.init.js', array('group' => JS_LIBRARY));
- $options = array(
- 'elfinder_url' => url('elfinder', array('query' => array('app' => $editor))),
- 'homepage_url' => elfinder_homepage_url(),
- 'path' => $path,
- );
- /* bueditor hack */
- if (preg_match('/^(bueditor|bue)/', $editor)) {
- $editor = 'bueditor';
- }
- $editor_plugins = elfinder_system_listing("$editor\.inc\$", $path . '/editors', 'name', 0);
- /* loading editor plugin */
- $plugin_file = '';
- if (isset($editor_plugins[$editor])) {
- $plugin_file = $editor_plugins[$editor]->uri;
- if ($plugin_file) {
- $options['plugin_url_base'] = "$path/editors/$editor";
- require_once $plugin_file;
- }
- }
- /* hook for adding another editor support */
- //module_invoke_all('elfinder_editor_plugin');
- /* wysiwyg plugin generation func for selected editor */
- $pluginfunc = 'elfinder_' . $editor . '_elfinder_editor_plugin';
- /* returning elFinder wysiwyg editor plugin for selected editor */
- if (function_exists($pluginfunc)) {
- return call_user_func_array($pluginfunc, array($options));
- }
- }
- /**
- * library homepage url
- */
- function elfinder_homepage_url() {
- return 'http://elfinder.org/';
- }
- /**
- * library download url
- */
- function elfinder_download_url() {
- return 'http://sourceforge.net/projects/drupal-elfinder/files/Library/';
- }
- /**
- * library files path
- */
- function elfinder_lib_path($name = 'elfinder') {
- $libraries = &drupal_static(__FUNCTION__);
- if (!isset($libraries)) {
- $libraries = elfinder_get_libraries();
- }
- $path = '';
- if (!isset($libraries[$name])) {
- return FALSE;
- } else {
- $path .= $libraries[$name];
- }
- return $path;
- }
- function elfinder_get_libraries() {
- $directory = 'libraries';
- $searchdir = array();
- $profile = drupal_get_profile();
- $config = conf_path();
- // Similar to 'modules' and 'themes' directories in the root directory,
- // certain distributions may want to place libraries into a 'libraries'
- // directory in Drupal's root directory.
- $searchdir[] = $directory;
- // The 'profiles' directory contains pristine collections of modules and
- // themes as organized by a distribution. It is pristine in the same way
- // that /modules is pristine for core; users should avoid changing anything
- // there in favor of sites/all or sites/<domain> directories.
- if (file_exists("profiles/$profile/$directory")) {
- $searchdir[] = "profiles/$profile/$directory";
- }
- // Always search sites/all/*.
- $searchdir[] = 'sites/all/' . $directory;
- // Also search sites/<domain>/*.
- if (file_exists("$config/$directory")) {
- $searchdir[] = "$config/$directory";
- }
- // Retrieve list of directories.
- // @todo Core: Allow to scan for directories.
- $directories = array();
- $nomask = array('CVS');
- foreach ($searchdir as $dir) {
- if (is_dir($dir) && $handle = opendir($dir)) {
- while (FALSE !== ($file = readdir($handle))) {
- if (!in_array($file, $nomask) && $file[0] != '.') {
- if (is_dir("$dir/$file")) {
- $directories[$file] = "$dir/$file";
- }
- }
- }
- closedir($handle);
- }
- }
- return $directories;
- }
- /**
- * library to filesystem connector path
- */
- function elfinder_connector_path() {
- return elfinder_lib_path() . '/php/elFinder.class.php';
- }
- /**
- * path to files directory
- */
- function elfinder_file_directory_path($absolute = FALSE) {
- $path = variable_get('elfinder_settings_filesystem_root_custom', '');
- $path = elfinder_parse_path_tokens($path);
- return $path;
- }
- /**
- * Returning site document root
- */
- function elfinder_document_root() {
- return realpath('');
- }
- /**
- * replace path tokens to its values (%uid, %user, etc)
- */
- function elfinder_parse_path_tokens($unparsed_path) {
- global $user, $language;
- $path = $unparsed_path;
- $uname = isset($user->name) ? preg_replace('/[[:^alnum:]]+/', '', $user->name) : '';
- $langCode = isset($language->language) ? $language->language : 'en';
- $path_tokens = array(
- '%uid' => $user->uid,
- '%name' => $uname,
- '%user' => $uname,
- '%files' => elfinder_default_directory_path(),
- '%lang' => $langCode,
- );
- $path = strtr($path, $path_tokens);
- if (function_exists('token_replace')) {
- $node = null;
- if (module_exists('og_context') AND isset($_SESSION['og_context']['gid'])) {
- $gid = $_SESSION['og_context']['gid'];
- $node = node_load($gid);
- }
- $path = token_replace($path, array('node' => $node, 'user' => $user));
- }
- return $path;
- }
- /**
- * default path to files directory
- */
- function elfinder_default_directory_path() {
- $filepath = '';
- $scheme = file_default_scheme();
- if ($scheme == 'public') {
- $filepath = variable_get('file_public_path', conf_path() . '/files');
- } else {
- $filepath = variable_get('file_private_path', conf_path());
- }
- return $filepath;
- }
- /**
- * files directory url
- */
- function elfinder_file_directory_url($force_relative = FALSE) {
- global $base_root;
- $fileurl = '';
- $fileurl = variable_get('elfinder_settings_filesystem_url_custom', '') . '/';
- if ($fileurl) {
- $fileurl = elfinder_parse_path_tokens($fileurl);
- }
- // Cutting off absolute url prefix
- if ($force_relative) {
- $fileurl = str_replace($base_root, '', $fileurl);
- }
- return $fileurl;
- }
- /**
- * prepare directory for files
- */
- function elfinder_prepare_directory($directory) {
- $rc = file_prepare_directory($directory, FILE_CREATE_DIRECTORY);
- return $rc;
- }
- /**
- * Add css
- */
- function elfinder_add_css($path, $options = array()) {
- return drupal_add_css($path, $options);
- }
- /**
- * Removing unwanted css
- */
- function elfinder_browser_css() {
- $css = drupal_add_css();
- $rms = array();
- if (module_exists('admin_menu')) {
- $apath = drupal_get_path('module', 'admin_menu');
- $atpath = drupal_get_path('module', 'admin_menu_toolbar');
- $rms[] = isset($apath) ? $apath : '';
- $rms[] = isset($atpath) ? $atpath : '';
- foreach (array_keys($css) as $k) {
- foreach ($rms as $rm) {
- if (preg_match('|' . $rm . '|', $k) && $rm != '') {
- unset($css[$k]);
- }
- }
- }
- }
- return drupal_get_css($css);
- }
- /**
- * Removing unwanted js
- */
- function elfinder_browser_js() {
- $js = drupal_add_js(NULL, array('scope' => 'header'));
- if (module_exists('admin_menu')) {
- $apath = drupal_get_path('module', 'admin_menu');
- $atpath = drupal_get_path('module', 'admin_menu_toolbar');
- $rms[] = isset($apath) ? $apath : '';
- $rms[] = isset($atpath) ? $atpath : '';
- foreach (array_keys($js) as $k) {
- foreach ($rms as $rm) {
- if (preg_match('|' . $rm . '|', $k) && $rm != '') {
- unset($js[$k]);
- }
- }
- }
- }
- return drupal_get_js('header', $js);
- }
- function elfinder_system_listing($matchexpr, $path, $arg1, $arg2) {
- return drupal_system_listing("/$matchexpr/", $path, $arg1, $arg2);
- }
- function elfinder_get_drupal_file_obj($uri) {
- global $user;
- $file = NULL;
-
- $fid = db_select('file_managed', 'f')
- ->condition('uri', rawurldecode($uri))
- ->fields('f', array('fid'))
- ->execute()
- ->fetchField();
-
- if ($fid) {
- $file = file_load($fid);
- }
- else {
- $file = new StdClass;
- $file->uid = $user->uid;
- $file->filename = basename($uri);
- $file->uri = $uri;
- $file->filemime = file_get_mimetype($uri);
- if (is_file(drupal_realpath($uri))) {
- $file->filesize = filesize($uri);
-
- // Use the file_entity module's mimetype to entity type
- // functionality if we have that method available.
- if (function_exists('file_entity_file_type')) {
- $types = file_entity_file_type($file);
- if (count($types) > 0) {
- $file->type = $types[0];
- } else {
- $file->type = 'default';
- }
- } else {
- list($type) = explode("/", $file->filemime);
- switch($type) {
- case 'image':
- case 'video':
- $file->type = $type;
- break;
- default:
- $file->type = 'default';
- break;
- }
- }
- }
- $file->timestamp = REQUEST_TIME;
- $file->status = FILE_STATUS_PERMANENT;
- }
- return $file;
- }
- function elfinder_file_download($uri) {
- if (variable_get('elfinder_settings_filesystem_handleprivate', 'true') == 'true') {
- global $user;
- $accessown = 'download own uploaded files';
- $accessall = 'download all uploaded files';
- $info = elfinder_get_drupal_file_obj($uri);
- if (($info->uid == $user->uid && user_access($accessown)) || user_access($accessall)) {
- $disposition = preg_match("/^(text|image)\//", $info->filemime) ? 'inline' : 'attachment';
- return array(
- 'Content-Type' => $info->filemime,
- 'Content-Length' => $info->filesize,
- 'Content-Disposition' => elFinderDrupal::GetContentDisposition($info->filename, $info->filemime, FALSE),
- );
- }
- return NULL;
- }
- }
- function elfinder_admin_profile_get($name = '') {
- $q = db_select('elfinder_profile', 'p')->fields('p', array('pid', 'name', 'description', 'settings'));
- if ($name) {
- $q->condition('p.name', $name);
- }
- $result = $q->execute();
- $profile = array();
- foreach ($result as $record) {
- $row = $record;
- $row->settings = unserialize($row->settings);
- $profile[] = $row;
- }
- if (count($profile) == 1) {
- $profile = $profile[0];
- }
- return $profile;
- }
- function elfinder_block_info() {
- // Makes it show up on /admin/build/block page.
- $blocks = array();
- $blocks[0]['info'] = t('File Manager');
- return $blocks;
- }
- function elfinder_block_view() {
- // Show the block.
- $block = array();
- $block['subject'] = t('File Manager');
- $block['content'] = elfinder_file_browser('backend');
- return $block;
- }
- /**
- * Implements hook_ckeditor_settings_alter().
- */
- function elfinder_ckeditor_settings_alter(&$settings, $conf) {
- $width = variable_get('elfinder_settings_misc_manager_width', '');
- if (!$width) {
- $width = ELFINDER_POPUP_WIDTH;
- }
- $height = variable_get('elfinder_settings_misc_manager_height', '');
- if (!$height) {
- $height = ELFINDER_POPUP_HEIGHT;
- }
- $settings['js_conf']['filebrowserWindowWidth'] = $width;
- $settings['js_conf']['filebrowserWindowHeight'] = $height;
- }
- function elfinder_libraries_info() {
- $libraries['elfinder'] = array(
- 'name' => 'elFinder File Manager',
- 'vendor url' => elfinder_homepage_url(),
- 'download url' => 'https://github.com/Studio-42/elFinder/archive/2.1.38.zip',
- 'version arguments' => array(
- 'file' => 'js/elfinder.min.js',
- 'pattern' => '@ \* Version\s+([0-9\.]+)@',
- 'lines' => 5,
- ),
- 'files' => array(
- 'js' => array(
- 'js/elfinder.min.js',
- ),
- 'css' => array(
- 'css/elfinder.min.css',
- )
- ),
- );
- return $libraries;
- }
- function elfinder_get_installed_version() {
- if (module_exists('libraries')) {
- $library = libraries_detect('elfinder');
- return $library['installed'] ? $library['version'] : FALSE;
- } else {
- $js_file = elfinder_lib_path() . '/js/elfinder.min.js';
- $js_contents = @file_get_contents($js_file);
- if (!$js_contents) {
- return FALSE;
- }
- if (preg_match('@ \* Version\s+([0-9\.]+)@', $js_contents, $matches)) {
- return $matches[1];
- }
- return 'unknown';
- }
- }
|