source: sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/mail_archiver.js @ 5030

Revision 5030, 43.0 KB checked in by fernando-alberto, 13 years ago (diff)

Ticket #1269 - Desenvolvimento da nova solucao de arquivamento local MailArchiver?, evolucao na api

  • Property svn:eol-style set to native
Line 
1<!--
2/*
3 * Mail Archive JS API
4 *
5 * This JavaScript file is the core to use MailArchiver embeded at Expresso suite.
6 * It contains all the resources used to handle local messages stored at the brand
7 * new solution Mail Archiver (a embeded application server running at client side).
8 *
9 * This feature is a replacement for Google Gears(obsolete by now), used by
10 * Expresso to store local messages at user workstation hard disk.
11 *
12 * @author Fernando Wendt [fernando-alberto.wendt@serpro.gov.br]
13 *
14 * @status under development
15 */
16
17var sessid = 'sessionId';
18
19function IterateIt(){
20    var deph = 0;
21    var returnstr = "";
22
23    for (i in arguments[0]){
24      if((arguments[0][i]) && (arguments[0][i].visited == null)){
25          arguments[0][i].visited = true;
26
27          if(typeof(arguments[0][i]) == 'object'){
28            returnstr += '+ Property "' + i + '"[object ' + deph + ']\n<br>';
29            //returnstr += IterateIt(arguments[0][i]);
30            deph++;
31          }
32      }
33    else returnstr += 'Property "' + i + '" -> ' + arguments[0][i] + ' [' + typeof(i) + ']\n<br>';
34    }
35    return (returnstr);
36}
37
38function dump(arr,level) {
39        var dumped_text = "";
40        if(!level) level = 0;
41       
42        //The padding given at the beginning of the line.
43        var level_padding = "";
44        for(var j=0;j<level+1;j++) level_padding += "    ";
45       
46        if(typeof(arr) == 'object') { //Array/Hashes/Objects
47                for(var item in arr) {
48                        var value = arr[item];
49                       
50                        if(typeof(value) == 'object') { //If it is an array,
51                                dumped_text += level_padding + "'" + item + "' ...\n<br>";
52                                dumped_text += dump(value,level+1);
53                        } else {
54                                dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n<br>";
55                        }
56                }
57        } else { //Stings/Chars/Numbers etc.
58                dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
59        }
60        return dumped_text;
61}
62
63function zeroFill(d){
64    if(parseInt(d) < 10)
65        return('0' + d);
66    else
67        return(d);
68}
69
70/**
71 * Concatenates the values of a variable into an easily readable string
72 * by Matt Hackett [scriptnode.com]
73 * @param {Object} x The variable to debug
74 * @param {Number} max The maximum number of recursions allowed (keep low, around 5 for HTML elements to prevent errors) [default: 10]
75 * @param {String} sep The separator to use between [default: a single space ' ']
76 * @param {Number} l The current level deep (amount of recursion). Do not use this parameter: it's for the function's own use
77 */
78function print_r(x, max, sep, l) {
79
80        l = l || 0;
81        max = max || 100;
82        sep = sep || ' ';
83
84        if (l > max) {
85                return "[WARNING: Too much recursion]\n";
86        }
87
88        var
89                i,
90                r = '',
91                t = typeof x,
92                tab = '';
93
94        if (x === null) {
95                r += "(null)\n";
96        } else if (t == 'object') {
97
98                l++;
99
100                for (i = 0; i < l; i++) {
101                        tab += sep;
102                }
103
104                if (x && x.length) {
105                        t = 'array';
106                }
107
108                r += '(' + t + ") :\n";
109
110                for (i in x) {
111                        try {
112                                r += tab + '[' + i + '] : ' + print_r(x[i], max, sep, (l + 1));
113                        } catch(e) {
114                                return "[ERROR: " + e + "]\n";
115                        }
116                }
117
118        } else {
119
120                if (t == 'string') {
121                        if (x == '') {
122                                x = '(empty)';
123                        }
124                }
125
126                r += '(' + t + ') ' + x + "\n";
127
128        }
129
130        return r;
131
132};
133var_dump = print_r;
134
135
136
137//Main object structure: object property data definition
138function MailArchiver() {
139    this.enabled = null;
140    this.interval = 500;
141    this.timer = null;
142    this.counter = 0;
143    this.service_count = 0;
144    this.service_count_tryouts = 0;
145    this.message_list = new Array();
146    this.messageslisted = new Array();
147    this.total_messages = 0;
148    this.messages_processed = 0;
149    this.messages_fail = 0;
150    this.folder_origin = null;
151    this.folder_destination = null;
152    this.folders = null;
153    this.currentfolder = 'local_root';
154    this.currentmessage = null;
155    this.drawdata = null;
156    this.onprocess = false;
157    this.queryconfig = new MAQueryConfig();
158    this.pattern = new MAPattern();
159    this.messagesourcehandler = null;
160    this.ServiceReturnObject = null;
161    this.specialfolders = {
162                            "inbox":"local_inbox",
163                            "sent":"local_sent",
164                            "drafts":"local_drafts",
165                            "outbox":"local_outbox",
166                            "trash":"local_trash"
167                          };                         
168    this.unarchivecounter = 0;
169    this.unarchievefolder = null;
170    this.unarchievenewfolder = null;
171                         
172}
173
174//Invoked at some possible MA crash issue
175MailArchiver.prototype.resetObject = function(){
176    expresso_mail_archive.message_list = new Array();
177    expresso_mail_archive.total_messages = 0;
178    expresso_mail_archive.messages_processed = 0;
179    expresso_mail_archive.messages_fail = 0;
180    expresso_mail_archive.folder_origin = null;
181    expresso_mail_archive.folder_destination = null;
182    expresso_mail_archive.folder = null;
183}
184
185/*SystemCheck method: test if MailArchive is installed and/or running at user workstation
186*Try to get a instance of ArchiveServices object - the handler of services provided by
187*the MailArchive services provider interface, from user workstation.
188*/
189MailArchiver.prototype.SystemCheck = function(){
190    expresso_mail_archive.enabled = ((ArchiveServices) ? true : false);
191    if(expresso_mail_archive.enabled){
192       var reqHandler = new cxf_cors_request_object();
193       reqHandler.init();
194       this.messagesourcehandler = reqHandler.handler; 
195    }
196}
197
198//Turns on the listener timer to check services availability
199MailArchiver.prototype.ActivateStatusListener = function(obj){
200    if (document.getElementById('mail_archiver_retry'))
201        tem_tag = true;
202    else
203        tem_tag = false;
204    try{
205        if (obj.enabled){
206            obj.interval = 500; //set default timer to 1ms (imediate lauching)
207            draw_footer_box(get_current_folder());
208            obj.getServicesStatus(obj);
209        }
210        else{
211            throw "this is not enabled: " + obj;
212            window.alert('Nope: obj.enabled is not true...');
213        }
214    }
215    catch (e){
216        window.alert('ActivateStatusListener error: ' + e);
217    }
218}
219
220//Turns off the service status listener, at a crash issue
221MailArchiver.prototype.DeactivateStatusListener = function(obj){
222    window.clearInterval(obj.timer);
223    obj.enabled = null;
224    obj.timer=null;
225    obj.interval = 500;
226    ArchiveServices = null;
227    connector.purgeCache();
228   
229    draw_footer_box(get_current_folder());
230    auto_refresh();
231    if(document.getElementById('mail_archiver_retry')){
232        document.getElementById('mail_archiver_retry').parentNode.removeChild(document.getElementById('mail_archiver_retry'));
233    }
234    else{
235        //Redraw "Offline" linkage, intended to recoonect MailArchiver link   
236        connector.purgeCache();
237        ttreeBox.name_folder = "root";
238        ttreeBox.update_folder();
239        draw_tree_local_folders();
240        ttreeBox.update_folder();
241        change_folder('INBOX', 'INBOX', ttreeBox); 
242    }
243}
244
245//ServiceStatus callback OK
246MailArchiver.prototype.getServicesStatusOK = function(serviceData){
247    //window.alert('getServicesStatusOK com servicedata = ' + serviceData.getReturn());
248    expresso_mail_archive.service_count = expresso_mail_archive.counter;
249    if ((serviceData.getReturn() == "STARTED") || (serviceData.getReturn() == "RUNNING")){
250        //If there is no timer activated to services check interval, set it up.
251        if(expresso_mail_archive.enabled){
252           if(expresso_mail_archive.timer == null){
253                expresso_mail_archive.interval = 5000;
254                expresso_mail_archive.timer = window.setInterval(expresso_mail_archive.getServicesStatus, expresso_mail_archive.interval);
255                var drawinginfo = {treeObject: tree_folders, treeName: 'tree_folders', folderName: 'local_root'};
256                expresso_mail_archive.currentfolder = 'local_root';
257                expresso_mail_archive.drawdata = drawinginfo;
258                expresso_mail_archive.getFoldersList();
259           }
260        }
261        else{
262            window.clearInterval(expresso_mail_archive.timer);
263            write_msg(get_lang('Your preferences are setting to use local messages, but Mail Archiver does not seems to be running or installed at this workstation. By now, we are turning off this feature. Check it out!'),true);
264        }
265    }
266    else{
267        expresso_mail_archive.enabled = false;
268        window.clearInterval(expresso_mail_archive.timer);
269        write_msg(get_lang('Your preferences are setting to use local messages, but Mail Archiver does not seems to be running or installed at this workstation. By now, we are turning off this feature. Check it out!'),true);
270    }
271    //window.alert('fooArc set to null');
272    fooArc = null;
273}
274
275//Dettach resources handler
276MailArchiver.prototype.DeactivateResources = function(obj){   
277    if(obj.timer)
278        window.clearInterval(obj.timer);
279    write_msg(get_lang('Mail Archiver is not responding. There is some communicating issue hang it up. Some services may not work properly. Check it out!'));
280    obj.DeactivateStatusListener(obj);
281    return;
282}
283
284//Services Status Fail callback
285MailArchiver.prototype.getServicesStatusFailure = function(serviceData){
286    window.alert('getServicesStatusFailure incomming');
287    window.alert('getServicesStatusFailure feature: ' + serviceData);
288}
289
290//Service Status handler
291MailArchiver.prototype.getServicesStatus = function(obj){
292    //window.alert('em getServicesStatus obj.enabled = ' + obj.enabled + '\nArchiveServices.enabled = ' + ArchiveServices.enabled + '\nArchiveServices = ' + ArchiveServices);
293    try{
294        //window.alert('on try 01');
295        expresso_mail_archive.service_count_tryouts++;
296        //window.alert('service_count_tryouts = ' + expresso_mail_archive.service_count_tryouts + '\nservice_count = ' + expresso_mail_archive.service_count);
297       
298        if((expresso_mail_archive.service_count_tryouts - expresso_mail_archive.service_count) > 1){
299            //window.alert('problema -> deve desligar');
300            expresso_mail_archive.DeactivateResources(expresso_mail_archive);           
301        }
302        else
303            //window.alert('ok');
304       
305        var fooArc = new web_service_mailarchiver_serpro__ArchiveServices();
306        fooArc.url = mail_archive_protocol + "://" + mail_archive_host + ":" + mail_archive_port + "/arcserv/ArchiveServices";
307        //window.alert('typeof(fooArc) = ' + typeof(fooArc) + '\nfooArc = ' + fooArc);
308        if(fooArc){
309            try{
310                //window.alert('on try 02');
311                fooArc.getState(expresso_mail_archive.getServicesStatusOK, expresso_mail_archive.getServicesStatusFailure, "true");
312                fooArc = null;
313            }catch (e){
314                throw "Service failure status: getState";
315            }
316        }
317        else {
318            throw "No ArchiveServices object present. Sorry, but leaving now...";
319        }
320    }catch (e){
321        //window.alert('getServiceStatus exception:' + e);
322    }
323    expresso_mail_archive.counter = expresso_mail_archive.counter +1;
324}
325
326/*Restart method: re-initializes all the Mail Archive structure
327 **/
328MailArchiver.prototype.Restart = function(obj){
329    obj.SystemCheck();
330    obj.ActivateStatusListener(obj);
331    auto_refresh();
332}
333
334/*Startup method: initializes all the Mail Archive structure to work so far as possible
335 *Looks like the old 'gears_init', from Gears
336 **/
337MailArchiver.prototype.Startup = function(){
338    this.SystemCheck();
339    this.ActivateStatusListener(this);
340}
341
342MailArchiver.prototype.serializeToExpresso = function(data){
343    return(connector.serialize(data));
344}
345
346MailArchiver.prototype.unserializeFromExpresso = function(data){
347    return(connector.unserialize(data));
348}
349
350
351MailArchiver.prototype.CreateMessageList = function(msg_list){
352    if((msg_list != null) && (msg_list != "") && (msg_list != " ")){
353        if (expresso_mail_archive.message_list.length == 0){
354            //Get all the messages ids by pass at msgs_id to "message_list" object array propertie - if more than one exists
355            if(msg_list.indexOf(',') != -1){
356                var tmp_list = msg_list.split(',');
357                for(var i=0; i < tmp_list.length; i++){
358                    expresso_mail_archive.message_list.push(tmp_list[i]);
359                }
360            }
361            //Push message list to process the only one
362            else expresso_mail_archive.message_list.push(msg_list);
363        }
364    }
365    //msg_list is corrupted. aborting population
366    else expresso_mail_archive.message_list = new Array();
367}
368
369//Archive Operation
370MailArchiver.prototype.Archive = function(source_folder,destination_folder,msgs_id){
371    //window.alert('tentando arquivar a mensagem [' + msgs_id + '], do folder ['+source_folder+'] para a pasta destino ['+destination_folder+']');
372    try{
373        document.getElementById('main_title').innerHTML = get_lang("Starting to archive messages");
374        expresso_mail_archive.CreateMessageList(msgs_id);
375
376        if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')){
377
378            //Sets the message counter
379            expresso_mail_archive.total_messages = expresso_mail_archive.message_list.length;
380           
381            //Sets the folders properties: destination and origin
382            expresso_mail_archive.folder_origin = source_folder;
383            //window.alert('substr(0,5) = ' + destination_folder.substr(0,5));
384            if(destination_folder.substr(0,5) == 'local')
385                expresso_mail_archive.folder_destination = destination_folder.substr(6,destination_folder.length);
386            else
387                expresso_mail_archive.folder_destination = destination_folder;
388           
389            var fcaption = expresso_mail_archive.folder_destination;
390   
391            for (var w=0; w < expresso_mail_archive.folders.length; w++){
392                if(expresso_mail_archive.folders[w]["id"] == expresso_mail_archive.folder_destination){
393                    fcaption = expresso_mail_archive.folders[w]["name"];
394                    break;
395                }
396            }
397           
398            //window.alert('destination_folder = ' + expresso_mail_archive.folder_destination);
399
400            var arch_handler = function(data){
401                //Store the message source from Ajax request by now (string data)
402                var js_var = new String(data);
403                try{
404                    //Archive services needs session id, message source and destination folder
405                    document.getElementById('main_title').innerHTML = get_lang("Archiving message on folder") + " " + fcaption +"...";
406                    ArchiveServices.archive(expresso_mail_archive.getArchiveOperationOK, expresso_mail_archive.getArchiveOperationFailure, sessid, data ,expresso_mail_archive.folder_destination);
407                }
408                catch(e){
409                    window.alert('ArchiveServices.archive eror: ' + e);
410                }
411            }
412           
413            document.getElementById('main_title').innerHTML = get_lang("Archiving messages " + expresso_mail_archive.messages_processed + " of " + expresso_mail_archive.message_list.length);
414            cExecute("$this.exporteml.js_source_var",arch_handler,"folder="+url_decode(source_folder)+"&msgs_to_export="+expresso_mail_archive.message_list[0]);
415        }
416        else throw('Ops. Message list stack is empty!\nMessage list count = ' + expresso_mail_archive.message_list.length + '\nFirst child = ' + expresso_mail_archive.message_list[0]);
417    }
418    catch(e){
419        window.alert('Archive error: ' + e);
420    }
421}
422
423//Archive callback OK
424MailArchiver.prototype.getArchiveOperationOK = function(status_message){
425    expresso_mail_archive.messages_processed++;
426    if(expresso_mail_archive.message_list.length > 1){
427       document.getElementById('main_title').innerHTML = get_lang("Message " + expresso_mail_archive.messages_processed + " of " + expresso_mail_archive.total_messages + " successfully archived.");
428       expresso_mail_archive.message_list.shift();
429       expresso_mail_archive.Archive(expresso_mail_archive.folder_origin, expresso_mail_archive.folder_destination, expresso_mail_archive.message_list);
430    }
431    else{
432        document.getElementById('main_title').innerHTML = get_lang("All done. End of archive messages operation.");
433        expresso_mail_archive.resetObject();
434        window.setTimeout("eval('document.getElementById(\"main_title\").innerHTML =\"Expresso Mail\"')",3000);
435    }
436}
437//Archive callback Fail
438MailArchiver.prototype.getArchiveOperationFailure = function(error_message){
439    window.alert('Hi! getArchiveOperationFailure comes with ' + error_message.getReturn());
440    window.setTimeout("eval('document.getElementById(\"main_title\").innerHTML =\"Expresso Mail\"')",3000);
441}
442
443/**
444 *Unarchieve Message
445 *
446 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
447 *
448 *@param folder Original Folder of the message
449 *@param new_folder The new folder of the message
450 *@param msgs_number id of the messages
451 */
452MailArchiver.prototype.unarchieve = function (folder, new_folder, msgs_number){
453    try{
454        expresso_mail_archive.message_list = new Array();
455        expresso_mail_archive.CreateMessageList(msgs_number);
456        if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')) {
457            expresso_mail_archive.unarchivecounter = 0;
458            expresso_mail_archive.unarchievefolder = folder;
459            expresso_mail_archive.unarchievenewfolder = new_folder;
460            expresso_mail_archive.unarchieveHandler();
461        }
462        else{
463            write_msg(get_lang('No selected message.'));
464        }
465    }
466    catch (e){
467        write_msg(get_lang('Unarchive error: ' + e));
468    }
469}
470
471/**
472 *
473 *Unarchieve Message Handler
474 *
475 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
476 *
477 **/
478MailArchiver.prototype.unarchieveHandler = function(){
479    var email = 'http://127.0.0.1:4333/mail/' + expresso_mail_archive.unarchievefolder.substr(6).charAt(0).toUpperCase() + expresso_mail_archive.unarchievefolder.substr(7) + '/'+ expresso_mail_archive.message_list[expresso_mail_archive.unarchivecounter] + '.eml';
480    expresso_mail_archive.messagesourcehandler.onreadystatechange = function(){
481        if (expresso_mail_archive.messagesourcehandler.readyState==4 && expresso_mail_archive.messagesourcehandler.status==200){
482            for (var w=0; w < expresso_mail_archive.messageslisted.length; w++){
483                if(expresso_mail_archive.messageslisted[w]["msg_number"] == expresso_mail_archive.message_list[expresso_mail_archive.unarchivecounter]){
484                    var timestamp = expresso_mail_archive.messageslisted[w]["timestamp"];
485                    var flags  = "#@#@#@" + (expresso_mail_archive.messageslisted[w]["Answered"]!=undefined)?'A':'';
486                        flags +=            (expresso_mail_archive.messageslisted[w]["Draft"]   !=undefined)?'D':'';
487                        flags +=            (expresso_mail_archive.messageslisted[w]["Flagged"] !=undefined)?'F':'';
488                        flags +=            (expresso_mail_archive.messageslisted[w]["Unseen"]  !=undefined)?'U':'';
489                    break;
490                }
491            }
492            var source = "#@#@#@" + escape(expresso_mail_archive.messagesourcehandler.responseText);
493            //var flags+="#@#@#@"+ mail["Answered"] +":"+mail["Draft"]+":"+mail["Flagged"]+":"+mail["Unseen"];
494            var params =
495            "&folder="      + expresso_mail_archive.unarchievenewfolder +
496            "&source="      + source +
497            "&timestamp="   + timestamp +
498            "&flags="       + flags;
499            var handler_unarchive = function(){
500                expresso_mail_archive.unarchieveController();
501            }
502            write_msg(get_lang('Unarchieving ' + (expresso_mail_archive.unarchivecounter + 1) + ' of ' +  expresso_mail_archive.message_list.length));
503            cExecute ("$this.imap_functions.unarchive_mail&", handler_unarchive, params);
504        }
505    }
506    write_msg(get_lang('Opening message ' + (expresso_mail_archive.unarchivecounter + 1) + ' for Unarchieve'));
507    expresso_mail_archive.messagesourcehandler.open("GET", email, true);
508    expresso_mail_archive.messagesourcehandler.send();
509}
510
511/**
512 *
513 *Unarchieve Message Controller
514 *
515 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
516 *
517 **/
518MailArchiver.prototype.unarchieveController = function(){
519    expresso_mail_archive.unarchivecounter++;
520    if (expresso_mail_archive.unarchivecounter < expresso_mail_archive.message_list.length){
521        expresso_mail_archive.unarchieveHandler();
522    }
523    else{
524        if (expresso_mail_archive.message_list.length==1){
525            write_msg(get_lang('Message successfully unarchived'));
526        }
527        else{
528            write_msg(get_lang('Messages successfully unarchived'));
529        }
530    }
531}
532
533/**
534 *Archieve Delete Message
535 *
536 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
537 *
538 *@param msgs_number Unique identification of the message
539 */
540MailArchiver.prototype.deleteMessages = function(msgs_number){
541    try{
542        expresso_mail_archive.CreateMessageList(msgs_number);
543        if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')) {
544            ArchiveServices.deleteMessages(expresso_mail_archive.deleteMessagesOperationOK,
545                                           expresso_mail_archive.deleteMessagesOperationFailure,
546                                           sessid,
547                                           expresso_mail_archive.message_list);
548        }
549        else{
550            write_msg(get_lang('No selected message.'));
551        }
552    }
553    catch (e){
554        window.alert('Delete error: ' + e);
555    }
556}
557
558/**
559 *Archieve Delete Message Ok
560 *
561 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
562 *
563 */
564MailArchiver.prototype.deleteMessagesOperationOK = function(){
565    var drawinginfo = {treeObject: tree_folders, treeName: 'tree_folders'};
566    expresso_mail_archive.drawdata = drawinginfo;
567    expresso_mail_archive.drawFolderTree();
568    expresso_mail_archive.listMessages();
569    if(expresso_mail_archive.message_list.length > 1){
570        write_msg(get_lang("The messages were deleted."));
571    }else{
572        write_msg(get_lang("The message was deleted."));
573    }
574}
575
576/**
577 *Archieve Delete Message Operation Failure
578 *
579 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
580 *
581 */
582MailArchiver.prototype.deleteMessagesOperationFailure = function(error_message){
583    if(expresso_mail_archive.message_list.length > 1){
584        write_msg(get_lang("Error deleting messages.") + ' ' + error_message.getReturn());
585    }else{
586        write_msg(get_lang("Error deleting message.") + ' ' + error_message.getReturn());
587    }
588}
589
590/**
591 *Move message
592 *
593 *@param folder Folder where the message will be moved
594 *@param msgs_number Unique Id of the message
595 *
596 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
597 *
598 */
599MailArchiver.prototype.moveMessages = function(folder, msgs_number){
600    try{
601        expresso_mail_archive.CreateMessageList(msgs_number);
602        if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')) {
603            ArchiveServices.moveMessages(expresso_mail_archive.moveMessagesOperationOK,
604                                           expresso_mail_archive.moveMessagesOperationFailure,
605                                           sessid,
606                                           expresso_mail_archive.message_list,
607                                           folder
608                                       );
609        }
610        else{
611            write_msg(get_lang('No selected message.'));
612        }
613    }
614    catch (e){
615        window.alert('Move error: ' + e);
616    }
617}
618
619/**
620 *Move Message Ok
621 *
622 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
623 *
624 */
625MailArchiver.prototype.moveMessagesOperationOK = function(){
626    var drawinginfo = {treeObject: tree_folders, treeName: 'tree_folders'};
627    expresso_mail_archive.drawdata = drawinginfo;
628    expresso_mail_archive.drawFolderTree();
629    expresso_mail_archive.listMessages();
630    if(expresso_mail_archive.message_list.length > 1){
631        write_msg(get_lang("The messages were moved."));
632    }else{
633        write_msg(get_lang("The message was moved."));
634    }
635}
636
637/**
638 *Move Message Failure
639 *
640 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
641 *
642 */
643MailArchiver.prototype.moveMessagesOperationFailure = function(error_message){
644    if(expresso_mail_archive.message_list.length > 1){
645        write_msg(get_lang("Error moving messages.") + ' ' + error_message.getReturn());
646    }else{
647        write_msg(get_lang("Error moving message.") + ' ' + error_message.getReturn());
648    }
649}
650
651
652//getFolderList Operation
653MailArchiver.prototype.getFoldersList = function(basefolder){   
654    try{
655        ArchiveServices.listFolders(expresso_mail_archive.getFoldersListOperationOK, expresso_mail_archive.getFoldersListOperationFailure, sessid, basefolder);
656    }
657    catch (e){
658        //window.alert('AQUI MESMO\nOps...List folders fails at:\n' + e.description);
659    }
660}
661
662//getFolderList callback OK
663MailArchiver.prototype.getFoldersListOperationOK = function(folderlist){
664    //Internal variable used to map all XML data return from WS invokated
665    var lfolders = new Array();
666   
667    //Mapping XML data to a handler data structure
668    if(folderlist.getReturn().length > 0){
669        var lfolders = new Array();
670        for(i=0; i<folderlist.getReturn().length; i++){
671            (folderlist.getReturn()[i].getFolderCount() > 0 ) ? folderChild = 1 : folderChild = 0;
672
673            //Store folder data at this format: {folder name, number of messages contained, folder has child nodes, folder id, folder parent id, folder full path}
674            //var folderData = new Array(folderlist.getReturn()[i].getName(), folderlist.getReturn()[i].getMessageCount(), folderChild, folderlist.getReturn()[i].getId(), folderlist.getReturn()[i].getParentId(), folderlist.getReturn()[i].getPath());
675            var folderData = {name: folderlist.getReturn()[i].getName(), messages: folderlist.getReturn()[i].getMessageCount(), haschild: folderChild, id: folderlist.getReturn()[i].getId(), parentid: folderlist.getReturn()[i].getParentId(), path: folderlist.getReturn()[i].getPath()};
676            lfolders.push(folderData);
677        }
678
679        //Sets folders property at main object
680        expresso_mail_archive.folders = lfolders;
681       
682        if(expresso_mail_archive.folders[0]["parentid"] == "")
683            expresso_mail_archive.currentfolder = 'local_root';
684        else
685            expresso_mail_archive.currentfolder = expresso_mail_archive.folders[0]["parentid"];
686       
687        //Folders dumping :)
688        /*var strFolders = '---';
689        for (var w=0; w < expresso_mail_archive.folders.length; w++){
690            strFolders += '\nFolder ' + w + ' -->';
691            for (x in expresso_mail_archive.folders[w]){
692                strFolders += '\n----------' + x + ':= ' + expresso_mail_archive.folders[w][x];
693            }
694            strFolders += '\n<---';
695        }
696        strFolders += '\n---';
697        alert(lfolders.length + ' folders mapeados, com default = ' + expresso_mail_archive.currentfolder + '\nfolders list:\n\n' + strFolders);
698        */
699
700        //If something UI related have been flagged, handle it
701        if (expresso_mail_archive.drawdata){
702            //window.alert('com drawdata e treeName = ' + expresso_mail_archive.drawdata.treeName);
703            expresso_mail_archive.drawFolderTree();
704        }
705    }
706}
707
708//getFolderList callback Fail
709MailArchiver.prototype.getFoldersListOperationFailure = function(error, http_msg){
710    window.alert('List folders mistake:' + error + '\nhttp_error = ' + http_msg);
711}
712
713//drawFolderTree operation, if requested to
714MailArchiver.prototype.drawFolderTree = function(){
715    //window.alert('na api de foldertree');
716    var localBaseName  = 'local_';
717    var objectTree = expresso_mail_archive.drawdata.treeObject;
718    var evalobjectTree = eval(expresso_mail_archive.drawdata.treeName);
719   
720    //Add nodes to tree
721    if(expresso_mail_archive.folders.length > 0){
722        //window.alert('vai adicionar ' + expresso_mail_archive.folders.length + '  elementos na tree');
723        //window.alert('arvore ja tem ' + evalobjectTree.length + ' nodos');
724        for(i=0; i<expresso_mail_archive.folders.length; i++){
725            var folder_caption;
726           
727            //Special folders treatment: Inbox, Outbox, Drafts, Sent and Trash folders
728            if((expresso_mail_archive.folders[i]["name"] == 'Inbox') || (expresso_mail_archive.folders[i]["name"] == 'Outbox') || (expresso_mail_archive.folders[i]["name"] == 'Drafts') || (expresso_mail_archive.folders[i]["name"] == 'Sent') || (expresso_mail_archive.folders[i]["name"] == 'Trash')){
729                folder_caption = get_lang(expresso_mail_archive.folders[i]["name"]);
730            }
731            else{
732                folder_caption = expresso_mail_archive.folders[i]["name"];
733            }
734            var n_demo = new dNode({id: localBaseName + expresso_mail_archive.folders[i]["id"], caption: folder_caption, onClick: "change_folder('"+ localBaseName + expresso_mail_archive.folders[i]["id"] +"','"+ localBaseName + expresso_mail_archive.folders[i]["id"]+"', '" + expresso_mail_archive.drawdata.treeName + "')", plusSign:expresso_mail_archive.folders[i]["haschild"]});
735            //var n_demo = new dNode({id: localBaseName + expresso_mail_archive.folders[i]["name"], caption: folder_caption, onClick: "change_folder('"+ localBaseName + expresso_mail_archive.folders[i]["name"] +"','"+ localBaseName + expresso_mail_archive.folders[i]["name"]+"', '" + expresso_mail_archive.drawdata.treeName + "')", plusSign:expresso_mail_archive.folders[i]["haschild"]});
736           
737            //Adjust the id node names
738            if(expresso_mail_archive.currentfolder){
739                if(expresso_mail_archive.currentfolder.substr(0,5) != 'local'){
740                    evalobjectTree.add(n_demo, localBaseName + expresso_mail_archive.currentfolder);
741                }
742                else{
743                    evalobjectTree.add(n_demo,expresso_mail_archive.currentfolder);
744                }
745            }
746            else {
747                expresso_mail_archive.currentfolder = 'local_root';
748                evalobjectTree.add(n_demo,expresso_mail_archive.currentfolder);
749            }
750        }
751        //window.alert('refrescando...');
752        //evalobjectTree.update_folder('local_root');
753    }
754}
755
756//getFaultInfo operation
757MailArchiver.prototype.getFaultInfo = function(){
758    try{
759        ArchiveServices.getFaultInfo(expresso_mail_archive.getFaultInfoOperationOK, expresso_mail_archive.getFaultInfoOperationFailure, sessid);
760    }   
761    catch(e){
762        write_msg(get_lang('getFaultInfo invoke fails = ' + e),true);
763    }
764}
765
766//getFaultInfo callback OK
767MailArchiver.prototype.getFaultInfoOperationOK = function(faultinfo){
768    try{
769        write_msg(get_lang('MailArchiver remote service reports the following error:' + faultinfo.getReturn().getSoapFaultString(), true));
770    } catch(e){
771        write_msg(get_lang('Ops! It was not possible to capture service error data.', true));
772    }
773}
774
775//getFaultInfo callback Fail
776MailArchiver.prototype.getFaultInfoOperationFailure = function(errorCode, errorDesc){
777    try{
778        write_msg(get_lang('SoapFault capture fails at:' + errorCode + ' | ' + errorDesc, true));
779    } catch(e){
780        write_msg(get_lang('Service error mapping', true));
781    }   
782}
783
784//createFolder operation
785MailArchiver.prototype.createFolder = function(parentFolder, folderName){
786   
787    try{
788        ArchiveServices.createFolder(expresso_mail_archive.createFolderOperationOK, expresso_mail_archive.createFolderOperationFailure, sessid, parentFolder, folderName);
789    }
790    catch (e){
791        window.alert('Ops...create folder fails at:\n' + e);
792    }
793   
794}
795
796//createFolder callback OK
797MailArchiver.prototype.createFolderOperationOK = function (folderObject){
798    draw_tree_local_folders();
799    ttreeBox.update_folder();   
800}
801
802//createFolder callback Fail
803MailArchiver.prototype.createFolderOperationFailure = function (message){
804    window.alert('Folder creation fails...\n->' + message.getReturn());
805}
806
807//deleteFolder operation
808MailArchiver.prototype.deleteFolder = function(folderName){
809    try{
810        ArchiveServices.deleteFolder(expresso_mail_archive.deleteFolderOperationOK, expresso_mail_archive.deleteFolderOperationFailure, sessid, folderName, true);
811    }
812    catch (e){
813        window.alert('Ops...delete folder fails at:\n' + e);
814    }
815   
816}
817
818//deleteFolder callback OK
819MailArchiver.prototype.deleteFolderOperationOK = function (folderObject){
820    window.alert('delete ok');
821    //var fo = IterateIt(folderObject);
822    write_msg(get_lang("The folder " + expresso_mail_archive.drawdata.folderName + " was successfully removed"));
823    connector.purgeCache();
824    ttreeBox.name_folder = "root";
825    ttreeBox.update_folder();
826    draw_tree_local_folders();
827    ttreeBox.update_folder();   
828}
829
830//deleteFolder callback Fail
831MailArchiver.prototype.deleteFolderOperationFailure = function (message){
832    window.alert('Folder deletion fails...\n->' + message.getReturn());
833}
834
835//renameFolder operation
836MailArchiver.prototype.renameFolder = function(folderId, newFolderName){
837    try{
838        ArchiveServices.renameFolder(expresso_mail_archive.renameFolderOperationOK, expresso_mail_archive.renameFolderOperationFailure, sessid, folderId, newFolderName);
839    }
840    catch (e){
841        window.alert('Ops...renaming folder fails at:\n' + e);
842    }
843   
844}
845
846//renameFolder callback OK
847MailArchiver.prototype.renameFolderOperationOK = function (returnService){
848    var evalobjectTree = eval(expresso_mail_archive.drawdata.treeName);
849    evalobjectTree.update_folder();
850}
851
852//renameFolder callback Fail
853MailArchiver.prototype.renameFolderOperationFailure = function (ServiceFault){
854    window.alert('Folder rename fails...\n->' + ServiceFault.getReturn());
855    alert(get_lang("cannot rename folder. try other folder name"));
856}
857
858//getFolderInfo operation
859MailArchiver.prototype.getFolderInfo = function (folderId){
860    try{
861        ArchiveServices.getFolderInfo(expresso_mail_archive.getFolderInfoOperationOK, expresso_mail_archive.getFolderInfoOperationFailure, sessid, folderId);
862    }
863    catch (e){
864        window.alert('Ops...getFolderInfo fails at:\n' + e);
865    }     
866}
867
868//getFolderInfo callback OK
869MailArchiver.prototype.getFolderInfoOperationOK = function(returnService){
870   var folder_info = {id : returnService.getReturn().getId(), name : returnService.getReturn().getName(), parent : returnService.getReturn().getParentId(), numfolders: returnService.getReturn().getFolderCount(), nummessages: returnService.getReturn().getMessageCount()};
871   expresso_mail_archive.folder = folder_info;
872}
873
874//getFolderInfo callback Fail
875MailArchiver.prototype.getFolderInfoOperationFailure = function (ServiceFault){
876    window.alert('getFolderInfo service fails...\n->' + ServiceFault.getReturn());
877}
878
879//listMessages operation
880//OLD local_messages.prototype.get_local_range_msgs = function(folder,msg_range_begin,emails_per_page,sort,sort_reverse,search,preview_msg_subject,preview_msg_tip) {
881//ONLINE messages_proxy.prototype.messages_list = function(folder,msg_range_begin,emails_per_page,sort_box_type,search_box_type,sort_box_reverse,preview_msg_subject,preview_msg_tip,call_back,tree_name) {
882//sys call = proxy_mensagens.messages_list(current_folder,1,preferences.max_email_per_page,sort,search,sort_box_reverse,preferences.preview_msg_subject,preferences.preview_msg_tip,handler_draw_box);
883MailArchiver.prototype.listMessages = function(){
884    try{
885        var folderid = expresso_mail_archive.currentfolder;
886        var testing_data_xml = '<?xml version="1.0" encoding="UTF-8"?><query lowerIndex="0" upperIndex="50"><folder id="'+folderid+'"/><order asc="date"/><order desc="subject"/></query>';
887        var testing_data_json_mapped = '{"query":{"@lowerIndex":"0", "@upperIndex":"50", "folder":[{"@id":"'+folderid+'"}], "order":[{"@asc":"date", "@desc":"subject"}]}}';
888        //window.alert('Query config lower = ' + expresso_mail_archive.queryconfig.lowerIndex + ' - upper = ' + expresso_mail_archive.queryconfig.upperIndex + ' folder = ' + expresso_mail_archive.queryconfig.folder);
889        if (expresso_mail_archive.queryconfig.folder != null)
890            var testing_data = expresso_mail_archive.queryconfig.query();
891        else
892            var testing_data = testing_data_json_mapped;
893       
894        //window.alert('vai chamar o listMessages com testing_data = ' + testing_data);
895        ArchiveServices.listMessages(expresso_mail_archive.listMessagesOperationOK, expresso_mail_archive.listMessagesOperationFailure, sessid, testing_data);
896    }
897    catch (e){
898        window.alert('Ops...listMessages fails at:\n' + e);
899    }
900}
901
902//listMessages callback OK
903MailArchiver.prototype.listMessagesOperationOK = function(returnService){
904    var msglist = new Array();
905    expresso_mail_archive.ServiceReturnObject = new Array();
906    //window.alert('messages data\n\n' + print_r(returnService.getReturn()));
907    /*window.alert('Dados da mensagem:\n->From ' + returnService.getReturn()[0].getFrom()
908                                      +'\n->To ' + returnService.getReturn()[0].getTo()
909                                      +'\n->Subject ' + returnService.getReturn()[0].getSubject()
910                                      +'\n->Date ' + returnService.getReturn()[0].getDate()
911                                      +'\n->Date ' + returnService.getReturn()[0].getSize()
912                                      +'\n->ID ' + returnService.getReturn()[0].getId());
913    */
914    for(var i=0; i< returnService.getReturn().length; i++){
915        //window.alert('quer deserializar:\n\n' + print_r(returnService.getReturn()[i]));
916        var ExpSerialized = expresso_mail_archive.pattern.toExpressoHeader(returnService.getReturn()[i]);
917        //window.alert('expSerialized ' + i + '\n\n --\n\n' + print_r(ExpSerialized));
918        //var test = connector.unserialize(ExpSerialized);
919        //window.alert('unserialized = \n\n' + test);
920        msglist.push(connector.unserialize(ExpSerialized));//usando connector.unserialize sobre o header mapeado no layout abaixo
921        expresso_mail_archive.ServiceReturnObject.push(returnService.getReturn()[i]); //add each one service return data into this embeded object array
922        //window.alert('ServiceReturnObject.lenght = ' + expresso_mail_archive.ServiceReturnObject.length + '\n\n:' + expresso_mail_archive.ServiceReturnObject[i]);
923    }
924    msglist["num_msgs"] = returnService.getReturn().length;
925    //window.alert('print_r\n\n' + print_r(msglist));
926   
927    expresso_mail_archive.messageslisted = msglist;
928    //window.alert('expresso_mail_archive.message_list.length = ' + expresso_mail_archive.message_list.length);
929    //window.alert(print_r(expresso_mail_archive.message_list));
930    expresso_mail_archive.drawdata = {messagesList:msglist};
931    expresso_mail_archive.drawMessagesList();
932}
933
934//listMessages callback Fail
935MailArchiver.prototype.listMessagesOperationFailure = function(ServiceFault){
936    window.alert('listmessages FALHOU!\n' + ServiceFault.getReturn());
937}
938
939MailArchiver.prototype.drawMessagesList = function(){
940    var data_to_draw = expresso_mail_archive.drawdata.messagesList; 
941    //window.alert('data to draw =  ' + data_to_draw.length + '\ndata_to_draw[0].from.full = ' + print_r(data_to_draw));
942    //window.alert('Current folder = ' + expresso_mail_archive.currentfolder + ' com ' + expresso_mail_archive.folders.length + ' folders.');
943    var fcaption = expresso_mail_archive.currentfolder;
944   
945    for (var w=0; w < expresso_mail_archive.folders.length; w++){
946        if(expresso_mail_archive.folders[w]["id"] == expresso_mail_archive.currentfolder){
947            fcaption = expresso_mail_archive.folders[w]["name"];
948            break;
949        }
950    }
951
952    alternate_border(0);
953    Element("border_id_0").innerHTML = "&nbsp;" + lang_folder(fcaption) + '&nbsp;<font face="Verdana" size="1" color="#505050">[<span id="new_m">&nbsp;</span> / <span id="tot_m"></span>]</font>';
954    draw_box(data_to_draw, 'local_' + expresso_mail_archive.currentfolder, true);
955    draw_paging(expresso_mail_archive.drawdata.messagesList.length);
956    Element("tot_m").innerHTML = expresso_mail_archive.drawdata.messagesList.length;
957    //update_menu();
958   
959}
960
961MailArchiver.prototype.getMessageHeaders = function(msgId){
962    var msgfound = false;
963    var headerMsg;
964   
965    //Get message header info, from message list operation previously invoked
966    for (var w=0; w < expresso_mail_archive.messageslisted.length; w++){
967        //window.alert('comparando messageslisted "' +expresso_mail_archive.messageslisted[w]["msg_number"]+ '" com o id parametrizado "' +msgId+ '"');
968        if(expresso_mail_archive.messageslisted[w]["msg_number"] == msgId){
969            headerMsg = expresso_mail_archive.messageslisted[w];
970            msgfound = true;
971            break;
972        }
973    }
974    //Message does not exists at message list. it will not be loaded.
975    if(!msgfound){
976        alert('ops... the message"'+msgId+'" was not found at messages list, so it cannot be readed!')
977        headerMsg = null;
978        return;
979    }
980    //window.alert('getMessageHeaders\n\n' + print_r(headerMsg));
981    return(headerMsg);
982}
983
984MailArchiver.prototype.getMessage = function(msgdata){
985    try{
986        if((msgdata.length <= 0) || (msgdata == null)){
987            window.alert('no msgdata received. aborting local message load')
988            return;
989        }
990
991        expresso_mail_archive.currentmessage = expresso_mail_archive.getMessageHeaders(msgdata)["msg_number"];
992        //window.alert('current message guid = ' + expresso_mail_archive.currentmessage);
993
994        //window.alert('vai invocar getMessageBody com msgid=' + expresso_mail_archive.currentmessage);
995        ArchiveServices.getMessageBody(expresso_mail_archive.getMessageOperationOK, expresso_mail_archive.getMessageOperationFailure, sessid, expresso_mail_archive.currentmessage);
996    }
997    catch(e){
998        window.alert('Ops...getMessage fails at:\n' + e);
999    }
1000}
1001
1002MailArchiver.prototype.getMessageOperationOK = function(returnService){
1003    if(returnService.getReturn().length <= 0){
1004        window.alert('Oh no: service return data is zero length...');
1005        return;
1006    }
1007   
1008    //window.alert('Get header info from message "' + expresso_mail_archive.currentmessage + '"');
1009   
1010   
1011    var msgBody = returnService.getReturn();
1012    //window.alert('getMessageOperationOK headers get..');
1013    var msgHeaders = expresso_mail_archive.getMessageHeaders(expresso_mail_archive.currentmessage);
1014    //var expSerializedMessage = expresso_mail_archive.toExpressoMessage(msgHeaders, msgBody);
1015    var expSerializedMessage = expresso_mail_archive.pattern.toExpressoMail(msgHeaders, msgBody);
1016    //window.alert('Serialized data\n\n' + print_r(expSerializedMessage));
1017    show_msg(expSerializedMessage);
1018}
1019
1020MailArchiver.prototype.getMessageOperationFailure = function(ServiceFault){
1021    window.alert('Message fails do be loaded.');
1022}
1023
1024
1025MailArchiver.prototype.getMessageServiceObject = function(msgid){
1026    for(var i=0; i < expresso_mail_archive.ServiceReturnObject.length; i++){
1027        if (expresso_mail_archive.ServiceReturnObject[i].getId() == msgid){
1028            return(expresso_mail_archive.ServiceReturnObject[i]);
1029        }
1030    }
1031    return(null);
1032}
1033
1034MailArchiver.prototype.Query = function(offlow, offup, qdata){
1035    var querystring = this.queryconfig.query(offlow, preferences.max_email_per_page, qdata);
1036    this.listMessages();
1037}
1038
1039/*
1040 *The all pourpose JavaScript variable, used by all related functionalityes at
1041 *Expresso Mail to handle this object at user gui.
1042 */
1043
1044var expresso_mail_archive;
1045expresso_mail_archive = new MailArchiver();
1046-->
Note: See TracBrowser for help on using the repository browser.