Index: filebrowser.module
===================================================================
--- filebrowser.module (.../vendor-sources-6.x/filebrowser/filebrowser.module) (revision 3)
+++ filebrowser.module (.../sites/segedletek/d6/sites/all/modules/filebrowser/filebrowser.module) (revision 35)
@@ -635,7 +635,12 @@
'arguments' => array (
'node' => NULL
)
- )
+ ),
+ 'filebrowser_filename' => array (
+ 'arguments' => array (
+ 'data' => NULL
+ )
+ )
);
}
@@ -664,6 +669,13 @@
*/
function filebrowser_menu() {
$items= array ();
+
+ $items['swfupload'] = array(
+ 'page callback' => 'filebrowser_swfupload',
+ 'type' => MENU_CALLBACK,
+ 'access arguments' => array(FILEBROWSER_UPLOAD),
+ );
+
$items['filebrowser_download/%node']= array (
'page callback' => '_filebrowser_download_callback',
'page arguments' => array (
@@ -698,6 +710,115 @@
}
/**
+ * Works around the flash player cookie bug
+ */
+function filebrowser_boot() {
+ foreach (array_keys($_POST) as $key) {
+ if (substr($key, 0, 4) == "SESS") {
+ if(!isset($_COOKIE[$key])) {
+ $_COOKIE[$key] = $_POST[$key];
+ }
+ session_id($_POST[$key]);
+ session_decode(sess_read($_POST[$key]));
+ }
+ }
+}
+
+/**
+ * This function transforms the php.ini notation for numbers (like '2M') to an integer (2*1024*1024 in this case)
+ * (from gilthans)
+ */
+function _filebrowser_let_to_num($v){
+ $l = substr($v, -1);
+ $ret = substr($v, 0, -1);
+ switch(strtoupper($l)){
+ case 'P':
+ $ret *= 1024;
+ case 'T':
+ $ret *= 1024;
+ case 'G':
+ $ret *= 1024;
+ case 'M':
+ $ret *= 1024;
+ case 'K':
+ $ret *= 1024;
+ break;
+ }
+ return $ret;
+}
+
+/**
+ * Determines the maximum upload size in bytes.
+ */
+function _filebrowser_max_upload_size() {
+ return min(_filebrowser_let_to_num(ini_get('post_max_size')), _filebrowser_let_to_num(ini_get('upload_max_filesize')));
+}
+
+/**
+ * Post handler for SWFUpload
+ */
+function filebrowser_swfupload()
+{
+ $target_path = $_POST['target_path'];
+ if ( substr($target_path, -1) !== '/' ) {
+ $target_path .= '/';
+ }
+
+ if (isset($_FILES['Filedata']) && $_FILES['Filedata']['name'] && is_uploaded_file($_FILES['Filedata']['tmp_name']) && $_FILES['files']['error'] == UPLOAD_ERR_OK ) {
+ $destination = $target_path . $_FILES['Filedata']['name'];
+
+ if ( file_check_location($target_path, file_directory_path()) && file_check_directory($target_path) ) {
+ if (move_uploaded_file($_FILES['Filedata']['tmp_name'], $destination)) {
+ drupal_set_message(t('Successful upload.'));
+ } else {
+ drupal_set_message(t('Upload failed.'), 'error');
+ }
+ }
+ }
+}
+
+/**
+ * Initializes the javascript part of the swfupload support.
+ */
+function filebrowser_swfupload_init_js($node) {
+ if ( !user_access(FILEBROWSER_UPLOAD) ) {
+ return FALSE;
+ }
+
+ $swfupload_path = drupal_get_path("module", "filebrowser").'/swfupload/';
+ $swfupload_flash = $swfupload_path . 'swfupload.swf';
+ $required_js = array('swfupload.js', 'swfupload.queue.js', 'swfupload.speed.js', 'swfupload.cookies.js', 'swfupload.support.js' );
+
+ foreach ( $required_js as $js ) {
+ $path = $swfupload_path . $js;
+ if ( file_exists( $path ) ) {
+ drupal_add_js( $path );
+ } else {
+ return FALSE;
+ }
+ }
+
+ drupal_add_js( array( 'swfupload_upload_url' => base_path() . 'swfupload',
+ 'swfupload_button_url' => base_path() . $swfupload_path . '/upload.png',
+ 'swfupload_flash_url' => base_path() . $swfupload_flash ,
+ 'swfupload_size_limit' => _filebrowser_max_upload_size(),
+ 'swfupload_target_path' => _filebrowser_current_full_path($node),
+ ),
+ 'setting' );
+
+ return TRUE;
+}
+
+function filebrowser_swfupload_html() {
+ $fset_output = '
';
+ $fset_output .= ''.t('Maximum file size is @size.', array( '@size' => format_size( _filebrowser_max_upload_size() ) )).'
';
+ $fset_output .= '';
+
+ $fieldset = array( '#title' => t('Mass upload'), '#value' => $fset_output, '#collapsible' => TRUE, '#collapsed' => TRUE );
+ return theme('fieldset', $fieldset);
+}
+
+/**
* hook_view implementation
*/
function filebrowser_view($node, $teaser= FALSE, $page= FALSE) {
@@ -740,21 +861,92 @@
// Insert download form content part
if (!empty ($node->allow_files_upload) && user_access(FILEBROWSER_UPLOAD)) {
- $form= drupal_get_form('filebrowser_upload_form', $node);
- $node->content['filebrowser_upload']= array (
+
+ if ( filebrowser_swfupload_init_js($node) ) {
+ $node->content['filebrowser_swfupload']= array (
+ '#value' => filebrowser_swfupload_html(),
+ '#weight' => 2
+ );
+ } else {
+ $form= drupal_get_form('filebrowser_upload_form', $node);
+ $node->content['filebrowser_upload']= array (
+ '#value' => $form,
+ '#weight' => 2
+ );
+ }
+
+ $form= drupal_get_form('filebrowser_make_directory_form', $node);
+ $node->content['filebrowser_make_directory']= array (
'#value' => $form,
'#weight' => 2
- );
+ );
}
}
return $node;
}
/**
+ * Make directory form.
+ *
+ */
+
+function filebrowser_make_directory_form($form_state, $node)
+{
+ $form['#node'] = $node;
+ $form['#redirect'] = array( 'node/'.$node->nid, 'path='.$_GET['path'] );
+
+ $form['filebrowser_makedir'] = array (
+ '#type' => 'fieldset',
+ '#title' => t('Make Directory'),
+ '#collapsible' => TRUE,
+ '#collapsed' => TRUE,
+ '#description' => t('The directory will be created in the current directory.'),
+ '#weight' => 30
+ );
+
+ $form['filebrowser_makedir']['directory_name']= array (
+ '#type' => 'textfield',
+ '#title' => t('Name'),
+ '#size' => 40,
+ '#required' => TRUE,
+ '#prefix' => '',
+ );
+
+ $form['filebrowser_makedir']['submit'] = array (
+ '#type' => 'submit',
+ '#value' => t('Create'),
+ '#suffix' => '
',
+ );
+
+ return $form;
+}
+
+function filebrowser_make_directory_form_validate($form, &$form_state) {
+ $node = $form['#node'];
+ $full_path = file_create_path( _filebrowser_current_full_path($node) . $form_state['values']['directory_name'] );
+
+ if ( $full_path ) {
+ if ( file_exists($full_path) ) {
+ form_set_error('directory_name', t("This directory already exists."));
+ } else {
+ $form_state['values']['full_path'] = $full_path;
+ }
+ } else {
+ form_set_error('directory_name', t('Invalid directory name.'));
+ }
+}
+
+function filebrowser_make_directory_form_submit($form, &$form_state) {
+ $full_path = $form_state['values']['full_path'];
+ file_check_directory( $full_path, TRUE, 'directory_name' );
+}
+
+/**
* Upload form.
*/
function filebrowser_upload_form($form_state, $node) {
$form= array ();
+ $form['#redirect'] = array( 'node/'.$node->nid, 'path='.$_GET['path'] );
$form['filebrowser_uploads']= array (
'#type' => 'fieldset',
'#title' => t('File Upload'),
@@ -901,13 +1093,6 @@
}
/**
- * Originaly a file.inc Drupal function modified.
- *
- * @param unknown_type $file_name
- * @param unknown_type $mapping
- */
-
-/**
* Theme a directory listing of files in a system directory.
*
* @param array $files An array of data of files in this directory.
@@ -940,8 +1125,7 @@
);
// add filename
- $unsorted_rows[$file_name][]= ''. ($data['display-name'] == '..' ? t('Go up') : $data['display-name']).''.theme('mark', $data['status']);
+ $unsorted_rows[$file_name][]= theme('filebrowser_filename', $data);
// add optional colunmns
$is_used= array ();
@@ -1079,6 +1263,10 @@
return $output;
}
+function theme_filebrowser_filename($data) {
+ return ''. ($data['display-name'] == '..' ? t('Go up') : $data['display-name']).''.theme('mark', $data['status']);
+}
+
function theme_filebrowser_page_title($node) {
return !empty ($node->title) ? $node->title : '';
}