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

Revision 4899, 39.5 KB checked in by fernando-alberto, 13 years ago (diff)

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

  • 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
733        if (expresso_mail_archive.queryconfig.folder != null)
734            var testing_data = expresso_mail_archive.queryconfig.query();
735        else
736            var testing_data = testing_data_json_mapped;
737       
738        //window.alert('vai chamar o listMessages com testing_data = ' + testing_data);
739        ArchiveServices.listMessages(expresso_mail_archive.listMessagesOperationOK, expresso_mail_archive.listMessagesOperationFailure, sessid, testing_data);
740    }
741    catch (e){
742        window.alert('Ops...listMessages fails at:\n' + e);
743    }
744}
745
746//listMessages callback OK
747MailArchiver.prototype.listMessagesOperationOK = function(returnService){
748    var msglist = new Array();
749    /*window.alert('Dados da mensagem:\n->From ' + returnService.getReturn()[0].getFrom()
750                                      +'\n->To ' + returnService.getReturn()[0].getTo()
751                                      +'\n->Subject ' + returnService.getReturn()[0].getSubject()
752                                      +'\n->Date ' + returnService.getReturn()[0].getDate()
753                                      +'\n->Date ' + returnService.getReturn()[0].getSize()
754                                      +'\n->ID ' + returnService.getReturn()[0].getId());
755    */
756    for(var i=0; i< returnService.getReturn().length; i++){
757        //window.alert('quer deserializar:\n\n' + print_r(returnService.getReturn()[i]));
758        var ExpSerialized = expresso_mail_archive.toExpressoHeader(returnService.getReturn()[i]);
759        //window.alert('expSerialized ' + i + '\n\n --\n\n' + print_r(ExpSerialized));
760        //var test = connector.unserialize(ExpSerialized);
761        //window.alert('unserialized = \n\n' + test);
762        msglist.push(connector.unserialize(ExpSerialized));//usando connector.unserialize sobre o header mapeado no layout abaixo
763    }
764    msglist["num_msgs"] = returnService.getReturn().length;
765    //window.alert('print_r\n\n' + print_r(msglist));
766    expresso_mail_archive.drawdata = {messagesList:msglist};
767    expresso_mail_archive.drawMessagesList();
768}
769
770//listMessages callback Fail
771MailArchiver.prototype.listMessagesOperationFailure = function(ServiceFault){
772    window.alert('listmessages FALHOU!\n' + ServiceFault.getReturn());
773}
774
775MailArchiver.prototype.drawMessagesList = function(){
776    var data_to_draw = expresso_mail_archive.drawdata.messagesList; 
777    //window.alert('data to draw =  ' + data_to_draw.length + '\ndata_to_draw[0].from.full = ' + print_r(data_to_draw));
778   
779    alternate_border(0);
780    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>';
781    draw_box(data_to_draw, expresso_mail_archive.currentfolder, true);
782    draw_paging(expresso_mail_archive.drawdata.messagesList.length);
783    Element("tot_m").innerHTML = expresso_mail_archive.drawdata.messagesList.length;
784    //update_menu();
785   
786}
787
788// -----------------------------------SERIALIZED DATA TEMPLATES ----------------
789MailArchiver.prototype.toExpressoAddress = function(data){
790    if((typeof(data) != 'undefined') && (data.length > 0)){
791        /*var dataFormat = expresso_mail_archive.toExpressoFormatNameMail(data);
792        var dataName = dataFormat[0];
793        var dataEmail = dataFormat[1];
794        */
795        //window.alert('em toExpressoFrom com data = \n' + data + '[' + typeof(data) + ']('+data.length+')');
796        var Fromdata = eval("(" + data + ")");
797        //window.alert('temos ' + Fromdata.mailbox.length + ' destinatarios/remetentes a lidar...');
798        //window.alert('name = ' + Fromdata.mailbox["@name"] + '\nlocal part = ' + Fromdata.mailbox["@localPart"] + '\ndomain = ' + Fromdata.mailbox["@domain"]);
799     
800        //one address
801        if(typeof(Fromdata.mailbox.length) == 'undefined'){
802            var dataName = Fromdata.mailbox["@name"];
803            var dataEmail = Fromdata.mailbox["@localPart"] + '@' + Fromdata.mailbox["@domain"];
804        }
805        //address list: to header(msgs list), only first metters
806        else{
807            var dataName = Fromdata.mailbox[0]["@name"];
808            var dataEmail = Fromdata.mailbox[0]["@localPart"] + '@' + Fromdata.mailbox[0]["@domain"];
809        }
810
811        var tplFrom = 'a:3:{'
812+           's:4:"name";'
813+           's:'+dataName.length+':"'+dataName+'";'
814+           's:5:"email";'
815+           's:'+dataEmail.length+':"'+dataEmail+'";'
816+           's:4:"full";'
817+           's:'+(dataName.length + dataEmail.length + 3)+':"'+dataName+'" <'+dataEmail+'>;'
818+       '}';
819    }
820    //Data adrress from mailbox is empty, null, or canot be correctly returned by service invocation (will return 'unknow mailbox' string)
821    else {
822        tplFrom = 'a:2{s:4:"name";s:14:"Unknow mailbox";s:5:"email";s:15:"Unknow_mailbox";}';
823    }
824    return(tplFrom);
825}
826
827MailArchiver.prototype.toExpressoSubject = function(data){
828    if((typeof(data) != 'undefined') && (data.length > 0)){
829        var tplSbj = 's:'+data.length+':"'+data+'";'
830    }
831    //Subject is empty, null, or canot be correctly returned by service invocation (will return 'Message without subject' string)
832    else {
833        tplSbj = 's:25:"[Message without subject]";';
834    }
835    return(tplSbj);
836}
837
838MailArchiver.prototype.toExpressoAttachmentsHeader = function(data){
839    if((typeof(data) != 'undefined') && (data.length > 0)){
840        var Attdata = eval("(" + data + ")");
841        if(typeof(Attdata.attachment) != 'undefined'){                   
842            var tplAttatch = 'a:2:{'
843+               's:5:"names";';
844            //More than 1 attachment - because length will be 'undefined' if just one exists
845            if(Attdata.attachment.length > 0){
846                var strnamesatt = "";
847                for(var x=0; x<Attdata.attachment.length; x++){
848                  var attId = Attdata.attachment[x]["@id"];
849                  var attName = Attdata.attachment[x]["@name"];
850                  var attSize = Attdata.attachment[x]["@size"];
851                  var attMediaType = Attdata.attachment[x]["@mediaType"];
852                  var attSubType = Attdata.attachment[x]["@subType"];
853                  var attEncoding = Attdata.attachment[x]["@encoding"];
854                 
855                  strnamesatt += attName + ', ';
856                }
857                strnamesatt = strnamesatt.substr(0, strnamesatt.length-2);
858                var intnumberatt = Attdata.attachment.length;
859            }
860            //Just one attachment
861            else{
862                var attId = Attdata.attachment["@id"];
863                var attName = Attdata.attachment["@name"];
864                var attSize = Attdata.attachment["@size"];
865                var attMediaType = Attdata.attachment["@mediaType"];
866                var attSubType = Attdata.attachment["@subType"];
867                var attEncoding = Attdata.attachment["@encoding"];
868                strnamesatt = attName;
869                var intnumberatt = 1;
870            }
871           
872            tplAttatch += 's:'+strnamesatt.length+':"'+strnamesatt+'";'
873+               's:18:"number_attachments";i:' +intnumberatt+';'
874+           '}';
875        }
876        else {
877            tplAttatch = 'a:2:{s:5:"names";b:0;s:18:"number_attachments";i:0;}';   
878        }
879    }
880    //No attatch data
881    else {
882        tplAttatch = 'a:2:{s:5:"names";b:0;s:18:"number_attachments";i:0;}';
883    }
884    return(tplAttatch);
885}
886
887MailArchiver.prototype.toExpressoDate = function(data){
888    var ndate = new Date(data);
889    //ndate.setTime(data);
890    var odate = zeroFill(ndate.getDate()) + '/' + zeroFill(ndate.getMonth()+1) + '/' + zeroFill(ndate.getFullYear() + ' ' + zeroFill(ndate.getHours()) + ':' + zeroFill(ndate.getMinutes()) + ':' + zeroFill(ndate.getSeconds()));
891    return(odate);
892}
893
894MailArchiver.prototype.toExpressoFlags = function(data){
895    if((data.length > 0) && (typeof(data) != 'undefined')){
896        var Tagdata = eval("(" + data + ")");
897        //More than 1 attachment - because length will be 'undefined' if just one exists
898        if(Tagdata.tag.length >= 0){
899            var strnamestag = "";
900            for(var x=0; x<Tagdata.tag.length; x++){
901                var tagvalue = Tagdata.tag[x]["@value"];
902                if(tagvalue.toLowerCase().indexOf('recent')!= -1)
903                    strnamestag += 's:6:"Recent";s:1:"N";';
904                if(tagvalue.toLowerCase().indexOf('unseen')!= -1)
905                    strnamestag += 's:6:"Unseen";s:1:"U";';
906                if(tagvalue.toLowerCase().indexOf('answered')!= -1)
907                    strnamestag += 's:8:"Answered";s:1:"A";';
908                if(tagvalue.toLowerCase().indexOf('forwarded')!= -1)
909                    strnamestag += 's:9:"Forwarded";s:1:"F"';
910                if(tagvalue.toLowerCase().indexOf('draft')!= -1)
911                    strnamestag += 's:5:"Draft";s:1:"X";';
912                if(tagvalue.toLowerCase().indexOf('importance')!= -1)
913                    strnamestag += 's:10:"Importance";s:6:"High";';
914                if(tagvalue.toLowerCase().indexOf('flagged')!= -1)
915                    strnamestag += 's:7:"Flagged";s:1:"F";';                       
916            }
917            var tplTags = strnamestag;
918        }
919        else{
920            var strnamestag = "";
921            var tagvalue = Tagdata.tag["@value"];
922            if(tagvalue.toLowerCase().indexOf('recent')!= -1)
923                strnamestag += 's:6:"Recent";s:1:"N";';
924            if(tagvalue.toLowerCase().indexOf('unseen')!= -1)
925                strnamestag += 's:6:"Unseen";s:1:"U";';
926            if(tagvalue.toLowerCase().indexOf('answered')!= -1)
927                strnamestag += 's:8:"Answered";s:1:"A";';
928            if(tagvalue.toLowerCase().indexOf('forwarded')!= -1)
929                strnamestag += 's:9:"Forwarded";s:1:"F"';
930            if(tagvalue.toLowerCase().indexOf('draft')!= -1)
931                strnamestag += 's:5:"Draft";s:1:"X";';
932            if(tagvalue.toLowerCase().indexOf('importance')!= -1)
933                strnamestag += 's:10:"Importance";s:6:"High";';
934            if(tagvalue.toLowerCase().indexOf('flagged')!= -1)
935                strnamestag += 's:7:"Flagged";s:1:"F";';
936            var tplTags = strnamestag;
937        }
938    }
939    else{
940        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;';
941    }
942    return(tplTags);
943}
944
945MailArchiver.prototype.toExpressoHeader = function(data){   
946    var tplHeader = 'a:16:{'
947+           's:11:"ContentType";'
948+           's:' + data.getContentType().length + ':"' + data.getContentType() + '";'
949+           expresso_mail_archive.toExpressoFlags(data.getTags())
950+           's:10:"msg_number";'
951+           's:'+data.getId().length+':"'+data.getId()+'";'
952+           's:5:"udate";'
953+           'i:' + parseInt(data.getDate()/1000) + ';'
954+           's:9:"timestamp";'
955+           'i:' + parseInt(data.getDate()/1000) + ';'
956+           's:4:"from";'
957+           expresso_mail_archive.toExpressoAddress(data.getFrom())
958+           's:2:"to";'
959+           expresso_mail_archive.toExpressoAddress(data.getTo())
960+           's:7:"subject";'
961+           expresso_mail_archive.toExpressoSubject(data.getSubject())
962+           's:4:"Size";'
963+           'i:'+data.getSize()+';'
964+           's:10:"attachment";'
965+           expresso_mail_archive.toExpressoAttachmentsHeader(data.getAttachments())
966+           '}';
967    //window.alert('Serialized data\n\n' + tplHeader + '\ngmtoffset: ' + gmtoffset);
968    return(tplHeader);
969}
970
971MailArchiver.prototype.toExpressoMail = function(data){
972   
973}
974
975
976MailArchiver.prototype.Query = function(offlow, offup, qdata){
977    var querystring = this.queryconfig.query(offlow, preferences.max_email_per_page, qdata);
978    this.listMessages();
979}
980
981/*
982 *The all pourpose JavaScript variable, used by all related functionalityes at
983 *Expresso Mail to handle this object at user gui.
984 */
985
986var expresso_mail_archive;
987expresso_mail_archive = new MailArchiver();
988-->
Note: See TracBrowser for help on using the repository browser.