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

Revision 4878, 38.3 KB checked in by fernando-alberto, 13 years ago (diff)

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

  • Property svn:eol-style set to native
Line 
1<!--
2/*
3 * Mail Archive JS API
4 *
5 * This JavaScript file is the core to use MailArchiver embeded at Expresso suite.
6 * It contains all the resources used to handle local messages stored at the brand
7 * new solution Mail Archiver (a embeded application server running at client side).
8 *
9 * This feature is a replacement for Google Gears(obsolete by now), used by
10 * Expresso to store local messages at user workstation hard disk.
11 *
12 * @author Fernando Wendt [fernando-alberto.wendt@serpro.gov.br]
13 *
14 * @status under development
15 */
16
17var sessid = 'sessionId';
18
19function IterateIt(){
20    var deph = 0;
21    var returnstr = "";
22
23    for (i in arguments[0]){
24      if((arguments[0][i]) && (arguments[0][i].visited == null)){
25          arguments[0][i].visited = true;
26
27          if(typeof(arguments[0][i]) == 'object'){
28            returnstr += '+ Property "' + i + '"[object ' + deph + ']\n<br>';
29            //returnstr += IterateIt(arguments[0][i]);
30            deph++;
31          }
32      }
33    else returnstr += 'Property "' + i + '" -> ' + arguments[0][i] + ' [' + typeof(i) + ']\n<br>';
34    }
35    return (returnstr);
36}
37
38function dump(arr,level) {
39        var dumped_text = "";
40        if(!level) level = 0;
41       
42        //The padding given at the beginning of the line.
43        var level_padding = "";
44        for(var j=0;j<level+1;j++) level_padding += "    ";
45       
46        if(typeof(arr) == 'object') { //Array/Hashes/Objects
47                for(var item in arr) {
48                        var value = arr[item];
49                       
50                        if(typeof(value) == 'object') { //If it is an array,
51                                dumped_text += level_padding + "'" + item + "' ...\n<br>";
52                                dumped_text += dump(value,level+1);
53                        } else {
54                                dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n<br>";
55                        }
56                }
57        } else { //Stings/Chars/Numbers etc.
58                dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
59        }
60        return dumped_text;
61}
62
63function zeroFill(d){
64    if(parseInt(d) < 10)
65        return('0' + d);
66    else
67        return(d);
68}
69
70/**
71 * Concatenates the values of a variable into an easily readable string
72 * by Matt Hackett [scriptnode.com]
73 * @param {Object} x The variable to debug
74 * @param {Number} max The maximum number of recursions allowed (keep low, around 5 for HTML elements to prevent errors) [default: 10]
75 * @param {String} sep The separator to use between [default: a single space ' ']
76 * @param {Number} l The current level deep (amount of recursion). Do not use this parameter: it's for the function's own use
77 */
78function print_r(x, max, sep, l) {
79
80        l = l || 0;
81        max = max || 100;
82        sep = sep || ' ';
83
84        if (l > max) {
85                return "[WARNING: Too much recursion]\n";
86        }
87
88        var
89                i,
90                r = '',
91                t = typeof x,
92                tab = '';
93
94        if (x === null) {
95                r += "(null)\n";
96        } else if (t == 'object') {
97
98                l++;
99
100                for (i = 0; i < l; i++) {
101                        tab += sep;
102                }
103
104                if (x && x.length) {
105                        t = 'array';
106                }
107
108                r += '(' + t + ") :\n";
109
110                for (i in x) {
111                        try {
112                                r += tab + '[' + i + '] : ' + print_r(x[i], max, sep, (l + 1));
113                        } catch(e) {
114                                return "[ERROR: " + e + "]\n";
115                        }
116                }
117
118        } else {
119
120                if (t == 'string') {
121                        if (x == '') {
122                                x = '(empty)';
123                        }
124                }
125
126                r += '(' + t + ') ' + x + "\n";
127
128        }
129
130        return r;
131
132};
133var_dump = print_r;
134
135
136
137//Main object structure: object property data definition
138function MailArchiver() {
139    this.enabled = null;
140    this.interval = 500;
141    this.timer = null;
142    this.counter = 0;
143    this.message_list = new Array();
144    this.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            //window.alert('destination_folder = ' + expresso_mail_archive.folder_destination);
346
347            var arch_handler = function(data){
348                //Store the message source from Ajax request by now (string data)
349                var js_var = new String(data);
350                try{
351                    //Archive services needs session id, message source and destination folder
352                    document.getElementById('main_title').innerHTML = get_lang("Archiving message on folder") + " " + expresso_mail_archive.folder_destination +"...";
353                    ArchiveServices.archive(expresso_mail_archive.getArchiveOperationOK, expresso_mail_archive.getArchiveOperationFailure, sessid, data ,expresso_mail_archive.folder_destination);
354                }
355                catch(e){
356                    window.alert('ArchiveServices.archive eror: ' + e);
357                }
358            }
359           
360            document.getElementById('main_title').innerHTML = get_lang("Archiving messages " + expresso_mail_archive.messages_processed + " of " + expresso_mail_archive.message_list.length);
361            cExecute("$this.exporteml.js_source_var",arch_handler,"folder="+url_decode(source_folder)+"&msgs_to_export="+expresso_mail_archive.message_list[0]);
362        }
363        else throw('Ops. Message list stack is empty!');
364    }
365    catch(e){
366        window.alert('Archive error: ' + e);
367    }
368}
369
370//Archive callback OK
371MailArchiver.prototype.getArchiveOperationOK = function(status_message){
372    expresso_mail_archive.messages_processed++;
373    if(expresso_mail_archive.message_list.length > 1){
374       document.getElementById('main_title').innerHTML = get_lang("Message " + expresso_mail_archive.messages_processed + " of " + expresso_mail_archive.total_messages + " successfully archived.");
375       expresso_mail_archive.message_list.shift();
376       expresso_mail_archive.Archive(expresso_mail_archive.folder_origin, expresso_mail_archive.folder_destination, expresso_mail_archive.message_list);
377    }
378    else{
379        document.getElementById('main_title').innerHTML = get_lang("All done. End of archive messages operation.");
380        expresso_mail_archive.resetObject();
381        window.setTimeout("eval('document.getElementById(\"main_title\").innerHTML =\"Expresso Mail\"')",3000);
382    }
383}
384//Archive callback Fail
385MailArchiver.prototype.getArchiveOperationFailure = function(error_message){
386    window.alert('Hi! getArchiveOperationFailure comes with ' + error_message.getReturn());
387    window.setTimeout("eval('document.getElementById(\"main_title\").innerHTML =\"Expresso Mail\"')",3000);
388}
389
390/**
391 *Archieve Delete Message
392 *
393 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
394 *
395 *@param msg_number Unique identification of the message
396 */
397MailArchiver.prototype.deleteMessages = function(msgs_number){
398    try{
399        expresso_mail_archive.CreateMessageList(msgs_number);
400        if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')) {
401            ArchiveServices.deleteMessages(expresso_mail_archive.deleteMessagesOperationOK,
402                                           expresso_mail_archive.deleteMessagesOperationFailure,
403                                           sessid,
404                                           expresso_mail_archive.message_list);
405        }
406    }
407    catch (e){
408        return (e);
409    }
410}
411
412/**
413 *Archieve Delete Message Ok
414 *
415 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
416 *
417 */
418MailArchiver.prototype.deleteMessagesOperationOK = function(){
419    var drawinginfo = {treeObject: tree_folders, treeName: 'tree_folders'};
420    expresso_mail_archive.drawdata = drawinginfo;
421    expresso_mail_archive.drawFolderTree();
422    expresso_mail_archive.listMessages();
423    if(expresso_mail_archive.message_list.length > 1){
424        write_msg(get_lang("The messages were deleted."));
425    }else{
426        write_msg(get_lang("The message was deleted."));
427    }
428}
429
430/**
431 *Archieve Delete Message Operation Failure
432 *
433 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
434 *
435 */
436MailArchiver.prototype.deleteMessagesOperationFailure = function(error_message){
437    if(expresso_mail_archive.message_list.length > 1){
438        write_msg(get_lang("Error deleting messages.") + ' ' + error_message.getReturn());
439    }else{
440        write_msg(get_lang("Error deleting message.") + ' ' + error_message.getReturn());
441    }
442}
443
444/**
445 *Move message
446 *
447 *@param folder Folder where the message will be moved
448 *@param msgs_number Unique Id of the message
449 *
450 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
451 *
452 */
453MailArchiver.prototype.moveMessages = function(folder, msgs_number){
454    try{
455        expresso_mail_archive.CreateMessageList(msgs_number);
456        if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')) {
457            ArchiveServices.moveMessages(expresso_mail_archive.moveMessagesOperationOK,
458                                           expresso_mail_archive.moveMessagesOperationFailure,
459                                           sessid,
460                                           expresso_mail_archive.message_list,
461                                           folder
462                                       );
463        }
464        else {
465            throw "Error moving the messages!";
466        }
467    }
468    catch (e){
469        return (e);
470    }
471}
472
473/**
474 *Move Message Ok
475 *
476 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
477 *
478 */
479MailArchiver.prototype.moveMessagesOperationOK = function(){
480    var drawinginfo = {treeObject: tree_folders, treeName: 'tree_folders'};
481    expresso_mail_archive.drawdata = drawinginfo;
482    expresso_mail_archive.drawFolderTree();
483    expresso_mail_archive.listMessages();
484    if(expresso_mail_archive.message_list.length > 1){
485        write_msg(get_lang("The messages were moved."));
486    }else{
487        write_msg(get_lang("The message was moved."));
488    }
489}
490
491/**
492 *Move Message Failure
493 *
494 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br]
495 *
496 */
497MailArchiver.prototype.moveMessagesOperationFailure = function(error_message){
498    if(expresso_mail_archive.message_list.length > 1){
499        write_msg(get_lang("Error deleting messages.") + ' ' + error_message.getReturn());
500    }else{
501        write_msg(get_lang("Error deleting message.") + ' ' + error_message.getReturn());
502    }
503}
504
505
506//getFolderList Operation
507MailArchiver.prototype.getFoldersList = function(basefolder){   
508    try{
509        ArchiveServices.listFolders(expresso_mail_archive.getFoldersListOperationOK, expresso_mail_archive.getFoldersListOperationFailure, sessid, basefolder);
510    }
511    catch (e){
512        window.alert('AQUI MESMO\nOps...List folders fails at:\n' + e.description);
513    }
514}
515
516//getFolderList callback OK
517MailArchiver.prototype.getFoldersListOperationOK = function(folderlist){
518    //Internal variable used to map all XML data return from WS invokated
519    var lfolders = new Array();
520   
521    //Mapping XML data to a handler data structure
522    if(folderlist.getReturn().length > 0){
523        var lfolders = new Array();
524        for(i=0; i<folderlist.getReturn().length; i++){
525            (folderlist.getReturn()[i].getFolderCount() > 0 ) ? folderChild = 1 : folderChild = 0;
526
527            //Store folder data at this format: {folder name, number of messages contained, folder has child nodes, folder id, folder parent id, folder full path}
528            //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());
529            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()};
530            lfolders.push(folderData);
531        }
532
533        //Sets folders property at main object
534        expresso_mail_archive.folders = lfolders;
535       
536        if(expresso_mail_archive.folders[0]["parentid"] == "")
537            expresso_mail_archive.currentfolder = 'local_root';
538        else
539            expresso_mail_archive.currentfolder = expresso_mail_archive.folders[0]["parentid"];
540       
541        //Folders dumping :)
542        /*var strFolders = '---';
543        for (var w=0; w < expresso_mail_archive.folders.length; w++){
544            strFolders += '\nFolder ' + w + ' -->';
545            for (x in expresso_mail_archive.folders[w]){
546                strFolders += '\n----------' + x + ':= ' + expresso_mail_archive.folders[w][x];
547            }
548            strFolders += '\n<---';
549        }
550        strFolders += '\n---';
551        alert(lfolders.length + ' folders mapeados, com default = ' + expresso_mail_archive.currentfolder + '\nfolders list:\n\n' + strFolders);
552        */
553
554        //If something UI related have been flagged, handle it
555        if (expresso_mail_archive.drawdata){
556            //window.alert('com drawdata');
557            expresso_mail_archive.drawFolderTree();
558        }
559    }
560}
561
562//getFolderList callback Fail
563MailArchiver.prototype.getFoldersListOperationFailure = function(error, http_msg){
564    window.alert('List folders mistake:' + error + '\nhttp_error = ' + http_msg);
565}
566
567//drawFolderTree operation, if requested to
568MailArchiver.prototype.drawFolderTree = function(){
569    //window.alert('na api de foldertree');
570    var localBaseName  = 'local_';
571    var objectTree = expresso_mail_archive.drawdata.treeObject;
572    var evalobjectTree = eval(expresso_mail_archive.drawdata.treeName);
573   
574    //Add nodes to tree
575    if(expresso_mail_archive.folders.length > 0){
576        for(i=0; i<expresso_mail_archive.folders.length; i++){
577            var folder_caption;
578           
579            //Special folders treatment: Inbox, Outbox, Drafts, Sent and Trash folders
580            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')){
581                folder_caption = get_lang(expresso_mail_archive.folders[i]["name"]);
582            }
583            else{
584                folder_caption = expresso_mail_archive.folders[i]["name"];
585            }
586            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"]});
587           
588            //Adjust the id node names
589            if(expresso_mail_archive.currentfolder){
590                if(expresso_mail_archive.currentfolder.substr(0,5) != 'local'){
591                    evalobjectTree.add(n_demo, localBaseName + expresso_mail_archive.currentfolder);
592                }
593                else{
594                    evalobjectTree.add(n_demo,expresso_mail_archive.currentfolder);
595                }
596            }
597            else {
598                expresso_mail_archive.currentfolder = 'local_root';
599                evalobjectTree.add(n_demo,expresso_mail_archive.currentfolder);
600            }
601        }
602    }
603}
604
605//getFaultInfo operation
606MailArchiver.prototype.getFaultInfo = function(){
607    try{
608        ArchiveServices.getFaultInfo(expresso_mail_archive.getFaultInfoOperationOK, expresso_mail_archive.getFaultInfoOperationFailure, sessid);
609    }   
610    catch(e){
611        write_msg(get_lang('getFaultInfo invoke fails = ' + e),true);
612    }
613}
614
615//getFaultInfo callback OK
616MailArchiver.prototype.getFaultInfoOperationOK = function(faultinfo){
617    try{
618        write_msg(get_lang('MailArchiver remote service reports the following error:' + faultinfo.getReturn().getSoapFaultString(), true));
619    } catch(e){
620        write_msg(get_lang('Ops! It was not possible to capture service error data.', true));
621    }
622}
623
624//getFaultInfo callback Fail
625MailArchiver.prototype.getFaultInfoOperationFailure = function(errorCode, errorDesc){
626    try{
627        write_msg(get_lang('SoapFault capture fails at:' + errorCode + ' | ' + errorDesc, true));
628    } catch(e){
629        write_msg(get_lang('Service error mapping', true));
630    }   
631}
632
633//createFolder operation
634MailArchiver.prototype.createFolder = function(parentFolder, folderName){
635    try{
636        ArchiveServices.createFolder(expresso_mail_archive.createFolderOperationOK, expresso_mail_archive.createFolderOperationFailure, sessid, parentFolder, folderName);
637    }
638    catch (e){
639        window.alert('Ops...create folder fails at:\n' + e);
640    }
641   
642}
643
644//createFolder callback OK
645MailArchiver.prototype.createFolderOperationOK = function (folderObject){
646    draw_tree_local_folders();
647    ttreeBox.update_folder();   
648}
649
650//createFolder callback Fail
651MailArchiver.prototype.createFolderOperationFailure = function (message){
652    window.alert('Folder creation fails...\n->' + message.getReturn());
653}
654
655//deleteFolder operation
656MailArchiver.prototype.deleteFolder = function(folderName){
657    try{
658        ArchiveServices.deleteFolder(expresso_mail_archive.deleteFolderOperationOK, expresso_mail_archive.deleteFolderOperationFailure, sessid, folderName, true);
659    }
660    catch (e){
661        window.alert('Ops...delete folder fails at:\n' + e);
662    }
663   
664}
665
666//deleteFolder callback OK
667MailArchiver.prototype.deleteFolderOperationOK = function (folderObject){
668    var fo = IterateIt(folderObject);
669    write_msg(get_lang("The folder " + expresso_mail_archive.drawdata.folderName + " was successfully removed"));
670    draw_tree_local_folders();
671    ttreeBox.update_folder();   
672}
673
674//deleteFolder callback Fail
675MailArchiver.prototype.deleteFolderOperationFailure = function (message){
676    window.alert('Folder deletion fails...\n->' + message.getReturn());
677}
678
679//renameFolder operation
680MailArchiver.prototype.renameFolder = function(folderId, newFolderName){
681    try{
682        ArchiveServices.renameFolder(expresso_mail_archive.renameFolderOperationOK, expresso_mail_archive.renameFolderOperationFailure, sessid, folderId, newFolderName);
683    }
684    catch (e){
685        window.alert('Ops...renaming folder fails at:\n' + e);
686    }
687   
688}
689
690//renameFolder callback OK
691MailArchiver.prototype.renameFolderOperationOK = function (returnService){
692    var evalobjectTree = eval(expresso_mail_archive.drawdata.treeName);
693    evalobjectTree.update_folder();
694}
695
696//renameFolder callback Fail
697MailArchiver.prototype.renameFolderOperationFailure = function (ServiceFault){
698    window.alert('Folder rename fails...\n->' + ServiceFault.getReturn());
699    alert(get_lang("cannot rename folder. try other folder name"));
700}
701
702//getFolderInfo operation
703MailArchiver.prototype.getFolderInfo = function (folderId){
704    try{
705        ArchiveServices.getFolderInfo(expresso_mail_archive.getFolderInfoOperationOK, expresso_mail_archive.getFolderInfoOperationFailure, sessid, folderId);
706    }
707    catch (e){
708        window.alert('Ops...getFolderInfo fails at:\n' + e);
709    }     
710}
711
712//getFolderInfo callback OK
713MailArchiver.prototype.getFolderInfoOperationOK = function(returnService){
714   var folder_info = {id : returnService.getReturn().getId(), name : returnService.getReturn().getName(), parent : returnService.getReturn().getParentId(), numfolders: returnService.getReturn().getFolderCount(), nummessages: returnService.getReturn().getMessageCount()};
715   expresso_mail_archive.folder = folder_info;
716}
717
718//getFolderInfo callback Fail
719MailArchiver.prototype.getFolderInfoOperationFailure = function (ServiceFault){
720    window.alert('getFolderInfo service fails...\n->' + ServiceFault.getReturn());
721}
722
723//listMessages operation
724//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) {
725//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) {
726//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);
727MailArchiver.prototype.listMessages = function(){
728    try{
729        var folderid = expresso_mail_archive.currentfolder;
730        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>';
731        var testing_data_json_mapped = '{"query":{"@lowerIndex":"0", "@upperIndex":"50", "folder":[{"@id":"'+folderid+'"}], "order":[{"@asc":"date", "@desc":"subject"}]}}';
732        var testing_data = testing_data_json_mapped;
733        //window.alert('vai chamar o listMessages com testing_data = ' + testing_data);
734        ArchiveServices.listMessages(expresso_mail_archive.listMessagesOperationOK, expresso_mail_archive.listMessagesOperationFailure, sessid, testing_data);
735    }
736    catch (e){
737        window.alert('Ops...listMessages fails at:\n' + e);
738    }
739}
740
741//listMessages callback OK
742MailArchiver.prototype.listMessagesOperationOK = function(returnService){
743    var msglist = new Array();
744    /*window.alert('Dados da mensagem:\n->From ' + returnService.getReturn()[0].getFrom()
745                                      +'\n->To ' + returnService.getReturn()[0].getTo()
746                                      +'\n->Subject ' + returnService.getReturn()[0].getSubject()
747                                      +'\n->Date ' + returnService.getReturn()[0].getDate()
748                                      +'\n->Date ' + returnService.getReturn()[0].getSize()
749                                      +'\n->ID ' + returnService.getReturn()[0].getId());
750    */
751    for(var i=0; i< returnService.getReturn().length; i++){
752        //window.alert('quer deserializar:\n\n' + print_r(returnService.getReturn()[i]));
753        var ExpSerialized = expresso_mail_archive.toExpressoHeader(returnService.getReturn()[i]);
754        //window.alert('expSerialized ' + i + '\n\n --\n\n' + print_r(ExpSerialized));
755        //var test = connector.unserialize(ExpSerialized);
756        //window.alert('unserialized = \n\n' + test);
757        msglist.push(connector.unserialize(ExpSerialized));//usando connector.unserialize sobre o header mapeado no layout abaixo
758    }
759    msglist["num_msgs"] = returnService.getReturn().length;
760    //window.alert('print_r\n\n' + print_r(msglist));
761    expresso_mail_archive.drawdata = {messagesList:msglist};
762    expresso_mail_archive.drawMessagesList();
763}
764
765//listMessages callback Fail
766MailArchiver.prototype.listMessagesOperationFailure = function(ServiceFault){
767    window.alert('listmessages FALHOU!\n' + ServiceFault.getReturn());
768}
769
770MailArchiver.prototype.drawMessagesList = function(){
771    var data_to_draw = expresso_mail_archive.drawdata.messagesList; 
772    //window.alert('data to draw =  ' + data_to_draw.length + '\ndata_to_draw[0].from.full = ' + print_r(data_to_draw));
773   
774    alternate_border(0);
775    Element("border_id_0").innerHTML = "&nbsp;" + lang_folder(expresso_mail_archive.currentfolder) + '&nbsp;<font face="Verdana" size="1" color="#505050">[<span id="new_m">&nbsp;</span> / <span id="tot_m"></span>]</font>';
776    draw_box(data_to_draw, expresso_mail_archive.currentfolder, true);
777    draw_paging(expresso_mail_archive.drawdata.messagesList.length);
778    Element("tot_m").innerHTML = expresso_mail_archive.drawdata.messagesList.length;
779    //update_menu();
780   
781}
782
783// -----------------------------------SERIALIZED DATA TEMPLATES ----------------
784MailArchiver.prototype.toExpressoAddress = function(data){
785    if((typeof(data) != 'undefined') && (data.length > 0)){
786        /*var dataFormat = expresso_mail_archive.toExpressoFormatNameMail(data);
787        var dataName = dataFormat[0];
788        var dataEmail = dataFormat[1];
789        */
790        //window.alert('em toExpressoFrom com data = \n' + data + '[' + typeof(data) + ']('+data.length+')');
791        var Fromdata = eval("(" + data + ")");
792        //window.alert('temos ' + Fromdata.mailbox.length + ' destinatarios/remetentes a lidar...');
793        //window.alert('name = ' + Fromdata.mailbox["@name"] + '\nlocal part = ' + Fromdata.mailbox["@localPart"] + '\ndomain = ' + Fromdata.mailbox["@domain"]);
794     
795        //one address
796        if(typeof(Fromdata.mailbox.length) == 'undefined'){
797            var dataName = Fromdata.mailbox["@name"];
798            var dataEmail = Fromdata.mailbox["@localPart"] + '@' + Fromdata.mailbox["@domain"];
799        }
800        //address list: to header(msgs list), only first metters
801        else{
802            var dataName = Fromdata.mailbox[0]["@name"];
803            var dataEmail = Fromdata.mailbox[0]["@localPart"] + '@' + Fromdata.mailbox[0]["@domain"];
804        }
805
806        var tplFrom = 'a:3:{'
807+           's:4:"name";'
808+           's:'+dataName.length+':"'+dataName+'";'
809+           's:5:"email";'
810+           's:'+dataEmail.length+':"'+dataEmail+'";'
811+           's:4:"full";'
812+           's:'+(dataName.length + dataEmail.length + 3)+':"'+dataName+'" <'+dataEmail+'>;'
813+       '}';
814    }
815    //Data adrress from mailbox is empty, null, or canot be correctly returned by service invocation (will return 'unknow mailbox' string)
816    else {
817        tplFrom = 'a:2{s:4:"name";s:14:"Unknow mailbox";s:5:"email";s:15:"Unknow_mailbox";}';
818    }
819    return(tplFrom);
820}
821
822MailArchiver.prototype.toExpressoSubject = function(data){
823    if((typeof(data) != 'undefined') && (data.length > 0)){
824        var tplSbj = 's:'+data.length+':"'+data+'";'
825    }
826    //Subject is empty, null, or canot be correctly returned by service invocation (will return 'Message without subject' string)
827    else {
828        tplSbj = 's:25:"[Message without subject]";';
829    }
830    return(tplSbj);
831}
832
833MailArchiver.prototype.toExpressoAttachmentsHeader = function(data){
834    if((typeof(data) != 'undefined') && (data.length > 0)){
835        var Attdata = eval("(" + data + ")");
836        if(typeof(Attdata.attachment) != 'undefined'){                   
837            var tplAttatch = 'a:2:{'
838+               's:5:"names";';
839            //More than 1 attachment - because length will be 'undefined' if just one exists
840            if(Attdata.attachment.length > 0){
841                var strnamesatt = "";
842                for(var x=0; x<Attdata.attachment.length; x++){
843                  var attId = Attdata.attachment[x]["@id"];
844                  var attName = Attdata.attachment[x]["@name"];
845                  var attSize = Attdata.attachment[x]["@size"];
846                  var attMediaType = Attdata.attachment[x]["@mediaType"];
847                  var attSubType = Attdata.attachment[x]["@subType"];
848                  var attEncoding = Attdata.attachment[x]["@encoding"];
849                 
850                  strnamesatt += attName + ', ';
851                }
852                strnamesatt = strnamesatt.substr(0, strnamesatt.length-2);
853                var intnumberatt = Attdata.attachment.length;
854            }
855            //Just one attachment
856            else{
857                var attId = Attdata.attachment["@id"];
858                var attName = Attdata.attachment["@name"];
859                var attSize = Attdata.attachment["@size"];
860                var attMediaType = Attdata.attachment["@mediaType"];
861                var attSubType = Attdata.attachment["@subType"];
862                var attEncoding = Attdata.attachment["@encoding"];
863                strnamesatt = attName;
864                var intnumberatt = 1;
865            }
866           
867            tplAttatch += 's:'+strnamesatt.length+':"'+strnamesatt+'";'
868+               's:18:"number_attachments";i:' +intnumberatt+';'
869+           '}';
870        }
871        else {
872            tplAttatch = 'a:2:{s:5:"names";b:0;s:18:"number_attachments";i:0;}';   
873        }
874    }
875    //No attatch data
876    else {
877        tplAttatch = 'a:2:{s:5:"names";b:0;s:18:"number_attachments";i:0;}';
878    }
879    return(tplAttatch);
880}
881
882MailArchiver.prototype.toExpressoFlags = function(data){
883    if((data.length > 0) && (typeof(data) != 'undefined')){
884        var Tagdata = eval("(" + data + ")");
885        //More than 1 attachment - because length will be 'undefined' if just one exists
886        if(Tagdata.tag.length >= 0){
887            var strnamestag = "";
888            for(var x=0; x<Tagdata.tag.length; x++){
889                var tagvalue = Tagdata.tag[x]["@value"];
890                if(tagvalue.toLowerCase().indexOf('recent')!= -1)
891                    strnamestag += 's:6:"Recent";s:1:"N";';
892                if(tagvalue.toLowerCase().indexOf('unseen')!= -1)
893                    strnamestag += 's:6:"Unseen";s:1:"U";';
894                if(tagvalue.toLowerCase().indexOf('answered')!= -1)
895                    strnamestag += 's:8:"Answered";s:1:"A";';
896                if(tagvalue.toLowerCase().indexOf('forwarded')!= -1)
897                    strnamestag += 's:9:"Forwarded";s:1:"F"';
898                if(tagvalue.toLowerCase().indexOf('draft')!= -1)
899                    strnamestag += 's:5:"Draft";s:1:"X";';
900                if(tagvalue.toLowerCase().indexOf('importance')!= -1)
901                    strnamestag += 's:10:"Importance";s:6:"High";';
902                if(tagvalue.toLowerCase().indexOf('flagged')!= -1)
903                    strnamestag += 's:7:"Flagged";s:1:"F";';                       
904            }
905            var tplTags = strnamestag;
906        }
907        else{
908            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;';   
909        }
910    }
911    else{
912        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;';
913    }
914    return(tplTags);
915}
916
917MailArchiver.prototype.toExpressoHeader = function(data){   
918    var tplHeader = 'a:19:{'
919+           's:11:"ContentType";'
920+           's:' + data.getContentType().length + ':"' + data.getContentType() + '";'
921+           expresso_mail_archive.toExpressoFlags(data.getTags())
922+           's:10:"msg_number";'
923+           's:'+data.getId().length+':"'+data.getId()+'";'
924+           's:5:"udate";'
925+           'i:' + parseInt(data.getDate()/1000) + ';'
926+           's:11:"offsetToGMT";'
927+           'i:-10800;'
928+           's:9:"timestamp";'
929+           'i:' + parseInt(data.getDate()/1000) + ';'
930+           's:9:"smalldate";'
931+           's:10:"01/04/2011";'
932+           's:8:"aux_date";'
933+           's:1:" ";'
934+           's:4:"from";'
935+           expresso_mail_archive.toExpressoAddress(data.getFrom())
936+           's:2:"to";'
937+           expresso_mail_archive.toExpressoAddress(data.getTo())
938+           's:7:"subject";'
939+           expresso_mail_archive.toExpressoSubject(data.getSubject())
940+           's:4:"Size";'
941+           'i:'+data.getSize()+';'
942+           's:10:"attachment";'
943+           expresso_mail_archive.toExpressoAttachmentsHeader(data.getAttachments())
944+           '}';
945    //window.alert('Serialized data\n\n' + tplHeader);
946    return(tplHeader);
947}
948
949MailArchiver.prototype.toExpressoMail = function(data){
950   
951}
952
953
954MailArchiver.prototype.Query = function(offlow, offup, qdata){
955    var querystring = this.queryconfig.query(offlow, preferences.max_email_per_page, qdata);
956    this.listMessages();
957}
958
959/*
960 *The all pourpose JavaScript variable, used by all related functionalityes at
961 *Expresso Mail to handle this object at user gui.
962 */
963
964var expresso_mail_archive;
965expresso_mail_archive = new MailArchiver();
966-->
Note: See TracBrowser for help on using the repository browser.