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

Revision 8104, 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                alert(1);
584                var folder_id = $(this).parents(".closed:first").attr('id');
585                var name = $.trim($(this).parents(".closed:first").find("span:first").text().split("[")[0]);
586                if($(this).parents(".closed:first").find("span:first").hasClass("selected"))
587                {
588                    return write_msg(get_lang("It's not possible rename this folder, because it is being used in the moment!"));
589                }
590                if($(this).parents(".closed:first").find("span.selected").length)
591                {
592                    return write_msg(get_lang("It's not possible rename this folder, because its subfolder is being used in the moment!"));
593                }
594                if(valid_tabs($(this).parents("li:first").find("li"), folder_id))
595                {
596                    return;
597                }
598                $(this).parents(".closed:first").find("span:first").empty().append("<input class='new_folder folder' type='text' maxlength='100'></input>");
599                $(".new_folder").focus().keydown(function(event)
600                {
601                    event.stopPropagation();
602                    if(event.keyCode == 13)
603                    {
604                        if($(this).val() != "")
605                        {
606                            /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_"
607                             * em parte do nome (palavra reservada para pastas locais) */
608                            if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1)
609                            {
610                                return write_msg(get_lang("cannot create folder. try other folder name"));
611                            }
612                            var new_name = folder_id.replace(/[a-zA-Z0-9á-úÁ-Ú,=^\s_-]+$/, $(this).val());
613                            if($('[id="' + new_name + '"]').length)
614                            {
615                                $(".folders-loading").removeClass("folders-loading");
616                                write_msg(get_lang("Mailbox already exists"));
617                                return draw_new_tree_folder();
618                            }
619                            $(".new_folder").parent().addClass("folders-loading");
620
621                            if($(this).parents("li").first().attr("id").indexOf("local_messages_") != -1)
622                            {
623                                var idFolder = $(this).parents("li").first().attr("id").split("_")[2];
624                                expresso_mail_archive.renameFolder(idFolder, new_name);
625                                cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
626                            }
627                            else
628                            {
629                                $.ajax(
630                                {
631                                    url: "controller.php?action=$this.imap_functions.ren_mailbox",
632                                    type: "POST",
633                                    data: "current=" + folder_id + "&rename=" + new_name,
634                                    success: function(data)
635                                    {
636                                        data = connector.unserialize(data);
637                                        if(data == "Permission denied")
638                                        {
639                                            $(".folders-loading").removeClass("folders-loading");
640                                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
641                                            return write_msg(get_lang("Permission denied"));
642                                        }
643                                        write_msg(get_lang("The folder was successfully rename"));
644                                        cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
645                                    }
646                                });
647
648                            }
649                        }
650                        else
651                        {
652                            $(".new_folder").focusout();
653                        }
654                    }
655                    else if(event.keyCode == 27)
656                    {
657                        draw_new_tree_folder();
658                    }
659                }).focusout(function()
660                {
661                    draw_new_tree_folder();
662                }).val(name);
663            })
664            //FUNÇÃO DO eventNU FLUTUANTE EDITAR < END
665            //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < BEGIN
666            .end().find(".float-menu-remove").click(function()
667            {
668
669                var folder_id = $(this).parents(".closed:first").attr('id');
670                var folder_name = "<strong>" + $.trim($(this).parents(".closed:first").find(".folder").text().split("[")[0]) + "</strong>";
671
672                if(valid_tabs($(this).parents("li:first").find("li"), folder_id))
673                {
674                    return;
675                }
676                $(this).parents(".closed:first").find(".folder").addClass("folders-loading");
677
678                if($(this).parents(".closed:first").find("ul").length)
679                {
680                    $(this).parents(".closed:first").find(".folder").removeClass("folders-loading");
681                    return write_msg(get_lang("Delete/move subfolders first"));
682                }
683                if($(this).parents(".closed:first").find("span.selected").length)
684                {
685                    $(this).parents(".closed:first").find(".folder").removeClass("folders-loading");
686                    return write_msg(get_lang("It's not possible delete this folder, because it is being used in the moment!"));
687                }
688                var folder_span = $(this);
689                var confirm_text = get_lang("Do you wish to exclude the folder ");
690
691                $.Zebra_Dialog(confirm_text + folder_name, {
692                    'type': 'question',
693                    'overlay_opacity': '0.5',
694                    'custom_class': 'custom-zebra-filter',
695                    'buttons': [get_lang('Yes'), get_lang('No')],
696                    'onClose': function(caption)
697                    {
698
699                        if(caption == get_lang('Yes'))
700                        {
701                            if(folder_span.parents("li").find("input").first().val() == "localFolder")
702                            {
703                                var idFolder = folder_span.parents("li").first().attr("id").split("_")[2];
704                                expresso_mail_archive.deleteFolder(idFolder, folder_name);
705                                cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
706                            }
707                            else
708                            {
709                                $.ajax(
710                                {
711                                    url: "controller.php?action=$this.imap_functions.delete_mailbox",
712                                    type: "POST",
713                                    data: "del_past=" + folder_id,
714                                    success: function(data)
715                                    {
716                                        data = connector.unserialize(data);
717                                        if(data == "Mailbox does not exist")
718                                        {
719                                            $(".folders-loading").removeClass("folders-loading");
720                                            return write_msg(get_lang("Mailbox does not exist"));
721                                        }
722                                        else if(data == "Permission denied")
723                                        {
724                                            $(".folders-loading").removeClass("folders-loading");
725                                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
726                                            return write_msg(get_lang("Permission denied"));
727                                        }
728                                        write_msg(get_lang("The folder %1 was successfully removed", folder_name));
729                                        cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu);
730                                    }
731                                });
732                            }
733                        }
734                        else
735                        {
736                            folder_span.parents(".closed:first").find(".folder").removeClass("folders-loading");
737                            return;
738                        }
739                    }
740                });
741            })
742            //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < END
743            //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < BEGIN
744            .end().find(".float-menu-new").click(function()
745            {
746                $(this).parents(".float-menu").hide();
747                var selected_li = $(this).parents(".closed:first");
748                if(selected_li.find("ul:first").length)
749                {
750                    var new_folder = $("<li><input class='new_folder folder' type='text' maxlength='100'></input></li>").appendTo(selected_li.find("ul:first"));
751                    if(selected_li.find(".expandable-hitarea").length)
752                    {
753                        selected_li.find(".expandable-hitarea").trigger('click');
754                    }
755                    selected_li.find("ul:first").treeview(
756                    {
757                        add: new_folder
758                    });
759                }
760                else if(selected_li.length)
761                {
762                    var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li);
763                    selected_li.treeview(
764                    {
765                        add: new_folder
766                    });
767                }
768                else
769                {
770                    selected_li = $(this).parents(".head_folder").parent();
771                    if($(this).parents(".head_folder").parent().find(".expandable-hitarea").length)
772                    {
773                        $(this).parents(".head_folder").parent().find(".expandable-hitarea").trigger('click');
774                    }
775                    var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li);
776                    selected_li.treeview(
777                    {
778                        add: new_folder
779                    });
780                }
781                var existsIdenticalFolder = false;
782                selected_li.find(".new_folder").Watermark("Nova Pasta").focus().keydown(function(event)
783                {
784                    event.stopPropagation();
785
786                    existsIdenticalFolder = false;
787
788                    var ok = false;
789                    var makeChildren = function(auxNameFolder, father)
790                        {
791                            if(auxNameFolder.length == 0) return true;
792
793
794                            if(auxNameFolder[0] == "")
795                            {
796                                auxNameFolder.shift();
797                                makeChildren(auxNameFolder, father);
798                                return true;
799                            }
800                            if(ok == false)
801                            {
802                                expresso_mail_archive.createFolder((father ? father : "inbox"), auxNameFolder[0]);
803                            }
804
805                            expresso_mail_archive.getFoldersList(father);
806
807                            for(var ii = 0; ii < expresso_mail_archive.folders.length; ii++)
808                            {
809                                if(auxNameFolder[0] == expresso_mail_archive.folders[ii].name)
810                                {
811                                    auxNameFolder.shift();
812                                    save = expresso_mail_archive.folders;
813                                    expresso_mail_archive.createFolder(expresso_mail_archive.folders[ii].id, auxNameFolder[0]);
814                                    expresso_mail_archive.folders = save;
815                                    ok = true;
816                                    makeChildren(auxNameFolder, expresso_mail_archive.folders[ii].id);
817                                    return true;
818                                }
819                            }
820                        }
821
822
823                    if(event.keyCode == 13)
824                    {
825                        /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_"
826                         * em parte do nome (palavra reservada para pastas locais) */
827                        if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1)
828                        {
829                            return write_msg(get_lang("cannot create folder. try other folder name"));
830                        }
831                        if($(this).parents("li").find("input[type=hidden]").val() == "localFolder")
832                        {
833
834                            $(".new_folder").parent().addClass("folders-loading");
835
836                            var folderName = $(this).val();
837                            var folder = (folderName != "" ? folderName : get_lang("New Folder"));
838                            var father = typeof(selected_li.attr('id')) != "undefined" ? selected_li.attr('id').split("_")[2] : "home";
839
840                            $(this).parents(".treeview:first").find("li").each(function()
841                            {
842                                var eachFolder = $(this).find("span:first").text().trim();
843                                if(folder == eachFolder)
844                                {
845                                    existsIdenticalFolder = true;
846                                    return false;
847                                }
848                            });
849
850                            if(existsIdenticalFolder)
851                            {
852                                event.stopPropagation();
853                                write_msg(get_lang("Mailbox already exists"));
854                                draw_new_tree_folder();
855                                return false;
856                            }
857
858                            if(folderName.indexOf("/") != -1)
859                            {
860                                auxNameFolder = folderName.split("/");
861
862                                makeChildren(auxNameFolder, father);
863                            }
864                            else
865                            {
866                                var folder = (folderName != "" ? folderName : get_lang("New Folder"));
867                                create_new_local_folder((selected_li.attr('id') ? selected_li.attr('id') : "inbox"), folder);
868                            }
869
870                            cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);
871                        }
872                        else
873                        {
874                            if($('[id="' + (selected_li.attr('id') ? selected_li.attr('id') : "INBOX") + cyrus_delimiter + $(this).val() + '"]').length)
875                            {
876                                $(".folders-loading").removeClass("folders-loading");
877                                write_msg(get_lang("Mailbox already exists"));
878                                return draw_new_tree_folder();
879                            }
880                            $(".new_folder").parent().addClass("folders-loading");
881                            create_new_folder(($(this).val() != "" ? $(this).val() : get_lang("New Folder")), (selected_li.attr('id') ? selected_li.attr('id') : "INBOX"));
882                        }
883
884                    }
885                    else if(event.keyCode == 27)
886                    {
887                        draw_new_tree_folder();
888                    }
889
890                }).focusout(function()
891                {
892                    if(!existsIdenticalFolder)
893                    {
894                        draw_new_tree_folder();
895                    }
896
897                });
898            }).end().find(".float-menu-export").click(function()
899            {
900                var name_box = $(this).parents("li:first").attr("id");
901
902                var name_folder = name_box.split(cyrus_delimiter)[name_box.split(cyrus_delimiter).length - 1];
903
904
905                var hand_export = function(data)
906                    {
907                        clean_msg();
908                        if(!data)
909                        {
910                            write_msg(get_lang('Error compressing messages (ZIP). Contact the administrator.'))
911                        }
912                        else if(data["empty_folder"] || data == "empty_folder")
913                        {
914                            write_msg(get_lang("The selected folder is empty."));
915                        }
916                        else download_attachments(null, null, data, null, null, name_folder + '.zip');
917                    }
918                if($(this).parents("li:first").find("input[type=hidden]:first").val() == "localFolder")
919                {
920                    expresso_mail_archive.listMessages(name_box.split("_")[2]);
921                    var msgsArchive = expresso_mail_archive.messageslisted;
922
923                    buildExportArchiver(msgsArchive, name_box);
924
925                }
926                else
927                {
928                    cExecute("$this.exporteml.export_all", hand_export, "folder=" + name_box);
929                }
930                write_msg(get_lang('You must wait while the messages will be exported...'), true);
931            });
932            //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < END
933        }
934        if(!$(".new_folder").length)
935        {
936            $(this).find(".float-menu:first").css("display", "");
937        }
938    }, function()
939    {
940        $(this).find(".float-menu:first").hide();
941    });
942    $("#new_m")
943    .html($('.selected .message_unseen_count:first .folder_unseen').html() ? $('.selected .message_unseen_count:first .folder_unseen').html() : "0")
944    .css("color", "red");
945}
Note: See TracBrowser for help on using the repository browser.