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

Revision 8111, 37.7 KB checked in by thiago, 11 years ago (diff)

Ticket #3436 - Algumas correções adicionais (archiver) para esse ticket

  • 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   
146    for(var i = 0; i < folders.length; i++)
147    {
148       
149        if(/*/^INBOX/.test(folders[i].id)*/folders[i].id.substr(0,5) == "INBOX")
150        {
151            if(!unorphanize(tree1, folders[i]))
152            {
153                folders[i].children = new Array();
154
155                tree1.push(folders[i]);
156            }
157        }
158        else if(/*/^user/.test(folders[i].id)*/folders[i].id.substr(0,4) == "user")
159        {
160            if(!unorphanize(tree2, folders[i]))
161            {
162                folders[i].children = new Array();
163                tree2.push(folders[i]);
164            }
165        }
166        else if(/*/^local_messages/.test(folders[i].id)*/folders[i].id.substr(0,14) == "local_messages")
167        {
168
169            tree3.push(folders[i]);
170
171        }
172    }
173
174    for(var i = 0; i < tree1.length; i++)
175    {
176        count_unseen_children(tree1[i]);
177    }
178    for(var i = 0; i < tree2.length; i++)
179    {
180        count_unseen_children(tree2[i]);
181    }
182    for(var i = 0; i < tree3.length; i++)
183    {
184        count_unseen_children(tree3[i]);
185    }
186    cp_tree1 = tree1;
187    cp_tree2 = tree2;
188    cp_tree3 = tree3;
189    var shared_acls = {};
190
191    $.each(cp_tree2, function(index, value)
192    {
193        shared_acls[value.id] = value.acl_share;
194    });
195
196    if(preferences.use_local_messages == 1)
197    {
198        $("#content_folders").removeClass("menu-degrade").parent().removeClass("image-menu");
199        mail_archive_url = mail_archive_protocol + "://" + mail_archive_host + ":" + mail_archive_port + "/admin";
200    }
201
202    var html = DataLayer.render('../prototype/modules/mail/templates/detailedfoldertree.ejs', {
203        folders: [tree1, tree2, tree3]
204    });
205    var folders_html = $("#content_folders").html(html).find(".mainfoldertree").treeview(
206    {
207        persist: "cookie",
208        animated: "fast"
209    }).find(".folder").unbind("click").click(function(event)
210    {
211
212        if($(this).next().hasClass("local-connect"))
213        {
214            return;
215        }
216
217        if($(this).hasClass("local-folder"))
218        {
219            return;
220        }
221
222        // MUDANÇA DE PASTAS!
223        var target = $(this);
224
225        if($(".folders-loading").length)
226        {
227            return;
228        }
229
230        if($(event.target).parent().is(".float-menu"))
231        {
232            return;
233        }
234
235        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'))
236        {
237            return;
238        }
239
240        if(target.parent().find(".new_folder").length)
241        {
242            return;
243        }
244
245        if(!target.attr('id'))
246        {
247            target = target.parent();
248        }
249        if(target[0] == $(".mainfoldertree")[0])
250        {
251            return;
252        }
253
254        var uiId = target.attr('id');
255        var child = target.find('.folder');
256
257        if(!target.is('.mainfoldertree > .expandable-hitarea, .mainfoldertree > .collapsable-hitarea'))
258        {
259            $('.filetree span.folder.selected').removeClass('selected');
260            $(target).children('.folder').addClass('selected');
261        }
262        $(this).addClass("folders-loading");
263        selected = target.attr('id');
264        change_folder(target.attr('id'), child.attr('title'));
265   
266        $.ajax(
267        {
268            url: "controller.php?" + $.param(
269            {
270                action: "$this.imap_functions.get_folders_list",
271                folder: target.attr('id')
272            }),
273            success: function(data)
274            {
275                data = connector.unserialize(data);
276
277                if(data)
278                {
279                    build_quota(data);
280                }
281            }
282        });
283
284    }).filter('.followup-messages').click(function(event, ui)
285    {
286        search_emails("UNDELETED KEYWORD \"$Followupflagged\"");
287    }).end().end();
288
289    $('.upper').droppable(
290    {
291        over: function(event, ui)
292        {
293            $('#content_folders').autoscroll(
294            {
295                direction: 'up',
296                step: 150,
297                scroll: true
298            });
299        },
300        out: function(event, ui)
301        {
302            $('#content_folders').autoscroll('destroy');
303        }
304    });
305
306    $('.lower').droppable(
307    {
308        over: function(event, ui)
309        {
310            $('#content_folders').autoscroll(
311            {
312                direction: 'down',
313                step: 150,
314                scroll: true
315            });
316        },
317        out: function(event, ui)
318        {
319            $('#content_folders').autoscroll('destroy');
320        }
321    });
322
323
324
325    folders_html.find('[id="' + selected + '"]').children().addClass("selected");
326    $(".folder")
327    .not(".head_folder")
328    .not(".shared-folders")
329    .not(".shared-folders + ul .folder")
330    .parent()
331    .find(".folder")
332    .not(".head_folder,.inbox,.drafts,.sent,.spam,.trash")
333    .draggable(
334    {
335        // DRAG DE PASTAS
336        start: function()
337        {
338            $(this).css("color", "gray");
339            $('.upper, .lower').show();
340            $(".lower").css("top", ($("#content_folders").height() - 18) + $("#content_folders").offset().top);
341        },
342        stop: function()
343        {
344            $(this).css("color", "");
345            $('.upper, .lower').hide();
346        },
347        revert: "invalid",
348        helper: function(event)
349        {
350            if($.trim(($(this).text().split("["))[0]).length > 18) return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {
351                texto: (($(this).text().split("["))[0]).substring(0, 18) + "...",
352                type: "folder"
353            }));
354            return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {
355                texto: (($(this).text().split("["))[0]),
356                type: "folder"
357            }));
358        },
359        delay: 150,
360        refreshPositions: true,
361        zIndex: 2700,
362        //scroll: true,
363        //scrollSensitivity: 100,
364        //scrollSpeed: 100
365        containment: $("#divAppbox")
366    });
367    $(".folder")
368    .not(".head_folder")
369    .not(".shared-folders")
370    .parent()
371    .find(".folder")
372    .not(".head_folder,.inbox,.drafts,.sent,.spam,.trash")
373    .end()
374    .droppable(
375    {
376        //DROP DE PASTAS
377        over: function(a, b)
378        {
379            //INICIO : SE A PASTA CONTER FILHAS EXPANDE
380            $(b.helper).find(".draggin-folder,.draggin-mail").css("color", "green");
381            over = $(this);
382            $(this).addClass("folder-over");
383            if(($(this)[0] != $(this).parent().find(".head_folder")[0])) if($(this).prev()[0]) if($(this).parent().find(".expandable-hitarea")[0] == $(this).prev()[0])
384            {
385                setTimeout(function()
386                {
387                    if(over.hasClass("folder-over"))
388                    {
389                        over.prev().trigger("click");
390                    }
391                }, 500);
392
393            }
394            //FIM : SE A PASTA CONTER FILHAS EXPANDE           
395            //SETA BORDA EM VOLTA DA PASTA
396            //
397        },
398        out: function(a, b)
399        {
400            //RETIRA BORDA EM VOLTA DA PASTA
401            $(b.helper).find(".draggin-folder,.draggin-mail").css("color", "");
402            $(this).removeClass("folder-over");
403        },
404        drop: function(event, ui)
405        {
406            $(this).removeClass("folder-over");
407
408            if($(this).parent().attr('id') == undefined)
409            {
410                var folder_to = 'INBOX';
411                var to_folder_title = get_lang("Inbox");
412            }
413            else
414            {
415                var folder_to = $(this).parent().attr('id');
416                var to_folder_title = $(this).attr('title');
417            }
418            var folder_to_move = ui.draggable.parent().attr('id');
419            var border_id = ui.draggable.find("input[type=hidden]").attr("name");
420            // eventnsagens : SE O DROP VIER DA LISTA DE eventNSAGENS :
421            if(folder_to_move == "tbody_box")
422            {
423                move_msgs2(get_current_folder(), 'selected', 0, folder_to, to_folder_title, true);
424                //Correção para realinhamento da grid de mensagens no navegador Chrome.
425                if(is_webkit)
426                {
427                    var table = $('#table_box');
428                    $('#divScrollMain_0').html('');
429                    $('#divScrollMain_0').html(table);
430                    $(".ui-draggable-dragging").remove();
431                }
432                return;
433            }
434            //SE FOR DE UMA PESQUISA RAPIDA
435            else if(ui.draggable.parents('[id^="content_id_"]')[0])
436            {
437                move_search_msgs("content_id_" + border_id, folder_to, to_folder_title);
438                return;
439            }
440            // eventnsagens : SE O DROP VIER DE UMA ABA ABERTA
441            else if(folder_to_move == "border_tr")
442            {
443                var id_msg = border_id.split("_")[0];
444                folder = $("#input_folder_" + border_id + "_r")[0] ? $("#input_folder_" + border_id + "_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id] : get_current_folder());
445                alternate_border(border_id);
446                move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title, true);
447                return;
448            }
449            // SE O DROP VIER DA LISTA DE PASTAS
450            else
451            {
452                if($(ui.draggable[0]).parent().find("input").val() == "localFolder" && $(this).parents("li").find("input").first().val() != "localFolder")
453                {
454                    return write_msg(get_lang("It isn't possible to send a folder by Archiver to My folders"));
455                }
456                else if(!$(ui.draggable[0]).parent().find("input").val() && $(this).parents("li").find("input").first().val() == "localFolder")
457                {
458                    return write_msg(get_lang("It isn't possible to send a folder by My folders to Archiver"));
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").first().attr("id").indexOf("local_messages_") != -1)
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.