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

Revision 5070, 44.0 KB checked in by fernando-alberto, 13 years ago (diff)

Ticket #1269 - Desenvolvimento da nova solucao de arquivamento local MailArchiver?, ajuste paginacao

  • 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 message on folder") + " " + 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 eror: ' + e);
411                }
412            }
413           
414            document.getElementById('main_title').innerHTML = get_lang("Archiving messages " + expresso_mail_archive.messages_processed + " of " + 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: ' + 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 " + expresso_mail_archive.messages_processed + " of " + expresso_mail_archive.total_messages + " successfully archived.");
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(expresso_mail_archive.folders.length > 0){
724        //window.alert('vai adicionar ' + expresso_mail_archive.folders.length + '  elementos na tree');
725        //window.alert('arvore ja tem ' + evalobjectTree.length + ' nodos');
726        for(i=0; i<expresso_mail_archive.folders.length; i++){
727            var folder_caption;
728           
729            //Special folders treatment: Inbox, Outbox, Drafts, Sent and Trash folders
730            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')){
731                folder_caption = get_lang(expresso_mail_archive.folders[i]["name"]);
732            }
733            else{
734                folder_caption = expresso_mail_archive.folders[i]["name"];
735            }
736            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"]});
737            //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"]});
738           
739            //Adjust the id node names
740            if(expresso_mail_archive.currentfolder){
741                if(expresso_mail_archive.currentfolder.substr(0,5) != 'local'){
742                    evalobjectTree.add(n_demo, localBaseName + expresso_mail_archive.currentfolder);
743                }
744                else{
745                    evalobjectTree.add(n_demo,expresso_mail_archive.currentfolder);
746                }
747            }
748            else {
749                expresso_mail_archive.currentfolder = 'local_root';
750                evalobjectTree.add(n_demo,expresso_mail_archive.currentfolder);
751            }
752        }
753        //window.alert('refrescando...');
754        //evalobjectTree.update_folder('local_root');
755    }
756}
757
758//getFaultInfo operation
759MailArchiver.prototype.getFaultInfo = function(){
760    try{
761        ArchiveServices.getFaultInfo(expresso_mail_archive.getFaultInfoOperationOK, expresso_mail_archive.getFaultInfoOperationFailure, sessid);
762    }   
763    catch(e){
764        write_msg(get_lang('getFaultInfo invoke fails = ' + e),true);
765    }
766}
767
768//getFaultInfo callback OK
769MailArchiver.prototype.getFaultInfoOperationOK = function(faultinfo){
770    try{
771        write_msg(get_lang('MailArchiver remote service reports the following error:' + faultinfo.getReturn().getSoapFaultString(), true));
772    } catch(e){
773        write_msg(get_lang('Ops! It was not possible to capture service error data.', true));
774    }
775}
776
777//getFaultInfo callback Fail
778MailArchiver.prototype.getFaultInfoOperationFailure = function(errorCode, errorDesc){
779    try{
780        write_msg(get_lang('SoapFault capture fails at:' + errorCode + ' | ' + errorDesc, true));
781    } catch(e){
782        write_msg(get_lang('Service error mapping', true));
783    }   
784}
785
786//createFolder operation
787MailArchiver.prototype.createFolder = function(parentFolder, folderName){
788   
789    try{
790        ArchiveServices.createFolder(expresso_mail_archive.createFolderOperationOK, expresso_mail_archive.createFolderOperationFailure, sessid, parentFolder, folderName);
791    }
792    catch (e){
793        window.alert('Ops...create folder fails at:\n' + e);
794    }
795   
796}
797
798//createFolder callback OK
799MailArchiver.prototype.createFolderOperationOK = function (folderObject){
800    draw_tree_local_folders();
801    ttreeBox.update_folder();   
802}
803
804//createFolder callback Fail
805MailArchiver.prototype.createFolderOperationFailure = function (message){
806    window.alert('Folder creation fails...\n->' + message.getReturn());
807}
808
809//deleteFolder operation
810MailArchiver.prototype.deleteFolder = function(folderName){
811    try{
812        ArchiveServices.deleteFolder(expresso_mail_archive.deleteFolderOperationOK, expresso_mail_archive.deleteFolderOperationFailure, sessid, folderName, true);
813    }
814    catch (e){
815        window.alert('Ops...delete folder fails at:\n' + e);
816    }
817   
818}
819
820//deleteFolder callback OK
821MailArchiver.prototype.deleteFolderOperationOK = function (folderObject){
822    window.alert('delete ok');
823    //var fo = IterateIt(folderObject);
824    write_msg(get_lang("The folder " + expresso_mail_archive.drawdata.folderName + " was successfully removed"));
825    connector.purgeCache();
826    ttreeBox.name_folder = "root";
827    ttreeBox.update_folder();
828    draw_tree_local_folders();
829    ttreeBox.update_folder();   
830}
831
832//deleteFolder callback Fail
833MailArchiver.prototype.deleteFolderOperationFailure = function (message){
834    window.alert('Folder deletion fails...\n->' + message.getReturn());
835}
836
837//renameFolder operation
838MailArchiver.prototype.renameFolder = function(folderId, newFolderName){
839    try{
840        ArchiveServices.renameFolder(expresso_mail_archive.renameFolderOperationOK, expresso_mail_archive.renameFolderOperationFailure, sessid, folderId, newFolderName);
841    }
842    catch (e){
843        window.alert('Ops...renaming folder fails at:\n' + e);
844    }
845   
846}
847
848//renameFolder callback OK
849MailArchiver.prototype.renameFolderOperationOK = function (returnService){
850    var evalobjectTree = eval(expresso_mail_archive.drawdata.treeName);
851    evalobjectTree.update_folder();
852}
853
854//renameFolder callback Fail
855MailArchiver.prototype.renameFolderOperationFailure = function (ServiceFault){
856    window.alert('Folder rename fails...\n->' + ServiceFault.getReturn());
857    alert(get_lang("cannot rename folder. try other folder name"));
858}
859
860//getFolderInfo operation
861MailArchiver.prototype.getFolderInfo = function (folderId){
862    try{
863        ArchiveServices.getFolderInfo(expresso_mail_archive.getFolderInfoOperationOK, expresso_mail_archive.getFolderInfoOperationFailure, sessid, folderId);
864    }
865    catch (e){
866        window.alert('Ops...getFolderInfo fails at:\n' + e);
867    }     
868}
869
870//getFolderInfo callback OK
871MailArchiver.prototype.getFolderInfoOperationOK = function(returnService){
872   var folder_info = {id : returnService.getReturn().getId(), name : returnService.getReturn().getName(), parent : returnService.getReturn().getParentId(), numfolders: returnService.getReturn().getFolderCount(), nummessages: returnService.getReturn().getMessageCount()};
873   expresso_mail_archive.folder = folder_info;
874}
875
876//getFolderInfo callback Fail
877MailArchiver.prototype.getFolderInfoOperationFailure = function (ServiceFault){
878    window.alert('getFolderInfo service fails...\n->' + ServiceFault.getReturn());
879    expresso_mail_archive.folder_data = true;
880}
881
882function foo(){
883    var a = 0;
884    a++;
885}
886
887//listMessages operation
888//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) {
889//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) {
890//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);
891MailArchiver.prototype.listMessages = function(){
892    try{
893        var folderid = expresso_mail_archive.currentfolder;
894        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>';
895        var testing_data_json_mapped = '{"query":{"@lowerIndex":"0", "@upperIndex":"50", "folder":[{"@id":"'+folderid+'"}], "order":[{"@asc":"date", "@desc":"subject"}]}}';
896        //window.alert('Query config lower = ' + expresso_mail_archive.queryconfig.lowerIndex + ' - upper = ' + expresso_mail_archive.queryconfig.upperIndex + ' folder = ' + expresso_mail_archive.queryconfig.folder);
897        if (expresso_mail_archive.queryconfig.folder != null)
898            var testing_data = expresso_mail_archive.queryconfig.query();
899        else
900            var testing_data = testing_data_json_mapped;
901       
902        //window.alert('vai chamar o listMessages com testing_data = ' + testing_data);
903        expresso_mail_archive.getFolderInfo(folderid);     
904        //window.alert('Há ' + expresso_mail_archive.folder.nummessages +' no folder ' + expresso_mail_archive.folder.name);
905        ArchiveServices.listMessages(expresso_mail_archive.listMessagesOperationOK, expresso_mail_archive.listMessagesOperationFailure, sessid, testing_data);
906    }
907    catch (e){
908        window.alert('Ops...listMessages fails at:\n' + e);
909    }
910}
911
912//listMessages callback OK
913MailArchiver.prototype.listMessagesOperationOK = function(returnService){
914    var msglist = new Array();
915    expresso_mail_archive.ServiceReturnObject = new Array();
916    //window.alert('messages data\n\n' + print_r(returnService.getReturn()));
917    /*window.alert('Dados da mensagem:\n->From ' + returnService.getReturn()[0].getFrom()
918                                      +'\n->To ' + returnService.getReturn()[0].getTo()
919                                      +'\n->Subject ' + returnService.getReturn()[0].getSubject()
920                                      +'\n->Date ' + returnService.getReturn()[0].getDate()
921                                      +'\n->Date ' + returnService.getReturn()[0].getSize()
922                                      +'\n->ID ' + returnService.getReturn()[0].getId());
923    */
924    for(var i=0; i< returnService.getReturn().length; i++){
925        //window.alert('quer deserializar:\n\n' + print_r(returnService.getReturn()[i]));
926        var ExpSerialized = expresso_mail_archive.pattern.toExpressoHeader(returnService.getReturn()[i]);
927        //window.alert('expSerialized ' + i + '\n\n --\n\n' + print_r(ExpSerialized));
928        //var test = connector.unserialize(ExpSerialized);
929        //window.alert('unserialized = \n\n' + test);
930        msglist.push(connector.unserialize(ExpSerialized));//usando connector.unserialize sobre o header mapeado no layout abaixo
931        expresso_mail_archive.ServiceReturnObject.push(returnService.getReturn()[i]); //add each one service return data into this embeded object array
932        //window.alert('ServiceReturnObject.lenght = ' + expresso_mail_archive.ServiceReturnObject.length + '\n\n:' + expresso_mail_archive.ServiceReturnObject[i]);
933    }
934    msglist["num_msgs"] = returnService.getReturn().length;
935    //window.alert('print_r\n\n' + print_r(msglist));
936   
937    expresso_mail_archive.messageslisted = msglist;
938    //window.alert('expresso_mail_archive.message_list.length = ' + expresso_mail_archive.message_list.length);
939    //window.alert(print_r(expresso_mail_archive.message_list));
940    expresso_mail_archive.drawdata = {messagesList:msglist};
941    expresso_mail_archive.drawMessagesList();
942}
943
944//listMessages callback Fail
945MailArchiver.prototype.listMessagesOperationFailure = function(ServiceFault){
946    window.alert('listmessages FALHOU!\n' + ServiceFault.getReturn());
947}
948
949MailArchiver.prototype.getFolderMessagesNumber = function(){
950    var n = 0;
951    for(var i=0; i < expresso_mail_archive.folders.length; i++){
952        if(expresso_mail_archive.folders[i]["id"] == expresso_mail_archive.currentfolder){
953            n = expresso_mail_archive.folders[i]["messages"];
954        }
955    }
956    return(n);
957}
958
959MailArchiver.prototype.drawMessagesList = function(){
960    var data_to_draw = expresso_mail_archive.drawdata.messagesList; 
961    //window.alert('data to draw =  ' + data_to_draw.length + '\ndata_to_draw[0].from.full = ' + print_r(data_to_draw));
962    //window.alert('Current folder = ' + expresso_mail_archive.currentfolder + ' com ' + expresso_mail_archive.folders.length + ' folders.');
963    var fcaption = expresso_mail_archive.currentfolder;
964   
965    for (var w=0; w < expresso_mail_archive.folders.length; w++){
966        if(expresso_mail_archive.folders[w]["id"] == expresso_mail_archive.currentfolder){
967            fcaption = expresso_mail_archive.folders[w]["name"];
968            break;
969        }
970    }
971    //var folder_num_msgs = expresso_mail_archive.getFolderMessagesNumber();
972    var folder_num_msgs = expresso_mail_archive.folder.nummessages;
973    //window.alert('num = ' + folder_num_msgs);
974    alternate_border(0);
975    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>';
976    draw_box(data_to_draw, 'local_' + expresso_mail_archive.currentfolder, true);
977    //draw_paging(expresso_mail_archive.drawdata.messagesList.length);
978    //draw_paging(preferences.max_email_per_page);
979    draw_paging(folder_num_msgs);
980    Element("tot_m").innerHTML = folder_num_msgs;
981    //update_menu();
982   
983}
984
985MailArchiver.prototype.getMessageHeaders = function(msgId){
986    var msgfound = false;
987    var headerMsg;
988   
989    //Get message header info, from message list operation previously invoked
990    for (var w=0; w < expresso_mail_archive.messageslisted.length; w++){
991        //window.alert('comparando messageslisted "' +expresso_mail_archive.messageslisted[w]["msg_number"]+ '" com o id parametrizado "' +msgId+ '"');
992        if(expresso_mail_archive.messageslisted[w]["msg_number"] == msgId){
993            headerMsg = expresso_mail_archive.messageslisted[w];
994            msgfound = true;
995            break;
996        }
997    }
998    //Message does not exists at message list. it will not be loaded.
999    if(!msgfound){
1000        alert('ops... the message"'+msgId+'" was not found at messages list, so it cannot be readed!')
1001        headerMsg = null;
1002        return;
1003    }
1004    //window.alert('getMessageHeaders\n\n' + print_r(headerMsg));
1005    return(headerMsg);
1006}
1007
1008MailArchiver.prototype.getMessage = function(msgdata){
1009    try{
1010        if((msgdata.length <= 0) || (msgdata == null)){
1011            window.alert('no msgdata received. aborting local message load')
1012            return;
1013        }
1014
1015        expresso_mail_archive.currentmessage = expresso_mail_archive.getMessageHeaders(msgdata)["msg_number"];
1016        //window.alert('current message guid = ' + expresso_mail_archive.currentmessage);
1017
1018        //window.alert('vai invocar getMessageBody com msgid=' + expresso_mail_archive.currentmessage);
1019        ArchiveServices.getMessageBody(expresso_mail_archive.getMessageOperationOK, expresso_mail_archive.getMessageOperationFailure, sessid, expresso_mail_archive.currentmessage);
1020    }
1021    catch(e){
1022        window.alert('Ops...getMessage fails at:\n' + e);
1023    }
1024}
1025
1026MailArchiver.prototype.getMessageOperationOK = function(returnService){
1027    if(returnService.getReturn().length <= 0){
1028        window.alert('Oh no: service return data is zero length...');
1029        return;
1030    }
1031   
1032    //window.alert('Get header info from message "' + expresso_mail_archive.currentmessage + '"');
1033   
1034   
1035    var msgBody = returnService.getReturn();
1036    //window.alert('getMessageOperationOK headers get..');
1037    var msgHeaders = expresso_mail_archive.getMessageHeaders(expresso_mail_archive.currentmessage);
1038    //var expSerializedMessage = expresso_mail_archive.toExpressoMessage(msgHeaders, msgBody);
1039    var expSerializedMessage = expresso_mail_archive.pattern.toExpressoMail(msgHeaders, msgBody);
1040    //window.alert('Serialized data\n\n' + print_r(expSerializedMessage));
1041    show_msg(expSerializedMessage);
1042}
1043
1044MailArchiver.prototype.getMessageOperationFailure = function(ServiceFault){
1045    window.alert('Message fails do be loaded.');
1046}
1047
1048
1049MailArchiver.prototype.getMessageServiceObject = function(msgid){
1050    for(var i=0; i < expresso_mail_archive.ServiceReturnObject.length; i++){
1051        if (expresso_mail_archive.ServiceReturnObject[i].getId() == msgid){
1052            return(expresso_mail_archive.ServiceReturnObject[i]);
1053        }
1054    }
1055    return(null);
1056}
1057
1058MailArchiver.prototype.Query = function(offlow, offup, qdata){
1059    window.alert('Query offlow = ' + offlow + ' - offup= ' + offup);
1060    var querystring = this.queryconfig.query(offlow, offup, qdata);
1061    this.listMessages();
1062}
1063
1064/*
1065 *The all pourpose JavaScript variable, used by all related functionalityes at
1066 *Expresso Mail to handle this object at user gui.
1067 */
1068
1069var expresso_mail_archive;
1070expresso_mail_archive = new MailArchiver();
1071-->
Note: See TracBrowser for help on using the repository browser.