antoniop
committed
on 18 Jun 21
file download-zip-2.tcl was initially added on branch oacs-5-10.
openacs-4/.../file-storage/www/file-add.tcl (+20 -2)
21 21     title:onevalue
22 22     lock_title_p:onevalue
23 23     instructions:onevalue
24 24 } -validate {
25 25     file_id_or_folder_id {
26 26         if {[info exists file_id] && ![info exists folder_id]} {
27 27             set folder_id [content::item::get_parent_folder -item_id $file_id]
28 28             if {$folder_id eq ""} {
29 29                 ad_complain "The specified file_id is not valid."
30 30                 return
31 31             }
32 32         }
33 33         if {![info exists folder_id] || ![fs_folder_p $folder_id]} {
34 34             ad_complain "The specified parent folder is not valid."
35 35         }
36 36     }
37 37     max_size -requires {upload_file} {
38 38         set n_bytes [file size ${upload_file.tmpfile}]
39 39         set max_bytes [fs::max_upload_size]
40 40         if { $n_bytes > $max_bytes } {
41               ad_complain "Your file is larger than the maximum file size allowed on this system ([util_commify_number $max_bytes] bytes)"
  41             set number_of_bytes $max_bytes ; # needed by message key
  42             ad_complain [_ file-storage.lt_Your_file_is_larger_t]
42 43         }
43 44     }
44 45 }
45 46
46 47 set user_id [ad_conn user_id]
47 48 set package_id [ad_conn package_id]
48 49 set unpack_binary [util::which [string trim [parameter::get -parameter UnzipBinary]]]
49 50 set unpack_available_p [expr {$unpack_binary ne ""}]
50 51
51 52 # check for write permission on the folder or item
52 53 permission::require_permission \
53 54     -object_id $folder_id \
54 55     -party_id $user_id \
55 56     -privilege "write"
56 57
57 58 if {![ad_form_new_p -key file_id]} {
58 59     permission::require_permission \
59 60         -object_id $file_id \
60 61         -party_id $user_id \
61 62         -privilege "write"
62 63     set page_title [_ file-storage.Add_Revision]
63 64 } else {
64 65     set page_title [_ file-storage.Add_File]
65 66 }
66 67 set context [fs_context_bar_list -final $page_title $folder_id]
67 68
  69 set max_upload_size [fs::max_upload_size]
68 70 ad_form -html { enctype multipart/form-data } \
69 71     -export { folder_id lock_title_p name return_url } \
70 72     -form {
71 73         file_id:key
72 74         {upload_file:file
73 75             {label "#file-storage.Upload_a_file#"}
74 76             {html "size 30"}
  77             {help_text "[_ file-storage.Upload_Limit]: $max_upload_size"}
75 78         }
76 79     }
77 80
  81 # Try to prevent upload of too big files from the client side. Saves
  82 # us some useless requests and gives a quicker feedback to the user.
  83 set number_of_bytes $max_upload_size ; # needed by message key
  84 set file_too_big_msg [_ file-storage.lt_Your_file_is_larger_t]
  85 template::add_event_listener -event submit -id file-add \
  86     -preventdefault=false -script [subst -nocommands {
  87     var uploadFileField = this.elements.namedItem('upload_file');
  88     var uploadFile = uploadFileField.files[0];
  89     if (uploadFile != undefined &&
  90         uploadFile.size > $max_upload_size) {
  91         alert('$file_too_big_msg');
  92         event.preventDefault();
  93     }
  94 }]
  95
78 96 if {[parameter::get -parameter AllowTextEdit -default 0]} {
79 97     if {[ad_form_new_p -key file_id]} {
80 98         # To allow the creation of files
81 99         ad_form -extend -form {
82 100             {content_body:richtext(richtext),optional
83 101                 {label "Create a file"}
84 102                 {html "rows 20 cols 70" }
85 103                 {htmlarea_p 1}
86 104             }
87 105         }
88 106     } else {
89 107         # To make content editable
90 108         set mime_type [db_string get_mime_type {
91 109             select mime_type from fs_objects where object_id = :file_id
92 110         }]
93 111         if {$mime_type eq "text/html"} {
94 112             ad_form -extend -form {
95 113                 {edit_content:richtext(richtext),optional
96 114                     {label "Content"}
97 115                     {html "rows 20 cols 70" }