00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 @require_once('config.inc.php');
00014 require_once('html.inc.php');
00015 require_once('modules.inc.php');
00016
00017 require_once('util.inc.php');
00018
00019
00020
00021
00022
00023
00024 function download_alter_render_early($args)
00025 {
00026 $elem = &$args['elem'];
00027 $obj = $args['obj'];
00028 if (!elem_has_class($elem, 'download')) {
00029 return false;
00030 }
00031
00032 if ($args['edit']) {
00033 elem_attr($elem, 'title', 'this is '.$obj['name'].', original file name was '.$obj['download-file']);
00034 } else {
00035 elem_attr($elem, 'title', 'download file');
00036 }
00037
00038 $a = expl('.', $obj['download-file']);
00039 if (1 < count($a)) {
00040 $v = elem('div');
00041 elem_add_class($v, 'download-ext');
00042 elem_val($v, htmlspecialchars(array_pop($a), ENT_NOQUOTES, 'UTF-8'));
00043 elem_append($elem, $v);
00044 }
00045
00046 return true;
00047 }
00048
00049
00050 function download_alter_render_late($args)
00051 {
00052 $elem = $args['elem'];
00053 $html = &$args['html'];
00054 $obj = $args['obj'];
00055 if (!elem_has_class($elem, 'download')) {
00056 return false;
00057 }
00058
00059 if (!$args['edit'] && (!isset($obj['download-public']) || $obj['download-public'] != 'public')) {
00060
00061 $html = '';
00062 } elseif (!$args['edit']) {
00063
00064 html_add_css(base_url().'modules/download/download.css');
00065 }
00066
00067 return true;
00068 }
00069
00070
00071 function download_delete_object($args)
00072 {
00073 $obj = $args['obj'];
00074 if (!isset($obj['type']) || $obj['type'] != 'download') {
00075 return false;
00076 }
00077
00078 load_modules('glue');
00079 $a = expl('.', $obj['name']);
00080 $ret = delete_upload(array('pagename'=>$a[0], 'file'=>$obj['download-file'], 'max_cnt'=>1));
00081 if ($ret['#error']) {
00082 log_error('error', 'upload_delete_object: delete_upload returned '.quot($ret['#error']));
00083 }
00084 }
00085
00086
00087 function download_has_reference($args)
00088 {
00089 $obj = $args['obj'];
00090 if (!isset($obj['type']) || $obj['type'] != 'download') {
00091 return false;
00092 }
00093
00094
00095 if (@is_link(CONTENT_DIR.'/'.str_replace('.', '/', $obj['name']))) {
00096 return false;
00097 }
00098
00099 if ($obj['download-file'] != $args['file']) {
00100 return false;
00101 } else {
00102 return true;
00103 }
00104 }
00105
00106
00107 function download_render_object($args)
00108 {
00109 $obj = $args['obj'];
00110 if (!isset($obj['type']) || $obj['type'] != 'download') {
00111 return false;
00112 }
00113
00114 $e = elem('div');
00115 elem_attr($e, 'id', $obj['name']);
00116 elem_add_class($e, 'download');
00117 elem_add_class($e, 'object');
00118
00119
00120 invoke_hook_first('alter_render_early', 'download', array('obj'=>$obj, 'elem'=>&$e, 'edit'=>$args['edit']));
00121 $html = elem_finalize($e);
00122 invoke_hook_last('alter_render_late', 'download', array('obj'=>$obj, 'html'=>&$html, 'elem'=>$e, 'edit'=>$args['edit']));
00123
00124 if (!$args['edit']) {
00125
00126 if (SHORT_URLS) {
00127 $link = base_url().urlencode($obj['name']).'&download=1';
00128 } else {
00129 $link = base_url().'?'.urlencode($obj['name']).'&download=1';
00130 }
00131 $html = '<a href="'.htmlspecialchars($link, ENT_COMPAT, 'UTF-8').'">'."\n\t".str_replace("\n", "\n\t", $html)."\n".'</a>'."\n";
00132 }
00133
00134 return $html;
00135 }
00136
00137
00138 function download_render_page_early($args)
00139 {
00140 if ($args['edit']) {
00141 if (USE_MIN_FILES) {
00142 html_add_js(base_url().'modules/download/download-edit.min.js');
00143 } else {
00144 html_add_js(base_url().'modules/download/download-edit.js');
00145 }
00146 html_add_css(base_url().'modules/download/download.css');
00147 }
00148 }
00149
00150
00151 function download_save_state($args)
00152 {
00153 $elem = $args['elem'];
00154 $obj = $args['obj'];
00155 if (array_shift(elem_classes($elem)) != 'download') {
00156 return false;
00157 }
00158
00159
00160 $obj['type'] = 'download';
00161 $obj['module'] = 'download';
00162
00163
00164 invoke_hook('alter_save', array('obj'=>&$obj, 'elem'=>$elem));
00165
00166
00167 if (isset($obj['object-width'])) {
00168 unset($obj['object-width']);
00169 }
00170 if (isset($obj['object-height'])) {
00171 unset($obj['object-height']);
00172 }
00173
00174 load_modules('glue');
00175 $ret = save_object($obj);
00176 if ($ret['#error']) {
00177 log_msg('error', 'download_save_state: save_object returned '.quot($ret['#data']));
00178 return false;
00179 } else {
00180 return true;
00181 }
00182 }
00183
00184
00185 function download_serve_resource($args)
00186 {
00187 $obj = $args['obj'];
00188 if (!isset($obj['type']) || $obj['type'] != 'download') {
00189 return false;
00190 }
00191
00192 $a = expl('.', $obj['name']);
00193
00194
00195 if ((isset($obj['download-public']) && $obj['download-public'] == 'public') || is_auth()) {
00196 serve_file(CONTENT_DIR.'/'.$a[0].'/shared/'.$obj['download-file'], $args['dl'], $obj['download-file-mime']);
00197 } else if (!is_auth()) {
00198 prompt_auth(true);
00199 }
00200 }
00201
00202
00203 function download_snapshot_symlink($args)
00204 {
00205 $obj = $args['obj'];
00206 if (!isset($obj['type']) || $obj['type'] != 'download') {
00207 return false;
00208 }
00209
00210 $dest_dir = CONTENT_DIR.'/'.array_shift(expl('.', $obj['name'])).'/shared';
00211 $src_file = CONTENT_DIR.'/'.array_shift(expl('.', $args['origin'])).'/shared/'.$obj['download-file'];
00212
00213 if (($f = dir_has_same_file($dest_dir, $src_file)) !== false) {
00214 $obj['download-file'] = $f;
00215 } else {
00216
00217 $dest_file = $dest_dir.'/'.unique_filename($dest_dir, $src_file);
00218 $m = umask(0111);
00219 if (!(@copy($src_file, $dest_file))) {
00220 umask($m);
00221 log_msg('error', 'download_snapshot_symlink: error copying referenced file '.quot($src_file).' to '.quot($dest_file));
00222 return false;
00223 }
00224 umask($m);
00225 $obj['download-file'] = basename($dest_file);
00226 log_msg('info', 'download_snapshot_symlink: copied referenced file to '.quot($dest_file));
00227 }
00228 $ret = save_object($obj);
00229 if ($ret['#error']) {
00230 log_msg('error', 'download_snapshot_symlink: error saving object '.quot($obj['name']));
00231 return false;
00232 } else {
00233 return true;
00234 }
00235 }
00236
00237
00238 function download_upload_fallback($args)
00239 {
00240
00241 load_modules('glue');
00242
00243 $obj = create_object($args);
00244 if ($obj['#error']) {
00245 return false;
00246 } else {
00247 $obj = $obj['#data'];
00248 }
00249 $obj['type'] = 'download';
00250 $obj['module'] = 'download';
00251 $obj['download-file'] = $args['file'];
00252 $obj['download-file-mime'] = $args['mime'];
00253 save_object($obj);
00254
00255 $ret = render_object(array('name'=>$obj['name'], 'edit'=>true));
00256 if ($ret['#error']) {
00257 return false;
00258 } else {
00259 return $ret['#data'];
00260 }
00261 }