Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
intranet-rest-fs-openacs
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
project-open
intranet-rest-fs-openacs
Commits
15203808
Commit
15203808
authored
Jan 21, 2019
by
Frank Bergmann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- More or less working - before changing to version management
parent
c3442e52
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
65 additions
and
44 deletions
+65
-44
intranet-rest-fs-openacs-procs.tcl
tcl/intranet-rest-fs-openacs-procs.tcl
+13
-0
file-tree.json.tcl
www/file-tree.json.tcl
+10
-6
upload.tcl
www/upload.tcl
+42
-38
No files found.
tcl/intranet-rest-fs-openacs-procs.tcl
View file @
15203808
...
...
@@ -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
}
# ----------------------------------------------------------------------
#
# ---------------------------------------------------------------------
...
...
www/file-tree.json.tcl
View file @
15203808
...
...
@@ -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
{
...
...
www/upload.tcl
View file @
15203808
...
...
@@ -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_
revi
sion_id
[
fs::add_file
\
set
file_
ver
sion_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}}"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment