source: trunk/expressoMail1_2/js/TreeShow.js @ 5486

Revision 5486, 9.5 KB checked in by gustavo, 12 years ago (diff)

Ticket #2484 - Melhorias na estrutura de diretórios do ExpressoMail?

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