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

Revision 4999, 40.8 KB checked in by fernando-alberto, 13 years ago (diff)

Ticket #1269 - Desenvolvimento da nova solucao de arquivamento local MailArchiver?, ajustes de serializacao

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