array( 'title' => t('Administer file viewer'), 'description' => t('Access the file viewer administration pages.'), ), 'access fileviewer' => array( 'title' => t('Access file viewer'), 'description' => t('Use file viewer to browse file.'), ), 'download file from fileviewer' => array( 'title' => t('Download file from fileviewer'), 'description' => t('Access download lin from file viewer.'), ), ); } function fileviewer_menu() { $items = array(); $items['file/%'] = array( 'title' => 'File virewer', 'page callback' => 'fileviewer_page', 'page arguments' => array(1), 'access arguments' => array('access fileviewer'), 'file' => 'includes/page.inc', 'type' => MENU_CALLBACK, ); $items['admin/config/media/fileviewer/flush'] = array( 'title' => 'Flush files for file viewer', 'description' => 'Settings for file viewer.', 'page callback' => 'drupal_get_form', 'page arguments' => array('fileviewer_flush_confirm'), 'access arguments' => array('administer fileviewer'), ); $items['admin/config/media/fileviewer'] = array( 'title' => 'File viewer', 'description' => 'Settings for file viewer.', 'page callback' => 'drupal_get_form', 'page arguments' => array('fileviewer_settings'), 'access arguments' => array('administer fileviewer'), // 'file' => 'admin.inc', 'type' => MENU_NORMAL_ITEM, ); $items['admin/config/media/fileviewer/settings'] = array( 'title' => 'File viewer', 'description' => 'Settings for file viewer.', 'page callback' => 'drupal_get_form', 'page arguments' => array('fileviewer_settings'), 'access arguments' => array('administer fileviewer'), // 'file' => 'admin.inc', 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => 0 ); $items['admin/config/media/fileviewer/filetype'] = array( 'title' => 'File types', 'description' => 'Settings for filetypes.', 'page callback' => 'drupal_get_form', 'page arguments' => array('fileviewer_filetype_settings'), 'access arguments' => array('administer fileviewer'), // 'file' => 'admin.inc', 'type' => MENU_LOCAL_TASK, 'weight' => 1 ); return $items; } function fileviewer_settings(){ drupal_set_message(t('You need to !flush all the cached files after changing the directory.', array('!flush' => l(t('flush'), 'admin/config/media/fileviewer/flush'))), 'warning'); $form['fileviewer_path'] = array( '#type' => 'textfield', '#title' => t('Fileviewer directory'), '#default_value' => variable_get('fileviewer_path', 'fileviewer'), '#description' => t('A file system path where uploaded files will be extracted or parsed after uploaded.'), ); $form['fileviewer_flush'] = array( '#type' => 'submit', '#value' => t('Flush all files'), '#submit' => array('fileviewer_flush_submit'), ); return system_settings_form($form); } function fileviewer_filetype_settings(){ $form =array(); $form['fileviewer_pdf'] = array( '#type' => 'fieldset', '#title' => t('PDF'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $form['fileviewer_pdf']['fileviewer_pdf_iabookreader_search_inside'] = array( '#type' => 'checkbox', '#title' => t('Enable "search inside" for PDF file in the Internet Archive BookReader'), '#default_value' => variable_get('fileviewer_pdf_iabookreader_search_inside', TRUE), ); $form['fileviewer_epub'] = array( '#type' => 'fieldset', '#title' => t('EPUB'), '#description' => t('If you want epub to be support, please contribute for epub readers or donate. I don\'t have time now.'), '#collapsible' => TRUE, '#collapsed' => FALSE, ); $form['fileviewer_epub']['epubjs'] = array( '#type' => 'checkbox', '#title' => t('EPUB'), '#description' => t('try http://threepress.org/static/epubjs/, stop update :(') ); $form['fileviewer_epub']['bibliotype'] = array( '#type' => 'checkbox', '#title' => t('EPUB'), '#description' => t('try http://craigmod.com/bibliotype/, never upate :(') ); return system_settings_form($form); } function fileviewer_flush_submit($form, &$form_state) { drupal_goto('admin/config/media/fileviewer/flush'); return; } function fileviewer_flush_confirm_submit($form, &$form_state) { file_unmanaged_delete_recursive('public://' . variable_get('fileviewer_path', 'fileviewer')); foreach (db_select('file_managed', 'fid')->fields('fid', array('fid'))->execute()->fetchCol() as $fid){ $file = file_load($fid); fileviewer_file_update($file); } drupal_set_message(t('Files for fileviewer have been flushed')); drupal_goto('admin/config/media/fileviewer'); return; } function fileviewer_flush_confirm($form, &$form_state) { return confirm_form( $form, t('Are you sure you want to flush all the files for fileviewer?'), 'admin/config/media/fileviewer', t('This will clear all the collected performance statistics stored in APC. This action cannot be undone.'), t('Confirm flush'), t('Cancel')); } function fileviewer_block_info($op = 'list', $delta = 0, $edit = array()){ $blocks = array(); $blocks['fileviewer'] = array( 'info' => t('File viewer toc'), 'status' => TRUE, 'region' => 'sidebar_first', 'visibility' => 1, 'pages' => 'file/*', ); return $blocks; } function fileviewer_block_view($delta = ''){ $block = array(); switch ($delta) { case 'fileviewer': $block['subject'] = t('Contents'); $block['content'] = '
'; } return $block; } function fileviewer_file_update($file) { $destination = fileviewer_path($file->fid); file_prepare_directory($destination, FILE_CREATE_DIRECTORY); $meta_path = $destination . '/meta'; file_prepare_directory($meta_path, FILE_CREATE_DIRECTORY); $destination = $destination . '/'; switch ($file->filemime) { case 'application/pdf': return fileviewer_pdftopng(drupal_realpath($file->uri), $destination); } $file_extension = strtolower(array_pop(explode('.', $file->filename))); switch ($file_extension) { case 'epub': return fileviewer_extract_zip(drupal_realpath($file->uri), $destination); } } function fileviewer_file_delete($file) { return file_unmanaged_delete_recursive(fileviewer_path($file->fid)); } /** * Return all CCK fields that are of type 'file' */ /* function fileviewer_get_cck_file_fields() { $file_fields = array(); if (module_exists('filefield')) { $fields = content_fields(); foreach($fields as $key => $values){ if($values['type'] == 'filefield') { $file_fields[] = $key; } } } return $file_fields; } */ function fileviewer_pdftopng($filepath, $destination) { $cmd = 'pdftohtml -xml "' . $filepath . '" "' . $destination . '/meta/text.xml"'; shell_exec($cmd); $cmd = 'pdftoppm -png "' . $filepath . '" "' . $destination . 'page"'; shell_exec($cmd); } function fileviewer_extract_zip($filepath, $destination) { $extracted = array(); if ($z = zip_open($filepath)) { while ($entry = zip_read($z)) { if (zip_entry_open($z, $entry, 'r') && ($zip_entry_filesize = zip_entry_filesize($entry))) { $entry_name = zip_entry_name($entry); $data = zip_entry_read($entry, $zip_entry_filesize); $filepath = $destination . $entry_name; $parent_dir = dirname($filepath); if (!file_exists($parent_dir)) { file_prepare_directory($parent_dir, FILE_CREATE_DIRECTORY); } if ($filepath = file_unmanaged_save_data($data, $filepath, FILE_EXISTS_REPLACE)) { $file = new StdClass(); $file->filename = $entry_name; $file->filemime = file_get_mimetype($filepath); $file->filesize = filesize($filepath); $extracted[] = $file; } zip_entry_close($entry); } } zip_close($z); } return $extracted; } function fileviewer_theme() { $path = drupal_get_path('module', 'fileviewer') . '/theme'; $theme = array( 'fileviewer_formatter_default' => array( 'variables' => array('file' => NULL, 'icon_directory' => NULL), ), 'fileviewer_formatter_embed' => array( 'variables' => array('file' => NULL, 'icon_directory' => NULL), ), 'fileviewer_formatter_preview' => array( 'variables' => array( 'item' => NULL, 'image_style' => NULL, 'path' => NULL, 'icon_directory' => NULL, ), ), ); $theme['bookreader_viewer'] = array( 'template' => 'bookreader-viewer', 'variables' => array('file' => NULL), 'path' => $path, ); /* $theme['epub_viewer'] = array( 'template' => 'epub-viewer', 'variables' => array('file' => NULL), 'path' => $path, ); $theme['epubjs_viewer'] = array( 'template' => 'epubjs-viewer', 'variables' => array('file' => NULL), 'path' => $path, ); */ $theme['googledocs_viewer'] = array( 'template' => 'googledocs-viewer', 'variables' => array('file' => NULL), 'path' => $path, ); return $theme; } function fileviewer_path($fid){ return drupal_realpath('public://') . '/' . variable_get('fileviewer_path', 'fileviewer') . '/' . $fid; }