source: sandbox/2.5.0-expresso1/expressoMail1_2/js/MAQueryConfig.js @ 7146

Revision 7146, 18.6 KB checked in by fernando, 12 years ago (diff)

Ticket #3037 - Codificar DFD0095 (fernando) - listagem de mensagens locais

Line 
1<!--
2/**
3 *MailArchiver Query Config API
4 *
5 *This api is intended to be used with MailArquiver JavaScript API.
6 *Basicly, it is responsable to provide a standard data format conversion
7 *to handle queryes under MailArquiver web services pooling. *
8 *
9 */
10
11
12//MailArchiver Query Config data structure
13var MAQueryConfig = function(){
14  this.lowerIndex = null;
15  this.upperIndex = null;
16  this.from = null;
17  this.to = null;
18  this.cc = null;
19  this.subject = null;
20  this.body = null;
21  this.date = null;
22  this.dateLower = null;
23  this.dateUpper = null; 
24  this.tag = null;
25  this.folder = null;
26  this.folder_recursive = null;
27  this.order = null;
28  this.preview_message = null;
29  this.preview_tooltip = null;
30  this.defaults = null;
31}
32
33//Set up all criteria list received
34MAQueryConfig.prototype.setCriteriaList = function(cl){
35  //window.alert('dumpando setCriteriaList:\n' + print_r(cl));
36  for(var p in cl){
37    //window.alert('p = ' + p + '\ncl = ' + cl + '\ncl[p] = ' + cl[p] + '\np[cl] = ' + p[cl]);
38    //Decode the criteria for search.
39    cl[p] = url_decode_s(cl[p]);
40    if(p.toLowerCase() == 'all')
41      this.setSubject(cl[p]);
42    if(p.toLowerCase() == 'lowerindex')
43      this.setLowerIndex(cl[p]);   
44    if(p.toLowerCase() == 'upperindex')
45      this.setUpperIndex(cl[p]);     
46    if(p.toLowerCase() == 'from')
47      this.setFrom(cl[p]);
48    if(p.toLowerCase() == 'to')
49      this.setTo(cl[p]);
50    if(p.toLowerCase() == 'cc')
51      this.setCc(cl[p]);
52    if(p.toLowerCase() == 'subject')
53      this.setSubject(cl[p]);
54    if(p.toLowerCase() == 'body')
55      this.setBody(cl[p]);
56    if(p.toLowerCase() == 'on')
57      this.setDate('on',cl[p]);
58    if(p.toLowerCase() == 'since')
59      this.setDate('lower',cl[p]); 
60    if(p.toLowerCase() == 'before')
61      this.setDate('upper',cl[p]); 
62    if(p.toLowerCase() == 'flags')
63      this.setTag(cl[p]);
64    if(p.toLowerCase() == 'folder')
65      this.setFolder(cl[p]);
66    if(p.toLowerCase() == 'order')
67      this.setOrder(cl[p]);
68
69    //search tags window criteria mapping
70    if(p.toLowerCase() == 'flagged'){
71        var oexptag = eval('({"contains":"flagged"})');
72        this.setTags(oexptag);       
73    }
74    if(p.toLowerCase() == 'unflagged'){
75        var oexptag = eval('({"contains":"unflagged"})');
76        this.setTags(oexptag);       
77    }   
78    if(p.toLowerCase() == 'seen'){       
79        var oexptag = eval('({"contains":"seen"})');
80        this.setTags(oexptag);               
81    }   
82    if(p.toLowerCase() == 'unseen'){
83        var oexptag = eval('({"contains":"unseen"})');
84        this.setTags(oexptag);               
85    }
86    if(p.toLowerCase() == 'answered'){
87        var oexptag = eval('({"contains":"answered"})');
88        this.setTags(oexptag);               
89    }       
90    if(p.toLowerCase() == 'unanswered'){
91        var oexptag = eval('({"contains":"unanswered"})');
92        this.setTags(oexptag);               
93    }           
94  }
95}
96
97MAQueryConfig.prototype.setDefaults = function(defaults){
98    this.defaults = defaults;
99}
100
101MAQueryConfig.prototype.setExpressoDefaults = function(data_default){
102    //Expresso defaults came from "messages_controller.js": here, we maps
103    //each array entry from messages_list intended to run by our own behavior
104    if(data_default.length != 8)
105        return;
106   //expresso default argument list => new Array(baseFolder,msg_range_begin,emails_per_page,sort_box_type,search_box_type, sort_box_reverse,preview_msg_subject,preview_msg_tip);
107   this.setFolder(data_default[0]);
108   this.setLowerIndex(data_default[1]);
109   this.setUpperIndex(data_default[2]);
110   
111   if (parseInt(data_default[5]) == 0)
112       var oexpor = 'asc';
113   else
114       var oexpor = 'desc';
115   
116   //window.alert('NO MAQueryconfig setExpressoDefaults\n\nbase_folder = ' + data_default[0] + '\nmsg_range_begin = ' + data_default[1] + '\nemails_per_page = ' + data_default[2] + '\nsort_box_type =' + data_default[3].toLowerCase() + '\nsearch_box_type= ' + data_default[4] + '\nsort_box_reverse = ' + data_default[5] + '\npreview_msg_subject = ' + data_default[6] + '\npreview_msg_tip = ' + data_default[7]);
117   
118   //sets tag data filter
119   switch(data_default[4].toLowerCase()){
120    case 'unseen':
121        var tagtolist_criteria = 'contains';
122        var tagtolist_value = 'unseen';
123        break;
124    case 'seen':
125        var tagtolist_criteria = 'contains';
126        var tagtolist_value = 'seen';       
127        break;
128    case 'answered':
129        var tagtolist_criteria = 'contains';
130        var tagtolist_value = 'answered';       
131        break;
132    case 'unanswered':
133        var tagtolist_criteria = 'contains';
134        var tagtolist_value = 'unanswered';       
135        break;       
136    case 'flagged':
137        var tagtolist_criteria = 'contains';
138        var tagtolist_value = 'flagged';       
139        break; 
140    case 'unflagged':
141        var tagtolist_criteria = 'contains';
142        var tagtolist_value = 'unflagged';       
143        break;       
144    default:
145        var tagtolist_criteria = null;
146        var tagtolist_value = null;       
147   }
148
149   //sets TagConfig
150   var oexptag = eval('({"' + tagtolist_criteria + '":"' + tagtolist_value + '"})');
151   this.setTags(oexptag);
152
153
154   //sets order criteria
155   switch(data_default[3].toLowerCase()){
156       case 'sortfrom':
157           var oexpcrt = 'from';
158           break;
159       case 'sortsubject':
160           var oexpcrt = 'subject';
161           break;
162       case 'sortsize':
163           var oexpcrt = 'size';
164           break;
165       default:
166           var oexpcrt = 'date';
167           break;
168   }   
169
170   var oexporder = eval('({"' + oexpcrt + '":"' + oexpor + '"})');
171   this.setOrder(oexporder);
172}
173
174//PharseCriteria receives data to pharse structure format fields from, to, cc and subject
175MAQueryConfig.prototype.pharseCriteria = function(field, data, criteria){
176  //window.alert('pharseCriteria input data:\n\n-> field = ' + field + '\ndata = ' + data + '\ncriteria = ' + criteria);
177  if(!criteria)
178      criteria = 'none';
179 
180  var stdout = '"'+field+'":[';
181  switch (criteria.toLowerCase()){
182      case "equals":
183          stdout += '{"@equals":"'+data+'"},';
184          break;
185      case "equalsic":
186          stdout += '{"@equalsIgnoreCase":"'+data+'"},';
187          break;
188      case "like":
189          stdout += '{"@like":"'+data.like+'"},';
190          break;
191      default:
192          stdout+= '{"@likeIgnoreCase":"'+data+'"},';
193  }
194  stdout = stdout.substr(0,stdout.length-1) + '],';
195  return(stdout);
196}
197
198//setbounds up and down
199MAQueryConfig.prototype.setLowerIndex = function(low){
200  //window.alert('setbounds low = ' + low + ' high = ' + high);
201  this.lowerIndex = '"@lowerIndex":"'+(parseInt(low)-1)+'", ';
202}
203
204MAQueryConfig.prototype.setUpperIndex = function(high){
205  //window.alert('setbounds low = ' + low + ' high = ' + high);
206  this.upperIndex = '"@upperIndex":"'+(parseInt(high))+'", ';
207}
208 
209//From receives a array of structutred data, by the model
210MAQueryConfig.prototype.setFrom = function(data){
211  if(data.length <= 0){
212    this.from = null;
213    return;
214  }
215 
216  //subdata = this.pharseCriteria('from', data);
217  this.from = '"@from":"' + data + '",';
218}
219
220//To receives a array of structutred data, by the model
221MAQueryConfig.prototype.setTo = function(data){
222  if(data.length <= 0){
223    this.to = null;
224    return;
225  }
226
227  //subdata = this.pharseCriteria('to', data);
228  this.to = '"@to":"' + data + '",';
229}
230
231//Cc data
232MAQueryConfig.prototype.setCc = function(data){
233  if(data.length <= 0){
234    this.cc = null;
235    return;
236  }
237
238  //subdata = this.pharseCriteria('cc', data);
239  this.cc = '"@cc":"' + data + '",';
240}
241
242//Subject data
243MAQueryConfig.prototype.setSubject = function(sub){
244  if(sub.length <= 0){
245    this.subject = null;
246    return;
247  }
248
249  //subdata = this.pharseCriteria('subject', sub);
250  this.subject = '"@subject":"' + sub + '",';
251}
252
253//PREGMatch date format
254MAQueryConfig.prototype.validateDate = function (dat){
255 var dateregex = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
256 if (dateregex.test(dat))
257   return true;
258 else
259   return false;
260}
261
262//PREGMatch time format
263MAQueryConfig.prototype.validateTime = function (tim){
264  //var timeregex = /^([1-9]|1[0-2]):[0-5]\d(:[0-5]\d(\.\d{1,3})?)?$/;
265  //var timeregex = /^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]$/;
266  var timeregex = /^\d{1,2}[:]\d{2}([:]\d{2})?$/;
267  if (timeregex.test(tim))
268    return true;
269  else
270    return false;
271}
272
273//toStdDate returns date time as long. Format input:'DD/MM/YYYY HH:MM:SS'
274MAQueryConfig.prototype.toStdDate = function(dt){
275  if (dt.length <= 0)
276    return;
277
278  var date_time_picker = dt.split(" ");
279  var date_part = date_time_picker[0];
280  var time_part = date_time_picker[1];
281
282  //window.alert('date_part = ' + date_time_picker[0] + '\ntime_part = ' + date_time_picker[1]);
283
284  if ((this.validateDate(date_part)) && (this.validateTime(time_part))){
285    var date_split = date_part.split("/");
286    var ddd = date_split[1]+'/'+date_split[0]+'/'+date_split[2] + ' ' + time_part;
287    var ndate = new Date(ddd);   
288   
289    //window.alert('Date.parse (' + ddd + ') = ' + Date.parse(ndate));
290    return(Date.parse(ndate));
291  }
292  else
293    return("");
294}
295
296//Date data
297MAQueryConfig.prototype.setDate = function(date_field, date_data){
298  if((!date_field) || (!date_data)){
299    this.date = null;
300    this.dateLower = null;
301    this.dateUppder = null;
302    return;
303  }
304   
305  if(date_field == 'lower'){
306    if(date_data.indexOf('%') != -1)
307        var dt1b = this.pharseStdDate(date_data);
308    else
309        var dt1b = this.toStdDate(date_data);
310    this.dateLower = '"@lowerDate":"'+dt1b+'",';
311  }
312  if(date_field == 'upper'){
313    if(date_data.indexOf('%') != -1)
314        var dt2b = this.pharseStdDate(date_data);
315    else
316        var dt2b = this.toStdDate(date_data);
317    this.dateUpper = '"@upperDate":"'+dt2b+'",';
318  }
319  if(date_field == 'on'){
320    if(date_data.indexOf('%') != -1)
321        var dt3b = this.pharseStdDate(date_data);
322    else
323        var dt3b = this.toStdDate(date_data);
324    this.date = '"@date":"'+dt3b+'",';
325  }
326}
327
328//flags data
329MAQueryConfig.prototype.setTag = function(flaglist){
330  if(flaglist.flags.length <= 0){
331    this.tag = null;
332    return;
333  }
334
335  this.tag = '"flag":[';
336  var flag_data = flaglist.flags.split(',');
337  if(flag_data.length > 0){
338    for(var k=0; k<flag_data.length; k++){
339      this.tag += '{"@value":"'+flag_data[k]+'"},'
340    }
341    this.tag = this.tag.substr(0,this.tag.length-1);
342  }
343  else{
344    this.tag += '{"@value":"'+flaglist.flags+'"},';
345  }
346  this.tag += '],';
347}
348
349//Folder data
350MAQueryConfig.prototype.setFolder = function(folderslist){
351  if(folderslist.length <= 0){
352    this.folder = null;
353    return;
354  }
355  this.folder = '"folder":[';
356  if(this.folder_recursive){
357      var pfrec = ', "@recursive":"true"';
358  }
359  else
360      var pfrec = '';
361 
362  if (folderslist.indexOf(',') != -1){
363    var folder_data = folderslist.split(',');
364    if(folder_data.length > 0){
365        for(var k=0; k<folder_data.length; k++){
366            this.folder += '{"@id":"'+folder_data[k]+'"' + pfrec + '},'
367        }
368        this.folder = this.folder.substr(0,this.folder.length-1);
369    }
370    else{
371        this.folder += '{"@id":"'+folderslist+'"' + pfrec + '"}';
372    }
373  }
374  else{
375      this.folder += '{"@id":"' + folderslist +'"' + pfrec + '}';
376  }
377  this.folder += '],';
378}
379
380//Order criteria
381MAQueryConfig.prototype.setOrder = function(order){
382  if(typeof(order) != 'object'){
383    this.order = null;
384    return;
385  }
386
387  this.order = '"order":[';
388  for(var k in order){
389    if(k.toLowerCase().indexOf("date") != -1)
390      this.order += '{"@date":"'+order[k]+'"},';
391    if(k.toLowerCase().indexOf("from") != -1)
392      this.order += '{"@from":"'+order[k]+'"},';
393    if(k.toLowerCase().indexOf("subject") != -1)
394      this.order += '{"@subject":"'+order[k]+'"},';
395    if(k.toLowerCase().indexOf("size") != -1)
396      this.order += '{"@size":"'+order[k]+'"},';
397  }
398  this.order = this.order.substr(0,this.order.length-1) + ']';
399}
400
401//Tags criteria
402MAQueryConfig.prototype.setTags = function(taglist){
403  if(typeof(taglist) != 'object'){
404    this.tag = null;
405    return;
406  }
407  //Adding tag criteria
408  if(this.tag != null)
409    this.tag = this.tag.substr(0, this.tag.length-2) + ', ';
410  //Creating tag criteria
411  else
412    this.tag = '"tags":[';
413 
414  for(var k in taglist){
415    if(k != null){
416        if(k.toLowerCase() == "contains"){
417            this.tag += '{"@contains":"'+taglist[k]+'"},';
418        }
419    }
420  }
421  //if no tag data was parametrizided, no one tag data will be returned
422  if(this.tag.length > 8)
423    this.tag = this.tag.substr(0,this.tag.length-1) + '],';
424  else
425    this.tag = null;
426}
427
428//Body structrure
429MAQueryConfig.prototype.setBody = function(data){
430/*  if(body_data.length <= 0){
431    this.body = null;
432    return;
433  }
434  this.body = '"body":[';
435  for(var k in body_data){
436    if(k.toLowerCase() == "like")
437      this.body += '{"@like":"'+body_data[k]+'"},';
438    if(k.toLowerCase() == "likeic")
439      this.body += '{"@likeIgnoreCase":"'+body_data[k]+'"},';
440  }
441  this.body = this.body.substr(0,this.body.length-1) + '],';
442  */
443  if(data.length <= 0){
444    this.body = null;
445    return;
446  }
447 
448  //subdata = this.pharseCriteria('from', data);
449  this.body = '"@body":"' + data + '",'; 
450}
451
452MAQueryConfig.prototype.pharseSearchFields = function(fields){
453   if(fields.length <= 0)
454       return;
455   
456   var filters = fields.replace(/^##|##$/g,"").split('##');
457   if(filters.length > 0){
458     var filter_object = '{' ;
459     for(var k=0; k<filters.length; k++){
460       var filter_entry = filters[k].split('<=>');
461       filter_object += filter_entry[0].toLowerCase() + ':"' + filter_entry[1] + '", ';
462     }
463     filter_object = filter_object.substr(0, filter_object.length-2);
464     filter_object += '}';
465     return(filter_object);
466   }
467   else
468       return;
469}
470
471MAQueryConfig.prototype.pharseFolders = function(folderslist){
472    var folder_string_list = "";
473    if (folderslist.length > 1){
474        for(var k=0; k<folderslist.length; k++){
475            var f_criteria = folderslist[k].split("#");
476            var f_name = f_criteria[0];
477            var f_recursive = f_criteria[1];
478            folder_string_list += f_name + ',';
479        }
480        folder_string_list = folder_string_list.substr(0, folder_string_list.length-1) + '#' + f_recursive + ',';
481        folder_string_list = folder_string_list.substr(0, folder_string_list.length-1);
482    }
483    else{
484        folder_string_list = folderslist[0];
485    }
486    //window.alert('pharsefolders return = ' + folder_string_list);
487    return(folder_string_list);
488}
489
490MAQueryConfig.prototype.getLowerIndex = function(){
491  //  (this.lowerIndex != null) ? retdata = this.lowerIndex : retdata = '"@lowerIndex":"0", ';
492    (this.lowerIndex != null) ? retdata = this.lowerIndex : retdata = '';
493    return(retdata);
494}
495
496MAQueryConfig.prototype.getUpperIndex = function(){
497//    (this.upperIndex != null) ? retdata = this.upperIndex : retdata = '"@upperIndex":"' + preferences.max_email_per_page+ '", ';
498    (this.upperIndex != null) ? retdata = this.upperIndex : retdata = '';
499    return(retdata);
500}
501
502MAQueryConfig.prototype.getFrom = function(){
503    (this.from != null) ? retdata = this.from : retdata = "";
504    return(retdata);
505}
506
507MAQueryConfig.prototype.getTo = function(){
508    (this.to != null) ? retdata = this.to : retdata = "";
509    return(retdata);   
510}
511
512MAQueryConfig.prototype.getCc = function(){
513    (this.cc != null) ? retdata = this.cc : retdata = "";
514    return(retdata);   
515}
516
517MAQueryConfig.prototype.getSubject = function(){
518    (this.subject != null) ? retdata = this.subject : retdata = "";
519    return(retdata);   
520}
521
522MAQueryConfig.prototype.getBody = function(){
523    (this.body != null) ? retdata = this.body : retdata = "";
524    return(retdata);   
525}
526
527MAQueryConfig.prototype.getDate = function(){
528    (this.date != null) ? retdata = this.date : retdata = "";
529    return(retdata);   
530}
531
532MAQueryConfig.prototype.getDateLower = function(){
533    (this.dateLower != null) ? retdata = this.dateLower : retdata = "";
534    return(retdata);   
535}
536
537MAQueryConfig.prototype.getDateUpper = function(){
538    (this.dateUpper != null) ? retdata = this.dateUpper : retdata = "";
539    return(retdata);   
540}
541
542MAQueryConfig.prototype.getTag = function(){
543    (this.tag != null) ? retdata = this.tag : retdata = "";
544    return(retdata);   
545}
546
547MAQueryConfig.prototype.getFolder = function(){
548    if (this.folder != null){
549        if (this.folder_recursive){
550            var tmp_root_id = this.folder.substr(this.folder.indexOf("@id")+6, 4);
551            if(tmp_root_id == 'root')
552                retdata = "";
553            else
554                retdata = this.folder;
555        }
556        else
557            retdata = this.folder;
558    }
559    else retdata = "";
560    return(retdata);   
561}
562
563MAQueryConfig.prototype.getOrder = function(){
564    //defaults order criteria is date asc
565    (this.order != null) ? retdata = this.order : retdata = '"order":[{"@date":"desc"}]';
566    return(retdata);   
567}
568
569//Query criteria (core api)
570MAQueryConfig.prototype.query = function(criterialist){
571  //window.alert('MAQueryConfig.query\n\n - > CriteriaList:\n ' + criterialist + '[' + typeof(criterialist) + ']\ndump:\n' + print_r(criterialist));
572
573  if (criterialist){
574    this.setCriteriaList(criterialist);
575  }
576 
577  //window.alert('em qc.query com lower = ' + this.lowerIndex + ' e upper = ' + this.upperIndex);
578  var querystring = '{"query":{';
579  querystring += this.getLowerIndex();
580  querystring += this.getUpperIndex();
581  querystring += this.getDateLower();
582  querystring += this.getDateUpper();
583  querystring += this.getDate(); 
584  querystring += this.getFrom();
585  querystring += this.getTo();
586  querystring += this.getCc();
587  querystring += this.getSubject();
588  querystring += this.getBody();
589  querystring += this.getTag();
590  querystring += this.getFolder();
591  querystring += this.getOrder();
592 
593  var lastchar = querystring.substr(querystring.length-1,querystring.length);
594  if(lastchar == ',')
595      querystring = querystring.substr(0, querystring.length-1);
596 
597  querystring += '}}';
598  //window.alert('queryconfig output\n\n' + querystring);
599  return(querystring);
600}
601
602MAQueryConfig.prototype.reset = function(){
603  this.lowerIndex = null;
604  this.upperIndex = null;
605  this.from = null;
606  this.to = null;
607  this.cc = null;
608  this.subject = null;
609  this.body = null;
610  this.date = null;
611  this.dateLower = null; 
612  this.dateUpper = null; 
613  this.tag = null;
614  this.folder = null;
615  this.order = null;
616  this.preview_message = null;
617  this.preview_tooltip = null;
618  this.defaults = null;   
619}
620
621MAQueryConfig.prototype.pharseStdDate = function(date){
622    var data_decoded = decodeURIComponent(date);
623    var data_array = data_decoded.split("/");
624    var data_day = data_array[0];
625    var data_month = data_array[1];
626    var data_year = data_array[2];
627
628    var date_object = new Date();
629    date_object.setDate(data_day);
630    date_object.setMonth(data_month-1);
631    date_object.setFullYear(data_year);
632   
633    var date_number = date_object.getTime();
634    return(date_number);
635    //return(new String(date_number)+'L');
636}
637-->
Note: See TracBrowser for help on using the repository browser.