Same filename and directory in other branches
This is an example to demonstrate how to make a Drupal node support file uploads.
@Database definition:
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
);
File
developer/examples/fileupload.moduleView source
<?php
/**
* @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);
}
Functions
Name | Description |
---|---|
fileupload_access | |
fileupload_delete | |
fileupload_file_download | Support private downloads |
fileupload_form | |
fileupload_help | |
fileupload_insert | |
fileupload_link | Integrate with Drupal |
fileupload_load | |
fileupload_node_name | Node related code |
fileupload_perm | |
fileupload_update | |
fileupload_validate | |
fileupload_view |