Changeset 7414 for trunk/prototype/modules/mail/js/foldertree.js
- Timestamp:
- 10/11/12 18:14:36 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/prototype/modules/mail/js/foldertree.js
r7091 r7414 4 4 var cp_tree1; 5 5 var cp_tree2; 6 //Marcosw inÃcio 7 var cp_tree3; 8 //Marcosw fim 9 var mail_archive_url; 6 10 function unorphanize(root, element) { 7 8 9 10 11 12 13 14 15 16 17 18 11 var ok = false; 12 var f = 0; 13 for (var i=0; i<root.length; i++) { 14 if (root[i].id == element.parentFolder) { 15 element.children = new Array(); 16 root[i].children.push(element); 17 return true; 18 } else if (ok = unorphanize(root[i].children, element)) { 19 break; 20 } 21 } 22 return ok; 19 23 } 20 24 25 function mount_children_localfolders_list(folder){ 26 folder.children = new Array(); 27 folder.id_search = folder.id; 28 folder.id = 'local_messages_'+folder.id, 29 folder.commonName = folder.name, 30 folder.parentId = folder.parentid, 31 folder.type = 'localFolder', 32 folder.name = folder.id, 33 folder.messageCount = { 34 total: folder.messages, 35 unseen: folder.unseen 36 } 37 38 if(folder.haschild){ 39 expresso_mail_archive.getFoldersList(folder.id_search); 40 folder.children = expresso_mail_archive.folders; 41 42 for(var i = 0; i < folder.children.length; i++){ 43 mount_children_localfolders_list(folder.children[i]); 44 } 45 46 } 47 } 48 21 49 function count_unseen_children(folder){ 22 if(folder.children.length){ 23 for(var i=0; i< folder.children.length; i++){ 24 if(folder.children[i].children.length) 25 folder.children[i]['children_unseen'] = (folder.children[i]['children_unseen'] ? folder.children[i]['children_unseen'] : 0) + count_unseen_children(folder.children[i]); 26 27 folder['children_unseen'] = (folder['children_unseen'] ? folder['children_unseen'] : 0)+ (folder.children[i]['children_unseen'] ? folder.children[i]['children_unseen'] : 0) + parseInt(folder.children[i].messageCount.unseen); 28 } 29 return folder['children_unseen']; 30 }else{ 31 return parseInt(folder.messageCount.unseen); 32 } 50 51 if(folder.children.length){ 52 for(var i=0; i< folder.children.length; i++){ 53 54 if(folder.children[i].children.length) 55 folder.children[i]['children_unseen'] = (folder.children[i]['children_unseen'] ? folder.children[i]['children_unseen'] : 0) + count_unseen_children(folder.children[i]); 56 57 folder['children_unseen'] = (folder['children_unseen'] ? folder['children_unseen'] : 0)+ (folder.children[i]['children_unseen'] ? folder.children[i]['children_unseen'] : 0) + parseInt(folder.children[i].messageCount.unseen); 58 } 59 return folder['children_unseen']; 60 } else { 61 return parseInt(folder.messageCount.unseen); 62 } 33 63 } 34 64 35 65 function valid_tabs(children_of_this_folder, folder_to_move){ 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 66 var borders_open = $("#border_tr").children(); 67 68 var error = false; 69 for(var i = 1; i <= borders_open.length -2; i ++){ 70 //VERIFICA A CADA FILHO DA PASTA SE ESTA eventNSAGEM E DESTA PASTA 71 $.each(children_of_this_folder, function(index, value){ 72 if($(children_of_this_folder[index]).attr('id') == openTab.imapBox[$(borders_open[i]).find("input[type=hidden]").attr("name")]){ 73 error = true; 74 write_msg(get_lang("One or more messages from any sub-folder are open")); 75 return error; 76 77 } 78 }); 79 if(error){ 80 return error; 81 } 82 //VERIFICA SE EXISTE NA PASTA A SER MOVIDA 83 if(openTab.imapBox[$(borders_open[i]).find("input[type=hidden]").attr("name")] == folder_to_move){ 84 error = true; 85 write_msg(get_lang("One or more messages from this folder are open")); 86 return error; 87 } 88 } 59 89 } 60 90 61 91 function draw_new_tree_folder(callback){ 62 63 var folders = DataLayer.get("folder", true); 64 65 if(!selected){ 66 selected = "INBOX"; 67 } 68 /* 69 if( folders ) 70 { 71 folders = $.map( folders, function( folder ){ 72 return { 73 id: folder.folder_id, 74 commonName: folder.folder_name, 75 parentFolder: folder.folder_parent === "root" ? "" : folder.folder_parent, 76 messageCount: { total : '', unseen : '0' } 77 }; 78 }); 79 } 80 else 81 folders = DataLayer.get("folder", true); 82 */ 83 var tree1 = new Array(); 84 var tree2 = new Array(); 85 var tree3 = new Array(); 86 for (var i=0; i<folders.length; i++) { 87 if (/^INBOX/.test(folders[i].id)) { 88 if (!unorphanize(tree1, folders[i])) { 89 folders[i].children = new Array(); 90 tree1.push(folders[i]); 91 } 92 } 93 else if (/^user/.test(folders[i].id)) { 94 if (!unorphanize(tree2, folders[i])) { 95 folders[i].children = new Array(); 96 tree2.push(folders[i]); 97 } 98 } 99 else if (/^local_messages/.test(folders[i].id)) { 100 if (!unorphanize(tree3, folders[i])) { 101 folders[i].children = new Array(); 102 tree3.push(folders[i]); 103 } 104 } 105 } 106 107 for(var i =0; i<tree1.length; i++){ 108 count_unseen_children(tree1[i]); 109 } 110 for(var i =0; i<tree2.length; i++){ 111 count_unseen_children(tree2[i]); 112 } 113 for(var i =0; i<tree3.length; i++){ 114 count_unseen_children(tree3[i]); 115 } 116 cp_tree1 = tree1; 117 cp_tree2 = tree2; 118 var shared_acls = {}; 119 120 $.each(cp_tree2, function(index, value){ 121 shared_acls[value.id] = value.acl_share; 122 }); 123 124 $("#content_folders").removeClass("menu-degrade").parent().removeClass("image-menu"); 125 var html = DataLayer.render('../prototype/modules/mail/templates/detailedfoldertree.ejs', {folders: [tree1, tree2, tree3]}); 126 var folders_html = $("#content_folders").html(html).find(".mainfoldertree").treeview({ 127 persist: "cookie", 128 animated: "fast" 129 }).find(".folder").unbind("click").click(function(event){ 130 131 // MUDANÇA DE PASTAS! 132 var target = $(this); 133 134 if($(".folders-loading").length) 135 return; 136 137 if($(event.target).parent().is(".float-menu")) 138 return; 139 140 if( target.is('.collapsable-hitarea, .expandable-hitarea, .lastCollapsable-hitarea, .lastExpandable-hitarea, .treeview ,.folder_unseen,.ui-icon, .float-menu, .new_folder, .folders-loading, .head_folder, .shared-folders') ) 141 return; 142 143 if( target.parent().find(".new_folder").length) 144 return; 145 146 if( !target.attr('id') ) 147 target = target.parent(); 148 if (target[0] == $(".mainfoldertree")[0]) return; 149 var uiId = target.attr('id'); 150 var child = target.find('.folder'); 151 152 if(!target.is('.mainfoldertree > .expandable-hitarea, .mainfoldertree > .collapsable-hitarea')){ 153 $('.filetree span.folder.selected').removeClass('selected'); 154 $(target).children('.folder').addClass('selected'); 155 } 156 $(this).addClass("folders-loading"); 157 selected = target.attr('id'); 158 change_folder(target.attr('id'), child.attr('title')); 159 160 $.ajax({ 161 url : "controller.php?"+ $.param( { action: "$this.imap_functions.get_folders_list", folder: target.attr('id') } ), 162 success : function(data){ 163 data = connector.unserialize(data); 164 165 if(data) 166 build_quota(data); 167 } 168 }); 169 170 }).filter('.followup-messages').click(function(event, ui){ 171 search_emails("UNDELETED KEYWORD \"$Followupflagged\""); 172 }).end().end(); 173 174 folders_html.find('[id="'+selected+'"]').children().addClass("selected"); 175 $(".folder").not(".head_folder").not(".shared-folders").parent().find(".folder").not(".head_folder,.inbox,.drafts,.sent,.spam,.trash").draggable({ 176 // DRAG DE PASTAS 177 start : function(){ 178 $(this).css("color", "gray"); 179 }, 180 stop : function(){ 181 $(this).css("color", ""); 182 }, 183 revert: "invalid", 184 helper: function(event){ 185 if($.trim(($(this).text().split("["))[0]).length > 18) 186 return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (($(this).text().split("["))[0]).substring(0,18) + "...", type: "folder"})); 187 return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (($(this).text().split("["))[0]), type: "folder"})); 188 }, 189 delay: 150, 190 refreshPositions: true, 191 zIndex : 2700, 192 //scroll: true, 193 //scrollSensitivity: 100, 194 //scrollSpeed: 100, 195 containment: "#divAppbox" 196 }).end().droppable({ 197 //DROP DE PASTAS 198 over : function(a, b){ 199 //INICIO : SE A PASTA CONTER FILHAS EXPANDE 200 over = $(this); 201 $(this).addClass("folder-over"); 202 if(($(this)[0] != $(this).parent().find(".head_folder")[0])) 203 if($(this).prev()[0]) 204 if($(this).parent().find(".expandable-hitarea")[0] == $(this).prev()[0]){ 205 setTimeout(function(){ 206 if(over.hasClass("folder-over")) 207 over.prev().trigger("click"); 208 }, 500); 209 210 } 211 //FIM : SE A PASTA CONTER FILHAS EXPANDE 212 213 //SETA BORDA EM VOLTA DA PASTA 214 }, 215 out : function(){ 216 //RETIRA BORDA EM VOLTA DA PASTA 217 $(this).removeClass("folder-over"); 218 }, 219 drop : function(event, ui){ 220 $(this).removeClass("folder-over"); 221 if($(this).parent().attr('id') == undefined){ 222 var folder_to = 'INBOX'; 223 var to_folder_title = get_lang("Inbox"); 224 }else{ 225 var folder_to = $(this).parent().attr('id'); 226 var to_folder_title = $(this).attr('title'); 227 } 228 var folder_to_move = ui.draggable.parent().attr('id'); 229 var border_id = ui.draggable.find("input[type=hidden]").attr("name"); 230 // eventnsagens : SE O DROP VIER DA LISTA DE eventNSAGENS : 231 if(folder_to_move == "tbody_box"){ 232 move_msgs2(get_current_folder(), 'selected', 0, folder_to, to_folder_title,true); 233 return refresh(); 234 } 235 //SE FOR DE UMA PESQUISA RAPIDA 236 else if(ui.draggable.parents('[id^="content_id_"]')[0]){ 237 move_search_msgs("content_id_"+border_id, folder_to, to_folder_title); 238 return refresh(); 239 } 240 // eventnsagens : SE O DROP VIER DE UMA ABA ABERTA 241 else if(folder_to_move == "border_tr"){ 242 var id_msg = border_id.split("_")[0]; 243 folder = $("#input_folder_"+border_id+"_r")[0] ? $("#input_folder_"+border_id+"_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id]:get_current_folder()); 244 alternate_border(border_id); 245 move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title,true); 246 return refresh(); 247 } 248 // SE O DROP VIER DA LISTA DE PASTAS 249 else{ 250 var folder_to_exist = folder_to_move.split(cyrus_delimiter); 251 folder_to_exist = folder_to+cyrus_delimiter+folder_to_exist[folder_to_exist.length-1]; 252 253 //VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS 254 255 if(valid_tabs(ui.draggable.parent().find("li"), folder_to_move)){ 256 return; 257 } 258 //FIM : VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS; 259 260 // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA PARA O eventSMO LOCAL 261 if(folder_to_exist == folder_to_move){ 262 return write_msg(get_lang("Thie folder is already in this place")); 263 } 264 265 // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA ABERTA NO momentO 266 if(folder_to_move == get_current_folder()){ 267 return write_msg(get_lang("It's not possible move this folder, because it is being used in the moment!")); 268 } 269 270 // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA FILHA DA PASTA ABERTA NO momentO 271 if(ui.draggable.parent().find(".selected")[0]){ 272 return write_msg(get_lang("It's not possible move this folder, because its subfolder is being used in the moment!")); 273 } 274 275 // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA PAI PARA DENTRO DE UMA FILHA 276 if(ui.draggable.parent().find('[id="'+folder_to+'"]')[0]){ 277 return write_msg(get_lang("It's not possible to move this folder to its subfolders!")); 278 } 279 280 if($('[id="'+folder_to_exist+'"]').length){ 281 return write_msg(get_lang("Can not move this folder to this location, because the target has already a folder with this name")); 282 } 283 284 $(this).addClass("folders-loading"); 285 286 $.ajax({ 287 url : "controller.php?"+ $.param( { action: "$this.imap_functions.move_folder", folder_to_move: folder_to_move, folder_to: folder_to } ), 288 success : function(data){ 289 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 290 data = connector.unserialize(data); 291 if(data == "Permission denied"){ 292 write_msg(get_lang("Permission denied")); 293 }else if(data){ 294 write_msg(get_lang("The folder was successfully moved")); 295 } 296 else{ 297 write_msg(get_lang("ERROR moving your folder.")); 298 } 299 } 300 }); 301 } 302 } 303 }); 304 $(".folder").not(".shared-folders").parent().find(".folder").hover( 305 function(){ 306 //CASO A LI NÃO TENHA UM eventNU FLUTUANTE AINDA, O eventNU É ADICIONADO! 307 if(!$(this).children(":last").hasClass("float-menu") && !$(this).children(":last").hasClass("new_folder")){ 308 var folder_ = $(this); 309 var folder_name; 310 var shared = { 311 head : false, 312 valid : false 313 }; 314 if(folder_.parent().attr('id')){ 315 folder_name = folder_.parent().attr('id').split(cyrus_delimiter); 316 folder_name = folder_name[folder_name.length -1]; 317 shared.valid = folder_.parent().attr('id').search("user/") == 0 ? true : false; 318 }else 319 folder_name = "Root"; 320 321 if(shared.valid){ 322 shared.head = folder_.parent().attr('id').split(cyrus_delimiter).length == 2 ? true : false; 323 var folder_name_parts = folder_.parent().attr('id').split(cyrus_delimiter); 324 var acls = shared_acls[folder_name_parts[0]+cyrus_delimiter+folder_name_parts[1]]; 325 326 } 327 328 html = DataLayer.render("../prototype/modules/mail/templates/float_folder_menu.ejs", {name_folder : folder_name, flag : shared, acl : acls}); 329 //FUNÇÃO DO eventNU FLUTUANTE EDITAR < BEGIN 330 var esc = false; 331 $(folder_).append(html).find(".float-menu-edit").click(function(){ 332 var folder_id = $(this).parents(".closed:first").attr('id'); 333 var name = $.trim($(this).parents(".closed:first").find("span:first").text().split("[")[0]); 334 if($(this).parents(".closed:first").find("span:first").hasClass("selected")) 335 return write_msg(get_lang("It's not possible rename this folder, because it is being used in the moment!")); 336 if($(this).parents(".closed:first").find(".selected").length) 337 return write_msg(get_lang("It's not possible rename this folder, because its subfolder is being used in the moment!")); 338 if(valid_tabs($(this).parents("li:first").find("li"), folder_id)) 339 return; 340 $(this).parents(".closed:first").find("span:first").empty().append("<input class='new_folder folder' type='text' maxlength='100'></input>"); 341 $(".new_folder").focus().keydown(function(event){ 342 event.stopPropagation(); 343 if(event.keyCode == 13){ 344 if($(this).val() != ""){ 345 if($(this).val().match(/[\/\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi)){ 346 return write_msg(get_lang("cannot create folder. try other folder name")); 347 } 348 var new_name = folder_id.replace(/[a-zA-Z0-9á-úÁ-Ú^\s_-]+$/, $(this).val()); 349 if($('[id="'+new_name+'"]').length){ 350 $(".folders-loading").removeClass("folders-loading"); 351 write_msg(get_lang("Mailbox already exists")); 352 return draw_new_tree_folder(); 353 } 354 $(".new_folder").parent().addClass("folders-loading"); 355 $.ajax({ 356 url : "controller.php?action=$this.imap_functions.ren_mailbox", 357 type : "POST", 358 data : "current="+folder_id+"&rename="+new_name, 359 success : function(data){ 360 data = connector.unserialize(data); 361 if(data == "Permission denied"){ 362 $(".folders-loading").removeClass("folders-loading"); 363 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 364 return write_msg(get_lang("Permission denied")); 365 } 366 write_msg(get_lang("The folder was successfully rename")); 367 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 368 } 369 }); 370 }else{ 371 $(".new_folder").focusout(); 372 } 373 }else if( event.keyCode == 27){ 374 draw_new_tree_folder(); 375 } 376 }).focusout(function(){ 377 draw_new_tree_folder(); 378 }).val(name); 379 }) 380 //FUNÇÃO DO eventNU FLUTUANTE EDITAR < END 381 //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < BEGIN 382 .end().find(".float-menu-remove").click(function(){ 383 384 var folder_id = $(this).parents(".closed:first").attr('id'); 385 var folder_name = "<strong>"+$.trim($(this).parents(".closed:first").find(".folder").text().split("[")[0])+"</strong>"; 386 387 if(valid_tabs($(this).parents("li:first").find("li"), folder_id)) 388 return; 389 $(this).parents(".closed:first").find(".folder").addClass("folders-loading"); 390 391 if($(this).parents(".closed:first").find("ul").length){ 392 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 393 return write_msg(get_lang("Delete/move subfolders first")); 394 } 395 if($(this).parents(".closed:first").find(".selected").length){ 396 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 397 return write_msg(get_lang("It's not possible delete this folder, because it is being used in the moment!")); 398 } 399 var folder_span = $(this); 400 var confirm_text = get_lang("Do you wish to exclude the folder "); 401 $.Zebra_Dialog(confirm_text+folder_name, { 402 'type': 'question', 403 'overlay_opacity': '0.5', 404 'buttons': [get_lang('Yes'), get_lang('No')], 405 'onClose': function(caption) { 406 if(caption == get_lang('Yes')){ 407 $.ajax({ 408 url : "controller.php?action=$this.imap_functions.delete_mailbox", 409 type: "POST", 410 data : "del_past="+folder_id, 411 success : function(data){ 412 data = connector.unserialize(data); 413 if(data == "Mailbox does not exist"){ 414 $(".folders-loading").removeClass("folders-loading"); 415 return write_msg(get_lang("Mailbox does not exist")); 416 }else if(data == "Permission denied"){ 417 $(".folders-loading").removeClass("folders-loading"); 418 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 419 return write_msg(get_lang("Permission denied")); 420 } 421 write_msg(get_lang("The folder %1 was successfully removed", folder_name)); 422 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 423 } 424 }); 425 }else{ 426 folder_span.parents(".closed:first").find(".folder").removeClass("folders-loading"); 427 return; 428 } 429 } 430 }); 431 /* if(!confirm(confirm_text + folder_name)){ 432 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 433 return; 434 } */ 435 }) 436 //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < END 437 //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < BEGIN 438 .end().find(".float-menu-new").click(function(){ 439 $(this).parents(".float-menu").hide(); 440 var selected_li = $(this).parents(".closed:first"); 441 if(selected_li.find("ul:first").length){ 442 var new_folder = $("<li><input class='new_folder folder' type='text' maxlength='100'></input></li>").appendTo(selected_li.find("ul:first")); 443 if(selected_li.find(".expandable-hitarea").length){ 444 selected_li.find(".expandable-hitarea").trigger('click'); 445 } 446 selected_li.find("ul:first").treeview({ 447 add: new_folder 448 }); 449 }else if(selected_li.length){ 450 var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li); 451 selected_li.treeview({ 452 add: new_folder 453 }); 454 }else{ 455 selected_li = $(this).parents(".head_folder").parent(); 456 if($(this).parents(".head_folder").parent().find(".expandable-hitarea").length){ 457 $(this).parents(".head_folder").parent().find(".expandable-hitarea").trigger('click'); 458 } 459 var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li); 460 selected_li.treeview({ 461 add: new_folder 462 }); 463 } 464 465 selected_li.find(".new_folder").Watermark("Nova Pasta").focus().keydown(function(event){ 466 event.stopPropagation(); 467 if(event.keyCode == 13){ 468 if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi)){ 469 return write_msg(get_lang("cannot create folder. try other folder name")); 470 } 471 if($('[id="'+ (selected_li.attr('id')? selected_li.attr('id') : "INBOX") + cyrus_delimiter + $(this).val()+'"]').length){ 472 $(".folders-loading").removeClass("folders-loading"); 473 write_msg(get_lang("Mailbox already exists")); 474 return draw_new_tree_folder(); 475 } 476 $(".new_folder").parent().addClass("folders-loading"); 477 create_new_folder(($(this).val() != "" ? $(this).val() : get_lang("New Folder")), (selected_li.attr('id')? selected_li.attr('id') : "INBOX")); 478 }else if( event.keyCode == 27){ 479 draw_new_tree_folder(); 480 } 481 }).focusout(function(){ 482 draw_new_tree_folder(); 483 }); 484 }).end().find(".float-menu-export").click(function(){ 485 //proxy_mensagens.export_all_messages($(this).parents("li:first").attr("id")) 486 487 var name_box = $(this).parents("li:first").attr("id"); 488 var name_folder = name_box.split(cyrus_delimiter)[name_box.split(cyrus_delimiter).length-1]; 489 490 var hand_export = function(data){ 491 if(!data){ 492 write_msg(get_lang('Error compressing messages (ZIP). Contact the administrator.')) 493 }else if(data["empty_folder"]){ 494 write_msg(get_lang("The selected folder is empty.")); 495 }else 496 download_attachments(null, null, data, null,null, name_folder +'.zip'); 497 } 498 cExecute("$this.exporteml.export_all",hand_export,"folder="+name_box); 499 write_msg(get_lang('You must wait while the messages will be exported...')); 500 }); 501 //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < END 502 } 503 if(!$(".new_folder").length){ 504 $(this).find(".float-menu:first").css("display", ""); 505 } 506 }, 507 function(){ 508 $(this).find(".float-menu:first").hide(); 509 } 510 ); 511 $("#new_m").html($('.selected').find(".folder_unseen").html() ? $('.selected').find(".folder_unseen").html() : "0").css("color", "red"); 92 var folders = DataLayer.get("folder", true); 93 94 if(preferences.use_local_messages != 0){ 95 96 if(expresso_mail_archive.folders && !expresso_offline && expresso_mail_archive.enabled == true) { //MailArchive 97 //pega pastas locais do mailarchiver e insere no array de pastas 98 expresso_mail_archive.getFoldersList("home"); 99 treeFolders = expresso_mail_archive.folders; 100 101 for(var i=0; i<treeFolders.length; i++ ){ 102 mount_children_localfolders_list(treeFolders[i]); 103 } 104 105 for(var i = 0; i < treeFolders.length; i++){ 106 folders.push(treeFolders[i]); 107 } 108 109 } 512 110 } 111 112 if(!selected){ 113 selected = "INBOX"; 114 } 115 116 var tree1 = new Array(); 117 var tree2 = new Array(); 118 var tree3 = new Array(); 119 for (var i=0; i<folders.length; i++) { 120 if (/^INBOX/.test(folders[i].id)) { 121 if (!unorphanize(tree1, folders[i])) { 122 folders[i].children = new Array(); 123 124 tree1.push(folders[i]); 125 } 126 } 127 else if (/^user/.test(folders[i].id)) { 128 if (!unorphanize(tree2, folders[i])) { 129 folders[i].children = new Array(); 130 tree2.push(folders[i]); 131 } 132 } 133 else if (/^local_messages/.test(folders[i].id)) { 134 135 tree3.push(folders[i]); 136 137 } 138 } 139 140 for(var i =0; i<tree1.length; i++){ 141 count_unseen_children(tree1[i]); 142 } 143 for(var i =0; i<tree2.length; i++){ 144 count_unseen_children(tree2[i]); 145 } 146 for(var i =0; i<tree3.length; i++){ 147 count_unseen_children(tree3[i]); 148 } 149 cp_tree1 = tree1; 150 cp_tree2 = tree2; 151 //Marcosw inicio 152 cp_tree3 = tree3; 153 //Marcosw fim 154 var shared_acls = {}; 155 156 $.each(cp_tree2, function(index, value){ 157 shared_acls[value.id] = value.acl_share; 158 }); 159 160 $("#content_folders").removeClass("menu-degrade").parent().removeClass("image-menu"); 161 mail_archive_url = mail_archive_protocol + "://" + mail_archive_host + ":" + mail_archive_port + "/admin"; 162 var html = DataLayer.render('../prototype/modules/mail/templates/detailedfoldertree.ejs', {folders: [tree1, tree2, tree3]}); 163 var folders_html = $("#content_folders").html(html).find(".mainfoldertree").treeview({ 164 persist: "cookie", 165 animated: "fast" 166 }).find(".folder").unbind("click").click(function(event){ 167 168 if ($(this).next().hasClass("local-connect")) { 169 return; 170 } 171 172 if ($(this).hasClass("local-folder")) { 173 return; 174 } 175 176 // MUDANÃA DE PASTAS! 177 var target = $(this); 178 179 if($(".folders-loading").length) 180 return; 181 182 if($(event.target).parent().is(".float-menu")) 183 return; 184 185 if( target.is('.collapsable-hitarea, .expandable-hitarea, .lastCollapsable-hitarea, .lastExpandable-hitarea, .treeview ,.folder_unseen,.ui-icon, .float-menu, .new_folder, .folders-loading, .head_folder, .shared-folders') ) 186 return; 187 188 if( target.parent().find(".new_folder").length) 189 return; 190 191 if( !target.attr('id') ) 192 target = target.parent(); 193 if (target[0] == $(".mainfoldertree")[0]) return; 194 var uiId = target.attr('id'); 195 var child = target.find('.folder'); 196 197 if(!target.is('.mainfoldertree > .expandable-hitarea, .mainfoldertree > .collapsable-hitarea')){ 198 $('.filetree span.folder.selected').removeClass('selected'); 199 $(target).children('.folder').addClass('selected'); 200 } 201 $(this).addClass("folders-loading"); 202 selected = target.attr('id'); 203 change_folder(target.attr('id'), child.attr('title')); 204 205 $.ajax({ 206 url : "controller.php?"+ $.param( { action: "$this.imap_functions.get_folders_list", folder: target.attr('id') } ), 207 success : function(data){ 208 data = connector.unserialize(data); 209 210 if(data) 211 build_quota(data); 212 } 213 }); 214 215 }).filter('.followup-messages').click(function(event, ui){ 216 search_emails("UNDELETED KEYWORD \"$Followupflagged\""); 217 }).end().end(); 218 219 folders_html.find('[id="'+selected+'"]').children().addClass("selected"); 220 $(".folder").not(".head_folder").not(".shared-folders").parent().find(".folder").not(".head_folder,.inbox,.drafts,.sent,.spam,.trash").draggable({ 221 // DRAG DE PASTAS 222 start : function(){ 223 $(this).css("color", "gray"); 224 }, 225 stop : function(){ 226 $(this).css("color", ""); 227 }, 228 revert: "invalid", 229 helper: function(event){ 230 if($.trim(($(this).text().split("["))[0]).length > 18) 231 return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (($(this).text().split("["))[0]).substring(0,18) + "...", type: "folder"})); 232 return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (($(this).text().split("["))[0]), type: "folder"})); 233 }, 234 delay: 150, 235 refreshPositions: true, 236 zIndex : 2700, 237 //scroll: true, 238 //scrollSensitivity: 100, 239 //scrollSpeed: 100, 240 containment: "#divAppbox" 241 }).end().droppable({ 242 //DROP DE PASTAS 243 over : function(a, b){ 244 //INICIO : SE A PASTA CONTER FILHAS EXPANDE 245 over = $(this); 246 $(this).addClass("folder-over"); 247 if(($(this)[0] != $(this).parent().find(".head_folder")[0])) 248 if($(this).prev()[0]) 249 if($(this).parent().find(".expandable-hitarea")[0] == $(this).prev()[0]){ 250 setTimeout(function(){ 251 if(over.hasClass("folder-over")) 252 over.prev().trigger("click"); 253 }, 500); 254 255 } 256 //FIM : SE A PASTA CONTER FILHAS EXPANDE 257 258 //SETA BORDA EM VOLTA DA PASTA 259 }, 260 out : function(){ 261 //RETIRA BORDA EM VOLTA DA PASTA 262 $(this).removeClass("folder-over"); 263 }, 264 drop : function(event, ui){ 265 $(this).removeClass("folder-over"); 266 if($(this).parent().attr('id') == undefined){ 267 var folder_to = 'INBOX'; 268 var to_folder_title = get_lang("Inbox"); 269 }else{ 270 var folder_to = $(this).parent().attr('id'); 271 var to_folder_title = $(this).attr('title'); 272 } 273 var folder_to_move = ui.draggable.parent().attr('id'); 274 var border_id = ui.draggable.find("input[type=hidden]").attr("name"); 275 // eventnsagens : SE O DROP VIER DA LISTA DE eventNSAGENS : 276 if(folder_to_move == "tbody_box"){ 277 move_msgs2(get_current_folder(), 'selected', 0, folder_to, to_folder_title,true); 278 return refresh(); 279 } 280 //SE FOR DE UMA PESQUISA RAPIDA 281 else if(ui.draggable.parents('[id^="content_id_"]')[0]){ 282 move_search_msgs("content_id_"+border_id, folder_to, to_folder_title); 283 return refresh(); 284 } 285 // eventnsagens : SE O DROP VIER DE UMA ABA ABERTA 286 else if(folder_to_move == "border_tr"){ 287 var id_msg = border_id.split("_")[0]; 288 folder = $("#input_folder_"+border_id+"_r")[0] ? $("#input_folder_"+border_id+"_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id]:get_current_folder()); 289 alternate_border(border_id); 290 move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title,true); 291 return refresh(); 292 } 293 // SE O DROP VIER DA LISTA DE PASTAS 294 else{ 295 var folder_to_exist = folder_to_move.split(cyrus_delimiter); 296 folder_to_exist = folder_to+cyrus_delimiter+folder_to_exist[folder_to_exist.length-1]; 297 298 //VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS 299 300 if(valid_tabs(ui.draggable.parent().find("li"), folder_to_move)){ 301 return; 302 } 303 //FIM : VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS; 304 305 // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA PARA O eventSMO LOCAL 306 if(folder_to_exist == folder_to_move){ 307 return write_msg(get_lang("Thie folder is already in this place")); 308 } 309 310 // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA ABERTA NO momentO 311 if(folder_to_move == get_current_folder()){ 312 return write_msg(get_lang("It's not possible move this folder, because it is being used in the moment!")); 313 } 314 315 // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA FILHA DA PASTA ABERTA NO momentO 316 if(ui.draggable.parent().find(".selected")[0]){ 317 return write_msg(get_lang("It's not possible move this folder, because its subfolder is being used in the moment!")); 318 } 319 320 // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA PAI PARA DENTRO DE UMA FILHA 321 if(ui.draggable.parent().find('[id="'+folder_to+'"]')[0]){ 322 return write_msg(get_lang("It's not possible to move this folder to its subfolders!")); 323 } 324 325 if($('[id="'+folder_to_exist+'"]').length){ 326 return write_msg(get_lang("Can not move this folder to this location, because the target has already a folder with this name")); 327 } 328 329 $(this).addClass("folders-loading"); 330 331 332 if($(this).parent().parent().parent().find("input").val() == "localFolder"){ 333 var idFolder = $(this).parent().attr("id").split("_")[2]; 334 335 expresso_mail_archive.moveFolder(idFolder, folder_to_move.split("_")[2]); 336 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 337 } else { 338 $.ajax({ 339 url : "controller.php?"+ $.param( { action: "$this.imap_functions.move_folder", folder_to_move: folder_to_move, folder_to: folder_to } ), 340 success : function(data){ 341 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 342 data = connector.unserialize(data); 343 if(data == "Permission denied"){ 344 write_msg(get_lang("Permission denied")); 345 }else if(data){ 346 write_msg(get_lang("The folder was successfully moved")); 347 } else { 348 write_msg(get_lang("ERROR moving your folder.")); 349 } 350 } 351 }); 352 } 353 } 354 } 355 }); 356 $(".folder").not(".shared-folders").parent().find(".folder").hover( 357 function(){ 358 //CASO A LI NÃO TENHA UM eventNU FLUTUANTE AINDA, O eventNU à ADICIONADO! 359 if(!$(this).children(":last").hasClass("float-menu") && !$(this).children(":last").hasClass("new_folder") && !($(this).next().hasClass("local-connect"))){ /*se houver a classe local-connect, não adiciona o botão de conectar*/ 360 var folder_ = $(this); 361 var folder_name; 362 var shared = { 363 head : false, 364 valid : false 365 }; 366 if(folder_.parent().attr('id')){ 367 folder_name = folder_.parent().attr('id').split(cyrus_delimiter); 368 folder_name = folder_name[folder_name.length -1]; 369 shared.valid = folder_.parent().attr('id').search("user/") == 0 ? true : false; 370 }else 371 folder_name = "Root"; 372 373 if(shared.valid){ 374 shared.head = folder_.parent().attr('id').split(cyrus_delimiter).length == 2 ? true : false; 375 var folder_name_parts = folder_.parent().attr('id').split(cyrus_delimiter); 376 var acls = shared_acls[folder_name_parts[0]+cyrus_delimiter+folder_name_parts[1]]; 377 378 } 379 380 html = DataLayer.render("../prototype/modules/mail/templates/float_folder_menu.ejs", {name_folder : folder_name, flag : shared, acl : acls}); 381 //FUNÃÃO DO eventNU FLUTUANTE EDITAR < BEGIN 382 var esc = false; 383 $(folder_).append(html).find(".float-menu-edit").click(function(){ 384 var folder_id = $(this).parents(".closed:first").attr('id'); 385 var name = $.trim($(this).parents(".closed:first").find("span:first").text().split("[")[0]); 386 if($(this).parents(".closed:first").find("span:first").hasClass("selected")) 387 return write_msg(get_lang("It's not possible rename this folder, because it is being used in the moment!")); 388 if($(this).parents(".closed:first").find(".selected").length) 389 return write_msg(get_lang("It's not possible rename this folder, because its subfolder is being used in the moment!")); 390 if(valid_tabs($(this).parents("li:first").find("li"), folder_id)) 391 return; 392 $(this).parents(".closed:first").find("span:first").empty().append("<input class='new_folder folder' type='text' maxlength='100'></input>"); 393 $(".new_folder").focus().keydown(function(event){ 394 event.stopPropagation(); 395 396 if(event.keyCode == 13){ 397 if($(this).val() != ""){ 398 399 if($(this).val().match(/[\/\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi)){ 400 return write_msg(get_lang("cannot create folder. try other folder name")); 401 } 402 var new_name = folder_id.replace(/[a-zA-Z0-9á-úÃ-Ã^\s_-]+$/, $(this).val()); 403 if($('[id="'+new_name+'"]').length){ 404 $(".folders-loading").removeClass("folders-loading"); 405 write_msg(get_lang("Mailbox already exists")); 406 return draw_new_tree_folder(); 407 } 408 $(".new_folder").parent().addClass("folders-loading"); 409 410 if($(this).parent().parent().parent().find("input").val() == "localFolder"){ 411 var idFolder = $(this).parent().parent().attr("id").split("_")[2]; 412 expresso_mail_archive.renameFolder(idFolder, new_name); 413 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 414 } else { 415 416 $.ajax({ 417 url : "controller.php?action=$this.imap_functions.ren_mailbox", 418 type : "POST", 419 data : "current="+folder_id+"&rename="+new_name, 420 success : function(data){ 421 data = connector.unserialize(data); 422 if(data == "Permission denied"){ 423 $(".folders-loading").removeClass("folders-loading"); 424 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 425 return write_msg(get_lang("Permission denied")); 426 } 427 write_msg(get_lang("The folder was successfully rename")); 428 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 429 } 430 }); 431 432 } 433 }else{ 434 $(".new_folder").focusout(); 435 } 436 }else if( event.keyCode == 27){ 437 draw_new_tree_folder(); 438 } 439 }).focusout(function(){ 440 draw_new_tree_folder(); 441 }).val(name); 442 }) 443 //FUNÃÃO DO eventNU FLUTUANTE EDITAR < END 444 //FUNÃÃO DO eventNU FLUTUANTE EXCLUIR < BEGIN 445 .end().find(".float-menu-remove").click(function(){ 446 447 var folder_id = $(this).parents(".closed:first").attr('id'); 448 var folder_name = "<strong>"+$.trim($(this).parents(".closed:first").find(".folder").text().split("[")[0])+"</strong>"; 449 450 if(valid_tabs($(this).parents("li:first").find("li"), folder_id)) 451 return; 452 $(this).parents(".closed:first").find(".folder").addClass("folders-loading"); 453 454 if($(this).parents(".closed:first").find("ul").length){ 455 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 456 return write_msg(get_lang("Delete/move subfolders first")); 457 } 458 if($(this).parents(".closed:first").find(".selected").length){ 459 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 460 return write_msg(get_lang("It's not possible delete this folder, because it is being used in the moment!")); 461 } 462 var folder_span = $(this); 463 var confirm_text = get_lang("Do you wish to exclude the folder "); 464 465 $.Zebra_Dialog(confirm_text+folder_name, { 466 'type': 'question', 467 'overlay_opacity': '0.5', 468 'buttons': [get_lang('Yes'), get_lang('No')], 469 'onClose': function(caption) { 470 471 if(caption == get_lang('Yes')){ 472 if(folder_span.parent().parent().parent().find("input").val() == "localFolder"){ 473 var idFolder = folder_span.parent().parent().parent("li").attr("id").split("_")[2]; 474 expresso_mail_archive.deleteFolder(idFolder); 475 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 476 } else { 477 $.ajax({ 478 url : "controller.php?action=$this.imap_functions.delete_mailbox", 479 type: "POST", 480 data : "del_past="+folder_id, 481 success : function(data){ 482 data = connector.unserialize(data); 483 if(data == "Mailbox does not exist"){ 484 $(".folders-loading").removeClass("folders-loading"); 485 return write_msg(get_lang("Mailbox does not exist")); 486 }else if(data == "Permission denied"){ 487 $(".folders-loading").removeClass("folders-loading"); 488 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 489 return write_msg(get_lang("Permission denied")); 490 } 491 write_msg(get_lang("The folder %1 was successfully removed", folder_name)); 492 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 493 } 494 }); 495 } 496 }else{ 497 folder_span.parents(".closed:first").find(".folder").removeClass("folders-loading"); 498 return; 499 } 500 } 501 }); 502 /* if(!confirm(confirm_text + folder_name)){ 503 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 504 return; 505 } */ 506 }) 507 //FUNÃÃO DO eventNU FLUTUANTE EXCLUIR < END 508 //FUNÃÃO DO eventNU FLUTUANTE NOVA PASTA < BEGIN 509 .end().find(".float-menu-new").click(function(){ 510 $(this).parents(".float-menu").hide(); 511 var selected_li = $(this).parents(".closed:first"); 512 if(selected_li.find("ul:first").length){ 513 var new_folder = $("<li><input class='new_folder folder' type='text' maxlength='100'></input></li>").appendTo(selected_li.find("ul:first")); 514 if(selected_li.find(".expandable-hitarea").length){ 515 selected_li.find(".expandable-hitarea").trigger('click'); 516 } 517 selected_li.find("ul:first").treeview({ 518 add: new_folder 519 }); 520 }else if(selected_li.length){ 521 var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li); 522 selected_li.treeview({ 523 add: new_folder 524 }); 525 }else{ 526 selected_li = $(this).parents(".head_folder").parent(); 527 if($(this).parents(".head_folder").parent().find(".expandable-hitarea").length){ 528 $(this).parents(".head_folder").parent().find(".expandable-hitarea").trigger('click'); 529 } 530 var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li); 531 selected_li.treeview({ 532 add: new_folder 533 }); 534 } 535 536 selected_li.find(".new_folder").Watermark("Nova Pasta").focus().keydown(function(event){ 537 event.stopPropagation(); 538 539 540 if(event.keyCode == 13){ 541 542 if($(this).parent().parent().parent().find("input[type=hidden]").val() == "localFolder"){ 543 544 $(".new_folder").parent().addClass("folders-loading"); 545 546 var folderName = $(this).val(); 547 var folder = (folderName != "" ? folderName : get_lang("New Folder")); 548 549 create_new_local_folder((selected_li.attr('id') ? selected_li.attr('id') : "inbox") , folder); 550 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 551 } else { 552 553 if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi)){ 554 return write_msg(get_lang("cannot create folder. try other folder name")); 555 } 556 if($('[id="'+ (selected_li.attr('id')? selected_li.attr('id') : "INBOX") + cyrus_delimiter + $(this).val()+'"]').length){ 557 $(".folders-loading").removeClass("folders-loading"); 558 write_msg(get_lang("Mailbox already exists")); 559 return draw_new_tree_folder(); 560 } 561 $(".new_folder").parent().addClass("folders-loading"); 562 create_new_folder(($(this).val() != "" ? $(this).val() : get_lang("New Folder")), (selected_li.attr('id')? selected_li.attr('id') : "INBOX")); 563 } 564 565 }else if( event.keyCode == 27){ 566 draw_new_tree_folder(); 567 } 568 569 570 571 }).focusout(function(){ 572 draw_new_tree_folder(); 573 }); 574 }).end().find(".float-menu-export").click(function(){ 575 //proxy_mensagens.export_all_messages($(this).parents("li:first").attr("id")) 576 577 var name_box = $(this).parents("li:first").attr("id"); 578 579 var name_folder = name_box.split(cyrus_delimiter)[name_box.split(cyrus_delimiter).length-1]; 580 581 582 var hand_export = function(data){ 583 if(!data){ 584 write_msg(get_lang('Error compressing messages (ZIP). Contact the administrator.')) 585 }else if(data["empty_folder"] || data == "empty_folder"){ 586 write_msg(get_lang("The selected folder is empty.")); 587 }else 588 download_attachments(null, null, data, null,null, name_folder +'.zip'); 589 } 590 if($(this).parents("li:first").find("input[type=hidden]:first").val() == "localFolder"){ 591 expresso_mail_archive.listMessages(name_box.split("_")[2]); 592 var msgsArchive = expresso_mail_archive.messageslisted; 593 594 buildExportArchiver(msgsArchive, name_box); 595 596 } else { 597 cExecute("$this.exporteml.export_all",hand_export,"folder="+name_box); 598 } 599 write_msg(get_lang('You must wait while the messages will be exported...')); 600 }); 601 //FUNÃÃO DO eventNU FLUTUANTE NOVA PASTA < END 602 } 603 if(!$(".new_folder").length){ 604 $(this).find(".float-menu:first").css("display", ""); 605 } 606 }, 607 function(){ 608 $(this).find(".float-menu:first").hide(); 609 } 610 ); 611 $("#new_m").html($('.selected').find(".folder_unseen").html() ? $('.selected').find(".folder_unseen").html() : "0").css("color", "red"); 612 }
Note: See TracChangeset
for help on using the changeset viewer.