source: sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/MAQueryConfig.js @ 4873

Revision 4873, 7.2 KB checked in by fernando-alberto, 13 years ago (diff)

Ticket #1269 - Desenvolvimento da nova solucao de arquivamento local MailArchiver?, api de consulta

  • Property svn:eol-style set to native
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.flag = null;
23  this.folder = null;
24  this.order = null;
25  this.defaults = null;
26}
27
28//Set up all criteria list received
29MAQueryConfig.prototype.setCriteriaList = function(cl){
30  for(var p in cl){
31    if(p.toLowerCase() == 'from')
32      this.setFrom(cl[p]);
33    if(p.toLowerCase() == 'to')
34      this.setTo(cl[p]);
35    if(p.toLowerCase() == 'cc')
36      this.setCc(cl[p]);
37    if(p.toLowerCase() == 'subject')
38      this.setSubject(cl[p]);
39    if(p.toLowerCase() == 'body')
40      this.setBody(cl[p]);
41    if(p.toLowerCase() == 'date')
42      this.setDate(cl[p]);
43    if(p.toLowerCase() == 'flags')
44      this.setFlags(cl[p]);
45    if(p.toLowerCase() == 'folder')
46      this.setFolder(cl[p]);
47    if(p.toLowerCase() == 'order')
48      this.setOrder(cl[p]);
49  }
50}
51
52MAQueryConfig.prototype.setDefaults = function(defaults){
53    this.defaults = defaults;
54}
55
56//PharseCriteria receives data to pharse structure format fields from, to, cc and subject
57MAQueryConfig.prototype.pharseCriteria = function(criteria, data){
58  var stdout = '"'+criteria+'":[';
59  if(data.equals)
60    stdout += '{"@equals":"'+data.equals+'"},';
61  if(data.equalsic)
62    stdout += '{"@equalsIgnoreCase":"'+data.equalsic+'"},';
63  if(data.like)
64    stdout += '{"@like":"'+data.like+'"},';
65  if(data.likeic)
66    stdout += '{"@likeIgnoreCase":"'+data.likeic+'"},';
67  var stdout = stdout.substr(0,stdout.length-1) + '],';
68  return(stdout);
69}
70
71//setbounds up and down
72MAQueryConfig.prototype.setBounds = function(low, high){
73  this.lowerIndex = '"@lowerIndex":"'+parseInt(low)+'",';
74  this.upperIndex = '"@upperIndex":"'+parseInt(high)+'",';
75}
76//From receives a array of structutred data, by the model
77MAQueryConfig.prototype.setFrom = function(data){
78  if(data.length <= 0){
79    this.from = null;
80    return;
81  }
82
83  subdata = this.pharseCriteria('from', data);
84  this.from = subdata;
85}
86
87//To receives a array of structutred data, by the model
88MAQueryConfig.prototype.setTo = function(data){
89  if(data.length <= 0){
90    this.to = null;
91    return;
92  }
93
94  subdata = this.pharseCriteria('to', data);
95  this.to = subdata;
96}
97
98//Cc data
99MAQueryConfig.prototype.setCc = function(data){
100  if(data.length <= 0){
101    this.cc = null;
102    return;
103  }
104
105  subdata = this.pharseCriteria('cc', data);
106  this.cc = subdata;
107}
108
109//Subject data
110MAQueryConfig.prototype.setSubject = function(sub){
111  if(sub.length <= 0){
112    this.subject = null;
113    return;
114  }
115
116  subdata = this.pharseCriteria('subject', sub);
117  this.subject = subdata;
118}
119
120//PREGMatch date format
121MAQueryConfig.prototype.validateDate = function (dat){
122 var dateregex = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
123 if (dateregex.test(dat))
124   return true;
125 else
126   return false;
127}
128
129//PREGMatch time format
130MAQueryConfig.prototype.validateTime = function (tim){
131  //var timeregex = /^([1-9]|1[0-2]):[0-5]\d(:[0-5]\d(\.\d{1,3})?)?$/;
132  //var timeregex = /^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]$/;
133  var timeregex = /^\d{1,2}[:]\d{2}([:]\d{2})?$/;
134  if (timeregex.test(tim))
135    return true;
136  else
137    return false;
138}
139
140//toStdDate returns date time as long. Format input:'DD/MM/YYYY HH:MM:SS'
141MAQueryConfig.prototype.toStdDate = function(dt){
142  if (dt.length <= 0)
143    return;
144
145  var date_time_picker = dt.split(" ");
146  var date_part = date_time_picker[0];
147  var time_part = date_time_picker[1];
148
149  if ((this.validateDate(date_part)) && (this.validateTime(time_part))){
150    var date_split = date_part.split("/");
151    var ddd = date_split[1]+'/'+date_split[0]+'/'+date_split[2] + ' ' + time_part;
152    var ndate = new Date(ddd);   
153    return(Date.parse(ndate));
154  }
155  else
156    return("");
157}
158
159//Date data
160MAQueryConfig.prototype.setDate = function(date_data){
161  if((!date_data.upper) && (!date_data.lower) && (!date_data.day)){
162    this.date = null;
163    return;
164  }
165
166  this.date = '"date":['; 
167  if(date_data.lower){
168    var dt1b = this.toStdDate(date_data.lower);
169    this.date += '{"@lower":"'+dt1b+'"},';
170  }
171  if(date_data.upper){
172    var dt2b = this.toStdDate(date_data.upper);
173    this.date += '{"@upper":"'+dt2b+'"},';
174  }
175  if(date_data.day){
176    var dt3b = this.toStdDate(date_data.day)
177    this.date += '{"@day":"'+dt3b+'"},';
178  }
179  this.date = this.date.substr(0,this.date.length-1) + '],';
180}
181
182//flags data
183MAQueryConfig.prototype.setFlags = function(flaglist){
184  if(flaglist.flags.length <= 0){
185    this.flag = null;
186    return;
187  }
188
189  this.flag = '"flag":[';
190  var flag_data = flaglist.flags.split(',');
191  if(flag_data.length > 0){
192    for(var k=0; k<flag_data.length; k++){
193      this.flag += '{"@value":"'+flag_data[k]+'"},'
194    }
195    this.flag = this.flag.substr(0,this.flag.length-1);
196  }
197  else{
198    this.flag += '{"@value":"'+flaglist.flags+'"},';
199  }
200  this.flag += '],';
201}
202
203//Folder data
204MAQueryConfig.prototype.setFolder = function(folderslist){
205  if(folderslist.folderlength <= 0){
206    this.folder = null;
207    return;
208  }
209
210  this.folder = '"folder":[';
211  var folder_data = folderslist.folder.split(',');
212  if(folder_data.length > 0){
213    for(var k=0; k<folder_data.length; k++){
214      this.folder += '{"@id":"'+folder_data[k]+'"},'
215    }
216    this.folder = this.folder.substr(0,this.folder.length-1);
217  }
218  else{
219    this.folder += '{"@id":"'+folderslist.folder+'"},';
220  }
221  this.folder += '],';
222}
223
224//Order criteria
225MAQueryConfig.prototype.setOrder = function(order){
226  if(order.length <= 0){
227    this.order = null;
228    return;
229  }
230
231  this.order = '"order":[';
232  for(var k in order){
233    if(k.toLowerCase().indexOf("date") != -1)
234      this.order += '{"@'+order[k]+'":"date"},';
235    if(k.toLowerCase().indexOf("from") != -1)
236      this.order += '{"@'+order[k]+'":"from"},';
237    if(k.toLowerCase().indexOf("subject") != -1)
238      this.order += '{"@'+order[k]+'":"subject"},';
239    if(k.toLowerCase().indexOf("size") != -1)
240      this.order += '{"@'+order[k]+'":"size"},';
241  }
242  this.order = this.order.substr(0,this.order.length-1) + ']';
243}
244
245//Body structrure
246MAQueryConfig.prototype.setBody = function(body_data){
247  if(body_data.length <= 0){
248    this.body = null;
249    return;
250  }
251  this.body = '"body":[';
252  for(var k in body_data){
253    if(k.toLowerCase() == "like")
254      this.body += '{"@like":"'+body_data[k]+'"},';
255    if(k.toLowerCase() == "likeic")
256      this.body += '{"@likeIgnoreCase":"'+body_data[k]+'"},';
257  }
258  this.body = this.body.substr(0,this.body.length-1) + '],';
259}
260
261//Query criteria (core api)
262MAQueryConfig.prototype.query = function(offsetlow,offsethight, criterialist){
263  this.setBounds(offsetlow, offsethight);
264  this.setCriteriaList(criterialist);
265  var querystring = '{"query":{' + this.lowerIndex + this.upperIndex;
266  querystring += this.from;
267  querystring += this.to;
268  querystring += this.cc;
269  querystring += this.subject;
270  querystring += this.body;
271  querystring += this.date;
272  querystring += this.flag;
273  querystring += this.folder;
274  querystring += this.order;
275  querystring += '}}';
276  return(querystring);
277}
278-->
Note: See TracBrowser for help on using the repository browser.