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

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

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

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