fileupload.module

<?php
// $Id: fileupload.module,v 1.3 2004/09/08 21:22:26 JonBob Exp $

/**
 * @file
 * This is an example to demonstrate how to make a Drupal node support file
 * uploads.
 *
 * @Database definition:
 * @code
 *   CREATE TABLE fileupload (
 *     nid int(10) unsigned NOT NULL default '0',
 *     basename varchar(255) not null,
 *     filepath varchar(255) not null,
 *     mime varchar(255) not null,
 *     size int(10) unsigned not null
 *   );
 * @endcode
 */

/** Integrate with Drupal */
function fileupload_link($type) {
  if ($type == 'system' && user_access('create files')) {
    menu('node/add/fileupload', t('file upload'), 'node_page', 1);
  }
}

function fileupload_perm() {
  return array('create files');
}

function fileupload_help($section) {
  switch ($section) {
    case 'admin/system/modules#description':
    case 'node/add#fileupload':
      return t('Simple file node example.');
  }
}


/** Support private downloads */

function fileupload_file_download($file) {
  if (user_access('access content')) {
    if ($mime = db_result(db_query("SELECT mime FROM {fileupload} WHERE filepath = '%s'", file_create_path($file)))) {
      return array("Content-type: $mime");
    }
  }
}

/** Node related code */

function fileupload_node_name() {
  return t('file');
}

function fileupload_view($node, $main = 0, $page = 0) {
  // Only create link to file when it is in the proper location.
  if ($node->size && file_check_location($node->filepath, variable_get('file_directory_path', 'files'))) {
    $node->body = '<a href="'. file_create_url($node->filepath) .'">'. $node->basename .'</a> ('. format_size($node->size) .')';
  }
  elseif ($file = $node->file) {
    $node->body = $file->name .' ('. format_size($file->size) .')';
  }
  else {
    $node->body = basename($node->filepath) .' ('. format_size(filesize($node->filepath)) .')';
  }

  return theme('node', $node, $main, $page);
}

function fileupload_form(&$node, &$error, &$param) {
  // Set form parameters so we can accept file uploads.
  $param['options'] = array('enctype' => 'multipart/form-data');

  $output = form_file(t('File'), 'file', 40, ($error['file'] ? theme('error', $error['file']) : t('A file already exists, if you upload another file the current file will be replaced.')));

  if ($node->nid) {
    $output .= form_hidden('filepath', $node->filepath);
  }

  return $output;
}

function fileupload_validate(&$node) {
  $error = array();

  // Check for a new file upload.
  if ($file = file_save_upload('file')) {
    $node->file = $file;
  }

  // Make sure there is a file upload, or an existing file in case of updates.
  if (!$node->file && !file_exists($node->filepath)) {
    $error['file'] = t('Missing file.');
  }

  return $error;
}

function fileupload_access($op, $node) {
  global $user;

  switch ($op) {
    case 'view':
      return $node->status;
    case 'create':
      return user_access("create file");
    case 'update':
    case 'delete':
      return user_access("create file") && ($user->uid == $node->uid);
  }
}

function fileupload_load($node) {
  return db_fetch_object(db_query('SELECT * FROM {fileupload} WHERE nid = %d', $node->nid));
}

function fileupload_insert($node) {
  $file = $node->file;
  $file = file_save_upload($file, $file->name);

  db_query("INSERT INTO {fileupload} (nid, basename, filepath, mime, size) VALUES (%d, '%s', '%s', '%s', %d)", $node->nid, $file->name, $file->path, $file->type, $file->size);
}

function fileupload_update($node) {
  // Remove old file.
  file_delete(db_result(db_query('SELECT filepath FROM {fileupload} WHERE nid = %d', $node->nid)));

  // Save new file
  $file = $node->file;
  $file = file_save_upload($file, $file->name);
  db_query("UPDATE {fileupload} SET basename = '%s', filepath = '%s', mime = '%s', size = %d WHERE nid = %d", $file->name, $file->path, $file->type, $file->size, $node->nid);
}

function fileupload_delete($node) {
  file_delete($node->filepath);
  db_query("DELETE FROM {fileupload} WHERE nid = %d", $node->nid);
}

?>
 
 

All source code and documentation on this site is released under the terms of the GNU General Public License, version 2 and later. Drupal is a registered trademark of Dries Buytaert.