source: trunk/prototype/modules/mail/js/foldertree.js @ 8011

Revision 8011, 37.5 KB checked in by angelo, 11 years ago (diff)

Ticket #3388 - Problema ao renomear pasta que contenha ponto

  • Property svn:executable set to *
Line 
1var init_tree = 0;
2var selected;
3var over;
4var cp_tree1;
5var cp_tree2;
6var cp_tree3;
7var mail_archive_url;
8
9function unorphanize(root, element) {
10    var ok = false;
11    var f = 0;
12    for (var i=0; i<root.length; i++) {
13        if (root[i].id == element.parentFolder) {
14            element.children = new Array();
15            root[i].children.push(element);
16            return true;
17        } else if (ok = unorphanize(root[i].children, element)) {
18            break;
19        }
20    }
21    return ok;
22}
23function mount_children_localfolders_list(folder){
24    folder.children = new Array();
25    folder.id_search = folder.id;
26    folder.id = 'local_messages_'+folder.id,
27    folder.commonName =  folder.name,
28    folder.parentId = folder.parentid,
29    folder.type = 'localFolder',
30    folder.name = folder.id,
31    folder.messageCount = {
32                             total: folder.messages,
33                             unseen: folder.unseen
34                          }
35
36    if(folder.haschild){
37        expresso_mail_archive.getFoldersList(folder.id_search);
38        folder.children = expresso_mail_archive.folders;
39
40        for(var i = 0; i < folder.children.length; i++){
41            mount_children_localfolders_list(folder.children[i]);
42        }
43
44    }
45}
46
47function count_unseen_children(folder){
48    if(folder.children.length){
49        for(var i=0; i< folder.children.length; i++){
50           
51                if(folder.children[i].children.length)
52                folder.children[i]['children_unseen'] = (folder.children[i]['children_unseen'] ? folder.children[i]['children_unseen'] : 0) + count_unseen_children(folder.children[i]);   
53           
54            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);           
55        }
56        return folder['children_unseen'];
57    } else {
58        return parseInt(folder.messageCount.unseen);
59    }
60}
61
62function valid_tabs(children_of_this_folder, folder_to_move){
63    var borders_open = $("#border_tr").children();
64
65    var error = false;
66    for(var i = 1; i <= borders_open.length -2; i ++){
67        //VERIFICA A CADA FILHO DA PASTA SE ESTA eventNSAGEM E DESTA PASTA
68        $.each(children_of_this_folder, function(index, value){
69            if($(children_of_this_folder[index]).attr('id') == openTab.imapBox[$(borders_open[i]).find("input[type=hidden]").attr("name")]){
70                error = true;
71                write_msg(get_lang("One or more messages from any sub-folder are open"));
72                return error;
73               
74            }
75        });
76        if(error){
77            return error;
78        }
79        //VERIFICA SE EXISTE NA PASTA A SER MOVIDA
80        if(openTab.imapBox[$(borders_open[i]).find("input[type=hidden]").attr("name")] == folder_to_move){
81            error = true;
82            write_msg(get_lang("One or more messages from this folder are open"));
83            return error;
84        }
85    }
86}
87
88function normalizeFolder( folders ){
89
90    if(folders  == "")
91        return folders;
92
93    if( !$.isArray( folders  )){
94        var array = [];
95
96        for(var i in folders){
97
98            if(i.indexOf('(javascript)') < 0)
99                array[array.length] = folders[i];
100        }
101
102        folders = array;
103
104    }
105
106    return folders;
107
108}
109
110function draw_new_tree_folder(callback, force)
111{
112
113    var folders = normalizeFolder(Folder.get(false, force));
114
115    if(preferences.use_local_messages == 1)
116    {
117
118        if(expresso_mail_archive.folders && !expresso_offline && expresso_mail_archive.enabled == true)
119        { //MailArchive
120            //pega pastas locais do mailarchiver e insere no array de pastas
121            expresso_mail_archive.getFoldersList("home");
122            treeFolders = expresso_mail_archive.folders;
123
124            for(var i = 0; i < treeFolders.length; i++)
125            {
126                mount_children_localfolders_list(treeFolders[i]);
127            }
128
129            for(var i = 0; i < treeFolders.length; i++)
130            {
131                folders.push(treeFolders[i]);
132            }
133
134        }
135    }
136
137    if(!selected)
138    {
139        selected = "INBOX";
140    }
141
142    var tree1 = new Array();
143    var tree2 = new Array();
144    var tree3 = new Array();
145    for(var i = 0; i < folders.length; i++)
146    {
147        if(/^INBOX/.test(folders[i].id))
148        {
149            if(!unorphanize(tree1, folders[i]))
150            {
151                folders[i].children = new Array();
152
153                tree1.push(folders[i]);
154            }
155        }
156        else if(/^user/.test(folders[i].id))
157        {
158            if(!unorphanize(tree2, folders[i]))
159            {
160                folders[i].children = new Array();
161                tree2.push(folders[i]);
162            }
163        }
164        else if(/^local_messages/.test(folders[i].id))
165        {
166
167            tree3.push(folders[i]);
168
169        }
170    }
171
172    for(var i = 0; i < tree1.length; i++)
173    {
174        count_unseen_children(tree1[i]);
175    }
176    for(var i = 0; i < tree2.length; i++)
177    {
178        count_unseen_children(tree2[i]);
179    }
180    for(var i = 0; i < tree3.length; i++)
181    {
182        count_unseen_children(tree3[i]);
183    }
184    cp_tree1 = tree1;
185    cp_tree2 = tree2;
186    cp_tree3 = tree3;
187    var shared_acls = {};
188
189    $.each(cp_tree2, function(index, value)
190    {
191        shared_acls[value.id] = value.acl_share;
192    });
193
194    if(preferences.use_local_messages == 1)
195    {
196        $("#content_folders").removeClass("menu-degrade").parent().removeClass("image-menu");
197        mail_archive_url = mail_archive_protocol + "://" + mail_archive_host + ":" + mail_archive_port + "/admin";
198    }
199
200    var html = DataLayer.render('../prototype/modules/mail/templates/detailedfoldertree.ejs', {
201        folders: [tree1, tree2, tree3]
202    });
203    var folders_html = $("#content_folders").html(html).find(".mainfoldertree").treeview(
204    {
205        persist: "cookie",
206        animated: "fast"
207    }).find(".folder").unbind("click").click(function(event)
208    {
209
210        if($(this).next().hasClass("local-connect"))
211        {
212            return;
213        }
214
215        if($(this).hasClass("local-folder"))
216        {
217            return;
218        }
219
220        // MUDANÇA DE PASTAS!
221        var target = $(this);
222
223        if($(".folders-loading").length)
224        {
225            return;
226        }
227
228        if($(event.target).parent().is(".float-menu"))
229        {
230            return;
231        }
232
233        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'))
234        {
235            return;
236        }
237
238        if(target.parent().find(".new_folder").length)
239        {
240            return;
241        }
242
243        if(!target.attr('id'))
244        {
245            target = target.parent();
246        }
247        if(target[0] == $(".mainfoldertree")[0])
248        {
249            return;
250        }
251
252        var uiId = target.attr('id');
253        var child = target.find('.folder');
254
255        if(!target.is('.mainfoldertree > .expandable-hitarea, .mainfoldertree > .collapsable-hitarea'))
256        {
257            $('.filetree span.folder.selected').removeClass('selected');
258            $(target).children('.folder').addClass('selected');
259        }
260        $(this).addClass("folders-loading");
261        selected = target.attr('id');
262        change_folder(target.attr('id'), child.attr('title'));
263
264        $.ajax(
265        {
266            url: "controller.php?" + $.param(
267            {
268                action: "$this.imap_functions.get_folders_list",
269                folder: target.attr('id')
270            }),
271            success: function(data)
272            {
273                data = connector.unserialize(data);
274
275                if(data)
276                {
277                    build_quota(data);
278                }
279            }
280        });
281
282    }).filter('.followup-messages').click(function(event, ui)
283    {
284        search_emails("UNDELETED KEYWORD \"$Followupflagged\"");
285    }).end().end();
286
287    $('.upper').droppable(
288    {
289        over: function(event, ui)
290        {
291            $('#content_folders').autoscroll(
292            {
293                direction: 'up',
294                step: 150,
295                scroll: true
296            });
297        },
298        out: function(event, ui)
299        {
300            $('#content_folders').autoscroll('destroy');
301        }
302    });
303
304    $('.lower').droppable(
305    {
306        over: function(event, ui)
307        {
308            $('#content_folders').autoscroll(
309            {
310                direction: 'down',
311                step: 150,
312                scroll: true
313            });
314        },
315        out: function(event, ui)
316        {
317            $('#content_folders').autoscroll('destroy');
318        }
319    });
320
321
322
323    folders_html.find('[id="' + selected + '"]').children().addClass("selected");
324    $(".folder")
325    .not(".head_folder")
326    .not(".shared-folders")
327    .not(".shared-folders + ul .folder")
328    .parent()
329    .find(".folder")
330    .not(".head_folder,.inbox,.drafts,.sent,.spam,.trash")
331    .draggable(
332    {
333        // DRAG DE PASTAS
334        start: function()
335        {
336            $(this).css("color", "gray");
337            $('.upper, .lower').show();
338            $(".lower").css("top", ($("#content_folders").height() - 18) + $("#content_folders").offset().top);
339        },
340        stop: function()
341        {
342            $(this).css("color", "");
343            $('.upper, .lower').hide();
344        },
345        revert: "invalid",
346        helper: function(event)
347        {
348            if($.trim(($(this).text().split("["))[0]).length > 18) return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {
349                texto: (($(this).text().split("["))[0]).substring(0, 18) + "...",
350                type: "folder"
351            }));
352            return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {
353                texto: (($(this).text().split("["))[0]),
354                type: "folder"
355            }));
356        },
357        delay: 150,
358        refreshPositions: true,
359        zIndex: 2700,
360        //scroll: true,
361        //scrollSensitivity: 100,
362        //scrollSpeed: 100
363        containment: $("#divAppbox")
364    });
365    $(".folder")
366    .not(".head_folder")
367    .not(".shared-folders")
368    .parent()
369    .find(".folder")
370    .not(".head_folder,.inbox,.drafts,.sent,.spam,.trash")
371    .end()
372    .droppable(
373    {
374        //DROP DE PASTAS
375        over: function(a, b)
376        {
377            //INICIO : SE A PASTA CONTER FILHAS EXPANDE
378            $(b.helper).find(".draggin-folder,.draggin-mail").css("color", "green");
379            over = $(this);
380            $(this).addClass("folder-over");
381            if(($(this)[0] != $(this).parent().find(".head_folder")[0])) if($(this).prev()[0]) if($(this).parent().find(".expandable-hitarea")[0] == $(this).prev()[0])
382            {
383                setTimeout(function()
384                {
385                    if(over.hasClass("folder-over"))
386                    {
387                        over.prev().trigger("click");
388                    }
389                }, 500);
390
391            }
392            //FIM : SE A PASTA CONTER FILHAS EXPANDE           
393            //SETA BORDA EM VOLTA DA PASTA
394            //
395        },
396        out: function(a, b)
397        {
398            //RETIRA BORDA EM VOLTA DA PASTA
399            $(b.helper).find(".draggin-folder,.draggin-mail").css("color", "");
400            $(this).removeClass("folder-over");
401        },
402        drop: function(event, ui)
403        {
404            $(this).removeClass("folder-over");
405
406            if($(ui.draggable[0]).parent().find("input").val() == "localFolder" && $(this).parents("li").find("input").first().val() != "localFolder")
407            {
408                return write_msg(get_lang("Ohh no, it isn't possible to send a folder by Archiver to My folders"));
409            }
410            else if(!$(ui.draggable[0]).parent().find("input").val() && $(this).parents("li").find("input").first().val() == "localFolder")
411            {
412                return write_msg(get_lang("Ohh no, it isn't possible to send a folder by My folders to Archiver"));
413            }
414
415            if($(this).parent().attr('id') == undefined)
416            {
417
418                var folder_to = 'INBOX';
419                var to_folder_title = get_lang("Inbox");
420            }
421            else
422            {
423                var folder_to = $(this).parent().attr('id');
424                var to_folder_title = $(this).attr('title');
425            }
426            var folder_to_move = ui.draggable.parent().attr('id');
427            var border_id = ui.draggable.find("input[type=hidden]").attr("name");
428            // eventnsagens : SE O DROP VIER DA LISTA DE eventNSAGENS :
429            if(folder_to_move == "tbody_box")
430            {
431                move_msgs2(get_current_folder(), 'selected', 0, folder_to, to_folder_title, true);
432                //Correção para realinhamento da grid de mensagens no navegador Chrome.
433                if(is_webkit)
434                {
435                    var table = $('#table_box');
436                    $('#divScrollMain_0').html('');
437                    $('#divScrollMain_0').html(table);
438                    $(".ui-draggable-dragging").remove();
439                }
440                return;
441            }
442            //SE FOR DE UMA PESQUISA RAPIDA
443            else if(ui.draggable.parents('[id^="content_id_"]')[0])
444            {
445                move_search_msgs("content_id_" + border_id, folder_to, to_folder_title);
446                return;
447            }
448            // eventnsagens : SE O DROP VIER DE UMA ABA ABERTA
449            else if(folder_to_move == "border_tr")
450            {
451                var id_msg = border_id.split("_")[0];
452                folder = $("#input_folder_" + border_id + "_r")[0] ? $("#input_folder_" + border_id + "_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id] : get_current_folder());
453                alternate_border(border_id);
454                move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title, true);
455                return;
456            }
457            // SE O DROP VIER DA LISTA DE PASTAS
458            else
459            {
460                var folder_to_exist = folder_to_move.split(cyrus_delimiter);
461                folder_to_exist = folder_to + cyrus_delimiter + folder_to_exist[folder_to_exist.length - 1];
462
463                //VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS
464                if(valid_tabs(ui.draggable.parent().find("li"), folder_to_move))
465                {
466                    return;
467                }
468                //FIM : VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS;
469                // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA PARA O eventSMO LOCAL
470                if(folder_to_exist == folder_to_move)
471                {
472                    return write_msg(get_lang("Thie folder is already in this place"));
473                }
474
475                // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA ABERTA NO momentO
476                if(folder_to_move == get_current_folder())
477                {
478                    return write_msg(get_lang("It's not possible move this folder, because it is being used in the moment!"));
479                }
480
481                // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA FILHA DA PASTA ABERTA NO momentO
482                if(ui.draggable.parent().find(".selected")[0])
483                {
484                    return write_msg(get_lang("It's not possible move this folder, because its subfolder is being used in the moment!"));
485                }
486
487                // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA PAI PARA DENTRO DE UMA FILHA
488                if(ui.draggable.parent().find('[id="' + folder_to + '"]')[0])
489                {
490                    return write_msg(get_lang("It's not possible to move this folder to its subfolders!"));
491                }
492
493                if($('[id="' + folder_to_exist + '"]').length)
494                {
495                    return write_msg(get_lang("Can not move this folder to this location, because the target has already a folder with this name"));
496                }
497
498                $(this).addClass("folders-loading");
499
500
501                if($(this).parents("li").find("input").first().val() == "localFolder")
502                {
503                    var idFolder = $(this).parent().attr("id").split("_")[2];
504
505                    expresso_mail_archive.moveFolder(idFolder, folder_to_move.split("_")[2]);
506                    cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
507                }
508                else
509                {
510                    $.ajax(
511                    {
512                        url: "controller.php?" + $.param(
513                        {
514                            action: "$this.imap_functions.move_folder",
515                            folder_to_move: folder_to_move,
516                            folder_to: folder_to
517                        }),
518                        success: function(data)
519                        {
520                            cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
521                            data = connector.unserialize(data);
522                            if(data == "Permission denied")
523                            {
524                                write_msg(get_lang("Permission denied"));
525                            }
526                            else if(data)
527                            {
528                                write_msg(get_lang("The folder was successfully moved"));
529                            }
530                            else
531                            {
532                                write_msg(get_lang("ERROR moving your folder."));
533                            }
534                        }
535                    });
536                }
537            }
538        }
539    });
540    $(".folder")
541    .not(".shared-folders, .followup-messages")
542    .parent()
543    .find(".folder")
544    .not($('#message-attach-dialog').find('.folder'))
545    .hover(
546    function()
547    {
548        //CASO A LI NÃO TENHA UM eventNU FLUTUANTE AINDA, O eventNU É ADICIONADO!
549        if(!$(this).children(":last").hasClass("float-menu") && !$(this).children(":last").hasClass("new_folder") && !($(this).next().hasClass("local-connect")))
550        { /*se houver a classe local-connect, não adiciona o botão de conectar*/
551            var folder_ = $(this);
552            var folder_name;
553            var shared = {
554                head: false,
555                valid: false
556            };
557            if(folder_.parent().attr('id'))
558            {
559                folder_name = folder_.parent().attr('id').split(cyrus_delimiter);
560                folder_name = folder_name[folder_name.length - 1];
561                shared.valid = folder_.parent().attr('id').search("user/") == 0 ? true : false;
562            }
563            else folder_name = "Root";
564
565            if(shared.valid)
566            {
567                shared.head = folder_.parent().attr('id').split(cyrus_delimiter).length == 2 ? true : false;
568                var folder_name_parts = folder_.parent().attr('id').split(cyrus_delimiter);
569                var acls = shared_acls[folder_name_parts[0] + cyrus_delimiter + folder_name_parts[1]];
570            }
571
572            html = DataLayer.render("../prototype/modules/mail/templates/float_folder_menu.ejs", {
573                name_folder: folder_name,
574                flag: shared,
575                acl: acls
576            });
577            //FUNÇÃO DO eventNU FLUTUANTE EDITAR < BEGIN
578            var esc = false;
579            $(folder_).append(html).find(".float-menu-edit").click(function()
580            {
581                var folder_id = $(this).parents(".closed:first").attr('id');
582                var name = $.trim($(this).parents(".closed:first").find("span:first").text().split("[")[0]);
583                if($(this).parents(".closed:first").find("span:first").hasClass("selected"))
584                {
585                    return write_msg(get_lang("It's not possible rename this folder, because it is being used in the moment!"));
586                }
587                if($(this).parents(".closed:first").find("span.selected").length)
588                {
589                    return write_msg(get_lang("It's not possible rename this folder, because its subfolder is being used in the moment!"));
590                }
591                if(valid_tabs($(this).parents("li:first").find("li"), folder_id))
592                {
593                    return;
594                }
595                $(this).parents(".closed:first").find("span:first").empty().append("<input class='new_folder folder' type='text' maxlength='100'></input>");
596                $(".new_folder").focus().keydown(function(event)
597                {
598                    event.stopPropagation();
599                    if(event.keyCode == 13)
600                    {
601                        if($(this).val() != "")
602                        {
603                            /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_"
604                             * em parte do nome (palavra reservada para pastas locais) */
605                            if($(this).val().match(/[\/\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1)
606                            {
607                                return write_msg(get_lang("cannot create folder. try other folder name"));
608                            }
609                            var new_name = folder_id.replace(/[a-zA-Z0-9á-úÁ-Ú,=.^\s_-]+$/, $(this).val());
610                            if($('[id="' + new_name + '"]').length)
611                            {
612                                $(".folders-loading").removeClass("folders-loading");
613                                write_msg(get_lang("Mailbox already exists"));
614                                return draw_new_tree_folder();
615                            }
616                            $(".new_folder").parent().addClass("folders-loading");
617
618                            if($(this).parents("li").find("input").first().val() == "localFolder")
619                            {
620                                var idFolder = $(this).parents("li").first().attr("id").split("_")[2];
621                                expresso_mail_archive.renameFolder(idFolder, new_name);
622                                cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
623                            }
624                            else
625                            {
626                                $.ajax(
627                                {
628                                    url: "controller.php?action=$this.imap_functions.ren_mailbox",
629                                    type: "POST",
630                                    data: "current=" + folder_id + "&rename=" + new_name,
631                                    success: function(data)
632                                    {
633                                        data = connector.unserialize(data);
634                                        if(data == "Permission denied")
635                                        {
636                                            $(".folders-loading").removeClass("folders-loading");
637                                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
638                                            return write_msg(get_lang("Permission denied"));
639                                        }
640                                        write_msg(get_lang("The folder was successfully rename"));
641                                        cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
642                                    }
643                                });
644
645                            }
646                        }
647                        else
648                        {
649                            $(".new_folder").focusout();
650                        }
651                    }
652                    else if(event.keyCode == 27)
653                    {
654                        draw_new_tree_folder();
655                    }
656                }).focusout(function()
657                {
658                    draw_new_tree_folder();
659                }).val(name);
660            })
661            //FUNÇÃO DO eventNU FLUTUANTE EDITAR < END
662            //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < BEGIN
663            .end().find(".float-menu-remove").click(function()
664            {
665
666                var folder_id = $(this).parents(".closed:first").attr('id');
667                var folder_name = "<strong>" + $.trim($(this).parents(".closed:first").find(".folder").text().split("[")[0]) + "</strong>";
668
669                if(valid_tabs($(this).parents("li:first").find("li"), folder_id))
670                {
671                    return;
672                }
673                $(this).parents(".closed:first").find(".folder").addClass("folders-loading");
674
675                if($(this).parents(".closed:first").find("ul").length)
676                {
677                    $(this).parents(".closed:first").find(".folder").removeClass("folders-loading");
678                    return write_msg(get_lang("Delete/move subfolders first"));
679                }
680                if($(this).parents(".closed:first").find("span.selected").length)
681                {
682                    $(this).parents(".closed:first").find(".folder").removeClass("folders-loading");
683                    return write_msg(get_lang("It's not possible delete this folder, because it is being used in the moment!"));
684                }
685                var folder_span = $(this);
686                var confirm_text = get_lang("Do you wish to exclude the folder ");
687
688                $.Zebra_Dialog(confirm_text + folder_name, {
689                    'type': 'question',
690                    'overlay_opacity': '0.5',
691                    'custom_class': 'custom-zebra-filter',
692                    'buttons': [get_lang('Yes'), get_lang('No')],
693                    'onClose': function(caption)
694                    {
695
696                        if(caption == get_lang('Yes'))
697                        {
698                            if(folder_span.parents("li").find("input").first().val() == "localFolder")
699                            {
700                                var idFolder = folder_span.parents("li").first().attr("id").split("_")[2];
701                                expresso_mail_archive.deleteFolder(idFolder, folder_name);
702                                cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
703                            }
704                            else
705                            {
706                                $.ajax(
707                                {
708                                    url: "controller.php?action=$this.imap_functions.delete_mailbox",
709                                    type: "POST",
710                                    data: "del_past=" + folder_id,
711                                    success: function(data)
712                                    {
713                                        data = connector.unserialize(data);
714                                        if(data == "Mailbox does not exist")
715                                        {
716                                            $(".folders-loading").removeClass("folders-loading");
717                                            return write_msg(get_lang("Mailbox does not exist"));
718                                        }
719                                        else if(data == "Permission denied")
720                                        {
721                                            $(".folders-loading").removeClass("folders-loading");
722                                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
723                                            return write_msg(get_lang("Permission denied"));
724                                        }
725                                        write_msg(get_lang("The folder %1 was successfully removed", folder_name));
726                                        cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
727                                    }
728                                });
729                            }
730                        }
731                        else
732                        {
733                            folder_span.parents(".closed:first").find(".folder").removeClass("folders-loading");
734                            return;
735                        }
736                    }
737                });
738            })
739            //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < END
740            //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < BEGIN
741            .end().find(".float-menu-new").click(function()
742            {
743                $(this).parents(".float-menu").hide();
744                var selected_li = $(this).parents(".closed:first");
745                if(selected_li.find("ul:first").length)
746                {
747                    var new_folder = $("<li><input class='new_folder folder' type='text' maxlength='100'></input></li>").appendTo(selected_li.find("ul:first"));
748                    if(selected_li.find(".expandable-hitarea").length)
749                    {
750                        selected_li.find(".expandable-hitarea").trigger('click');
751                    }
752                    selected_li.find("ul:first").treeview(
753                    {
754                        add: new_folder
755                    });
756                }
757                else if(selected_li.length)
758                {
759                    var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li);
760                    selected_li.treeview(
761                    {
762                        add: new_folder
763                    });
764                }
765                else
766                {
767                    selected_li = $(this).parents(".head_folder").parent();
768                    if($(this).parents(".head_folder").parent().find(".expandable-hitarea").length)
769                    {
770                        $(this).parents(".head_folder").parent().find(".expandable-hitarea").trigger('click');
771                    }
772                    var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li);
773                    selected_li.treeview(
774                    {
775                        add: new_folder
776                    });
777                }
778                var existsIdenticalFolder = false;
779                selected_li.find(".new_folder").Watermark("Nova Pasta").focus().keydown(function(event)
780                {
781                    event.stopPropagation();
782
783                    existsIdenticalFolder = false;
784
785                    var ok = false;
786                    var makeChildren = function(auxNameFolder, father)
787                        {
788                            if(auxNameFolder.length == 0) return true;
789
790
791                            if(auxNameFolder[0] == "")
792                            {
793                                auxNameFolder.shift();
794                                makeChildren(auxNameFolder, father);
795                                return true;
796                            }
797                            if(ok == false)
798                            {
799                                expresso_mail_archive.createFolder((father ? father : "inbox"), auxNameFolder[0]);
800                            }
801
802                            expresso_mail_archive.getFoldersList(father);
803
804                            for(var ii = 0; ii < expresso_mail_archive.folders.length; ii++)
805                            {
806                                if(auxNameFolder[0] == expresso_mail_archive.folders[ii].name)
807                                {
808                                    auxNameFolder.shift();
809                                    save = expresso_mail_archive.folders;
810                                    expresso_mail_archive.createFolder(expresso_mail_archive.folders[ii].id, auxNameFolder[0]);
811                                    expresso_mail_archive.folders = save;
812                                    ok = true;
813                                    makeChildren(auxNameFolder, expresso_mail_archive.folders[ii].id);
814                                    return true;
815                                }
816                            }
817                        }
818
819
820                    if(event.keyCode == 13)
821                    {
822                        /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_"
823                         * em parte do nome (palavra reservada para pastas locais) */
824                        if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1)
825                        {
826                            return write_msg(get_lang("cannot create folder. try other folder name"));
827                        }
828                        if($(this).parents("li").find("input[type=hidden]").val() == "localFolder")
829                        {
830
831                            $(".new_folder").parent().addClass("folders-loading");
832
833                            var folderName = $(this).val();
834                            var folder = (folderName != "" ? folderName : get_lang("New Folder"));
835                            var father = typeof(selected_li.attr('id')) != "undefined" ? selected_li.attr('id').split("_")[2] : "home";
836
837                            $(this).parents(".treeview:first").find("li").each(function()
838                            {
839                                var eachFolder = $(this).find("span:first").text().trim();
840                                if(folder == eachFolder)
841                                {
842                                    existsIdenticalFolder = true;
843                                    return false;
844                                }
845                            });
846
847                            if(existsIdenticalFolder)
848                            {
849                                event.stopPropagation();
850                                write_msg(get_lang("Mailbox already exists"));
851                                draw_new_tree_folder();
852                                return false;
853                            }
854
855                            if(folderName.indexOf("/") != -1)
856                            {
857                                auxNameFolder = folderName.split("/");
858
859                                makeChildren(auxNameFolder, father);
860                            }
861                            else
862                            {
863                                var folder = (folderName != "" ? folderName : get_lang("New Folder"));
864                                create_new_local_folder((selected_li.attr('id') ? selected_li.attr('id') : "inbox"), folder);
865                            }
866
867                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
868                        }
869                        else
870                        {
871                            if($('[id="' + (selected_li.attr('id') ? selected_li.attr('id') : "INBOX") + cyrus_delimiter + $(this).val() + '"]').length)
872                            {
873                                $(".folders-loading").removeClass("folders-loading");
874                                write_msg(get_lang("Mailbox already exists"));
875                                return draw_new_tree_folder();
876                            }
877                            $(".new_folder").parent().addClass("folders-loading");
878                            create_new_folder(($(this).val() != "" ? $(this).val() : get_lang("New Folder")), (selected_li.attr('id') ? selected_li.attr('id') : "INBOX"));
879                        }
880
881                    }
882                    else if(event.keyCode == 27)
883                    {
884                        draw_new_tree_folder();
885                    }
886
887                }).focusout(function()
888                {
889                    if(!existsIdenticalFolder)
890                    {
891                        draw_new_tree_folder();
892                    }
893
894                });
895            }).end().find(".float-menu-export").click(function()
896            {
897                var name_box = $(this).parents("li:first").attr("id");
898
899                var name_folder = name_box.split(cyrus_delimiter)[name_box.split(cyrus_delimiter).length - 1];
900
901
902                var hand_export = function(data)
903                    {
904                        clean_msg();
905                        if(!data)
906                        {
907                            write_msg(get_lang('Error compressing messages (ZIP). Contact the administrator.'))
908                        }
909                        else if(data["empty_folder"] || data == "empty_folder")
910                        {
911                            write_msg(get_lang("The selected folder is empty."));
912                        }
913                        else download_attachments(null, null, data, null, null, name_folder + '.zip');
914                    }
915                if($(this).parents("li:first").find("input[type=hidden]:first").val() == "localFolder")
916                {
917                    expresso_mail_archive.listMessages(name_box.split("_")[2]);
918                    var msgsArchive = expresso_mail_archive.messageslisted;
919
920                    buildExportArchiver(msgsArchive, name_box);
921
922                }
923                else
924                {
925                    cExecute("$this.exporteml.export_all", hand_export, "folder=" + name_box);
926                }
927                write_msg(get_lang('You must wait while the messages will be exported...'), true);
928            });
929            //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < END
930        }
931        if(!$(".new_folder").length)
932        {
933            $(this).find(".float-menu:first").css("display", "");
934        }
935    }, function()
936    {
937        $(this).find(".float-menu:first").hide();
938    });
939    $("#new_m")
940    .html($('.selected .message_unseen_count:first .folder_unseen').html() ? $('.selected .message_unseen_count:first .folder_unseen').html() : "0")
941    .css("color", "red");
942}
Note: See TracBrowser for help on using the repository browser.