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

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

Ticket #3433 - O problema era apenas uma validação incorreta.

  • 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($(ui.draggable[0]).parent().find("input").val() == "localFolder" && $(this).parents("li").find("input").first().val() != "localFolder")
409            {
410                return write_msg(get_lang("Ohh no, it isn't possible to send a folder by Archiver to My folders"));
411            }
412            else if(!$(ui.draggable[0]).parent().find("input").val() && $(this).parents("li").find("input").first().val() == "localFolder")
413            {
414                return write_msg(get_lang("Ohh no, it isn't possible to send a folder by My folders to Archiver"));
415            }
416
417            if($(this).parent().attr('id') == undefined)
418            {
419
420                var folder_to = 'INBOX';
421                var to_folder_title = get_lang("Inbox");
422            }
423            else
424            {
425                var folder_to = $(this).parent().attr('id');
426                var to_folder_title = $(this).attr('title');
427            }
428            var folder_to_move = ui.draggable.parent().attr('id');
429            var border_id = ui.draggable.find("input[type=hidden]").attr("name");
430            // eventnsagens : SE O DROP VIER DA LISTA DE eventNSAGENS :
431            if(folder_to_move == "tbody_box")
432            {
433                move_msgs2(get_current_folder(), 'selected', 0, folder_to, to_folder_title, true);
434                //Correção para realinhamento da grid de mensagens no navegador Chrome.
435                if(is_webkit)
436                {
437                    var table = $('#table_box');
438                    $('#divScrollMain_0').html('');
439                    $('#divScrollMain_0').html(table);
440                    $(".ui-draggable-dragging").remove();
441                }
442                return;
443            }
444            //SE FOR DE UMA PESQUISA RAPIDA
445            else if(ui.draggable.parents('[id^="content_id_"]')[0])
446            {
447                move_search_msgs("content_id_" + border_id, folder_to, to_folder_title);
448                return;
449            }
450            // eventnsagens : SE O DROP VIER DE UMA ABA ABERTA
451            else if(folder_to_move == "border_tr")
452            {
453                var id_msg = border_id.split("_")[0];
454                folder = $("#input_folder_" + border_id + "_r")[0] ? $("#input_folder_" + border_id + "_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id] : get_current_folder());
455                alternate_border(border_id);
456                move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title, true);
457                return;
458            }
459            // SE O DROP VIER DA LISTA DE PASTAS
460            else
461            {
462                var folder_to_exist = folder_to_move.split(cyrus_delimiter);
463                folder_to_exist = folder_to + cyrus_delimiter + folder_to_exist[folder_to_exist.length - 1];
464
465                //VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS
466                if(valid_tabs(ui.draggable.parent().find("li"), folder_to_move))
467                {
468                    return;
469                }
470                //FIM : VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS;
471                // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA PARA O eventSMO LOCAL
472                if(folder_to_exist == folder_to_move)
473                {
474                    return write_msg(get_lang("Thie folder is already in this place"));
475                }
476
477                // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA ABERTA NO momentO
478                if(folder_to_move == get_current_folder())
479                {
480                    return write_msg(get_lang("It's not possible move this folder, because it is being used in the moment!"));
481                }
482
483                // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA FILHA DA PASTA ABERTA NO momentO
484                if(ui.draggable.parent().find(".selected")[0])
485                {
486                    return write_msg(get_lang("It's not possible move this folder, because its subfolder is being used in the moment!"));
487                }
488
489                // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA PAI PARA DENTRO DE UMA FILHA
490                if(ui.draggable.parent().find('[id="' + folder_to + '"]')[0])
491                {
492                    return write_msg(get_lang("It's not possible to move this folder to its subfolders!"));
493                }
494
495                if($('[id="' + folder_to_exist + '"]').length)
496                {
497                    return write_msg(get_lang("Can not move this folder to this location, because the target has already a folder with this name"));
498                }
499
500                $(this).addClass("folders-loading");
501
502
503                if($(this).parents("li").find("input").first().val() == "localFolder")
504                {
505                    var idFolder = $(this).parent().attr("id").split("_")[2];
506
507                    expresso_mail_archive.moveFolder(idFolder, folder_to_move.split("_")[2]);
508                    cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
509                }
510                else
511                {
512                    $.ajax(
513                    {
514                        url: "controller.php?" + $.param(
515                        {
516                            action: "$this.imap_functions.move_folder",
517                            folder_to_move: folder_to_move,
518                            folder_to: folder_to
519                        }),
520                        success: function(data)
521                        {
522                            cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
523                            data = connector.unserialize(data);
524                            if(data == "Permission denied")
525                            {
526                                write_msg(get_lang("Permission denied"));
527                            }
528                            else if(data)
529                            {
530                                write_msg(get_lang("The folder was successfully moved"));
531                            }
532                            else
533                            {
534                                write_msg(get_lang("ERROR moving your folder."));
535                            }
536                        }
537                    });
538                }
539            }
540        }
541    });
542    $(".folder")
543    .not(".shared-folders, .followup-messages")
544    .parent()
545    .find(".folder")
546    .not($('#message-attach-dialog').find('.folder'))
547    .hover(
548    function()
549    {
550        //CASO A LI NÃO TENHA UM eventNU FLUTUANTE AINDA, O eventNU É ADICIONADO!
551        if(!$(this).children(":last").hasClass("float-menu") && !$(this).children(":last").hasClass("new_folder") && !($(this).next().hasClass("local-connect")))
552        { /*se houver a classe local-connect, não adiciona o botão de conectar*/
553            var folder_ = $(this);
554            var folder_name;
555            var shared = {
556                head: false,
557                valid: false
558            };
559            if(folder_.parent().attr('id'))
560            {
561                folder_name = folder_.parent().attr('id').split(cyrus_delimiter);
562                folder_name = folder_name[folder_name.length - 1];
563                shared.valid = folder_.parent().attr('id').search("user/") == 0 ? true : false;
564            }
565            else folder_name = "Root";
566
567            if(shared.valid)
568            {
569                shared.head = folder_.parent().attr('id').split(cyrus_delimiter).length == 2 ? true : false;
570                var folder_name_parts = folder_.parent().attr('id').split(cyrus_delimiter);
571                var acls = shared_acls[folder_name_parts[0] + cyrus_delimiter + folder_name_parts[1]];
572            }
573
574            html = DataLayer.render("../prototype/modules/mail/templates/float_folder_menu.ejs", {
575                name_folder: folder_name,
576                flag: shared,
577                acl: acls
578            });
579            //FUNÇÃO DO eventNU FLUTUANTE EDITAR < BEGIN
580            var esc = false;
581            $(folder_).append(html).find(".float-menu-edit").click(function()
582            {
583                var folder_id = $(this).parents(".closed:first").attr('id');
584                var name = $.trim($(this).parents(".closed:first").find("span:first").text().split("[")[0]);
585                if($(this).parents(".closed:first").find("span:first").hasClass("selected"))
586                {
587                    return write_msg(get_lang("It's not possible rename this folder, because it is being used in the moment!"));
588                }
589                if($(this).parents(".closed:first").find("span.selected").length)
590                {
591                    return write_msg(get_lang("It's not possible rename this folder, because its subfolder is being used in the moment!"));
592                }
593                if(valid_tabs($(this).parents("li:first").find("li"), folder_id))
594                {
595                    return;
596                }
597                $(this).parents(".closed:first").find("span:first").empty().append("<input class='new_folder folder' type='text' maxlength='100'></input>");
598                $(".new_folder").focus().keydown(function(event)
599                {
600                    event.stopPropagation();
601                    if(event.keyCode == 13)
602                    {
603                        if($(this).val() != "")
604                        {
605                            /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_"
606                             * em parte do nome (palavra reservada para pastas locais) */
607                            if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1)
608                            {
609                                return write_msg(get_lang("cannot create folder. try other folder name"));
610                            }
611                            var new_name = folder_id.replace(/[a-zA-Z0-9á-úÁ-Ú,=^\s_-]+$/, $(this).val());
612                            if($('[id="' + new_name + '"]').length)
613                            {
614                                $(".folders-loading").removeClass("folders-loading");
615                                write_msg(get_lang("Mailbox already exists"));
616                                return draw_new_tree_folder();
617                            }
618                            $(".new_folder").parent().addClass("folders-loading");
619
620                            if($(this).parents("li").first().attr("id").indexOf("local_messages_") != -1)
621                            {
622                                var idFolder = $(this).parents("li").first().attr("id").split("_")[2];
623                                expresso_mail_archive.renameFolder(idFolder, new_name);
624                                cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
625                            }
626                            else
627                            {
628                                $.ajax(
629                                {
630                                    url: "controller.php?action=$this.imap_functions.ren_mailbox",
631                                    type: "POST",
632                                    data: "current=" + folder_id + "&rename=" + new_name,
633                                    success: function(data)
634                                    {
635                                        data = connector.unserialize(data);
636                                        if(data == "Permission denied")
637                                        {
638                                            $(".folders-loading").removeClass("folders-loading");
639                                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
640                                            return write_msg(get_lang("Permission denied"));
641                                        }
642                                        write_msg(get_lang("The folder was successfully rename"));
643                                        cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
644                                    }
645                                });
646
647                            }
648                        }
649                        else
650                        {
651                            $(".new_folder").focusout();
652                        }
653                    }
654                    else if(event.keyCode == 27)
655                    {
656                        draw_new_tree_folder();
657                    }
658                }).focusout(function()
659                {
660                    draw_new_tree_folder();
661                }).val(name);
662            })
663            //FUNÇÃO DO eventNU FLUTUANTE EDITAR < END
664            //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < BEGIN
665            .end().find(".float-menu-remove").click(function()
666            {
667
668                var folder_id = $(this).parents(".closed:first").attr('id');
669                var folder_name = "<strong>" + $.trim($(this).parents(".closed:first").find(".folder").text().split("[")[0]) + "</strong>";
670
671                if(valid_tabs($(this).parents("li:first").find("li"), folder_id))
672                {
673                    return;
674                }
675                $(this).parents(".closed:first").find(".folder").addClass("folders-loading");
676
677                if($(this).parents(".closed:first").find("ul").length)
678                {
679                    $(this).parents(".closed:first").find(".folder").removeClass("folders-loading");
680                    return write_msg(get_lang("Delete/move subfolders first"));
681                }
682                if($(this).parents(".closed:first").find("span.selected").length)
683                {
684                    $(this).parents(".closed:first").find(".folder").removeClass("folders-loading");
685                    return write_msg(get_lang("It's not possible delete this folder, because it is being used in the moment!"));
686                }
687                var folder_span = $(this);
688                var confirm_text = get_lang("Do you wish to exclude the folder ");
689
690                $.Zebra_Dialog(confirm_text + folder_name, {
691                    'type': 'question',
692                    'overlay_opacity': '0.5',
693                    'custom_class': 'custom-zebra-filter',
694                    'buttons': [get_lang('Yes'), get_lang('No')],
695                    'onClose': function(caption)
696                    {
697
698                        if(caption == get_lang('Yes'))
699                        {
700                            if(folder_span.parents("li").find("input").first().val() == "localFolder")
701                            {
702                                var idFolder = folder_span.parents("li").first().attr("id").split("_")[2];
703                                expresso_mail_archive.deleteFolder(idFolder, folder_name);
704                                cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
705                            }
706                            else
707                            {
708                                $.ajax(
709                                {
710                                    url: "controller.php?action=$this.imap_functions.delete_mailbox",
711                                    type: "POST",
712                                    data: "del_past=" + folder_id,
713                                    success: function(data)
714                                    {
715                                        data = connector.unserialize(data);
716                                        if(data == "Mailbox does not exist")
717                                        {
718                                            $(".folders-loading").removeClass("folders-loading");
719                                            return write_msg(get_lang("Mailbox does not exist"));
720                                        }
721                                        else if(data == "Permission denied")
722                                        {
723                                            $(".folders-loading").removeClass("folders-loading");
724                                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
725                                            return write_msg(get_lang("Permission denied"));
726                                        }
727                                        write_msg(get_lang("The folder %1 was successfully removed", folder_name));
728                                        cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
729                                    }
730                                });
731                            }
732                        }
733                        else
734                        {
735                            folder_span.parents(".closed:first").find(".folder").removeClass("folders-loading");
736                            return;
737                        }
738                    }
739                });
740            })
741            //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < END
742            //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < BEGIN
743            .end().find(".float-menu-new").click(function()
744            {
745                $(this).parents(".float-menu").hide();
746                var selected_li = $(this).parents(".closed:first");
747                if(selected_li.find("ul:first").length)
748                {
749                    var new_folder = $("<li><input class='new_folder folder' type='text' maxlength='100'></input></li>").appendTo(selected_li.find("ul:first"));
750                    if(selected_li.find(".expandable-hitarea").length)
751                    {
752                        selected_li.find(".expandable-hitarea").trigger('click');
753                    }
754                    selected_li.find("ul:first").treeview(
755                    {
756                        add: new_folder
757                    });
758                }
759                else if(selected_li.length)
760                {
761                    var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li);
762                    selected_li.treeview(
763                    {
764                        add: new_folder
765                    });
766                }
767                else
768                {
769                    selected_li = $(this).parents(".head_folder").parent();
770                    if($(this).parents(".head_folder").parent().find(".expandable-hitarea").length)
771                    {
772                        $(this).parents(".head_folder").parent().find(".expandable-hitarea").trigger('click');
773                    }
774                    var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li);
775                    selected_li.treeview(
776                    {
777                        add: new_folder
778                    });
779                }
780                var existsIdenticalFolder = false;
781                selected_li.find(".new_folder").Watermark("Nova Pasta").focus().keydown(function(event)
782                {
783                    event.stopPropagation();
784
785                    existsIdenticalFolder = false;
786
787                    var ok = false;
788                    var makeChildren = function(auxNameFolder, father)
789                        {
790                            if(auxNameFolder.length == 0) return true;
791
792
793                            if(auxNameFolder[0] == "")
794                            {
795                                auxNameFolder.shift();
796                                makeChildren(auxNameFolder, father);
797                                return true;
798                            }
799                            if(ok == false)
800                            {
801                                expresso_mail_archive.createFolder((father ? father : "inbox"), auxNameFolder[0]);
802                            }
803
804                            expresso_mail_archive.getFoldersList(father);
805
806                            for(var ii = 0; ii < expresso_mail_archive.folders.length; ii++)
807                            {
808                                if(auxNameFolder[0] == expresso_mail_archive.folders[ii].name)
809                                {
810                                    auxNameFolder.shift();
811                                    save = expresso_mail_archive.folders;
812                                    expresso_mail_archive.createFolder(expresso_mail_archive.folders[ii].id, auxNameFolder[0]);
813                                    expresso_mail_archive.folders = save;
814                                    ok = true;
815                                    makeChildren(auxNameFolder, expresso_mail_archive.folders[ii].id);
816                                    return true;
817                                }
818                            }
819                        }
820
821
822                    if(event.keyCode == 13)
823                    {
824                        /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_"
825                         * em parte do nome (palavra reservada para pastas locais) */
826                        if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1)
827                        {
828                            return write_msg(get_lang("cannot create folder. try other folder name"));
829                        }
830                        if($(this).parents("li").find("input[type=hidden]").val() == "localFolder")
831                        {
832
833                            $(".new_folder").parent().addClass("folders-loading");
834
835                            var folderName = $(this).val();
836                            var folder = (folderName != "" ? folderName : get_lang("New Folder"));
837                            var father = typeof(selected_li.attr('id')) != "undefined" ? selected_li.attr('id').split("_")[2] : "home";
838
839                            $(this).parents(".treeview:first").find("li").each(function()
840                            {
841                                var eachFolder = $(this).find("span:first").text().trim();
842                                if(folder == eachFolder)
843                                {
844                                    existsIdenticalFolder = true;
845                                    return false;
846                                }
847                            });
848
849                            if(existsIdenticalFolder)
850                            {
851                                event.stopPropagation();
852                                write_msg(get_lang("Mailbox already exists"));
853                                draw_new_tree_folder();
854                                return false;
855                            }
856
857                            if(folderName.indexOf("/") != -1)
858                            {
859                                auxNameFolder = folderName.split("/");
860
861                                makeChildren(auxNameFolder, father);
862                            }
863                            else
864                            {
865                                var folder = (folderName != "" ? folderName : get_lang("New Folder"));
866                                create_new_local_folder((selected_li.attr('id') ? selected_li.attr('id') : "inbox"), folder);
867                            }
868
869                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
870                        }
871                        else
872                        {
873                            if($('[id="' + (selected_li.attr('id') ? selected_li.attr('id') : "INBOX") + cyrus_delimiter + $(this).val() + '"]').length)
874                            {
875                                $(".folders-loading").removeClass("folders-loading");
876                                write_msg(get_lang("Mailbox already exists"));
877                                return draw_new_tree_folder();
878                            }
879                            $(".new_folder").parent().addClass("folders-loading");
880                            create_new_folder(($(this).val() != "" ? $(this).val() : get_lang("New Folder")), (selected_li.attr('id') ? selected_li.attr('id') : "INBOX"));
881                        }
882
883                    }
884                    else if(event.keyCode == 27)
885                    {
886                        draw_new_tree_folder();
887                    }
888
889                }).focusout(function()
890                {
891                    if(!existsIdenticalFolder)
892                    {
893                        draw_new_tree_folder();
894                    }
895
896                });
897            }).end().find(".float-menu-export").click(function()
898            {
899                var name_box = $(this).parents("li:first").attr("id");
900
901                var name_folder = name_box.split(cyrus_delimiter)[name_box.split(cyrus_delimiter).length - 1];
902
903
904                var hand_export = function(data)
905                    {
906                        clean_msg();
907                        if(!data)
908                        {
909                            write_msg(get_lang('Error compressing messages (ZIP). Contact the administrator.'))
910                        }
911                        else if(data["empty_folder"] || data == "empty_folder")
912                        {
913                            write_msg(get_lang("The selected folder is empty."));
914                        }
915                        else download_attachments(null, null, data, null, null, name_folder + '.zip');
916                    }
917                if($(this).parents("li:first").find("input[type=hidden]:first").val() == "localFolder")
918                {
919                    expresso_mail_archive.listMessages(name_box.split("_")[2]);
920                    var msgsArchive = expresso_mail_archive.messageslisted;
921
922                    buildExportArchiver(msgsArchive, name_box);
923
924                }
925                else
926                {
927                    cExecute("$this.exporteml.export_all", hand_export, "folder=" + name_box);
928                }
929                write_msg(get_lang('You must wait while the messages will be exported...'), true);
930            });
931            //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < END
932        }
933        if(!$(".new_folder").length)
934        {
935            $(this).find(".float-menu:first").css("display", "");
936        }
937    }, function()
938    {
939        $(this).find(".float-menu:first").hide();
940    });
941    $("#new_m")
942    .html($('.selected .message_unseen_count:first .folder_unseen').html() ? $('.selected .message_unseen_count:first .folder_unseen').html() : "0")
943    .css("color", "red");
944}
Note: See TracBrowser for help on using the repository browser.