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

Revision 5003, 40.9 KB checked in by fernando-alberto, 13 years ago (diff)

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

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