aboutsummaryrefslogtreecommitdiff
path: root/plugins/video_upload
diff options
context:
space:
mode:
authorFabio Varesano <fax8@13637.no-reply.drupal.org>2006-06-18 14:41:32 +0000
committerFabio Varesano <fax8@13637.no-reply.drupal.org>2006-06-18 14:41:32 +0000
commitbff6fafe62a4201c99bdba20144313276d654bca (patch)
tree3f58c4adad06446274c6e842f9f9fb6155ba4b34 /plugins/video_upload
parent2540b23c26f79ed8b223d6ec8b00ca4bfc76e7ef (diff)
downloadvideo-bff6fafe62a4201c99bdba20144313276d654bca.tar.gz
video-bff6fafe62a4201c99bdba20144313276d654bca.tar.bz2
List of changes:
Pluginization: Video.module file was too big and complex. I isolated each different feature which was not excencial and removed from the video.module file. Those features are now added by helper modules called plugins under the directory "plugins". The download has been separed from multidownload. There is now a separated plugin called video_multidownload which add multidownload feature. There are also some hooks being defined. See file hooks.php for details. XHTML Compliace: I worked hard to remove unvalid code from video module. Now the code generated by the module validates on W3C validator. This will probæbly generate some problems with uncommon browsers we will try to solve them as soon as reported. Thanks a lot to Karl Rudd who point me to the right direction towards compliace. Thumbnailing: There is plugin called video_image.module which add thumbnails support for the video module. Thumbnails are uploaded throught the video creation form and a image node is created with it. Video file Uploads: There is a plugin called video_upload.module which add a file upload field to the node creation form. The uploaded file is automatically set as path of the video. Then usable for plays/downloads. NOTE ON BUGS: I tryed to test new features the most as possible but I can't guarantee that all this code is bugfree. Video module is becaming too big to be tested by only one person (me). Hope you guys will be able to help with debugging. Fabio
Diffstat (limited to 'plugins/video_upload')
-rw-r--r--plugins/video_upload/video_upload.module304
1 files changed, 304 insertions, 0 deletions
diff --git a/plugins/video_upload/video_upload.module b/plugins/video_upload/video_upload.module
new file mode 100644
index 0000000..22f8b1c
--- /dev/null
+++ b/plugins/video_upload/video_upload.module
@@ -0,0 +1,304 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Enable Video files uploading in video module
+ *
+ * @author Fabio Varesano <fvaresano at yahoo dot it>
+ */
+
+
+/**
+ * Implementation of hook_help().
+ */
+function video_upload_help($section) {
+ switch ($section) {
+ case 'admin/modules#description':
+ return t('Enable video files uploading in video module.');
+ }
+}
+
+
+/**
+ * Settings Hook
+ *
+ * @return
+ * string of form content or error message
+ */
+function video_upload_settings() {
+ //Must have "administer site configuration" and "administer video" privilages.
+ if (!user_access('administer video')) {
+ drupal_access_denied();
+ }
+
+ $form = array();
+ $form['video_upload_override_vidfile'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('override video file'),
+ '#description' => t('Check this if your users must only submit videos throught uploading. This disable path insertion.'),
+ '#default_value' => variable_get('video_upload_override_vidfile', false),
+ );
+ $form['video_upload_uploadable_extensions'] = array(
+ '#type' => 'textfield',
+ '#title' => t('uploadable extensions'),
+ '#description' => t('Insert here a comma separated list of extensions you want to enable for upload.'),
+ '#default_value' => variable_get('video_upload_uploadable_extensions', ''),
+ );
+
+
+ return $form;
+}
+
+
+/**
+ * Implementation of hook_perm().
+ */
+function video_upload_perm() {
+ return array('upload video files');
+}
+
+
+/**
+ * Implementation of hook_nodeapi()
+ */
+function video_upload_nodeapi(&$node, $op, $teaser) {
+ switch ($op) {
+
+ case 'load':
+ $output['video_upload_file'] = _video_upload_load($node);
+ $output['vidfile'] = file_create_url($output['video_upload_file']->filepath);
+ return $output;
+ case 'prepare':
+ _video_upload_prepare($node);
+ break;
+
+ case 'validate':
+ _video_upload_validate($node);
+ break;
+
+
+ case 'submit':
+ _video_upload_submit($node);
+ break;
+
+ case 'insert':
+ case 'update':
+ _video_upload_store($node);
+ break;
+
+ case 'delete':
+ ;
+ break;
+
+ case 'delete revision':
+ video_upload_delete_revision($node);
+ break;
+
+
+
+ }
+}
+
+
+/**
+ * Implementation of hook_form_alter()
+ * We use this to add a file upload field to the video creation form.
+ */
+function video_upload_form_alter($form_id, &$form) {
+
+ if($form_id == 'video_node_form' && isset($form['video']) && user_access('upload video files')) {
+
+ //get node object from form
+ $node = $form['#node'];
+
+ // required for upload to work
+ $form['#attributes']['enctype'] = 'multipart/form-data';
+
+ if(variable_get('video_upload_override_vidfile', false)) {
+ // remove unnecessary fields
+ $form['video']['vidfile'] = NULL;
+ $form['video']['filesize'] = NULL;
+ $form['video'] += _video_upload_form($node);
+ }
+ else {
+ // vidfile field is no more required while upload is enabled.
+ $form['video']['vidfile']['#required'] = FALSE;
+
+ $form['video']['vidfile']['#description'] .= '<p>' . t('If you want to upload a video simply ignore this field and select your video file at the "Upload video file" field.') . '</p>';
+ $form['video']['video_upload'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Upload video'),
+ '#weight' => -19,
+ '#collapsible' => TRUE,
+ '#collapsed' => TRUE,
+ );
+
+ $form['video']['video_upload'] += _video_upload_form($node);
+ }
+ }
+}
+
+
+function _video_upload_load(&$node) {
+ if ($node->vid) {
+ $result = db_query('SELECT * FROM {files} f INNER JOIN {file_revisions} r ON f.fid = r.fid WHERE r.vid = %d ORDER BY f.fid DESC', $node->vid);
+ return db_fetch_object($result);
+ }
+}
+
+
+/**
+ * Validate video file
+ */
+function _video_upload_validate(&$node) {
+ // if we override the default video module vidfile field and we don't have a file uploaded set error
+ if (variable_get('video_upload_override_vidfile', false) && !isset($node->video_upload_file) && !isset($_SESSION['video_upload_file'])) {
+ form_set_error('video_upload_file', t('A file must be provided.'));
+ return;
+ }
+}
+
+
+function _video_upload_submit(&$node) {
+ ;
+}
+
+
+function _video_upload_prepare(&$node) {
+ // clear video file informations
+ if(count($_POST) == 0) {
+ if (!empty($_SESSION['video_upload_file'])) {
+ file_delete($_SESSION['video_upload_file']->filepath);
+ }
+ unset($_SESSION['video_upload_file']);
+ }
+
+
+ if ($file = file_check_upload('video_upload_file')) {
+ $temppath = file_directory_temp() . '/video/';
+ file_check_directory($temppath, TRUE);
+ $node->video_upload_file = file_save_upload($file, $temppath .'/'. $file->filename, FILE_EXISTS_REPLACE);
+ $node->video_upload_file->newfile = TRUE;
+
+ $_SESSION['video_upload_file'] = $node->video_upload_file;
+ }
+ else if (!empty($_SESSION['video_upload_file'])) {
+ $node->video_upload_file = $_SESSION['video_upload_file'];
+ } else {
+ $_SESSION['video_upload_file'] = $node->video_upload_file;
+ }
+}
+
+
+function _video_upload_store(&$node) {
+ if(!empty($_SESSION['video_upload_file'])) {
+ $file = $_SESSION['video_upload_file'];
+ $dest_dir = variable_get('video_upload_default_path', 'videos') .'/';
+ if ($file = file_save_upload($file, $dest_dir . $file->filename)) {
+ $file = $_SESSION['video_upload_file'];
+ $file->fid = db_next_id('{files}_fid');
+ db_query("INSERT INTO {files} (fid, nid, filename, filepath, filemime, filesize) VALUES (%d, %d, '%s', '%s', '%s', %d)", $file->fid, $node->nid, $file->filename, $file->filepath, $file->filemime, $file->filesize);
+ db_query("INSERT INTO {file_revisions} (fid, vid, list, description) VALUES (%d, %d, %d, '%s')", $file->fid, $node->vid, $file->list, $file->description);
+ unset($_SESSION['video_upload_file']);
+ }
+
+ }
+}
+
+
+/**
+* Create video upload specific form fields
+*/
+function _video_upload_form($node) {
+ _video_upload_check_settings();
+
+ $form = array();
+
+ $form['video_upload_file'] = array(
+ '#type' => 'file',
+ '#title' => t('Upload video file'),
+ '#size' => 40,
+ '#weight' => -19,
+ '#description' => t('The uploaded file will be used as video file for this node.<br /><b>NOTE:</b> The max upload size is') . ' ' . format_size(_video_upload_get_max_upload_size()) . '.',
+ );
+
+ if (isset($node->video_upload_file)) {
+ $form['video_upload_file']['#prefix'] = theme('video_upload_file_info_form', $node);
+ $form['video_upload_file']['#title'] = t('Replace with');
+ }
+
+ return $form;
+}
+
+
+/**
+ * Display informations about already uploaded file
+ */
+function theme_video_upload_file_info_form(&$node) {
+ $output = '<p>' . t('A video file has been already uploaded.') . '</p>';
+
+ // create array containing uploaded file informations
+ $items = array(
+ '<b>'. t('file name') .':</b> ' . $node->video_upload_file->filename,
+ '<b>'. t('file path') .':</b> ' . $node->video_upload_file->filepath,
+ '<b>'. t('file size') .':</b> ' . format_size($node->video_upload_file->filesize),
+ '<b>'. t('file mime') .':</b> ' . $node->video_upload_file->filemime,
+ );
+
+ // create information list
+ $output .= theme_item_list($items, t('uploaded video informations:'));
+
+ return $output;
+}
+
+
+/**
+ * Check PHP's post_max_size and upload_max_filesize settings and determine
+ * the maximum size of a file upload.
+ * (code from audio.module)
+ * @return an integer number of bytes
+ */
+function _video_upload_get_max_upload_size() {
+ $limits = array();
+ foreach (array('upload_max_filesize', 'post_max_size') as $setting) {
+ // the post_max_size and upload_max_filesize settings could be a string
+ // ('2m', '1G') or an integer (2097152 or 1073741824).
+ $val = ini_get($setting);
+ if (!is_numeric($val)) {
+ // separate the numeric and alpha parts, then get to multiplying
+ $val = trim($val);
+ $last = strtolower($val{strlen($val)-1});
+ switch($last) {
+ case 'g':
+ $val *= 1024;
+ case 'm':
+ $val *= 1024;
+ case 'k':
+ $val *= 1024;
+ }
+ }
+ $limits[] = $val;
+ }
+ // the smallest value will be the limiting factor so retun it.
+ return min($limits);
+}
+
+
+/**
+ * Verify the video_upload module settings.
+ */
+function _video_upload_check_settings() {
+ // File paths
+ $video_path = file_create_path(variable_get('video_upload_default_path', 'videos'));
+ $temp_path = rtrim($video_path, '/') . '/temp';
+
+ if (!file_check_directory($video_path, FILE_CREATE_DIRECTORY, 'video_upload_default_path')) {
+ return false;
+ }
+ if (!file_check_directory($temp_path, FILE_CREATE_DIRECTORY, 'video_upload_default_path')) {
+ return false;
+ }
+
+ return true;
+}