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

Revision 5073, 44.5 KB checked in by fernando-alberto, 13 years ago (diff)

Ticket #1269 - Desenvolvimento da nova solucao de arquivamento local MailArchiver?, novas traducoes

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