<?php
function fileupload_menu($may_cache) {
$items = array();
if ($may_cache) {
$items[] = array('path' => 'node/add/fileupload', 'title' => t('file upload'),
'access' => user_access('create files'));
}
return $items;
}
function fileupload_perm() {
return array('create files');
}
function fileupload_help($section) {
switch ($section) {
case 'admin/modules#description':
return t('An example module to demonstrate file uploads.');
case 'node/add#fileupload':
return t('Simple file upload node example.');
}
}
function fileupload_node_info() {
return array(
'fileupload' => array(
'name' => t('file upload'),
'module' => 'fileupload',
'description' => t('Example file upload content type'),
'has_title' => TRUE,
'has_body' => FALSE)
);
}
function fileupload_access($op, $node) {
global $user;
switch ($op) {
case 'create':
return user_access("create file");
case 'update':
case 'delete':
return user_access("create file") && ($user->uid == $node->uid);
}
}
function fileupload_file_download($file) {
if (user_access('access content')) {
if ($filemime = db_result(db_query("SELECT filemime FROM {fileupload} WHERE filepath = '%s'", file_create_path($file)))) {
return array('Content-type:' . $filemime);
}
}
else {
return -1;
}
}
function fileupload_view(&$node, $teaser = FALSE, $page = FALSE) {
$node = node_prepare($node, $teaser);
if ($file = $node->file) {
if ($file->filesize && file_check_location($file->filepath, file_directory_path())) {
$node->content['body']['#value'] = l($file->filename, file_create_url($file->filepath));
}
else {
$node->content['body']['#value'] = $file->filename;
}
$node->content['body']['#value'] .= ' ('. format_size($file->filesize) .')';
}
return $node;
}
function fileupload_form(&$node) {
$form['#attributes'] = array('enctype' => 'multipart/form-data');
$form['title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#size' => 60,
'#maxlength' => 128,
'#required' => TRUE,
'#default_value' => $node->title
);
$form['file'] = array(
'#type' => 'file',
'#title' => t('File'),
'#size' => 40,
'#default_value' => '',
);
if ($node->file->filepath) {
$form['file']['#description'] .= t('A file already exists, if you upload another file the current file will be replaced.');
}
if ($node->nid) {
$form['current_file'] = array(
'#type' => 'value',
'#value' => $node->file->filepath
);
}
return $form;
}
function fileupload_validate(&$node) {
if ($file = file_check_upload('file')) {
$node->file = $file;
}
if (!$file && !file_exists($node->current_file)) {
form_set_error('file', t('A file must be provided.'));
}
}
function fileupload_submit(&$node) {
if ($file = file_check_upload('file')) {
$node->file = file_save_upload($file, file_directory_path(), false);
}
}
function fileupload_load($node) {
$extras = new StdClass();
$extras->file = db_fetch_object(db_query('SELECT filename, filepath, filemime, filesize FROM {fileupload} WHERE nid = %d', $node->nid));
return $extras;
}
function fileupload_insert($node) {
$file = $node->file;
db_query("INSERT INTO {fileupload} (nid, filename, filepath, filemime, filesize) VALUES (%d, '%s', '%s', '%s', %d)", $node->nid, $file->filename, $file->filepath, $file->filemime, $file->filesize);
}
function fileupload_update($node) {
$newfile = $node->file->filepath;
$oldfile = db_result(db_query('SELECT filepath FROM {fileupload} WHERE nid = %d', $node->nid));
if ($newfile) {
if ($newfile != $oldfile) {
file_delete($oldfile);
}
$file = $node->file;
db_query("UPDATE {fileupload} SET filename = '%s', filepath = '%s', filemime = '%s', filesize = %d WHERE nid = %d", $file->filename, $file->filepath, $file->filemime, $file->filesize, $node->nid);
}
}
function fileupload_delete($node) {
file_delete($node->filepath);
db_query("DELETE FROM {fileupload} WHERE nid = %d", $node->nid);
}
?>