56a7bf68 |
1 | /** |
2 | * This file is part of Moodle - http://moodle.org/ |
3 | * File manager |
4 | * @copyright 1999 onwards Dongsheng Cai <dongsheng@moodle.com> |
5 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later |
6 | */ |
7 | |
8 | var fm_cfg = {}; |
9 | var fm_move_dlg = null; |
10 | var fm_rename_dlg = null; |
11 | var fm_mkdir_dlg = null; |
12 | |
13 | // initialize file manager |
14 | var filemanager = (function(){ |
15 | function _filemanager() { |
16 | this.init = function(client_id, options) { |
17 | this.client_id = client_id; |
56a7bf68 |
18 | html_compiler(client_id, options); |
1420162a |
19 | } |
20 | } |
56a7bf68 |
21 | return _filemanager; |
22 | })(); |
23 | |
24 | filemanager.url = moodle_cfg.wwwroot + '/files/files_ajax.php'; |
25 | filemanager.fileicon = moodle_cfg.wwwroot + '/pix/i/settings.gif'; |
26 | |
27 | // callback function for file picker |
28 | function filemanager_callback(obj) { |
29 | refresh_filemanager(obj.filepath, fm_cfg[obj.client_id]); |
30 | fm_cfg[obj.client_id].currentfiles++; |
31 | |
45fa433e |
32 | if (fm_cfg[obj.client_id].currentfiles>=fm_cfg[obj.client_id].maxfiles && fm_cfg[obj.client_id].maxfiles!=-1) { |
71588976 |
33 | var btn = document.getElementById('btnadd-'+obj.client_id); |
45fa433e |
34 | if (btn) |
35 | btn.style.display = 'none'; |
71588976 |
36 | } |
1420162a |
37 | } |
56a7bf68 |
38 | |
39 | // setup options for file picker |
40 | function fm_launch_filepicker(el_id, options) { |
1420162a |
41 | var picker = document.createElement('DIV'); |
56a7bf68 |
42 | picker.id = 'file-picker-'+options.client_id; |
1420162a |
43 | picker.className = 'file-picker'; |
44 | document.body.appendChild(picker); |
45 | var el=document.getElementById(el_id); |
46 | var params = {}; |
47 | params.env = 'filemanager'; |
56a7bf68 |
48 | params.itemid = options.itemid; |
49 | params.maxfiles = options.maxfiles; |
50 | params.maxbytes = options.maxbytes; |
51 | params.savepath = options.savepath; |
1420162a |
52 | params.target = el; |
56a7bf68 |
53 | params.callback = filemanager_callback; |
54 | var fp = open_filepicker(options.client_id, params); |
1420162a |
55 | return false; |
71588976 |
56 | } |
56a7bf68 |
57 | |
58 | // create a new folder in draft area |
4bb7f787 |
59 | function mkdir(e, client_id, itemid) { |
56a7bf68 |
60 | var mkdir_cb = { |
61 | success: function(o) { |
62 | var result = json_decode(o.responseText); |
63 | fm_mkdir_dlg.hide(); |
64 | refresh_filemanager(result.filepath, fm_cfg[client_id]); |
65 | } |
66 | } |
67 | var perform = function(e) { |
68 | var foldername = document.getElementById('fm-newname').value; |
69 | if (!foldername) { |
70 | return; |
71 | } |
72 | var params = []; |
73 | params['itemid'] = itemid; |
74 | params['newdirname'] = foldername; |
75 | params['sesskey'] = moodle_cfg.sesskey; |
76 | params['filepath'] = fm_cfg[client_id].currentpath; |
77 | var trans = YAHOO.util.Connect.asyncRequest('POST', |
78 | filemanager.url+'?action=mkdir', mkdir_cb, build_querystring(params)); |
79 | YAHOO.util.Event.preventDefault(e); |
80 | } |
81 | if (!document.getElementById('fm-mkdir-dlg')) { |
82 | var el = document.createElement('DIV'); |
83 | el.id = 'fm-mkdir-dlg'; |
84 | el.innerHTML = '<div class="hd">'+mstr.repository.entername+'</div><div class="bd"><input type="text" id="fm-newname" /></div>'; |
85 | document.body.appendChild(el); |
4bb7f787 |
86 | var x = YAHOO.util.Event.getPageX(e); |
87 | var y = YAHOO.util.Event.getPageY(e); |
56a7bf68 |
88 | fm_mkdir_dlg = new YAHOO.widget.Dialog("fm-mkdir-dlg", { |
89 | width: "300px", |
56a7bf68 |
90 | visible: true, |
4bb7f787 |
91 | x:y, |
92 | y:y, |
56a7bf68 |
93 | constraintoviewport : true |
94 | }); |
95 | |
96 | } |
97 | var buttons = [ { text:mstr.moodle.ok, handler:perform, isDefault:true }, |
98 | { text:mstr.moodle.cancel, handler:function(){this.cancel();}}]; |
99 | |
100 | fm_mkdir_dlg.cfg.queueProperty("buttons", buttons); |
101 | fm_mkdir_dlg.render(); |
102 | fm_mkdir_dlg.show(); |
103 | |
104 | var k1 = new YAHOO.util.KeyListener(document.getElementById('fm-mkdir-dlg'), {keys:13}, {fn:function(){perform();}, correctScope: true}); |
105 | k1.enable(); |
106 | |
107 | document.getElementById('fm-newname').value = ''; |
108 | } |
109 | |
110 | // generate html |
111 | function html_compiler(client_id, options) { |
112 | var list = options.list; |
113 | var breadcrumb = document.getElementById('fm-path-'+client_id); |
114 | var count = 0; |
115 | if (options.path) { |
116 | breadcrumb.innerHTML = ''; |
117 | var count = 0; |
118 | for(var p in options.path) { |
4bb7f787 |
119 | var sep = document.createElement('SPAN'); |
120 | sep.innerHTML = ' ▶ '; |
121 | if (count==0) { |
22f6b8df |
122 | sep.innerHTML = mstr.moodle.path + ': '; |
4bb7f787 |
123 | } else { |
124 | sep.innerHTML = ' ▶ '; |
125 | } |
56a7bf68 |
126 | count++; |
127 | var pathid = 'fm-path-node-'+client_id; |
128 | pathid += ('-'+count); |
129 | |
130 | var el = document.createElement('A'); |
131 | el.id = pathid; |
132 | el.innerHTML = options.path[p].name; |
133 | el.href = '###'; |
56a7bf68 |
134 | breadcrumb.appendChild(sep); |
135 | breadcrumb.appendChild(el); |
136 | |
137 | var args = {}; |
138 | args.itemid = options.itemid; |
139 | args.requestpath = options.path[p].path; |
140 | args.client_id = client_id; |
141 | |
142 | YAHOO.util.Event.addListener(pathid, 'click', click_breadcrumb, args); |
143 | } |
144 | } |
145 | var template = document.getElementById('fm-tmpl'); |
146 | var container = document.getElementById('filemanager-' + client_id); |
147 | var listhtml = '<ul id="draftfiles-'+client_id+'">'; |
148 | |
149 | var folder_ids = []; |
150 | |
151 | var file_ids = []; |
152 | var file_data = {}; |
153 | var folder_data = {}; |
154 | var html_ids = []; |
155 | var html_data = {}; |
156 | var zip_data = {}; |
157 | file_data.itemid = folder_data.itemid = zip_data.itemid = options.itemid; |
158 | file_data.client_id = folder_data.client_id = zip_data.client_id = options.client_id; |
159 | |
160 | var zip_ids = []; |
161 | var foldername_ids = []; |
162 | if (list.length == 0) { |
163 | // hide file browser and breadcrumb |
164 | container.style.display='none'; |
165 | if (options.path.length <= 1) { |
6f5e0852 |
166 | breadcrumb.style.display='none'; |
56a7bf68 |
167 | } |
168 | return; |
169 | } else { |
170 | container.style.display='block'; |
6f5e0852 |
171 | breadcrumb.style.display='block'; |
56a7bf68 |
172 | } |
173 | count = 0; |
174 | for(var i in list) { |
175 | count++; |
176 | var htmlid = 'fileitem-'+client_id+'-'+count; |
177 | var fileid = 'filename-'+client_id+'-'+count; |
178 | var action = 'action-' +client_id+'-'+count; |
179 | var html = template.innerHTML; |
180 | |
181 | html_ids.push(htmlid); |
182 | html_data[htmlid] = action; |
183 | |
184 | list[i].htmlid = htmlid; |
185 | list[i].fileid = fileid; |
186 | list[i].action = action; |
187 | var url = "###"; |
188 | var ismainfile = false; |
bc6f7235 |
189 | if (fm_cfg[client_id].mainfilename && (fm_cfg[client_id].mainfilename.toLowerCase() == list[i].fullname.toLowerCase())) { |
56a7bf68 |
190 | ismainfile = true; |
191 | } |
192 | switch (list[i].type) { |
193 | case 'folder': |
194 | foldername_ids.push(fileid); |
195 | folder_ids.push(action); |
196 | folder_data[action] = list[i]; |
197 | folder_data[fileid] = list[i]; |
198 | break; |
199 | case 'file': |
200 | file_ids.push(action); |
201 | file_data[action] = list[i]; |
202 | if (list[i].url) { |
203 | url = list[i].url; |
204 | } |
205 | break; |
206 | case 'zip': |
207 | zip_ids.push(action); |
208 | zip_data[action] = list[i]; |
209 | if (list[i].url) { |
210 | url = list[i].url; |
211 | } |
212 | break; |
213 | } |
6f5e0852 |
214 | var fullname = list[i].fullname; |
56a7bf68 |
215 | if (ismainfile) { |
216 | fullname = "<strong>"+list[i].fullname+"</strong> <img src='"+moodle_cfg.wwwroot+"/pix/i/tick_green_small.gif"+"' />"; |
217 | } |
218 | html = html.replace('___fullname___', '<a href="'+url+'" id="'+fileid+'"><img src="'+list[i].icon+'" /> ' + fullname + '</a>'); |
219 | html = html.replace('___action___', '<a style="display:none" href="###" id="'+action+'"><img alt="▶" src="'+filemanager.fileicon+'" /></a>'); |
220 | html = '<li id="'+htmlid+'">'+html+'</li>'; |
221 | listhtml += html; |
222 | } |
223 | container.innerHTML = (listhtml+'</ul>'); |
224 | |
225 | options.client_id=client_id; |
226 | |
227 | YAHOO.util.Event.addListener(file_ids, 'click', create_filemenu, file_data); |
228 | YAHOO.util.Event.addListener(folder_ids, 'click', create_foldermenu, folder_data); |
229 | YAHOO.util.Event.addListener(zip_ids, 'click', create_zipmenu, zip_data); |
230 | YAHOO.util.Event.addListener(html_ids, 'mouseover', fm_mouseover_menu, html_data); |
231 | YAHOO.util.Event.addListener(html_ids, 'mouseout', fm_mouseout_menu, html_data); |
232 | |
233 | YAHOO.util.Event.addListener(foldername_ids,'click', click_folder, folder_data); |
234 | } |
235 | |
236 | function fm_mouseover_menu(ev, args) { |
237 | this.style.backgroundColor = '#0066EE'; |
238 | var menu = args[this.id]; |
239 | menu = document.getElementById(menu); |
240 | menu.style.display = 'inline'; |
241 | } |
242 | |
243 | function fm_mouseout_menu(ev, args) { |
244 | this.style.backgroundColor = 'transparent'; |
245 | var menu = args[this.id]; |
246 | menu = document.getElementById(menu); |
247 | menu.style.display = 'none'; |
248 | } |
249 | |
250 | function click_breadcrumb(ev, args) { |
251 | var params = []; |
252 | params['itemid'] = args.itemid; |
253 | params['sesskey'] = moodle_cfg.sesskey; |
254 | params['filepath'] = args.requestpath; |
255 | this.cb = { |
256 | success: function(o) { |
257 | var data = json_decode(o.responseText); |
258 | for(var key in data) { |
259 | this.options[key] = data[key]; |
260 | } |
261 | html_compiler(this.client_id, this.options); |
262 | } |
263 | } |
264 | this.cb.options = args; |
265 | this.cb.client_id = args.client_id; |
266 | |
267 | fm_cfg[args.client_id].currentpath = args.requestpath; |
268 | fm_loading('filemanager-'+args.client_id, 'fm-prgressbar'); |
269 | var trans = YAHOO.util.Connect.asyncRequest('POST', |
270 | filemanager.url+'?action=list', this.cb, build_querystring(params)); |
271 | } |
272 | |
273 | function click_folder(ev, args) { |
274 | var file = args[this.id]; |
275 | refresh_filemanager(file.filepath, args); |
276 | } |
277 | |
278 | function refresh_filemanager(path, args) { |
279 | var params = []; |
280 | params['itemid'] = args.itemid; |
281 | params['filepath'] = path; |
282 | params['sesskey'] = moodle_cfg.sesskey; |
283 | this.cb = { |
284 | success: function(o) { |
285 | var data = json_decode(o.responseText); |
286 | for(var key in data) { |
287 | this.options[key] = data[key]; |
288 | } |
289 | html_compiler(this.client_id, this.options); |
290 | } |
291 | } |
292 | this.cb.options = args; |
293 | this.cb.client_id = args.client_id; |
294 | |
295 | fm_cfg[args.client_id].currentpath = params['filepath']; |
296 | fm_loading('filemanager-'+args.client_id, 'fm-prgressbar'); |
297 | var trans = YAHOO.util.Connect.asyncRequest('POST', |
298 | filemanager.url+'?action=list', this.cb, build_querystring(params)); |
299 | } |
300 | |
301 | function create_foldermenu(e, data) { |
302 | var file = data[this.id]; |
303 | this.zip = function(type, ev, obj) { |
304 | this.cb = { |
305 | success: function(o) { |
306 | var result = json_decode(o.responseText); |
307 | if (result) { |
308 | refresh_filemanager(result.filepath, fm_cfg[this.client_id]); |
309 | } |
310 | } |
311 | } |
312 | this.cb.client_id = obj.client_id; |
313 | this.cb.file = this.file; |
314 | var params = []; |
315 | params['itemid'] = obj.itemid; |
316 | params['filepath'] = this.file.filepath; |
317 | params['filename'] = '.'; |
318 | params['sesskey'] = moodle_cfg.sesskey; |
319 | fm_loading('filemanager-'+obj.client_id, 'fm-prgressbar'); |
320 | var trans = YAHOO.util.Connect.asyncRequest('POST', |
321 | filemanager.url+'?action=zip', this.cb, build_querystring(params)); |
322 | } |
323 | this.zip.file = file; |
324 | var menuitems = [ |
325 | {text: mstr.editor.zip, onclick: {fn: this.zip, obj: data, scope: this.zip}}, |
326 | ]; |
327 | create_menu(e, 'foldermenu', menuitems, file, data); |
328 | } |
329 | |
330 | function create_filemenu(e, data) { |
331 | var file = data[this.id]; |
332 | |
333 | var menuitems = [ |
334 | {text: mstr.moodle.download, url:file.url} |
335 | ]; |
336 | create_menu(e, 'filemenu', menuitems, file, data); |
337 | } |
338 | |
339 | function create_zipmenu(e, data) { |
340 | var file = data[this.id]; |
341 | this.unzip = function(type, ev, obj) { |
342 | this.cb = { |
343 | success:function(o) { |
344 | var result = json_decode(o.responseText); |
345 | if (result) { |
346 | refresh_filemanager(result.filepath, fm_cfg[this.client_id]); |
347 | } |
348 | } |
349 | } |
350 | this.cb.client_id = obj.client_id; |
351 | var params = []; |
352 | params['itemid'] = obj.itemid; |
353 | params['filepath'] = this.file.filepath; |
354 | params['filename'] = this.file.fullname; |
355 | params['sesskey'] = moodle_cfg.sesskey; |
356 | fm_loading('filemanager-'+obj.client_id, 'fm-prgressbar'); |
357 | var trans = YAHOO.util.Connect.asyncRequest('POST', |
358 | filemanager.url+'?action=unzip', this.cb, build_querystring(params)); |
359 | } |
360 | this.unzip.file = file; |
361 | |
362 | var menuitems = [ |
363 | {text: mstr.moodle.download, url:file.url}, |
364 | {text: mstr.moodle.unzip, onclick: {fn: this.unzip, obj: data, scope: this.unzip}} |
365 | ]; |
366 | create_menu(e, 'zipmenu', menuitems, file, data); |
367 | } |
368 | |
369 | function create_menu(ev, menuid, menuitems, file, options) { |
370 | var position = YAHOO.util.Event.getXY(ev); |
371 | var el = document.getElementById(menuid); |
372 | var menu = new YAHOO.widget.Menu(menuid, {xy:position}); |
373 | |
374 | this.remove = function(type, ev, obj) { |
375 | var args = {}; |
376 | args.message = mstr.repository.confirmdeletefile; |
377 | args.callback = function() { |
378 | var params = {}; |
379 | if (this.file.type == 'folder') { |
380 | params['filename'] = '.'; |
381 | params['filepath'] = this.file.fullname; |
382 | } else { |
383 | params['filename'] = this.file.fullname; |
384 | params['filepath'] = fm_cfg[this.client_id].currentpath; |
385 | } |
386 | params['itemid'] = this.itemid; |
387 | params['sesskey'] = moodle_cfg.sesskey; |
388 | fm_loading('filemanager-'+this.client_id, 'fm-prgressbar'); |
389 | var trans = YAHOO.util.Connect.asyncRequest('POST', |
390 | filemanager.url+'?action=delete', this.cb, build_querystring(params)); |
391 | } |
392 | var dlg = confirm_dialog(ev, args); |
393 | dlg.file = file; |
394 | dlg.client_id = obj.client_id; |
395 | dlg.itemid = obj.itemid; |
396 | dlg.cb = { |
397 | success: function(o) { |
398 | var result = json_decode(o.responseText); |
399 | if (!result) { |
400 | alert(mstr.error.cannotdeletefile); |
401 | } |
402 | fm_cfg[this.client_id].currentfiles--; |
403 | if (fm_cfg[this.client_id].currentfiles<fm_cfg[this.client_id].maxfiles) { |
404 | var btn = document.getElementById('btnadd-'+this.client_id); |
405 | btn.style.display = 'inline'; |
406 | } |
407 | refresh_filemanager(result.filepath, fm_cfg[this.client_id]); |
408 | } |
409 | } |
410 | dlg.cb.file = this.file; |
411 | dlg.cb.client_id = obj.client_id; |
412 | } |
413 | this.remove.file = file; |
414 | |
415 | this.rename = function(type, ev, obj) { |
416 | var file = this.file; |
417 | var rename_cb = { |
418 | success: function(o) { |
419 | var result = json_decode(o.responseText); |
420 | if (result) { |
421 | var el = document.getElementById(file.fileid); |
422 | el.innerHTML = this.newfilename; |
423 | // update filename |
424 | file.fullname = this.newfilename; |
425 | file.filepath = result.filepath; |
426 | fm_rename_dlg.hide(); |
427 | } |
428 | } |
429 | } |
430 | var perform = function(e) { |
431 | var newfilename = document.getElementById('fm-rename-input').value; |
432 | if (!newfilename) { |
433 | return; |
434 | } |
435 | |
436 | var action = ''; |
437 | var params = []; |
438 | params['itemid'] = obj.itemid; |
439 | if (file.type == 'folder') { |
440 | params['filepath'] = file.filepath; |
441 | params['filename'] = '.'; |
442 | action = 'renamedir'; |
443 | } else { |
444 | params['filepath'] = file.filepath; |
445 | params['filename'] = file.fullname; |
446 | action = 'rename'; |
447 | } |
448 | params['newfilename'] = newfilename; |
449 | |
450 | params['sesskey'] = moodle_cfg.sesskey; |
451 | rename_cb.newfilename = newfilename; |
452 | var trans = YAHOO.util.Connect.asyncRequest('POST', |
453 | filemanager.url+'?action='+action, rename_cb, build_querystring(params)); |
454 | } |
455 | |
456 | var scope = document.getElementById('fm-rename-dlg'); |
457 | if (!scope) { |
458 | var el = document.createElement('DIV'); |
459 | el.id = 'fm-rename-dlg'; |
460 | el.innerHTML = '<div class="hd">'+mstr.repository.enternewname+'</div><div class="bd"><input type="text" id="fm-rename-input" /></div>'; |
461 | document.body.appendChild(el); |
462 | fm_rename_dlg = new YAHOO.widget.Dialog("fm-rename-dlg", { |
463 | width: "300px", |
464 | fixedcenter: true, |
465 | visible: true, |
466 | constraintoviewport : true |
467 | }); |
468 | |
469 | } |
470 | var buttons = [ { text:mstr.moodle.rename, handler:perform, isDefault:true }, |
471 | { text:mstr.moodle.cancel, handler:function(){this.cancel();}}]; |
472 | |
473 | fm_rename_dlg.cfg.queueProperty("buttons", buttons); |
474 | fm_rename_dlg.render(); |
475 | fm_rename_dlg.show(); |
476 | |
477 | var k1 = new YAHOO.util.KeyListener(scope, {keys:13}, {fn:function(){perform();}, correctScope: true}); |
478 | k1.enable(); |
479 | |
480 | document.getElementById('fm-rename-input').value = file.fullname; |
481 | } |
482 | this.rename.file = file; |
483 | |
484 | this.move = function(type, ev, obj) { |
485 | var tree = new YAHOO.widget.TreeView("fm-tree"); |
486 | var file = this.file; |
487 | |
488 | this.asyncMove = function(e) { |
489 | if (!tree.targetpath) { |
490 | return; |
491 | } |
492 | var cb = { |
493 | success : function(o) { |
494 | var result = json_decode(o.responseText); |
495 | var p = '/'; |
496 | if (result) { |
497 | p = result.filepath; |
498 | } |
499 | refresh_filemanager(result.filepath, fm_cfg[obj.client_id]); |
500 | this.dlg.cancel(); |
501 | } |
502 | } |
503 | cb.dlg = this; |
504 | var params = {}; |
505 | if (file.type == 'folder') { |
506 | alert('Moving folder is not supported yet'); |
507 | return; |
508 | action = 'movedir'; |
509 | } else { |
510 | action = 'movefile'; |
511 | } |
512 | params['filepath'] = file.filepath; |
513 | params['filename'] = file.fullname; |
514 | params['itemid'] = obj.itemid; |
515 | params['sesskey'] = moodle_cfg.sesskey; |
516 | params['newfilepath'] = tree.targetpath; |
517 | fm_loading('filemanager-'+obj.client_id, 'fm-prgressbar'); |
518 | var trans = YAHOO.util.Connect.asyncRequest('POST', |
519 | filemanager.url+'?action='+action, cb, build_querystring(params)); |
520 | } |
521 | |
522 | var buttons = [ { text:mstr.moodle.move, handler:this.asyncMove, isDefault:true }, |
523 | { text:mstr.moodle.cancel, handler:function(){this.cancel();}}]; |
524 | |
525 | fm_move_dlg.cfg.queueProperty("buttons", buttons); |
526 | |
527 | |
528 | tree.subscribe("dblClickEvent", function(e) { |
529 | // update destidatoin folder |
530 | this.targetpath = e.node.data.path; |
531 | var el = document.getElementById('fm-move-div'); |
532 | el.innerHTML = '<strong>"' + this.targetpath + '"</strong> has been selected.'; |
533 | YAHOO.util.Event.preventDefault(e); |
534 | }); |
535 | |
536 | this.loadDataForNode = function(node, onCompleteCallback) { |
537 | this.cb = { |
538 | success: function(o) { |
539 | var data = json_decode(o.responseText); |
540 | data = data.children; |
541 | if (data.length == 0) { |
542 | // so it is empty |
543 | } else { |
544 | for (var i in data) { |
545 | var textnode = {label: data[i].fullname, path: data[i].filepath, itemid: this.itemid}; |
546 | var tmpNode = new YAHOO.widget.TextNode(textnode, node, false); |
547 | } |
548 | } |
549 | this.complete(); |
550 | } |
551 | } |
552 | var params = {}; |
553 | params['itemid'] = node.data.itemid; |
554 | params['filepath'] = node.data.path; |
555 | params['sesskey'] = moodle_cfg.sesskey; |
556 | var trans = YAHOO.util.Connect.asyncRequest('POST', |
557 | filemanager.url+'?action=dir', this.cb, build_querystring(params)); |
558 | this.cb.complete = onCompleteCallback; |
559 | this.cb.itemid = node.data.itemid; |
560 | } |
561 | this.loadDataForNode.itemid = obj.itemid; |
562 | |
563 | fm_move_dlg.subscribe('show', function(){ |
564 | |
565 | var el = document.getElementById('fm-move-div'); |
566 | el.innerHTML = '<div class="hd"></div><div class="bd"><div id="fm-move-div">'+mstr.repository.nopathselected+'</div><div id="fm-tree"></div></div>'; |
567 | |
568 | var rootNode = tree.getRoot(); |
569 | tree.setDynamicLoad(this.loadDataForNode); |
6f5e0852 |
570 | tree.removeChildren(rootNode); |
56a7bf68 |
571 | var textnode = {label: "Files", path: '/', itemid: obj.itemid}; |
572 | var tmpNode = new YAHOO.widget.TextNode(textnode, rootNode, true); |
573 | tree.draw(); |
574 | |
575 | }, this, true); |
576 | |
577 | fm_move_dlg.render(); |
578 | fm_move_dlg.show(); |
579 | } |
580 | this.move.file = file; |
581 | var shared_items = [ |
582 | {text: mstr.moodle.rename+'...', onclick: {fn: this.rename, obj: options, scope: this.rename}}, |
583 | {text: mstr.moodle.move+'...', onclick: {fn: this.move, obj: options, scope: this.move}}, |
584 | {text: mstr.moodle['delete']+'...', onclick: {fn: this.remove, obj: options, scope: this.remove}} |
585 | ]; |
586 | menu.addItems(menuitems); |
587 | menu.addItems(shared_items); |
588 | if (fm_cfg[options.client_id].mainfile && (file.type!='folder')) { |
589 | this.set_mainfile = function(type, ev, obj) { |
590 | if (fm_cfg[obj.client_id].mainfile) { |
bc6f7235 |
591 | var mainfile = document.getElementById(fm_cfg[obj.client_id].mainfile+'-id'); |
56a7bf68 |
592 | mainfile.value = this.file.filepath+this.file.fullname; |
bc6f7235 |
593 | document.getElementById(fm_cfg[obj.client_id].mainfile+'-label').innerHTML = mainfile.value; |
56a7bf68 |
594 | } |
595 | fm_cfg[obj.client_id].mainfilename = this.file.fullname; |
596 | refresh_filemanager(fm_cfg[obj.client_id].currentpath, fm_cfg[obj.client_id]); |
bc6f7235 |
597 | |
56a7bf68 |
598 | } |
599 | this.set_mainfile.file = file; |
600 | menu.addItem({text: mstr.resource.setmainfile, onclick: {fn: this.set_mainfile, obj: options, scope: this.set_mainfile}}); |
601 | } |
602 | menu.render(document.body); |
603 | menu.show(); |
604 | menu.subscribe('hide', function(){ |
605 | this.destroy(); |
606 | }); |
607 | } |
608 | |
609 | function setup_filebrowser(client_id, options) { |
610 | if (!options) { |
611 | options = {}; |
612 | } |
bc6f7235 |
613 | fm_cfg[client_id] = {}; |
614 | fm_cfg[client_id] = options; |
615 | fm_cfg[client_id].mainfile = options.mainfile; |
616 | fm_cfg[client_id].currentpath = '/'; |
6f5e0852 |
617 | fm_cfg[client_id].currentfiles = 0; |
56a7bf68 |
618 | // XXX: When editing existing folder, currentfiles shouldn't |
619 | // be 0 |
6f5e0852 |
620 | fm_cfg[client_id].maxfiles = options.maxfiles; |
bc6f7235 |
621 | if (options.mainfile) { |
622 | var mainfilename = document.getElementById(options.mainfile+'-id'); |
623 | if (mainfilename.value) { |
624 | var re = new RegExp(".*\/(.*)$", "i"); |
625 | var result = mainfilename.value.match(re); |
626 | document.getElementById(options.mainfile+'-label').innerHTML = mainfilename.value; |
627 | fm_cfg[client_id].mainfilename = result[1]; |
628 | } else { |
629 | fm_cfg[client_id].mainfilename = ''; |
630 | } |
631 | } |
632 | var fm = new filemanager(); |
633 | fm.init(client_id, options); |
56a7bf68 |
634 | setup_buttons(client_id, options); |
635 | } |
636 | |
637 | function setup_buttons(client_id, options) { |
638 | //var fileadd = new YAHOO.widget.Button("btnadd-"+client_id); |
639 | var fileadd = document.getElementById("btnadd-"+client_id);; |
640 | var foldercreate = document.getElementById("btncrt-"+client_id); |
641 | var folderdownload = document.getElementById("btndwn-"+client_id); |
642 | |
643 | var el = null; |
644 | if (!fm_move_dlg) { |
645 | el = document.createElement('DIV'); |
646 | el.id = 'fm-move-dlg'; |
647 | document.body.appendChild(el); |
648 | fm_move_dlg = new YAHOO.widget.Dialog("fm-move-dlg", { |
649 | width : "600px", |
650 | fixedcenter : true, |
651 | visible : false, |
652 | constraintoviewport : true |
653 | }); |
654 | } else { |
655 | el = document.getElementById('fm-move-div'); |
656 | } |
657 | |
658 | el.innerHTML = '<div class="hd"></div><div class="bd"><div id="fm-move-div">'+mstr.repository.nopathselected+'</div><div id="fm-tree"></div></div>'; |
659 | |
660 | fm_move_dlg.render(); |
661 | |
4bb7f787 |
662 | // if maxfiles == -1, the no limit |
663 | if (fm_cfg[client_id].filecount >= fm_cfg[client_id].maxfiles && fm_cfg[client_id].maxfiles!=-1) { |
664 | fileadd.style.display = 'none'; |
665 | } else { |
666 | fm_cfg[client_id].currentfiles = fm_cfg[client_id].filecount; |
667 | fileadd.onclick = function(e) { |
668 | this.options.savepath = this.options.currentpath; |
669 | fm_launch_filepicker(this.options.target, this.options); |
670 | } |
671 | fileadd.options = fm_cfg[client_id]; |
56a7bf68 |
672 | } |
be4487f4 |
673 | if (fm_cfg[client_id].subdirs) { |
4bb7f787 |
674 | foldercreate.onclick = function(e) { |
675 | mkdir(e, this.options.client_id, this.options.itemid); |
be4487f4 |
676 | } |
677 | foldercreate.options = fm_cfg[client_id]; |
678 | } else { |
679 | foldercreate.style.display = 'none'; |
56a7bf68 |
680 | } |
56a7bf68 |
681 | folderdownload.onclick = function() { |
682 | var cb = { |
683 | success:function(o) { |
684 | var result = json_decode(o.responseText); |
685 | refresh_filemanager(result.filepath, fm_cfg[this.client_id]); |
6f5e0852 |
686 | var win = window.open(result.fileurl, 'fm-download-folder'); |
56a7bf68 |
687 | if (!win) { |
688 | alert(mstr.repository.popupblockeddownload); |
689 | } |
690 | } |
691 | }; |
692 | cb.client_id = this.options.client_id; |
693 | var params = []; |
694 | params['itemid'] = this.options.itemid; |
695 | params['sesskey'] = moodle_cfg.sesskey; |
696 | params['filepath'] = this.options.currentpath; |
697 | var trans = YAHOO.util.Connect.asyncRequest('POST', |
698 | filemanager.url+'?action=downloaddir', cb, build_querystring(params)); |
699 | } |
700 | folderdownload.options = fm_cfg[client_id]; |
701 | } |
702 | |
703 | function fm_loading(container, id) { |
704 | |
705 | if (!document.getElementById(id)) { |
706 | var el = document.createElement('DIV'); |
707 | el.id = id; |
708 | el.style.backgroundColor = "white"; |
709 | var container = document.getElementById(container); |
710 | container.innerHTML = ''; |
711 | container.appendChild(el); |
712 | } |
713 | |
714 | var loading = new YAHOO.widget.Module(id, {visible:false}); |
715 | loading.setBody('<div style="text-align:center"><img alt="'+mstr.repository.loading+'" src="'+moodle_cfg.wwwroot+'/pix/i/progressbar.gif" /></div>'); |
716 | loading.render(); |
717 | loading.show(); |
718 | |
719 | return loading; |
720 | } |