Index: comment_upload.install =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/comment_upload/comment_upload.install,v retrieving revision 1.2 diff -u -p -r1.2 comment_upload.install --- comment_upload.install 23 Jun 2006 00:06:31 -0000 1.2 +++ comment_upload.install 4 Jan 2007 08:06:28 -0000 @@ -4,10 +4,22 @@ function comment_upload_install() { switch ($GLOBALS['db_type']) { case 'mysql': case 'mysqli': - db_query("CREATE TABLE comment_files ( - cid int NOT NULL default '0', - nid int NOT NULL default '0', - fid int NOT NULL default '0' + db_query("CREATE TABLE `comment_upload_files` ( + `fid` int(10) unsigned NOT NULL default '0', + `nid` int(10) unsigned NOT NULL default '0', + `cid` int NOT NULL default '0', + `filename` varchar(255) NOT NULL default '', + `filepath` varchar(255) NOT NULL default '', + `filemime` varchar(255) NOT NULL default '', + `filesize` int(10) unsigned NOT NULL default '0', + PRIMARY KEY (`fid`) + ) /*!40100 DEFAULT CHARACTER SET utf8 */;"); + db_query("CREATE TABLE {comment_upload_file_revisions} ( + fid int(10) unsigned NOT NULL default 0, + vid int(10) unsigned NOT NULL default 0, + description varchar(255) NOT NULL default '', + list tinyint(1) unsigned NOT NULL default 0, + PRIMARY KEY (fid, vid) ) /*!40100 DEFAULT CHARACTER SET utf8 */;"); break; } @@ -16,11 +28,49 @@ function comment_upload_install() { function comment_upload_update_1() { $ret = array(); $ret = update_sql("ALTER TABLE {comment_files} ADD nid int NOT NULL default '0'"); - + // loop through all the comment upload records and populate the nid column $results = db_query("SELECT c.cid, c.nid FROM {comments} c WHERE c.cid IN (SELECT DISTINCT cf.cid FROM {comment_files} cf)"); while ($c = db_fetch_object($results)) { $ret = update_sql("UPDATE {comment_files} SET nid = $c->nid WHERE cid = $c->cid"); } return $ret; +} + +/** + * Move previously saved data from files, file_revisions andcomment_files into comment_upload_files and comment_upload_file_revisions. + */ +function comment_upload_update_2() { + $ret = array(); + db_query("CREATE TABLE `comment_upload_files` ( + `fid` int(10) unsigned NOT NULL default '0', + `nid` int(10) unsigned NOT NULL default '0', + `cid` int NOT NULL default '0', + `filename` varchar(255) NOT NULL default '', + `filepath` varchar(255) NOT NULL default '', + `filemime` varchar(255) NOT NULL default '', + `filesize` int(10) unsigned NOT NULL default '0', + PRIMARY KEY (`fid`) + ) /*!40100 DEFAULT CHARACTER SET utf8 */;"); + db_query("CREATE TABLE {comment_upload_file_revisions} ( + fid int(10) unsigned NOT NULL default 0, + vid int(10) unsigned NOT NULL default 0, + description varchar(255) NOT NULL default '', + list tinyint(1) unsigned NOT NULL default 0, + PRIMARY KEY (fid, vid) + ) /*!40100 DEFAULT CHARACTER SET utf8 */;"); + + $max_fid = db_result(db_query("SELECT MAX(fid) FROM {comment_files}")); + $results = db_query("SELECT f.fid, cf.nid, cf.cid, cf.cid, f.filename, f.filepath, f.filemime, f.filesize, r.list, r.description FROM {files} f INNER JOIN {file_revisions} r ON f.fid = r.fid INNER JOIN {comment_files} cf ON f.fid = cf.fid WHERE f.nid = 0"); + + while ($c = db_fetch_object($results)) { + db_query("INSERT INTO {comment_upload_files} (fid, nid, cid, filename, filepath, filemime, filesize) VALUES(%d, %d, %d, '%s', '%s', '%s', %d)", $c->fid, $c->nid, $c->cid, $c->filename, $c->filepath, $c->filemime, $c->filesize); + db_query("INSERT INTO {comment_upload_file_revisions} (fid, vid, description, list) VALUES(%d, 0, '%s', %d)", $c->fid, $c->description, $c->list); + db_query("DELETE FROM {files} WHERE fid = %d", $c->fid); + db_query("DELETE FROM {file_revisions} WHERE fid = %d", $c->fid); + } + + $ret[] = update_sql("INSERT INTO {sequences} (name, id) VALUES('" . db_prefix_tables('{comment_upload_files}'). "_fid', $max_fid)"); + $ret[] = update_sql("DROP TABLE {comment_files}"); + return $ret; } \ No newline at end of file Index: comment_upload.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/comment_upload/comment_upload.module,v retrieving revision 1.4 diff -u -p -r1.4 comment_upload.module --- comment_upload.module 23 Jun 2006 00:06:31 -0000 1.4 +++ comment_upload.module 4 Jan 2007 08:01:32 -0000 @@ -163,7 +163,7 @@ function _comment_upload_load_files($cid // Cache all for this node to avoid one query per comment if (!isset($cache[$nid])) { $cache[$nid] = array(); - $result = db_query('SELECT * FROM {files} f INNER JOIN {file_revisions} r ON f.fid = r.fid INNER JOIN {comment_files} cf ON f.fid = cf.fid WHERE cf.nid = %d ORDER BY f.fid DESC', $nid); + $result = db_query('SELECT * FROM {comment_upload_files} f INNER JOIN {comment_upload_file_revisions} r ON f.fid = r.fid WHERE f.nid = %d ORDER BY f.fid DESC', $nid); while ($file = db_fetch_object($result)) { $cache[$nid][$file->cid][] = $file; } @@ -171,7 +171,7 @@ function _comment_upload_load_files($cid return $cache[$nid][$cid]; } else if ($cid) { - $result = db_query('SELECT * FROM {files} f INNER JOIN {file_revisions} r ON f.fid = r.fid INNER JOIN {comment_files} cf ON f.fid = cf.fid WHERE cf.cid = %d ORDER BY f.fid DESC', $cid); + $result = db_query('SELECT * FROM {comment_upload_files} f INNER JOIN {comment_upload_file_revisions} r ON f.fid = r.fid WHERE f.cid = %d ORDER BY f.fid DESC', $cid); while ($file = db_fetch_object($result)) { $files[] = $file; } @@ -196,9 +196,8 @@ function _comment_upload_save_files($com // Remove managed files. else { - db_query('DELETE FROM {files} WHERE fid = %d', $file->fid); - db_query('DELETE FROM {file_revisions} WHERE fid = %d', $file->fid); - db_query('DELETE FROM {comment_files} WHERE fid = %d', $file->fid); + db_query('DELETE FROM {comment_upload_files} WHERE fid = %d', $file->fid); + db_query('DELETE FROM {comment_upload_file_revisions} WHERE fid = %d', $file->fid); } } @@ -207,13 +206,13 @@ function _comment_upload_save_files($com if ($file = file_save_upload($file, $file->filename)) { // Overwrite existing in single-attachment mode if (variable_get('comment_upload_single', 0) && isset($comment['files'][0])) { - db_query("UPDATE {files} SET filename = '%s', filepath = '%s', filemime = '%s', filesize = %d WHERE fid = %d", $file->filename, $file->filepath, $file->filemime, $file->filesize, $comment['files'][0]['fid']); + db_query("UPDATE {comment_upload_files} SET filename = '%s', filepath = '%s', filemime = '%s', filesize = %d WHERE fid = %d", $file->filename, $file->filepath, $file->filemime, $file->filesize, $comment['files'][0]['fid']); } else { - $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, 0, $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, 0, $file->list, $file->description); - db_query("INSERT INTO {comment_files} (fid, nid, cid) VALUES (%d, %d, %d)", $file->fid, $comment['nid'], $comment['cid']); + $file->fid = db_next_id('{comment_upload_files}_fid'); + db_query("INSERT INTO {comment_upload_files} (fid, nid, cid, filename, filepath, filemime, filesize) VALUES (%d, %d, %d, '%s', '%s', '%s', %d)", $file->fid, $comment['nid'], $comment['cid'], $file->filename, $file->filepath, $file->filemime, $file->filesize); + db_query("INSERT INTO {comment_upload_file_revisions} (fid, vid, list, description) VALUES (%d, %d, %d, '%s')", $file->fid, 0, $file->list, $file->description); + } } unset($_SESSION['file_previews'][$fid]); @@ -221,7 +220,7 @@ function _comment_upload_save_files($com // Update existing revision else { - db_query("UPDATE {file_revisions} SET list = %d, description = '%s' WHERE fid = %d", $file->list, $file->description, $file->fid); + db_query("UPDATE {comment_upload_file_revisions} SET list = %d, description = '%s' WHERE fid = %d", $file->list, $file->description, $file->fid); } } } @@ -233,10 +232,9 @@ function _comment_upload_delete($cid) { } foreach ($files as $file) { file_delete($file->filepath); - db_query('DELETE FROM {files} WHERE fid = %d', $file->fid); - db_query('DELETE FROM {file_revisions} WHERE fid = %d', $file->fid); + db_query('DELETE FROM {comment_upload_files} WHERE fid = %d', $file->fid); + db_query('DELETE FROM {comment_upload_file_revisions} WHERE fid = %d', $file->fid); } - db_query('DELETE FROM {comment_files} WHERE cid = %d', $cid); } function theme_comment_attachment($file, $comment) { @@ -250,3 +248,28 @@ function theme_comment_attachment($file, } return $html; } + +function comment_upload_file_download($file) { + $file = file_create_path($file); + $result = db_query("SELECT f.* FROM {comment_upload_files} f WHERE filepath = '%s'", $file); + if ($file = db_fetch_object($result)) { + if (user_access('view uploaded files')) { + $node = node_load($file->nid); + if (node_access('view', $node)) { + $name = mime_header_encode($file->filename); + $type = mime_header_encode($file->filemime); + return array( + 'Content-Type: '. $type .'; name='. $name, + 'Content-Length: '. $file->filesize, + 'Expires: 0', 'Pragma: cache', 'Cache-Control: private' + ); + } + else { + return -1; + } + } + else { + return -1; + } + } +}