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

Revision 4955, 55.6 KB checked in by cassiano.dalpizzol, 13 years ago (diff)

Ticket #1269 - Implementação do desarquivamento no mailarchiver

  • 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.messagesourcehandler = new Cxf_Transport_Handler();
157    this.specialfolders = {
158                            "inbox":"local_inbox",
159                            "sent":"local_sent",
160                            "drafts":"local_drafts",
161                            "outbox":"local_outbox",
162                            "trash":"local_trash"
163                          };                         
164    this.unarchivecounter = 0;
165    this.unarchievefolder = null;
166    this.unarchievenewfolder = null;
167                         
168}
169
170//Invoked at some possible MA crash issue
171MailArchiver.prototype.resetObject = function(){
172    expresso_mail_archive.message_list = new Array();
173    expresso_mail_archive.total_messages = 0;
174    expresso_mail_archive.messages_processed = 0;
175    expresso_mail_archive.messages_fail = 0;
176    expresso_mail_archive.folder_origin = null;
177    expresso_mail_archive.folder_destination = null;
178    expresso_mail_archive.folder = null;
179}
180
181/*SystemCheck method: test if MailArchive is installed and/or running at user workstation
182*Try to get a instance of ArchiveServices object - the handler of services provided by
183*the MailArchive services provider interface, from user workstation.
184*/
185MailArchiver.prototype.SystemCheck = function(){
186    expresso_mail_archive.enabled = ((ArchiveServices) ? true : false);
187}
188
189//Turns on the listener timer to check services availability
190MailArchiver.prototype.ActivateStatusListener = function(obj){
191    if (document.getElementById('mail_archiver_retry'))
192        tem_tag = true;
193    else
194        tem_tag = false;
195    try{
196        if (obj.enabled){
197            obj.interval = 500; //set default timer to 1ms (imediate lauching)
198            draw_footer_box(get_current_folder());
199            obj.getServicesStatus(obj);
200        }
201        else{
202            throw "this is not enabled: " + obj;
203            window.alert('Nope: obj.enabled is not true...');
204        }
205    }
206    catch (e){
207        window.alert('ActivateStatusListener error: ' + e);
208    }
209}
210
211//Turns off the service status listener, at a crash issue
212MailArchiver.prototype.DeactivateStatusListener = function(obj){
213    window.clearInterval(obj.timer);
214    obj.enabled = null;
215    obj.timer=null;
216    obj.interval = 500;
217    ArchiveServices = null;
218    connector.purgeCache();
219   
220    draw_footer_box(get_current_folder());
221    auto_refresh();
222
223    if(document.getElementById('mail_archiver_retry')){
224        document.getElementById('mail_archiver_retry').parentNode.removeChild(document.getElementById('mail_archiver_retry'));
225    }
226    else{
227        //to do, by now, means nothing
228    }
229}
230
231//ServiceStatus callback OK
232MailArchiver.prototype.getServicesStatusOK = function(serviceData){
233    if ((serviceData.getReturn() == "STARTED") || (serviceData.getReturn() == "RUNNING")){
234        //If there is no timer activated to services check interval, set it up.
235        if(expresso_mail_archive.enabled){
236           if(expresso_mail_archive.timer == null){
237                expresso_mail_archive.interval = 5000;
238                expresso_mail_archive.timer = window.setInterval(expresso_mail_archive.getServicesStatus, expresso_mail_archive.interval);
239                var drawinginfo = {treeObject: tree_folders, treeName: 'tree_folders', folderName: 'local_root'};
240                expresso_mail_archive.currentfolder = 'local_root';
241                expresso_mail_archive.drawdata = drawinginfo;
242                expresso_mail_archive.getFoldersList();
243           }
244        }
245        else{
246            window.clearInterval(expresso_mail_archive.timer);
247            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);
248        }
249    }
250    else{
251        expresso_mail_archive.enabled = false;
252        window.clearInterval(expresso_mail_archive.timer);
253        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);
254    }
255}
256
257//Dettach resources handler
258MailArchiver.prototype.DeactivateResources = function(obj){   
259    if(obj.timer)
260        window.clearInterval(obj.timer);
261    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!'));
262    obj.DeactivateStatusListener(obj);
263    return;
264}
265
266//Services Status Fail callback
267MailArchiver.prototype.getServicesStatusFailure = function(serviceData){
268    window.alert('getServicesStatusFailure feature: ' + serviceData);
269}
270
271//Service Status handler
272MailArchiver.prototype.getServicesStatus = function(obj){
273    try{
274        if(ArchiveServices){
275            try{
276                ArchiveServices.getState(expresso_mail_archive.getServicesStatusOK, expresso_mail_archive.getServicesStatusFailure, "true");
277            }catch (e){
278                throw "Service failure status: getState";
279            }
280        }
281        else {
282            throw "No ArchiveServices object present. Sorry, but leaving now...";
283        }
284    }catch (e){
285        window.alert('getServiceStatus exception:' + e);
286    }
287    expresso_mail_archive.counter = expresso_mail_archive.counter +1;
288}
289
290/*Restart method: re-initializes all the Mail Archive structure
291 **/
292MailArchiver.prototype.Restart = function(obj){
293    obj.SystemCheck();
294    obj.ActivateStatusListener(obj);
295    auto_refresh();
296}
297
298/*Startup method: initializes all the Mail Archive structure to work so far as possible
299 *Looks like the old 'gears_init', from Gears
300 **/
301MailArchiver.prototype.Startup = function(){
302    this.SystemCheck();
303}
304
305MailArchiver.prototype.serializeToExpresso = function(data){
306    return(connector.serialize(data));
307}
308
309MailArchiver.prototype.unserializeFromExpresso = function(data){
310    return(connector.unserialize(data));
311}
312
313
314MailArchiver.prototype.CreateMessageList = function(msg_list){
315    if((msg_list != null) && (msg_list != "") && (msg_list != " ")){
316        if (expresso_mail_archive.message_list.length == 0){
317            //Get all the messages ids by pass at msgs_id to "message_list" object array propertie - if more than one exists
318            if(msg_list.indexOf(',') != -1){
319                var tmp_list = msg_list.split(',');
320                for(var i=0; i < tmp_list.length; i++){
321                    expresso_mail_archive.message_list.push(tmp_list[i]);
322                }
323            }
324            //Push message list to process the only one
325            else expresso_mail_archive.message_list.push(msg_list);
326        }
327    }
328    //msg_list is corrupted. aborting population
329    else expresso_mail_archive.message_list = new Array();
330}
331
332//Archive Operation
333MailArchiver.prototype.Archive = function(source_folder,destination_folder,msgs_id){
334    //window.alert('tentando arquivar a mensagem [' + msgs_id + '], do folder ['+source_folder+'] para a pasta destino ['+destination_folder+']');
335    try{
336        document.getElementById('main_title').innerHTML = get_lang("Starting to archive messages");
337        expresso_mail_archive.CreateMessageList(msgs_id);
338
339        if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')){
340
341            //Sets the message counter
342            expresso_mail_archive.total_messages = expresso_mail_archive.message_list.length;
343           
344            //Sets the folders properties: destination and origin
345            expresso_mail_archive.folder_origin = source_folder;
346            //window.alert('substr(0,5) = ' + destination_folder.substr(0,5));
347            if(destination_folder.substr(0,5) == 'local')
348                expresso_mail_archive.folder_destination = destination_folder.substr(6,destination_folder.length);
349            else
350                expresso_mail_archive.folder_destination = destination_folder;
351           
352            var fcaption = expresso_mail_archive.folder_destination;
353   
354            for (var w=0; w < expresso_mail_archive.folders.length; w++){
355                if(expresso_mail_archive.folders[w]["id"] == expresso_mail_archive.folder_destination){
356                    fcaption = expresso_mail_archive.folders[w]["name"];
357                    break;
358                }
359            }
360           
361            //window.alert('destination_folder = ' + expresso_mail_archive.folder_destination);
362
363            var arch_handler = function(data){
364                //Store the message source from Ajax request by now (string data)
365                var js_var = new String(data);
366                try{
367                    //Archive services needs session id, message source and destination folder
368                    document.getElementById('main_title').innerHTML = get_lang("Archiving message on folder") + " " + fcaption +"...";
369                    ArchiveServices.archive(expresso_mail_archive.getArchiveOperationOK, expresso_mail_archive.getArchiveOperationFailure, sessid, data ,expresso_mail_archive.folder_destination);
370                }
371                catch(e){
372                    window.alert('ArchiveServices.archive eror: ' + e);
373                }
374            }
375           
376            document.getElementById('main_title').innerHTML = get_lang("Archiving messages " + expresso_mail_archive.messages_processed + " of " + expresso_mail_archive.message_list.length);
377            cExecute("$this.exporteml.js_source_var",arch_handler,"folder="+url_decode(source_folder)+"&msgs_to_export="+expresso_mail_archive.message_list[0]);
378        }
379        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]);
380    }
381    catch(e){
382        window.alert('Archive error: ' + e);
383    }
384}
385
386//Archive callback OK
387MailArchiver.prototype.getArchiveOperationOK = function(status_message){
388    expresso_mail_archive.messages_processed++;
389    if(expresso_mail_archive.message_list.length > 1){
390       document.getElementById('main_title').innerHTML = get_lang("Message " + expresso_mail_archive.messages_processed + " of " + expresso_mail_archive.total_messages + " successfully archived.");
391       expresso_mail_archive.message_list.shift();
392       expresso_mail_archive.Archive(expresso_mail_archive.folder_origin, expresso_mail_archive.folder_destination, expresso_mail_archive.message_list);
393    }
394    else{
395        document.getElementById('main_title').innerHTML = get_lang("All done. End of archive messages operation.");
396        expresso_mail_archive.resetObject();
397        window.setTimeout("eval('document.getElementById(\"main_title\").innerHTML =\"Expresso Mail\"')",3000);
398    }
399}
400//Archive callback Fail
401MailArchiver.prototype.getArchiveOperationFailure = function(error_message){
402    window.alert('Hi! getArchiveOperationFailure comes with ' + error_message.getReturn());
403    window.setTimeout("eval('document.getElementById(\"main_title\").innerHTML =\"Expresso Mail\"')",3000);
404}
405
406/**
407 *Unarchieve Message
408 *
409 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
410 *
411 *@param folder Original Folder of the message
412 *@param new_folder The new folder of the message
413 *@param msgs_number id of the messages
414 */
415MailArchiver.prototype.unarchieve = function (folder, new_folder, msgs_number){
416    try{
417        expresso_mail_archive.message_list = new Array();
418        expresso_mail_archive.CreateMessageList(msgs_number);
419        if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')) {
420            expresso_mail_archive.unarchivecounter = 0;
421            expresso_mail_archive.unarchievefolder = folder;
422            expresso_mail_archive.unarchievenewfolder = new_folder;
423            expresso_mail_archive.unarchieveHandler();
424        }
425        else{
426            write_msg(get_lang('No selected message.'));
427        }
428    }
429    catch (e){
430        write_msg(get_lang('Unarchive error: ' + e));
431    }
432}
433
434/**
435 *
436 *Unarchieve Message Handler
437 *
438 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
439 *
440 **/
441MailArchiver.prototype.unarchieveHandler = function(){
442    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';
443    expresso_mail_archive.messagesourcehandler.onreadystatechange = function(){
444        if (expresso_mail_archive.messagesourcehandler.readyState==4 && expresso_mail_archive.messagesourcehandler.status==200){
445            for (var w=0; w < expresso_mail_archive.messageslisted.length; w++){
446                if(expresso_mail_archive.messageslisted[w]["msg_number"] == expresso_mail_archive.message_list[expresso_mail_archive.unarchivecounter]){
447                    var timestamp = expresso_mail_archive.messageslisted[w]["timestamp"];
448                    var flags  = "#@#@#@" + (expresso_mail_archive.messageslisted[w]["Answered"]!=undefined)?'A':'';
449                        flags +=            (expresso_mail_archive.messageslisted[w]["Draft"]   !=undefined)?'D':'';
450                        flags +=            (expresso_mail_archive.messageslisted[w]["Flagged"] !=undefined)?'F':'';
451                        flags +=            (expresso_mail_archive.messageslisted[w]["Unseen"]  !=undefined)?'U':'';
452                    break;
453                }
454            }
455            var source = "#@#@#@" + escape(expresso_mail_archive.messagesourcehandler.responseText);
456            //var flags+="#@#@#@"+ mail["Answered"] +":"+mail["Draft"]+":"+mail["Flagged"]+":"+mail["Unseen"];
457            var params =
458            "&folder="      + expresso_mail_archive.unarchievenewfolder +
459            "&source="      + source +
460            "&timestamp="   + timestamp +
461            "&flags="       + flags;
462            var handler_unarchive = function(){
463                expresso_mail_archive.unarchieveController();
464            }
465            write_msg(get_lang('Unarchieving ' + (expresso_mail_archive.unarchivecounter + 1) + ' of ' +  expresso_mail_archive.message_list.length));
466            cExecute ("$this.imap_functions.unarchive_mail&", handler_unarchive, params);
467        }
468    }
469    write_msg(get_lang('Opening message ' + (expresso_mail_archive.unarchivecounter + 1) + ' for Unarchieve'));
470    expresso_mail_archive.messagesourcehandler.open("GET", email, true);
471    expresso_mail_archive.messagesourcehandler.send();
472}
473
474/**
475 *
476 *Unarchieve Message Controller
477 *
478 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
479 *
480 **/
481MailArchiver.prototype.unarchieveController = function(){
482    expresso_mail_archive.unarchivecounter++;
483    if (expresso_mail_archive.unarchivecounter < expresso_mail_archive.message_list.length){
484        expresso_mail_archive.unarchieveHandler();
485    }
486    else{
487        if (expresso_mail_archive.message_list.length==1){
488            write_msg(get_lang('Message successfully unarchived'));
489        }
490        else{
491            write_msg(get_lang('Messages successfully unarchived'));
492        }
493    }
494}
495
496/**
497 *Archieve Delete Message
498 *
499 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
500 *
501 *@param msgs_number Unique identification of the message
502 */
503MailArchiver.prototype.deleteMessages = function(msgs_number){
504    try{
505        expresso_mail_archive.CreateMessageList(msgs_number);
506        if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')) {
507            ArchiveServices.deleteMessages(expresso_mail_archive.deleteMessagesOperationOK,
508                                           expresso_mail_archive.deleteMessagesOperationFailure,
509                                           sessid,
510                                           expresso_mail_archive.message_list);
511        }
512        else{
513            write_msg(get_lang('No selected message.'));
514        }
515    }
516    catch (e){
517        window.alert('Delete error: ' + e);
518    }
519}
520
521/**
522 *Archieve Delete Message Ok
523 *
524 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
525 *
526 */
527MailArchiver.prototype.deleteMessagesOperationOK = function(){
528    var drawinginfo = {treeObject: tree_folders, treeName: 'tree_folders'};
529    expresso_mail_archive.drawdata = drawinginfo;
530    expresso_mail_archive.drawFolderTree();
531    expresso_mail_archive.listMessages();
532    if(expresso_mail_archive.message_list.length > 1){
533        write_msg(get_lang("The messages were deleted."));
534    }else{
535        write_msg(get_lang("The message was deleted."));
536    }
537}
538
539/**
540 *Archieve Delete Message Operation Failure
541 *
542 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
543 *
544 */
545MailArchiver.prototype.deleteMessagesOperationFailure = function(error_message){
546    if(expresso_mail_archive.message_list.length > 1){
547        write_msg(get_lang("Error deleting messages.") + ' ' + error_message.getReturn());
548    }else{
549        write_msg(get_lang("Error deleting message.") + ' ' + error_message.getReturn());
550    }
551}
552
553/**
554 *Move message
555 *
556 *@param folder Folder where the message will be moved
557 *@param msgs_number Unique Id of the message
558 *
559 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
560 *
561 */
562MailArchiver.prototype.moveMessages = function(folder, msgs_number){
563    try{
564        expresso_mail_archive.CreateMessageList(msgs_number);
565        if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')) {
566            ArchiveServices.moveMessages(expresso_mail_archive.moveMessagesOperationOK,
567                                           expresso_mail_archive.moveMessagesOperationFailure,
568                                           sessid,
569                                           expresso_mail_archive.message_list,
570                                           folder
571                                       );
572        }
573        else{
574            write_msg(get_lang('No selected message.'));
575        }
576    }
577    catch (e){
578        window.alert('Move error: ' + e);
579    }
580}
581
582/**
583 *Move Message Ok
584 *
585 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
586 *
587 */
588MailArchiver.prototype.moveMessagesOperationOK = function(){
589    var drawinginfo = {treeObject: tree_folders, treeName: 'tree_folders'};
590    expresso_mail_archive.drawdata = drawinginfo;
591    expresso_mail_archive.drawFolderTree();
592    expresso_mail_archive.listMessages();
593    if(expresso_mail_archive.message_list.length > 1){
594        write_msg(get_lang("The messages were moved."));
595    }else{
596        write_msg(get_lang("The message was moved."));
597    }
598}
599
600/**
601 *Move Message Failure
602 *
603 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
604 *
605 */
606MailArchiver.prototype.moveMessagesOperationFailure = function(error_message){
607    if(expresso_mail_archive.message_list.length > 1){
608        write_msg(get_lang("Error moving messages.") + ' ' + error_message.getReturn());
609    }else{
610        write_msg(get_lang("Error moving message.") + ' ' + error_message.getReturn());
611    }
612}
613
614
615//getFolderList Operation
616MailArchiver.prototype.getFoldersList = function(basefolder){   
617    try{
618        ArchiveServices.listFolders(expresso_mail_archive.getFoldersListOperationOK, expresso_mail_archive.getFoldersListOperationFailure, sessid, basefolder);
619    }
620    catch (e){
621        window.alert('AQUI MESMO\nOps...List folders fails at:\n' + e.description);
622    }
623}
624
625//getFolderList callback OK
626MailArchiver.prototype.getFoldersListOperationOK = function(folderlist){
627    //Internal variable used to map all XML data return from WS invokated
628    var lfolders = new Array();
629   
630    //Mapping XML data to a handler data structure
631    if(folderlist.getReturn().length > 0){
632        var lfolders = new Array();
633        for(i=0; i<folderlist.getReturn().length; i++){
634            (folderlist.getReturn()[i].getFolderCount() > 0 ) ? folderChild = 1 : folderChild = 0;
635
636            //Store folder data at this format: {folder name, number of messages contained, folder has child nodes, folder id, folder parent id, folder full path}
637            //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());
638            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()};
639            lfolders.push(folderData);
640        }
641
642        //Sets folders property at main object
643        expresso_mail_archive.folders = lfolders;
644       
645        if(expresso_mail_archive.folders[0]["parentid"] == "")
646            expresso_mail_archive.currentfolder = 'local_root';
647        else
648            expresso_mail_archive.currentfolder = expresso_mail_archive.folders[0]["parentid"];
649       
650        //Folders dumping :)
651        /*var strFolders = '---';
652        for (var w=0; w < expresso_mail_archive.folders.length; w++){
653            strFolders += '\nFolder ' + w + ' -->';
654            for (x in expresso_mail_archive.folders[w]){
655                strFolders += '\n----------' + x + ':= ' + expresso_mail_archive.folders[w][x];
656            }
657            strFolders += '\n<---';
658        }
659        strFolders += '\n---';
660        alert(lfolders.length + ' folders mapeados, com default = ' + expresso_mail_archive.currentfolder + '\nfolders list:\n\n' + strFolders);
661        */
662
663        //If something UI related have been flagged, handle it
664        if (expresso_mail_archive.drawdata){
665            //window.alert('com drawdata');
666            expresso_mail_archive.drawFolderTree();
667        }
668    }
669}
670
671//getFolderList callback Fail
672MailArchiver.prototype.getFoldersListOperationFailure = function(error, http_msg){
673    window.alert('List folders mistake:' + error + '\nhttp_error = ' + http_msg);
674}
675
676//drawFolderTree operation, if requested to
677MailArchiver.prototype.drawFolderTree = function(){
678    //window.alert('na api de foldertree');
679    var localBaseName  = 'local_';
680    var objectTree = expresso_mail_archive.drawdata.treeObject;
681    var evalobjectTree = eval(expresso_mail_archive.drawdata.treeName);
682   
683    //Add nodes to tree
684    if(expresso_mail_archive.folders.length > 0){
685        for(i=0; i<expresso_mail_archive.folders.length; i++){
686            var folder_caption;
687           
688            //Special folders treatment: Inbox, Outbox, Drafts, Sent and Trash folders
689            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')){
690                folder_caption = get_lang(expresso_mail_archive.folders[i]["name"]);
691            }
692            else{
693                folder_caption = expresso_mail_archive.folders[i]["name"];
694            }
695            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"]});
696            //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"]});
697           
698            //Adjust the id node names
699            if(expresso_mail_archive.currentfolder){
700                if(expresso_mail_archive.currentfolder.substr(0,5) != 'local'){
701                    evalobjectTree.add(n_demo, localBaseName + expresso_mail_archive.currentfolder);
702                }
703                else{
704                    evalobjectTree.add(n_demo,expresso_mail_archive.currentfolder);
705                }
706            }
707            else {
708                expresso_mail_archive.currentfolder = 'local_root';
709                evalobjectTree.add(n_demo,expresso_mail_archive.currentfolder);
710            }
711        }
712    }
713}
714
715//getFaultInfo operation
716MailArchiver.prototype.getFaultInfo = function(){
717    try{
718        ArchiveServices.getFaultInfo(expresso_mail_archive.getFaultInfoOperationOK, expresso_mail_archive.getFaultInfoOperationFailure, sessid);
719    }   
720    catch(e){
721        write_msg(get_lang('getFaultInfo invoke fails = ' + e),true);
722    }
723}
724
725//getFaultInfo callback OK
726MailArchiver.prototype.getFaultInfoOperationOK = function(faultinfo){
727    try{
728        write_msg(get_lang('MailArchiver remote service reports the following error:' + faultinfo.getReturn().getSoapFaultString(), true));
729    } catch(e){
730        write_msg(get_lang('Ops! It was not possible to capture service error data.', true));
731    }
732}
733
734//getFaultInfo callback Fail
735MailArchiver.prototype.getFaultInfoOperationFailure = function(errorCode, errorDesc){
736    try{
737        write_msg(get_lang('SoapFault capture fails at:' + errorCode + ' | ' + errorDesc, true));
738    } catch(e){
739        write_msg(get_lang('Service error mapping', true));
740    }   
741}
742
743//createFolder operation
744MailArchiver.prototype.createFolder = function(parentFolder, folderName){
745   
746    try{
747        ArchiveServices.createFolder(expresso_mail_archive.createFolderOperationOK, expresso_mail_archive.createFolderOperationFailure, sessid, parentFolder, folderName);
748    }
749    catch (e){
750        window.alert('Ops...create folder fails at:\n' + e);
751    }
752   
753}
754
755//createFolder callback OK
756MailArchiver.prototype.createFolderOperationOK = function (folderObject){
757    draw_tree_local_folders();
758    ttreeBox.update_folder();   
759}
760
761//createFolder callback Fail
762MailArchiver.prototype.createFolderOperationFailure = function (message){
763    window.alert('Folder creation fails...\n->' + message.getReturn());
764}
765
766//deleteFolder operation
767MailArchiver.prototype.deleteFolder = function(folderName){
768    try{
769        ArchiveServices.deleteFolder(expresso_mail_archive.deleteFolderOperationOK, expresso_mail_archive.deleteFolderOperationFailure, sessid, folderName, true);
770    }
771    catch (e){
772        window.alert('Ops...delete folder fails at:\n' + e);
773    }
774   
775}
776
777//deleteFolder callback OK
778MailArchiver.prototype.deleteFolderOperationOK = function (folderObject){
779    var fo = IterateIt(folderObject);
780    write_msg(get_lang("The folder " + expresso_mail_archive.drawdata.folderName + " was successfully removed"));
781    draw_tree_local_folders();
782    ttreeBox.update_folder();   
783}
784
785//deleteFolder callback Fail
786MailArchiver.prototype.deleteFolderOperationFailure = function (message){
787    window.alert('Folder deletion fails...\n->' + message.getReturn());
788}
789
790//renameFolder operation
791MailArchiver.prototype.renameFolder = function(folderId, newFolderName){
792    try{
793        ArchiveServices.renameFolder(expresso_mail_archive.renameFolderOperationOK, expresso_mail_archive.renameFolderOperationFailure, sessid, folderId, newFolderName);
794    }
795    catch (e){
796        window.alert('Ops...renaming folder fails at:\n' + e);
797    }
798   
799}
800
801//renameFolder callback OK
802MailArchiver.prototype.renameFolderOperationOK = function (returnService){
803    var evalobjectTree = eval(expresso_mail_archive.drawdata.treeName);
804    evalobjectTree.update_folder();
805}
806
807//renameFolder callback Fail
808MailArchiver.prototype.renameFolderOperationFailure = function (ServiceFault){
809    window.alert('Folder rename fails...\n->' + ServiceFault.getReturn());
810    alert(get_lang("cannot rename folder. try other folder name"));
811}
812
813//getFolderInfo operation
814MailArchiver.prototype.getFolderInfo = function (folderId){
815    try{
816        ArchiveServices.getFolderInfo(expresso_mail_archive.getFolderInfoOperationOK, expresso_mail_archive.getFolderInfoOperationFailure, sessid, folderId);
817    }
818    catch (e){
819        window.alert('Ops...getFolderInfo fails at:\n' + e);
820    }     
821}
822
823//getFolderInfo callback OK
824MailArchiver.prototype.getFolderInfoOperationOK = function(returnService){
825   var folder_info = {id : returnService.getReturn().getId(), name : returnService.getReturn().getName(), parent : returnService.getReturn().getParentId(), numfolders: returnService.getReturn().getFolderCount(), nummessages: returnService.getReturn().getMessageCount()};
826   expresso_mail_archive.folder = folder_info;
827}
828
829//getFolderInfo callback Fail
830MailArchiver.prototype.getFolderInfoOperationFailure = function (ServiceFault){
831    window.alert('getFolderInfo service fails...\n->' + ServiceFault.getReturn());
832}
833
834//listMessages operation
835//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) {
836//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) {
837//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);
838MailArchiver.prototype.listMessages = function(){
839    try{
840        var folderid = expresso_mail_archive.currentfolder;
841        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>';
842        var testing_data_json_mapped = '{"query":{"@lowerIndex":"0", "@upperIndex":"50", "folder":[{"@id":"'+folderid+'"}], "order":[{"@asc":"date", "@desc":"subject"}]}}';
843        //window.alert('Query config lower = ' + expresso_mail_archive.queryconfig.lowerIndex + ' - upper = ' + expresso_mail_archive.queryconfig.upperIndex + ' folder = ' + expresso_mail_archive.queryconfig.folder);
844        if (expresso_mail_archive.queryconfig.folder != null)
845            var testing_data = expresso_mail_archive.queryconfig.query();
846        else
847            var testing_data = testing_data_json_mapped;
848       
849        //window.alert('vai chamar o listMessages com testing_data = ' + testing_data);
850        ArchiveServices.listMessages(expresso_mail_archive.listMessagesOperationOK, expresso_mail_archive.listMessagesOperationFailure, sessid, testing_data);
851    }
852    catch (e){
853        window.alert('Ops...listMessages fails at:\n' + e);
854    }
855}
856
857//listMessages callback OK
858MailArchiver.prototype.listMessagesOperationOK = function(returnService){
859    var msglist = new Array();
860    /*window.alert('Dados da mensagem:\n->From ' + returnService.getReturn()[0].getFrom()
861                                      +'\n->To ' + returnService.getReturn()[0].getTo()
862                                      +'\n->Subject ' + returnService.getReturn()[0].getSubject()
863                                      +'\n->Date ' + returnService.getReturn()[0].getDate()
864                                      +'\n->Date ' + returnService.getReturn()[0].getSize()
865                                      +'\n->ID ' + returnService.getReturn()[0].getId());
866    */
867    for(var i=0; i< returnService.getReturn().length; i++){
868        //window.alert('quer deserializar:\n\n' + print_r(returnService.getReturn()[i]));
869        var ExpSerialized = expresso_mail_archive.toExpressoHeader(returnService.getReturn()[i]);
870        //window.alert('expSerialized ' + i + '\n\n --\n\n' + print_r(ExpSerialized));
871        //var test = connector.unserialize(ExpSerialized);
872        //window.alert('unserialized = \n\n' + test);
873        msglist.push(connector.unserialize(ExpSerialized));//usando connector.unserialize sobre o header mapeado no layout abaixo
874    }
875    msglist["num_msgs"] = returnService.getReturn().length;
876    //window.alert('print_r\n\n' + print_r(msglist));
877    expresso_mail_archive.messageslisted = msglist;
878    //window.alert('expresso_mail_archive.message_list.length = ' + expresso_mail_archive.message_list.length);
879    //window.alert(print_r(expresso_mail_archive.message_list));
880    expresso_mail_archive.drawdata = {messagesList:msglist};
881    expresso_mail_archive.drawMessagesList();
882   
883    //window.alert('get ajax...');
884   // expresso_mail_archive.getMessageSource();
885}
886
887//listMessages callback Fail
888MailArchiver.prototype.listMessagesOperationFailure = function(ServiceFault){
889    window.alert('listmessages FALHOU!\n' + ServiceFault.getReturn());
890}
891
892MailArchiver.prototype.drawMessagesList = function(){
893    var data_to_draw = expresso_mail_archive.drawdata.messagesList; 
894    //window.alert('data to draw =  ' + data_to_draw.length + '\ndata_to_draw[0].from.full = ' + print_r(data_to_draw));
895    //window.alert('Current folder = ' + expresso_mail_archive.currentfolder + ' com ' + expresso_mail_archive.folders.length + ' folders.');
896    var fcaption = expresso_mail_archive.currentfolder;
897   
898    for (var w=0; w < expresso_mail_archive.folders.length; w++){
899        if(expresso_mail_archive.folders[w]["id"] == expresso_mail_archive.currentfolder){
900            fcaption = expresso_mail_archive.folders[w]["name"];
901            break;
902        }
903    }
904
905    alternate_border(0);
906    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>';
907    draw_box(data_to_draw, 'local_' + expresso_mail_archive.currentfolder, true);
908    draw_paging(expresso_mail_archive.drawdata.messagesList.length);
909    Element("tot_m").innerHTML = expresso_mail_archive.drawdata.messagesList.length;
910    //update_menu();
911   
912}
913
914MailArchiver.prototype.getMessageHeaders = function(msgId){
915    var msgfound = false;
916    var headerMsg;
917   
918    //Get message header info, from message list operation previously invoked
919    for (var w=0; w < expresso_mail_archive.messageslisted.length; w++){
920        //window.alert('comparando messageslisted "' +expresso_mail_archive.messageslisted[w]["msg_number"]+ '" com o id parametrizado "' +msgId+ '"');
921        if(expresso_mail_archive.messageslisted[w]["msg_number"] == msgId){
922            headerMsg = expresso_mail_archive.messageslisted[w];
923            msgfound = true;
924            break;
925        }
926    }
927    //Message does not exists at message list. it will not be loaded.
928    if(!msgfound){
929        alert('ops... the message"'+msgId+'" was not found at messages list, so it cannot be readed!')
930        headerMsg = null;
931        return;
932    }
933    return(headerMsg);
934}
935
936MailArchiver.prototype.getMessage = function(msgdata){
937    try{
938        if((msgdata.length <= 0) || (msgdata == null)){
939            window.alert('no msgdata received. aborting local message load')
940            return;
941        }
942
943        expresso_mail_archive.currentmessage = expresso_mail_archive.getMessageHeaders(msgdata)["msg_number"];
944        //window.alert('current message guid = ' + expresso_mail_archive.currentmessage);
945
946        //window.alert('vai invocar getMessageBody com msgid=' + expresso_mail_archive.currentmessage);
947        ArchiveServices.getMessageBody(expresso_mail_archive.getMessageOperationOK, expresso_mail_archive.getMessageOperationFailure, sessid, expresso_mail_archive.currentmessage);
948    }
949    catch(e){
950        window.alert('Ops...getMessage fails at:\n' + e);
951    }
952}
953
954MailArchiver.prototype.getMessageOperationOK = function(returnService){
955    if(returnService.getReturn().length <= 0){
956        window.alert('Oh no: service return data is zero length...');
957        return;
958    }
959   
960    //window.alert('Get header info from message "' + expresso_mail_archive.currentmessage + '"');
961   
962   
963    var msgBody = returnService.getReturn();
964    var msgHeaders = expresso_mail_archive.getMessageHeaders(expresso_mail_archive.currentmessage);
965    var expSerializedMessage = expresso_mail_archive.toExpressoMessage(msgHeaders, msgBody);
966    //window.alert('Serialized data\n\n' + print_r(expSerializedMessage));
967    show_msg(expSerializedMessage);
968}
969
970MailArchiver.prototype.getMessageOperationFailure = function(ServiceFault){
971    window.alert('Message fails do be loaded.');
972}
973
974//Under develpment this one
975MailArchiver.prototype.getMessageSource = function(){
976    //expresso_mail_archive.messagesourcehandler.onreadystatechange = AlerteO();
977    //expresso_mail_archive.messagesourcehandler.setRequestHeader("SOAPAction", "");
978    //expresso_mail_archive.messagesourcehandler.setRequestHeader("Access-Control-Allow-Origin", "*");
979    //expresso_mail_archive.messagesourcehandler.setRequestHeader("Access-Control-Allow-Credentials", "true");
980    //window.alert('vai chamar via ajax o texto');
981   // expresso_mail_archive.messagesourcehandler.open("GET", "http://10.200.242.186:4333/mail/Sent/teste.txt", true);
982    //expresso_mail_archive.messagesourcehandler.setRequestHeader("MessageType", "CALL");
983    //expresso_mail_archive.messagesourcehandler.setRequestHeader("Access-Control-Allow-Origin", "*");
984    //expresso_mail_archive.messagesourcehandler.setRequestHeader("Access-Control-Allow-Credentials", "true");   
985    //expresso_mail_archive.messagesourcehandler.send();
986}
987
988function AlerteO(){
989    //window.alert('Ajax lido:\n\nState = ' + expresso_mail_archive.messagesourcehandler.readyState + '\nStatus = ' + expresso_mail_archive.messagesourcehandler.status);
990}
991
992// -----------------------------------SERIALIZED DATA TEMPLATES ----------------
993MailArchiver.prototype.toExpressoAddress = function(data){
994    if((typeof(data) != 'undefined') && (data.length > 0)){
995        /*var dataFormat = expresso_mail_archive.toExpressoFormatNameMail(data);
996        var dataName = dataFormat[0];
997        var dataEmail = dataFormat[1];
998        */
999        //window.alert('em toExpressoFrom com data = \n' + data + '[' + typeof(data) + ']('+data.length+')');
1000        var Fromdata = eval("(" + data + ")");
1001        //window.alert('temos ' + Fromdata.mailbox.length + ' destinatarios/remetentes a lidar...');
1002        //window.alert('name = ' + Fromdata.mailbox["@name"] + '\nlocal part = ' + Fromdata.mailbox["@localPart"] + '\ndomain = ' + Fromdata.mailbox["@domain"]);
1003     
1004        //one address
1005        if(typeof(Fromdata.mailbox.length) == 'undefined'){
1006            var dataName = Fromdata.mailbox["@name"];               
1007            var dataEmail = Fromdata.mailbox["@localPart"] + '@' + Fromdata.mailbox["@domain"];
1008            if(dataName == 'null')
1009                dataName = dataEmail;
1010        }
1011        //address list: to header(msgs list), only first metters
1012        else{
1013            var dataName = Fromdata.mailbox[0]["@name"];
1014            var dataEmail = Fromdata.mailbox[0]["@localPart"] + '@' + Fromdata.mailbox[0]["@domain"];
1015            if(dataName == 'null')
1016                dataName = dataEmail;
1017        }
1018
1019        var tplFrom = 'a:3:{'
1020+           's:4:"name";'
1021+           's:'+dataName.length+':"'+dataName+'";'
1022+           's:5:"email";'
1023+           's:'+dataEmail.length+':"'+dataEmail+'";'
1024+           's:4:"full";'
1025+           's:'+(dataName.length + dataEmail.length + 3)+':"'+dataName+' <'+dataEmail+'>";'
1026+       '}';
1027    //window.alert('from = ' + tplFrom);
1028    }
1029    //Data adrress from mailbox is empty, null, or canot be correctly returned by service invocation (will return 'unknow mailbox' string)
1030    else {
1031        tplFrom = 'a:2{s:4:"name";s:14:"Unknow mailbox";s:5:"email";s:15:"Unknow_mailbox";}';
1032    }
1033    return(tplFrom);
1034}
1035
1036MailArchiver.prototype.toExpressoSubject = function(data){
1037    if((typeof(data) != 'undefined') && (data.length > 0)){
1038        var tplSbj = 's:'+data.length+':"'+data+'";'
1039    }
1040    //Subject is empty, null, or canot be correctly returned by service invocation (will return 'Message without subject' string)
1041    else {
1042        tplSbj = 's:25:"[Message without subject]";';
1043    }
1044    return(tplSbj);
1045}
1046
1047MailArchiver.prototype.toExpressoAttachmentsHeader = function(data){
1048    if((typeof(data) != 'undefined') && (data.length > 0)){
1049        var Attdata = eval("(" + data + ")");
1050        if(typeof(Attdata.attachment) != 'undefined'){                   
1051            var tplAttatch = 'a:2:{'
1052+               's:5:"names";';
1053            //More than 1 attachment - because length will be 'undefined' if just one exists
1054            if(Attdata.attachment.length > 0){
1055                var strnamesatt = "";
1056                for(var x=0; x<Attdata.attachment.length; x++){
1057                  var attId = Attdata.attachment[x]["@id"];
1058                  var attName = Attdata.attachment[x]["@name"];
1059                  var attSize = Attdata.attachment[x]["@size"];
1060                  var attMediaType = Attdata.attachment[x]["@mediaType"];
1061                  var attSubType = Attdata.attachment[x]["@subType"];
1062                  var attEncoding = Attdata.attachment[x]["@encoding"];
1063                 
1064                  strnamesatt += attName + ', ';
1065                }
1066                strnamesatt = strnamesatt.substr(0, strnamesatt.length-2);
1067                var intnumberatt = Attdata.attachment.length;
1068            }
1069            //Just one attachment
1070            else{
1071                var attId = Attdata.attachment["@id"];
1072                var attName = Attdata.attachment["@name"];
1073                var attSize = Attdata.attachment["@size"];
1074                var attMediaType = Attdata.attachment["@mediaType"];
1075                var attSubType = Attdata.attachment["@subType"];
1076                var attEncoding = Attdata.attachment["@encoding"];
1077                strnamesatt = attName;
1078                var intnumberatt = 1;
1079            }
1080           
1081            tplAttatch += 's:'+strnamesatt.length+':"'+strnamesatt+'";'
1082+               's:18:"number_attachments";i:' +intnumberatt+';'
1083+           '}';
1084        }
1085        else {
1086            tplAttatch = 'a:2:{s:5:"names";b:0;s:18:"number_attachments";i:0;}';   
1087        }
1088    }
1089    //No attatch data
1090    else {
1091        tplAttatch = 'a:2:{s:5:"names";b:0;s:18:"number_attachments";i:0;}';
1092    }
1093    return(tplAttatch);
1094}
1095
1096MailArchiver.prototype.toExpressoDate = function(data){
1097    var ndate = new Date(data);
1098    //ndate.setTime(data);
1099    var odate = zeroFill(ndate.getDate()) + '/' + zeroFill(ndate.getMonth()+1) + '/' + zeroFill(ndate.getFullYear() + ' ' + zeroFill(ndate.getHours()) + ':' + zeroFill(ndate.getMinutes()) + ':' + zeroFill(ndate.getSeconds()));
1100    return(odate);
1101}
1102
1103MailArchiver.prototype.toExpressoFlags = function(data){
1104    if((data.length > 0) && (typeof(data) != 'undefined')){
1105        var Tagdata = eval("(" + data + ")");
1106        //More than 1 attachment - because length will be 'undefined' if just one exists
1107        if(Tagdata.tag.length >= 0){
1108            var strnamestag = "";
1109            for(var x=0; x<Tagdata.tag.length; x++){
1110                var tagvalue = Tagdata.tag[x]["@value"];
1111                if(tagvalue.toLowerCase().indexOf('recent')!= -1)
1112                    strnamestag += 's:6:"Recent";s:1:"N";';
1113                if(tagvalue.toLowerCase().indexOf('unseen')!= -1)
1114                    strnamestag += 's:6:"Unseen";s:1:"U";';
1115                if(tagvalue.toLowerCase().indexOf('answered')!= -1)
1116                    strnamestag += 's:8:"Answered";s:1:"A";';
1117                if(tagvalue.toLowerCase().indexOf('forwarded')!= -1)
1118                    strnamestag += 's:9:"Forwarded";s:1:"F"';
1119                if(tagvalue.toLowerCase().indexOf('draft')!= -1)
1120                    strnamestag += 's:5:"Draft";s:1:"X";';
1121                if(tagvalue.toLowerCase().indexOf('importance')!= -1)
1122                    strnamestag += 's:10:"Importance";s:6:"High";';
1123                if(tagvalue.toLowerCase().indexOf('flagged')!= -1)
1124                    strnamestag += 's:7:"Flagged";s:1:"F";';                       
1125            }
1126            var tplTags = strnamestag;
1127        }
1128        else{
1129            var strnamestag = "";
1130            var tagvalue = Tagdata.tag["@value"];
1131            if(tagvalue.toLowerCase().indexOf('recent')!= -1)
1132                strnamestag += 's:6:"Recent";s:1:"N";';
1133            if(tagvalue.toLowerCase().indexOf('unseen')!= -1)
1134                strnamestag += 's:6:"Unseen";s:1:"U";';
1135            if(tagvalue.toLowerCase().indexOf('answered')!= -1)
1136                strnamestag += 's:8:"Answered";s:1:"A";';
1137            if(tagvalue.toLowerCase().indexOf('forwarded')!= -1)
1138                strnamestag += 's:9:"Forwarded";s:1:"F"';
1139            if(tagvalue.toLowerCase().indexOf('draft')!= -1)
1140                strnamestag += 's:5:"Draft";s:1:"X";';
1141            if(tagvalue.toLowerCase().indexOf('importance')!= -1)
1142                strnamestag += 's:10:"Importance";s:6:"High";';
1143            if(tagvalue.toLowerCase().indexOf('flagged')!= -1)
1144                strnamestag += 's:7:"Flagged";s:1:"F";';
1145            var tplTags = strnamestag;
1146        }
1147    }
1148    else{
1149        tplTags = 's:6:"Recent";s:1:" ";s:6:"Unseen";s:1:" ";s:8:"Answered";s:1:" ";s:9:"Forwarded";s:1:" ";s:5:"Draft";s:1:" ";s:10:"Importance";s:6:"Normal";s:7:"Flagged";b:0;';
1150    }
1151    return(tplTags);
1152}
1153
1154MailArchiver.prototype.toExpressoHeader = function(data){   
1155    var tplHeader = 'a:16:{'
1156+           's:11:"ContentType";'
1157+           's:' + data.getContentType().length + ':"' + data.getContentType() + '";'
1158+           expresso_mail_archive.toExpressoFlags(data.getTags())
1159+           's:10:"msg_number";'
1160+           's:'+data.getId().length+':"'+data.getId()+'";'
1161+           's:5:"udate";'
1162+           'i:' + parseInt(data.getDate()/1000) + ';'
1163+           's:9:"timestamp";'
1164+           'i:' + parseInt(data.getDate()/1000) + ';'
1165+           's:4:"from";'
1166+           expresso_mail_archive.toExpressoAddress(data.getFrom())
1167+           's:2:"to";'
1168+           expresso_mail_archive.toExpressoAddress(data.getTo())
1169+           's:7:"subject";'
1170+           expresso_mail_archive.toExpressoSubject(data.getSubject())
1171+           's:4:"Size";'
1172+           'i:'+data.getSize()+';'
1173+           's:10:"attachment";'
1174+           expresso_mail_archive.toExpressoAttachmentsHeader(data.getAttachments())
1175+           '}';
1176    //window.alert('Serialized data\n\n' + tplHeader + '\ngmtoffset: ' + gmtoffset);
1177    return(tplHeader);
1178}
1179
1180MailArchiver.prototype.toExpressoBody = function(mheader){
1181    var tplBody = 'a:33:{'
1182+                   's:4:"body";N;'
1183+                   's:11:"attachments";N;'
1184+                   's:6:"thumbs";N;'
1185+                   's:9:"signature";N;'
1186+                   's:10:"Importance";s:6:"Normal";'
1187+                   's:6:"Recent";s:1:" ";'
1188+                   's:6:"Unseen";s:1:"N";'
1189+                   's:7:"Deleted";s:1:" ";'
1190+                   's:7:"Flagged";b:0;'
1191+                   's:8:"Answered";s:1:" ";'
1192+                   's:5:"Draft";s:1:" ";'
1193+                   's:10:"msg_number";s:4:"2241";'
1194+                   's:10:"msg_folder";s:5:"INBOX";'
1195+                   's:5:"udate";s:5:"10:01";'
1196+                   's:7:"msg_day";s:10:"10/05/2011";'
1197+                   's:8:"msg_hour";s:5:"10:02";'
1198+                   's:8:"fulldate";s:36:"10/05/2011 10:01 (05:35 horas atras)";'
1199+                   's:9:"smalldate";s:5:"10:04";'
1200+                   's:4:"from";N;'
1201+                   's:6:"sender";a:3:{'
1202+                       's:4:"name";N;'
1203+                       's:5:"email";s:46:"listaregional-pae-bounces@grupos.serpro.gov.br";'
1204+                       's:4:"full";s:46:"listaregional-pae-bounces@grupos.serpro.gov.br";'
1205+                   '}'
1206+                   's:10:"toaddress2";s:32:"comunicacao.social@serpro.gov.br";'
1207+                   's:2:"cc";N;'
1208+                   's:3:"bcc";N;'
1209+                   's:8:"reply_to";N;'
1210+                   's:7:"subject";N;'
1211+                   's:4:"Size";s:4:"1234";'
1212+                   's:15:"reply_toaddress";s:45:"com.social <comunicacao.social@serpro.gov.br>";'
1213+                   's:9:"timestamp";i:1305032476;'
1214+                   's:5:"login";i:944889240;'
1215+                   's:6:"header";a:16:{'
1216+                      's:11:"ContentType";s:6:"normal";'
1217+                      's:10:"Importance";s:6:"Normal";'
1218+                      's:6:"Recent";s:1:" ";'
1219+                      's:6:"Unseen";s:1:"N";'
1220+                      's:8:"Answered";s:1:" ";'
1221+                      's:5:"Draft";s:1:" ";'
1222+                      's:7:"Deleted";s:1:" ";'
1223+                      's:7:"Flagged";b:0;'
1224+                      's:10:"msg_number";s:4:"2251";'
1225+                      's:5:"udate";s:10:"10/05/2011";'
1226+                      's:11:"offsetToGMT";i:-10800;'
1227+                      's:8:"aux_date";N;'
1228+                      's:4:"from";a:2:{'
1229+                         's:4:"name";s:10:"com.social";'
1230+                         's:5:"email";s:32:"comunicacao.social@serpro.gov.br";'
1231+                      '}'
1232+                      's:2:"to";a:2:{'
1233+                         's:4:"name";s:32:"comunicacao.social@serpro.gov.br";'
1234+                         's:5:"email";s:32:"comunicacao.social@serpro.gov.br";'
1235+                      '}'
1236+                      's:7:"subject";s:28:"Primeira leitura - 10/5/2011";'
1237+                      's:4:"Size";N;'
1238+                      's:10:"attachment";a:2:{'
1239+                         's:5:"names";b:0;'
1240+                         's:18:"number_attachments";i:0;'
1241+                      '}'
1242+                  '}'
1243+                  's:12:"array_attach";N;'
1244+                  's:15:"url_export_file";s:160:"inc/gotodownload.php?idx_file=/var/www/expressov2/expressoMail1_2/inc/../tmpLclAtt/source_38a3e960115351578aa182ae1d6c2b7b.txt&newfilename=fonte_da_mensagem.txt";'
1245+                  's:2:"to";N;'
1246+              '}';
1247    return(tplBody);
1248}
1249
1250MailArchiver.prototype.toExpressoMessage = function(mheader, mbody){
1251    var strMessage = null;
1252    var strMessage1 = expresso_mail_archive.toExpressoBody(mheader);
1253    //var str3 = connector.unserialize(strMessage1);
1254    //strMessage =  eval("(" + strMessage1 + ")");
1255    strMessage = connector.unserialize(strMessage1);
1256   
1257    window.alert('dump strMessage:\n\n' + print_r(strMessage,0));
1258   
1259    strMessage['from'] = mheader["from"];
1260    //strMessage['from'] = expresso_mail_archive.toExpressoBody(mheader, mbody);
1261    strMessage['subject'] = mheader["subject"];
1262    strMessage['body'] = mbody;
1263    strMessage['to'] = mheader["to"];
1264    strMessage['cc'] = mheader["cc"];
1265    strMessage['local_message'] = true;
1266    strMessage['folder'] = 'local_' + expresso_mail_archive.currentfolder;
1267    strMessage['msg_number'] = mheader["msg_number"];
1268    //window.alert('strMessage dump\n\n' + print_r(strMessage));
1269    return(strMessage);
1270
1271
1272/*
1273 *      retorno['from'] = connector.unserialize(rs.field(2));
1274        retorno['subject'] = rs.field(3);
1275        retorno['body'] = rs.field(4);
1276        //Codigo que as imagens embutidas em emails (com multipart/related ou multipart/mixed) sejam corretamente mostradas em emails arquivados. Os links do
1277        //tipo "./inc/show_embedded_attach.php?msg_folder=[folder]&msg_num=[msg_num]&msg_part=[part]"
1278        //são substituidos pelos links dos anexos capturados pelo gears.
1279
1280        var thumbs= retorno.thumbs;
1281        var anexos= retorno.array_attach;
1282        for (i in anexos)
1283        {
1284            if(anexos[i]['url'] && anexos[i]['url'].match(/((jpg)|(jpeg)|(png)|(gif)|(bmp))/gi))
1285            {
1286                var er_imagens = new RegExp("\\.\\/inc\\/show_embedded_attach.php\\?msg_folder=[\\w/]+\\&msg_num=[0-9]+\\&msg_part="+anexos[i]['pid']);
1287                var Result_imagens = er_imagens.exec(retorno['body']);
1288                retorno['body'] = retorno['body'].replace(Result_imagens,anexos[i]['url']);
1289                if(thumbs && thumbs[i]){
1290                    er_imagens = new RegExp("\\.\\/inc\\/show_thumbs.php\\?file_type=image\\/[\\w]+\\&msg_num=[0-9]+\\&msg_folder=[\\w/%]+\\&msg_part="+anexos[i]['pid']);
1291                    Result_imagens = er_imagens.exec(thumbs[i]);
1292                    thumbs[i] = thumbs[i].replace(Result_imagens,"'"+anexos[i]['url']+"'");
1293                    er_imagens = new RegExp("\\.\\/inc\\/show_img.php\\?msg_num=[0-9]+\\&msg_folder=[\\w/%]+\\&msg_part="+anexos[i]['pid']);
1294                    Result_imagens = er_imagens.exec(thumbs[i]);
1295                    thumbs[i] = thumbs[i].replace(Result_imagens,anexos[i]['url']);
1296                    thumbs[i] = thumbs[i].replace(/<IMG/i,'<img width="120"');
1297                }
1298            }
1299        }
1300
1301        retorno['to'] = connector.unserialize(rs.field(5));
1302        retorno['cc'] = connector.unserialize(rs.field(6));
1303
1304        retorno['local_message'] = true;
1305        retorno['msg_folder'] = "local_"+rs.field(7); //Now it's a local folder
1306        retorno['msg_number'] = rs.field(0)+plus_id; //the message number is the rowid
1307 **/   
1308}
1309
1310
1311MailArchiver.prototype.Query = function(offlow, offup, qdata){
1312    var querystring = this.queryconfig.query(offlow, preferences.max_email_per_page, qdata);
1313    this.listMessages();
1314}
1315
1316/*
1317 *The all pourpose JavaScript variable, used by all related functionalityes at
1318 *Expresso Mail to handle this object at user gui.
1319 */
1320
1321var expresso_mail_archive;
1322expresso_mail_archive = new MailArchiver();
1323-->
Note: See TracBrowser for help on using the repository browser.