Commit 15203808 authored by Frank Bergmann's avatar Frank Bergmann

- More or less working - before changing to version management

parent c3442e52
......@@ -12,6 +12,19 @@ ad_library {
}
# ----------------------------------------------------------------------
# Constants
# ----------------------------------------------------------------------
ad_proc -public im_file_status_active {} { return 91000 }
ad_proc -public im_file_status_deleted {} { return 91002 }
ad_proc -public im_file_type_default {} { return 91100 }
ad_proc -public im_file_version_status_active {} { return 91200 }
ad_proc -public im_file_version_status_deleted {} { return 91202 }
ad_proc -public im_file_version_type_default {} { return 91300 }
# ----------------------------------------------------------------------
#
# ---------------------------------------------------------------------
......
......@@ -58,7 +58,9 @@ set sql "
ci.name as file_name,
cr.revision_id as version_id,
tree_level(ci.tree_sortkey) - :top_level as level,
-- encode(digest(cr.content, 'sha1'), 'hex') as sha1,
fv.version_sha1 as sha1,
fv.version_creation_date as creation_date,
fv.version_modification_date as modification_date,
(select count(*) from cr_items child where child.parent_id = ci.item_id) as num_children,
ci.*,
cr.*,
......@@ -75,6 +77,7 @@ set sql "
LEFT JOIN cr_extlinks ce ON ci.item_id = ce.extlink_id
LEFT JOIN cr_folders cf ON ci.item_id = cf.folder_id
LEFT JOIN cr_revisions cr ON ci.live_revision = cr.revision_id
LEFT OUTER JOIN im_file_versions fv ON (cr.revision_id = fv.version_id)
LEFT JOIN cr_mime_types cm ON cr.mime_type = cm.mime_type
JOIN acs_objects o ON ci.item_id = o.object_id
LEFT OUTER JOIN im_biz_object_tree_status bts ON (
......@@ -82,11 +85,11 @@ set sql "
bts.page_url = 'default' and
bts.user_id = :current_user_id
)
LEFT OUTER JOIN im_files f ON (ci.item_id = f.file_id)
where
parent_ci.item_id = :folder_id and
ci.tree_sortkey between parent_ci.tree_sortkey and tree_right(parent_ci.tree_sortkey)
and tree_level(ci.tree_sortkey) > :top_level
-- and tree_level(ci.tree_sortkey) <= :top_level+1
order by
ci.tree_sortkey
"
......@@ -104,7 +107,7 @@ db_multirow file_multirow file_list $sql {
# --------------------------------------------
# Get all the extra variables for a file ci_item:
# fraber 2018-08-22: No meta-variables yet...
set valid_vars [list level version_id type publish_date mime_type content_length sha1 title description]
set valid_vars [list level version_id type publish_date mime_type content_length sha1 title creation_date modification_date description]
set valid_vars [lsort -unique $valid_vars]
# needed to calculate sha1
......@@ -174,9 +177,10 @@ ${indent}\t\"expanded\":$expanded,
if {"" eq $version_id} {
set sha1 ""
} else {
set filename [db_string filename "select :storage_area_path || content from cr_revisions where revision_id = :version_id"]
set sha1 [string range [exec /usr/bin/sha1sum "$filename"] 0 39]
ns_log Debug "file-tree.json.tcl: version_id($version_id) filename($filename) sha1($sha1)"
if {"" eq $sha1} {
set filename [db_string filename "select :storage_area_path || content from cr_revisions where revision_id = :version_id"]
set sha1 [string range [exec /usr/bin/sha1sum "$filename"] 0 39]
}
}
foreach var $valid_vars {
......
......@@ -6,15 +6,15 @@ ad_page_contract {
@cvs-id $Id$
} {
project_id:integer
{ path ""}
path
upload_file:trim,optional
upload_file.tmpfile:tmpfile,optional
creation_date
modification_date
sha1
{ upload_comment "" }
{ title "" }
{ description "description" }
{ creation_date "" }
{ modification_date "" }
{ sha1 "" }
{ upload_comment "" }
}
set user_id [ad_conn user_id]
......@@ -25,11 +25,12 @@ set package_id [db_string package "select min(package_id) from apm_packages wher
ns_log Notice "upload: project_id=$project_id, path=$path, upload_file=$upload_file, tmp_file=${upload_file.tmpfile}"
set max_bytes [parameter::get_from_package_key -package_key "file-storage" -parameter "MaximumFileSize"]
if {$n_bytes > $max_bytes } {
if {1 || $n_bytes > $max_bytes } {
doc_return 507 "application/json" "{success: false, message: \"File is larger than the maximum size ($max_bytes bytes) allowed on this server\"}"
ad_script_abort
}
ns_log Notice "upload: im_rest_fs_folder_for_path -object_id $project_id -path $path"
set folder_id [im_rest_fs_folder_for_path -object_id $project_id -path $path]
if {"" eq $folder_id} {
# Folder path not found
......@@ -37,12 +38,15 @@ if {"" eq $folder_id} {
ad_script_abort
}
# ToDo: Check permissions
# ToDo: Check for SHA1 in previous versions and deduplicate if necessary
set mime_type [cr_filename_to_mime_type -create -- $upload_file]
set file_id [db_nextval "acs_object_id_seq"]
ns_log Notice "upload: folder_id=$folder_id, file_id=$file_id, mime_type=$mime_type"
set file_revision_id [fs::add_file \
set file_version_id [fs::add_file \
-name $upload_file \
-item_id $file_id \
-parent_id $folder_id \
......@@ -54,47 +58,47 @@ set file_revision_id [fs::add_file \
-package_id $package_id \
-mime_type $mime_type \
]
set file_id [db_string file_id "select item_id from cr_revisions where revision_id = :file_revision_id" -default ""]
set file_exists_p [db_string p "select count(*) from im_files where file_id = :file_id"]
ad_return_complaint 1 "file_id=$file_id, rev=$file_revision_id"
# ---------------------------------
# Fix the ]po[ object for cr_item
set file_id [db_string file_id "select item_id from cr_revisions where revision_id = :file_version_id" -default ""]
set file_exists_p [db_string p "select count(*) from im_files where file_id = :file_id"]
if {!$file_exists_p} {
db_dml insert_file "
insert into im_files (file_id, file_status_id, file_type_id)
values (:file_id, [im_file_status_active], [im_file_type_default])
"
} else {
# Nothing worth do update at the moment
}
insert into im_files (
file_id,
file_status_id,
file_type_id,
file_creation_date,
file_modification_date,
file_sha1,
file_size,
file_upload_comment
# ---------------------------------
# Fix the ]po[ object for cr_revision
set file_version_exists_p [db_string p "select count(*) from im_file_versions where version_id = :file_version_id"]
if {!$file_version_exists_p} {
db_dml insert_file_version "
insert into im_file_versions (
version_id,
version_status_id,
version_type_id,
version_creation_date,
version_modification_date,
version_sha1,
version_upload_comment
) values (
:file_id,
[im_file_status_active],
[im_file_type_default],
:creation_date,
:modification_date,
:sha1,
:n_bytes,
:file_version_id,
[im_file_version_status_active],
[im_file_version_type_default],
:creation_date,
:modification_date,
:sha1,
:upload_comment
)
"
} else {
ad_return_complaint 1 "file_version update not implemented yet"
}
db_dml file_metadata "
update acs_objects set
creation_date = :creation_date,
last_modified = :modification_date
where object_id = :file_revision_id
"
file delete ${upload_file.tmpfile}
doc_return 200 "application/json" "{success: true, message: \"Upload successful.\", data: {id: $file_id}}"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment