source: sandbox/2.3-MailArchiver/expressoMail1_2/js/TreeShow.js @ 6779

Revision 6779, 10.0 KB checked in by rafaelraymundo, 12 years ago (diff)

Ticket #2946 - Liberado Expresso(branch 2.3) integrado ao MailArchiver?.

Line 
1/**************************************************************************\
2 Início
3\**************************************************************************/
4
5        function Tree_Box(){
6               
7                this.name_folder = "";
8                this.name_func   = "";
9                connector.loadScript("TreeS");
10        }
11        Tree_Box.prototype.update_folder = function(expand_local_root){
12                               
13                var handler_update_folders = function(data){
14                        folders = data;
15                        // update element dftree_folders_tree;
16                        ttree.make_tree(data,"div_tree","folders_tree","ttree.get_folder(\"root\")",ttreeBox.name_folder,ttreeBox.name_folder,false);
17
18                        // update element dftree_tree_folders;
19                        if(Element('content_folders')){Element('content_folders').innerHTML = "";}
20                        draw_tree_folders(folders);
21                       
22                        // update element dftree_wfolders_tree;
23                        if (Element('dftree_wfolders_tree')){
24                                Element('dftree_wfolders_tree').innerHTML = '';
25                                ttree.make_tree(data,"wfolders_content_tree","wfolders_tree","","","",false);   
26                        }
27                       
28                        ttree.FOLDER = ttreeBox.name_folder;
29                       
30                        if (tree_folders.getNodeById(ttree.FOLDER))
31                                tree_folders.getNodeById(ttree.FOLDER)._select();
32                           
33                        if(expand_local_root){
34                                tree_folders.getNodeById('local_root').changeState();
35                               
36                                //try to mark the on use local folder on redraw operation
37                                if (tree_folders.getNodeById(ttree.FOLDER))
38                                    tree_folders.getNodeById(ttree.FOLDER)._select();
39                        }
40                        /*
41                        if (tree_folders.getNodeById(get_current_folder()))
42                                tree_folders.getNodeById(get_current_folder())._select();
43                        */
44                }
45                if(!expresso_offline)
46                        cExecute ("$this.imap_functions.get_folders_list&folder="+current_folder, handler_update_folders);             
47                else
48                        handler_update_folders('');
49        }
50
51        Tree_Box.prototype.verify_children = function(param){
52                var aux;
53                var aux1;
54                var cont = parseInt(0);
55                for(var i=0 ; i < folders.length; i++){
56                        aux = folders[i].folder_id.split(cyrus_delimiter);
57                        aux.pop();
58                        for(var j=0; j < aux.length; j++){
59                                if(j == 0)
60                                        aux1 = aux[j];
61                                else
62                                        aux1 += cyrus_delimiter + aux[j];
63                        }
64                        if( aux1 == param){
65                                cont++;
66                        }
67                }
68                if( cont == 0){
69                        ttreeBox.del_past(param);
70                }else{
71                       alert(get_lang("Delete your sub-folders first"));
72                }
73                cont = parseInt(0);
74        }
75       
76        Tree_Box.prototype.verify = function(exp)
77        {
78                // IE does not understand accents in regex! that \xNN are the hex codes for the accented characters!
79                var reTipo = /^[\w\xda\xc1\xc9\xcd\xd3\xdd\xe1\xe9\xed\xfa\xfd\xf3\xc0\xc8\xcc\xd2\xe0\xe8\xec\xf2\xf9\xd9\xc3\xd1\xd5\xe3\xf1\xf5\xc2\xca\xce\xd4\xe2\xea\xee\xf4\xdb\xfb\xc7\xe7\xc4\xd6\xe4\xf6\xfc\xcb\xcf\xeb\xef\xff \-_+=]*$/i;
80                if(exp.search(reTipo) == -1)
81                        return false;
82                    else
83                        return true;
84
85        }
86
87        // Função para verificar o nome da caixa;
88        Tree_Box.prototype.verify_names = function(name_folder){
89            var arr_nm_folder = new Array("INBOX",trashfolder,draftsfolder,sentfolder,spamfolder);
90                for(var i=0 ; i < arr_nm_folder.length; i++){
91                        if(name_folder == arr_nm_folder[i]){
92                                ttree.FOLDER = "";
93                                return true;
94                        }
95                }
96                return false;
97        }
98       
99        // Valida os nomes das pastas
100        Tree_Box.prototype.validate = function(func){
101                var aux = ttree.FOLDER.split(cyrus_delimiter);
102                var aux2;
103                if(ttree.FOLDER != ""){
104                        if(aux.length > 1)
105                        {
106                                aux2 = aux[1];
107                        }
108                        else
109                        {
110                                aux2 = aux[0];
111                        }
112                        if(func == "rename" && this.verify_names(aux2)){
113                               alert(get_lang("It's not possible rename the folder: ") + lang_folder(aux2) + '.');
114                               return false;
115                        }else{
116                        if(func == "newpast"){
117                            var button = prompt(get_lang('Enter the name of the new folder:'),"");
118                                        if (button.indexOf("local_") != -1  || button.toUpperCase() == "INBOX") {
119                                                alert(get_lang("cannot create folder. try other folder name"));
120                                                return false; //Não posso criar pastas contendo a string local_                                 
121                                        }
122                                        if(button.match(/[\/\\\!\@\#\$\%\&\*\(\)]/gi)){
123                                            alert(get_lang("cannot create folder. try other folder name"));
124                                            return false;
125                                        }
126
127                                        if(trim(button) == "" || trim(button) == null){
128                                                return false;
129                                        }else{
130                                                ttreeBox.new_past(button);
131                                        }
132                                }
133                                if(func == "rename"){
134                                        if(ttree.FOLDER == "root"){
135                                alert(get_lang("It's not possible rename this folder!"));
136                                                return false;
137                                        }
138                                        if(ttree.FOLDER == get_current_folder()){
139                        alert(get_lang("It's not possible rename this folder, because it is being used in the moment!"));
140                                                return false;
141                                        }
142                    var button1 = prompt(get_lang("Enter a name for the box"), "");
143                                        if (button1.indexOf("local_") != -1 || button1.toUpperCase() == "INBOX") {
144                                                alert(get_lang("cannot create folder. try other folder name"));
145                                                return false; //Não posso criar pastas contendo a string local_                                 
146                                        }
147
148                                        if(button1.match(/[\/\\\!\@\#\$\%\&\*\(\)]/gi)){
149                                            alert(get_lang("It's not possible rename this folder. try other folder name"));
150                                            return false;
151                                        }
152
153                                        if(trim(button1) == "" || trim(button1) == null){
154                                                return false;
155                                        }else{
156                                                ttreeBox.rename(button1);
157                                        }
158                                }
159                        }
160                }else{
161            alert(get_lang("Select a folder!"));
162                        return false;
163                }
164        }
165
166// Para criar a nova pasta;
167        Tree_Box.prototype.new_past = function(newp){
168
169                var aux   = ttree.FOLDER.split(cyrus_delimiter);
170                var delimExp = new RegExp('\\'+cyrus_delimiter,"g");
171                newp = newp.replace(delimExp,'_');
172                var newp2 = "";
173                if( aux[0] == "root"){
174                        if(!this.verify(newp)){
175                                alert(get_lang("Type without spaces, dots or special characters!"));
176                                newp = "";
177                                return false;
178                        }else{
179                                newp2 = newp;
180                                newp = "INBOX" + cyrus_delimiter + newp;
181                        }
182                }else{
183                        if(!this.verify(newp)){
184                                alert(get_lang("Type without spaces, dots or special characters!"));
185                                newp = "";
186                                return false;
187                        }else{
188                                newp2 = newp;
189                                newp = ttree.FOLDER + cyrus_delimiter + newp;
190                        }
191                }
192
193                if(newp != ""){
194                        var handler_return = function(data){           
195                                if(data != "Ok"){
196                                        alert(get_lang(data));
197                                }else{
198                                        ttreeBox.name_folder = "root"; //or use var newpast
199                                        this.name_func = "newpast";
200                                        connector.purgeCache();
201                                        ttreeBox.update_folder();
202                                }
203                        }
204                        var args = "$this.imap_functions.create_mailbox";
205                        var params = "newp="+newp;
206                        cExecute(args,handler_return,params);
207                }       
208        }
209       
210        // Funcao para renomear a pasta;
211        Tree_Box.prototype.rename = function(rename){
212                var old_box  = ttree.FOLDER;
213                var aux = old_box.split(cyrus_delimiter);
214                var rename_new = "";
215               
216                if(old_box == "root"){
217            alert(get_lang("Select a folder!"));
218                        return false;
219                }
220                if(aux.length == 1){
221            alert(get_lang("It's not possible rename the folder: ") + aux[0] + '.');
222                        rename = "";
223                        return false;
224                }else{
225                        if(this.verify_names(aux[1])){
226                alert(get_lang("It's not possible rename the folder: ") + aux[1] + '.');
227                                rename = "";
228                                return false;
229                        }else{
230                                if(!this.verify(rename)){
231                    alert(get_lang("Type without spaces, dots or special characters!"));
232                                        rename = "";
233                                        return false;
234                                }else{
235                                        aux.pop();
236                                        aux.push(rename);
237                                        for(var i=0; i< aux.length; i++){
238                                                if( i == 0)
239                                                        rename_new = aux[i];
240                                                else
241                                                        rename_new += cyrus_delimiter + aux[i];
242                                        }
243                                }       
244                        }
245                }
246                if(rename != ""){
247                        var handler_return = function(data)
248                        {
249                                connector.purgeCache();
250                                ttreeBox.name_folder = "root";
251                                ttreeBox.update_folder();
252                        }
253                        var args = "$this.imap_functions.ren_mailbox";
254                        var params = "rename="+rename_new+"&current="+old_box;
255                        cExecute(args,handler_return,params);
256                }
257        }
258        //
259        Tree_Box.prototype.export_all_msg = function(){
260                       
261                if(ttree.FOLDER == "root"){return false;}
262                var nm_bx = ttree.FOLDER.split(cyrus_delimiter);
263                var name_f = nm_bx[nm_bx.length -1];
264                var hand_export = function(data){
265                        if(!data){
266                                write_msg(get_lang('Error compressing messages (ZIP). Contact the administrator.'))
267                        }else if(data["empty_folder"]){
268                                write_msg(get_lang("The selected folder is empty."));
269                                alert(get_lang("The selected folder is empty."));
270                        }else
271                          download_attachments(null, null, data, null,null, name_f +'.zip');
272                }
273                cExecute("$this.exporteml.export_all",hand_export,"folder="+ttree.FOLDER);     
274                write_msg(get_lang('You must wait while the messages will be exported...'));                   
275        }
276       
277        // Função para deletar a pasta;
278        Tree_Box.prototype.del = function(){
279                var folder_name = ttree.FOLDER;
280                var aux = ttree.FOLDER.split(cyrus_delimiter);
281
282                if(aux[0] == "root" || ttree.FOLDER == ""){
283                        alert(get_lang("Select a folder!"));
284                        return false;
285                }
286               
287                if(aux.length == 1){
288            alert(get_lang("It's not possible delete the folder: ") + get_lang("Inbox") + '.');
289                        return false;
290                }else{
291                        if(this.verify_names(aux[1]) && typeof(aux[2]) == 'undefined'){
292                    alert(get_lang("It's not possible delete the folder: ") + get_lang(special_folders[aux[1]]) + '.'); 
293                        return false;
294                        }else{
295                                this.verify_children(folder_name);
296                        }
297                }       
298        }
299       
300        Tree_Box.prototype.del_past = function(param){
301                var aux = param.split(cyrus_delimiter);
302                var aux1 = aux.pop();
303
304                if(ttree.FOLDER == get_current_folder()){
305            alert(get_lang("It's not possible delete this folder, because it is being used in the moment!"));
306                        return false;
307                }
308        if(confirm(get_lang("Do you wish to exclude the folder ") + aux1+ "?")){
309                        var handler_return = function(data)
310                        {               
311                                if(data != "Ok")
312                                {
313                                        alert(data);
314                                }else{
315                                        connector.purgeCache();
316                                        ttreeBox.name_folder = "root";
317                                        ttreeBox.update_folder();
318                                        write_msg(get_lang("The folder %1 was successfully removed", aux1));
319                                }
320                        }
321                        var args = "$this.imap_functions.delete_mailbox";
322                        var params = "del_past="+param;
323                        cExecute(args,handler_return,params);
324                }
325       
326        }
327/* - Build Object -*/
328        var ttreeBox;
329        ttreeBox = new Tree_Box();
Note: See TracBrowser for help on using the repository browser.