source: companies/serpro/expressoMail1_2/js/filter.js @ 903

Revision 903, 18.9 KB checked in by niltonneto, 15 years ago (diff)

Importacao inicial do Expresso do Serpro

Line 
1function charCounter(form)
2{
3        if (form.value.length >= 300) {
4                alert(get_lang("You have exceeded the number of allowed characters"));
5                return false;
6        }
7
8}
9
10        function cfilter(){
11
12                this.mode_in   = "";
13                this.rulest              = new Array;
14                this.out_officeR = "";
15                this.out_officeF = false;
16                this.email_deny  = new Array;
17                this.ac_form     = "";
18                this.ind                 = "";
19                this.email_deny  = new Array;
20                this.email_ld    = "";
21                this.values = new Array("",
22                                        ",checkBox1",
23                                        ",select_size=1",
24                                        ",checkBox1,select_size=1",
25                                        ",select_rules=1",
26                                        ",checkBox1,select_rules=1",                           
27                                        ",select_size=1,select_rules=1",                               
28                                        ",checkBox1,select_size=1,select_rules=1",
29                                        ",checkBox2",                           
30                                        ",checkBox1,checkBox2",                         
31                                        ",checkBox2,select_size=1",
32                                        ",ckeckBox1,checkBox2,select_size=1",
33                                        ",checkBox2,select_rules=1",                                                                                                                                                           
34                                        ",checkBox1,checkBox2,select_rules=1",                         
35                                        ",checkBox2,select_size=1,select_rules=1",                             
36                                        ",checkBox1,checkBox2,select_size=1,select_rules=1");
37               
38        }
39       
40        cfilter.prototype.load_rules = function(){
41                var _this = this;
42                if(_this.rulest.length == 0){
43                        var handler_sieve = function(data){
44                                if(data.rule.length > 0){
45                                        for(var i=0 ; i < data.rule.length; i++){
46                                                _this.rulest[_this.rulest.length] = data.rule[i];
47                                        }
48                                }
49                                _this.out_officeR = data.vacation[0];
50                                _this.out_officeR = _this.out_officeR ? trim(_this.out_officeR.toString().replace("\n","")) : "";
51                                if(data.mode.length > 0){_this.mode_in = data.mode[0];}
52                        }
53                        if(Element('form_status') != null)
54                                Element('form_status').innerHTML = "<span style='background:#cc4444;'>&nbsp;&nbsp;<font color='WHITE'>Aguarde...</font>&nbsp;</span>";
55                        cExecute("$this.ScriptS.init_a",handler_sieve);
56                        _this.get_email();
57            }
58        }
59       
60        cfilter.prototype.form_m = function(){
61                Element('form_body').innerHTML = "";
62                Element('form_buttons').style.display = '';
63                filters.mount_list();
64                this.ac_form = "";             
65        }
66       
67        cfilter.prototype.form_out = function(){
68                Element('form_body').innerHTML = "";
69                Element('form_body').innerHTML = this.forms_();
70                Element('div_vacation').style.display = "";
71                this.ac_form = "old_out";               
72                this.r_rules_out();             
73        }
74       
75        cfilter.prototype.form_r = function(pos){
76                Element('form_body').innerHTML = "";
77                Element('form_body').innerHTML = this.forms_();
78                Element('div_rule').style.display = "";
79                this.ac_form = "old_rule";
80                this.ind = pos;
81                this.r_rules_form(pos);
82        }
83       
84        cfilter.prototype.get_email = function(){
85                var _this = this;
86                var handler_get_email = function(data){
87                        _this.email_ld = data ? data : "";
88                }
89                cExecute("$this.user.get_email",handler_get_email);
90        }
91       
92        cfilter.prototype.sel_boxes = function(){
93                var nm_folders = tree_folders.getNodesList(cyrus_delimiter);
94                if(document.getElementById("select_mailboxes") != null){
95                        var sel_nm = document.getElementById("select_mailboxes");
96                        if(sel_nm.length > 0 ){
97                                for(var i=0; i < sel_nm.options.length; i++){
98                                        sel_nm.options[i] = null;
99                                        i--;
100                                }
101                        }
102                        for(var i=0; i < nm_folders.length; i++){
103                                if(nm_folders[i].id != "root" && !nm_folders[i].id.match('local_')){
104                                        var opt = new Option(nm_folders[i].caption,nm_folders[i].id,false,true);
105                                        sel_nm[sel_nm.length] = opt;
106                                }
107                        }
108                        sel_nm[0].selected = true;
109                }
110        }
111
112        cfilter.prototype.box_select = function(param){
113                var aux = this.BoxSelection[param].split(",");
114                var ele1 = document.getElementById(aux[0]);
115                var ele2 = document.getElementById(aux[1]);
116                var noption = "";
117                if(param == 0 || param == 1){
118                        if(ele1.selectedIndex != -1){
119                                noption = new Option(ele1.value,ele1.value,false,false);
120                                ele2.options[ele2.length] = noption;
121                                ele1.options[ele1.selectedIndex] = null;
122                                ele1.selectedIndex = 0;
123                        }
124                }
125        }
126
127        cfilter.prototype.r_rules_form = function(ind){
128               
129                // hide buttons
130                Element('form_buttons').style.display = 'none';
131
132                this.sel_boxes();
133                var aux = new Array;
134                var _this = this;
135                if(this.rulest.length == 0){
136                        return false;
137                }
138                aux = _this.rulest[ind].split("&&");
139                document.getElementById("field1").value = aux[3];
140                document.getElementById("field2").value = aux[4];
141                document.getElementById("field3").value = aux[5];
142                document.getElementById("field4").value = aux[11];                             
143               
144                switch(aux[6]){
145                        case "folder":
146                                document.getElementById("radio1").checked  = true;
147                                var name_mb = aux[7];
148                                var sel_mb = document.getElementById("select_mailboxes");
149                                for(var i=0; i < sel_mb.options.length; i++){if((sel_mb.options[i].value) ==  name_mb){sel_mb.options[i].selected = true;}}
150                                break;
151                        case "address":
152                                document.getElementById("radio2").checked   = true;
153                                document.getElementById("field5").value         = aux[7];
154                                break;
155                        case "reject":
156                                 document.getElementById("radio3").checked  = true;
157                                 var text0 = aux[7].split("\\n");                                       
158                                 for(var i=0; i < text0.length; i++){document.getElementById("field6").value += text0[i] + "\n";}
159                                 break;
160                        case "discard":
161                                document.getElementById("radio4").checked       = true;
162                                break;
163                }
164                var mark_values = this.values[aux[8]].split(",");
165                for(var i=0; i < mark_values.length; i++){
166                        if( mark_values[i] == "checkBox1" || mark_values[i] == "checkBox2"){
167                                document.getElementById(mark_values[i]).checked = true;
168                        }
169                        if( mark_values[i] == "select_size=1" || mark_values[i] == "select_rules=1"){
170                                var mark_val = mark_values[i].split("=");
171                                document.getElementById(mark_val[0]).options[mark_val[1]].selected = true;
172                        }
173                }
174        }
175
176        cfilter.prototype.r_rules_out = function(){
177       
178                var _this = this;
179                if(_this.out_officeR.length == 0){
180                        return false;
181                }
182               
183                // hide buttons
184                Element('form_buttons').style.display = 'none';
185       
186                var aux = _this.out_officeR.split("&&");
187                var days   = aux[1];
188                var emails = aux[2];
189                var mens   = aux[3];           
190                var p_emails = new Array;
191                var d_emails = new Array;
192                               
193                var p_aux = emails.split(", ");
194                for(var i=0; i < p_aux.length; i++){
195                        p_emails[i] = p_aux[i].substr(0,(p_aux[i].length - 1));
196                        p_emails[i] = p_emails[i].substr(1,(p_aux[i].length));
197                }
198                for(var i=0; i < _this.email_ld.length; i++){
199                        d_emails[i] = _this.email_ld[i];
200                }
201
202                diff = function(vet, comp){
203                        var sel1 = new Array;
204                        for(var i=0; i < vet.length; i++){
205                                for(var j=0; j < comp.length; j++){
206                                        if(vet[i] == comp[j]){
207                                                comp.splice(j,1);
208                                                j--;
209                                        }
210                                }
211                        }
212                };     
213                diff(p_emails,d_emails);
214                var text    = mens.split("\\n");
215                for(var i=0; i < text.length; i++){document.getElementById("field8").value += text[i] + " ";}
216                for(var i=0; i < _this.email_ld.length; i++){
217                        d_emails[i] = _this.email_ld[i];
218                }
219
220        }
221
222        /*
223         * Corrige bug 65, solução: desabilitar radio3 e field6 e desmarcar radio3 (ação de rejeição)
224         * quando a caixa de seleção para manter o e-mail na caixa de entrada do usuário for selecionada
225         */
226        cfilter.prototype.disable_radio3 =  function(){
227
228                radio3 = Element('radio3');
229                field6 = Element('field6');
230                cb2 = Element('checkBox2');
231
232                if (cb2.checked){
233                        radio3.disabled = true;
234                        field6.disabled = true;
235
236                        if (radio3.checked){
237                                radio3.checked = false;
238                        }
239                }
240                else{
241                        radio3.disabled = false;
242                        field6.disabled = false;
243                }
244
245        }
246
247        cfilter.prototype.forms_ = function(){
248                        var form   = "";
249                        form       = "<div id='div_rule' style='display:none'><table id='table_rule' border='0' cellpading='0' cellspacing='0' width='100%'>"+
250                                                 "<tr><td colspan='2'><input type='checkBox' id='checkBox1' name='checkb'>"+get_lang('Also check message against next rule') + "</td></tr>"+
251                                                 "<tr><td colspan='2'><input type='checkBox' id='checkBox2' onclick='filter.disable_radio3();' name='checkb'>"+get_lang('Keep a copy of the message at your Inbox')+ "</td><tr>"+
252                                                 "<tr><td colspan='2'><hr size='1' width='100%'></td></tr><tr>"+
253                                                 "<td rowspan='4' width='20%'>"+get_lang('Coincident')+"<br><select id='select_rules' name='select_rules'>"+
254                                                 "<option value='0'>"+get_lang("with all")+"</option><option value='1'>"+get_lang("with some")+"</option>"+
255                                                 "</select></td><td>"+get_lang('The field \"%1\" of the message it contains',get_lang('From'))+".: <input type='text' id='field1' name='field1' size='35' maxlength='200'></td>"+
256                                                 "</tr><tr><td>"+get_lang('The field \"%1\" of the message it contains', get_lang('To'))+".: <input type='text' id='field2' name='field2' size='35' maxlength='200'></td>"+
257                                                 "</tr><tr><td>"+get_lang('The field \"%1\" of the message it contains', get_lang('Subject'))+".: <input type='text' id='field3' name='field3' size='35' maxlength='200'></td>"+
258                                                 "</tr><tr><td>"+get_lang('The size of the message is')+".: &nbsp<select id='select_size' name='select_size'>"+
259                                                 "<option value='0'>"+get_lang("Less than")+"</option><option value='1'>"+get_lang("Greater than")+"</option>"+                                         
260                                                 "</select>&nbsp;<input type='text' id='field4' name='field4' size='8' maxlength='8'> Kb</td>"+
261                                                 "</tr><tr><td colspan='2'><hr size='1' width='100%'></td></tr>"+
262                                                 "</table><table id='table_rule1' border='0' cellpading='0' cellspacing='0' width='100%'>"+
263                                                 "<tr><td width='50%'><input type='radio' id='radio1' name='radio' value='folder'>"+get_lang('Store at')+".:</td>"+
264                                                 "<td width='50%'><select id='select_mailboxes' name='select_mailboxes'></select></td>"+
265                                                 "</tr><tr><td width='50%'><input type='radio' id='radio2' name='radio' value='address'>"+get_lang('Forward to the address')+".:</td>"+
266                                                 "<td width='50%'><input type='text' id='field5' name='field5' size='35' maxlength='70'></td>"+
267                                                 "</tr><tr><td width='50%'><input type='radio' id='radio3' name='radio' value='reject'>"+get_lang('Send a rejection message')+".:</td>"+
268                                                 "<td width='50%'><textarea id='field6' onkeypress='return charCounter(this);' name='field6' rows='3' cols='25'></textarea></td>"+
269                                                 "</tr><tr><td colspan='2'><input type='radio' id='radio4' name='radio' value='discard'>"+get_lang('Erase the message')+"</td>"+
270                                                 "</tr></table></div><div id='div_vacation' style='display:none'>"+
271                                                 "<table id='table_vacation' border='0' cellpading='0' cellspacing='0' width='100%'>"+
272                                                 "<tr><td colspan='3'><br><b>"+get_lang('out office')+"</b></td></tr>"+
273                                                 //"<tr><td colspan='3'><br>"+get_lang('Subject')+".: <input type='text' id='field7' name='field7' size='35' maxlength='200'/></td></tr>"+
274                                                 "<tr><td colspan='3'><br>"+get_lang('With the following message')+".:</td>"+
275                                                 "</tr><tr><td colspan='3'><textarea id='field8' onkeypress='return charCounter(this);' rows='8' cols='50'></textarea></td></tr></table></div>"+
276                                                 "<span align='right'><input type='button' value="+get_lang("Back")+" onclick='filter.form_m()'></span>"+
277                                                 "<span align='right'><input type='button' value="+get_lang("Save")+" onclick='filter.saved_rules()'></span>";                                           
278                return form;
279        }
280
281        cfilter.prototype.enabled_disabled = function(param){
282
283                // Rules
284                if(Element("rule_0") != null){
285                        for(var i=0; i < this.rulest.length; i++){
286                                if(Element("rule_"+i).checked){
287                                        var aux_rul = this.rulest[i].split("&&");
288                                        if(aux_rul[2] != param){
289                                                aux_rul[2] = param;                                     
290                                                var rl = "";
291                                                for(var j=0; j < aux_rul.length; j++){
292                                                        rl += aux_rul[j] + "&&";
293                                                }
294                                                rl = rl.substr(0,(rl.length - 2));
295                                                this.rulest[i] = rl;                                   
296                                        }
297                                }
298                        }
299                }
300                // Out Office
301                if(Element("out_0") != null){
302                        if(Element("out_0").checked){
303                                var aux_out = this.out_officeR.split("&&");
304                                if(param == "ENABLED")
305                                        aux_out[4] = "on ";
306                                else
307                                        aux_out[4] = "off";
308                                var out = "";
309                                for(var i=0; i < aux_out.length; i++){
310                                        out += aux_out[i] + "&&";
311                                }                               
312                                out = out.substr(0,(out.length - 2));
313                                this.out_officeR = out;
314                        }
315                }
316                this.reload_rules();
317        }
318       
319        cfilter.prototype.new_rule = function(email){
320
321                if(this.email_deny.length > 0){
322                        for(var i=0 ; i < this.email_deny.length; i++){
323                                if(this.email_deny[i] == email){
324                                        alert(get_lang("Sender blocked")+"!");
325                                        return false;
326                                }
327                        }
328                }
329
330                // Verifica Email
331                var emailReg = /^[a-z][a-z-_0-9\.]+@[a-z-_=>0-9\.]+\.[a-z]{2,3}$/i
332        if(!emailReg.test(email)){
333                        alert(get_lang("Inform a valid e-mail!"));
334                        return false;
335                }
336
337                this.load_rules();
338                if(confirm(get_lang("Do you want to block this e-mail?"))){
339                        new_r = "&&ENABLED&&" + email + "&&&&&&discard&&&&0&&&&&&0";
340//                      setTimeout("filter.e_newrule('" + new_r + "')",2000);           
341                        if (filter.e_newrule(new_r)){
342                                this.email_deny.push(email);
343                                write_msg(get_lang("The sender was blocked"));                                                 
344                        }else
345                                write_msg(get_lang("You have reached the maximum number of rules"));
346                }
347        }
348       
349        cfilter.prototype.e_newrule = function(nw_rule){
350
351                var new_rl = "";
352                if (this.rulest.length >= rules_limit)
353                        return false;
354                       
355                if(this.rulest.length == 0){
356                        new_rl = "#rule&&1" + nw_rule;
357                }else{
358                        var aux = this.rulest[this.rulest.length -1 ].split("&&");
359                        new_rl = "#rule&&" + (parseInt(aux[1]) + parseInt(2)) + nw_rule;
360                }
361                this.rulest.push(new_rl);
362                this.saved_all();
363                return true;
364        }
365       
366        cfilter.prototype.delete_r = function(){
367       
368                // rule
369                var _this = this;
370                if(Element("rule_0") != null){
371                        for(var i=0; i < _this.rulest.length; i++){
372                                if(Element("rule_"+i).checked){_this.rulest[i] = "delete";}
373                        }
374                        for(var i=0; i < _this.rulest.length; i++){
375                                if(_this.rulest[i] == "delete"){_this.rulest.splice(i,1);i--;}
376                        }
377                }
378       
379                if(_this.rulest.length > 0){
380                        var cont = parseInt(1);
381                        for(var i=0; i < _this.rulest.length ; i++){
382                                var n_rulest = _this.rulest[i].split("&&");
383                                n_rulest[1] = cont;
384                                cont = cont + parseInt(2);
385                                var aux = "";
386                                for(var j=0; j < n_rulest.length; j++){aux += n_rulest[j] + "&&";}
387                                aux = aux.substr(0,(aux.length - 2));
388                                _this.rulest[i] = aux;
389                        }
390                }
391                // out office
392                if(Element("out_0") != null){
393                        if(Element("out_0").checked){
394                                _this.out_officeR ='';
395                                _this.out_officeF = false;
396                                //Save outoffice in prefs:
397                                connector.loadScript("preferences");
398                                prefe.save("outoffice", _this.out_officeF);
399                        }
400                }
401                _this.reload_rules();
402        }
403       
404        cfilter.prototype.reload_rules = function(){
405                this.saved_all();
406                Element('form_body').innerHTML = "";
407                this.load_rules();
408               
409                if(this.out_officeF){
410                        write_msg(get_lang("Attention, you are in out of office mode."), true);
411                }else {
412                        clean_msg();
413                        this.out_officeF = false;
414                }
415                filters.mount_list();
416        }
417
418        cfilter.prototype.saved_rules = function(){
419
420                var mount_rule = "";
421                var form = this.ac_form.split("_");
422                var n_rule = "";
423
424                if(form[1] == "rule"){
425                        mount_rule = "#rule&&";
426                        if(form[0] == "new"){
427                                n_rule = "1&&";
428                                if(this.rulest.length > 0){
429                                        aux = this.rulest[this.rulest.length - parseInt(1)].split("&&");
430                                        n_rule = (parseInt(aux[1]) + parseInt(2)) + "&&";
431                                }
432                                mount_rule += n_rule + "ENABLED&&";
433                        }else{
434                                n_rule = this.rulest[this.ind].split("&&");
435                                mount_rule += n_rule[1] + "&&";
436                                mount_rule += n_rule[2] + "&&";
437                        }
438
439                        if(LTrim(Element("field1").value) == "" && LTrim(Element("field2").value) == "" && LTrim(Element("field3").value) == "" && Element("field4").value == "")
440                        {
441                                alert(get_lang("Define some criterion to the fields From, To and Subject with more than 3 characters!"));
442                                return false;
443                        }
444
445                        if((LTrim(Element("field1").value).length <= 3) && (LTrim(Element("field2").value).length <= 3) && (LTrim(Element("field3").value).length <= 3 && Element("field4").value == "")){
446                                alert(get_lang("Define some criterion to the fields From, To and Subject with more than 3 characters!"));
447                                return false;
448                        }
449                       
450                        for(var i=1; i < 4; i++){mount_rule += LTrim(Element("field"+i).value) + "&&";}
451                        var v_checked = false;
452                        if(Element("radio1").checked){
453                                mount_rule += "folder&&";
454                                var sel_nameBox = Element("select_mailboxes");
455                                for(var i=0; i < sel_nameBox.options.length; i++){if(sel_nameBox.options[i].selected == true){mount_rule += sel_nameBox.options[i].value + "&&";}}
456                                v_checked = true;
457                        }
458                        if(Element("radio2").checked){
459                                mount_rule += "address&&";
460                                if(Element("field5").value == ""){
461                                        alert(get_lang("Inform a forwarding e-mail!"));
462                                        return false;
463                                }else{
464                                        var emailReg = /^[a-z][a-z-_0-9\.]+@[a-z-_=>0-9\.]+\.[a-z]{2,3}$/i
465                                if(emailReg.test(Element("field5").value)){
466                                                mount_rule += Element("field5").value + "&&";
467                                        }else{
468                                                alert(get_lang("Inform a valid e-mail!"));
469                                                return false;
470                                        }
471                                }
472                                v_checked = true;
473                        }
474                        if(Element("radio3").checked){
475                                mount_rule += "reject&&";
476                                if(Element("field6").value == ""){
477                                        alert(get_lang("Inform a text for rejection!"));
478                                        return false;
479                                }else{
480                                        mount_rule += Element("field6").value + "&&";
481                                }
482                                v_checked = true;
483                        }                               
484                        if(Element("radio4").checked){
485                                mount_rule += "discard&&&&";
486                                v_checked = true;
487                        }
488                        if(!v_checked){
489                                alert(get_lang("No option marked!"));
490                                return false;
491                        }
492                        var opts = "";
493                        if(Element("checkBox1").checked == true){opts += ",checkBox1";}
494                        if(Element("checkBox2").checked == true){opts += ",checkBox2";}
495                        if(Element("select_size").options[1].selected == true){opts += ",select_size=1";}
496                        if(Element("select_rules").options[1].selected == true){opts += ",select_rules=1";}
497                        for(var i=0; i < this.values.length; i++){if(this.values[i] == opts){mount_rule += i + "&&";}}
498                        mount_rule += "&&&&";
499                        if(LTrim(Element("field4").value) != ""){
500                                mount_rule += LTrim(Element("field4").value);
501                        }else{
502                                mount_rule += 0;
503                        }
504                        if(form[0] == "new")
505                                this.rulest[this.rulest.length] = mount_rule;
506                        else
507                                this.rulest[this.ind] = mount_rule;
508                }else{
509                        mount_rule = "";
510                        var fld_emails = this.email_ld; // Get first email of list!
511                        var fld_men        = Element("field8");
512                        mount_rule = "#vacation&&";
513                        mount_rule += "1&&";
514                        mount_rule += "\"" + fld_emails + "\", ";                       
515                        mount_rule = mount_rule.substr(0,(mount_rule.length - 2));
516                        mount_rule += "&&";
517                        mount_rule += fld_men.value + "&&on";
518                        if(LTrim(fld_men.value) == ""){
519                                alert(get_lang("Inform a message!"));
520                                return false;
521                        }
522                        this.out_officeR = mount_rule;
523                }
524                Element('form_buttons').style.display = '';
525                this.reload_rules();
526        }
527
528        cfilter.prototype.close_frm= function(){
529                filters.filter_Sh['window_ffilter_ccform'].close();
530        }
531       
532        cfilter.prototype.saved_all = function(){
533                var aux_rul = "";
534                var _this = this;
535                if(_this.rulest.length > 0){
536                        for(var i=0; i < _this.rulest.length; i++){
537                                var aux = _this.rulest[i].split("&&");                         
538                                aux_rul += "_begin_##";
539                                for(var j=0 ; j < aux.length; j++){
540                                        if( (j +1) > aux.length){aux_rul += url_encode(aux[j]);}
541                                        else{aux_rul += url_encode(aux[j]) + "##";}
542                                }       
543                                aux_rul += "_end_\n";
544                        }
545                }
546                if(_this.out_officeR.length > 0){
547                                var aux = _this.out_officeR.split("&&");                               
548                                aux_rul += "_begin_##";
549                                for(var j=0 ; j < aux.length; j++){
550                                        if( (j +1) > aux.length){aux_rul += url_encode(aux[j]);}
551                                        else{aux_rul += url_encode(aux[j]) + "##";}
552                                }       
553                                aux_rul += "_end_\n";
554                                _this.out_officeF = (aux[4].replace("\n","") == "off") ? false : true;
555                                //Save outoffice in prefs:
556                                connector.loadScript("preferences");
557                                prefe.save("outoffice", _this.out_officeF);
558                }
559                var h_filter = function(data){
560                        if(data != "Ok"){alert("Erro : \n" + data);}
561                }
562                var args   = "$this.ScriptS.rec_rules";
563                var params = "arfilter="+aux_rul;
564                cExecute(args,h_filter,params);
565        }
566
567// build object
568   var filter;
569   filter = new cfilter();
Note: See TracBrowser for help on using the repository browser.