source: trunk/contactcenter/js/cc_search.js @ 6003

Revision 6003, 12.6 KB checked in by angelo, 12 years ago (diff)

Ticket #2646 - Pesquisa avancada do Contact Center nao permite tecla enter

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1  /***************************************************************************\
2  * eGroupWare - Contacts Center                                              *
3  * http://www.egroupware.org                                                 *
4  * Written by:                                                               *
5  *  - Raphael Derosso Pereira <raphaelpereira@users.sourceforge.net>         *
6  *  sponsored by Thyamad - http://www.thyamad.com                            *
7  * ------------------------------------------------------------------------- *
8  *  This program is free software; you can redistribute it and/or modify it  *
9  *  under the terms of the GNU General Public License as published by the    *
10  *  Free Software Foundation; either version 2 of the License, or (at your   *
11  *  option) any later version.                                               *
12  \***************************************************************************/
13
14        /*
15         * ContactCenter API - Search for Entries Window
16         */
17
18        function ccSearchClass(params)
19        {
20                if (!params || typeof(params) != 'object')
21                {
22                        return false;
23                }
24
25                this.mount_handler = function (responseText)
26                {
27                        var data = new Array();
28                        data = unserialize(responseText);
29                       
30                        if( !data )
31                                return false;
32
33                        if( data[0] == 0 )
34                        {
35                                if (_this.onSearchFinish)
36                                        _this.onSearchFinish(null);
37                                return false;
38                        }
39                       
40                        if (data[3].length > 300)
41                        {
42                                alert("Mais de 300 resultados foram retornados! \n Favor refinar sua busca.");
43
44                                if (_this.onSearchFinish)
45                                        _this.onSearchFinish(null);
46
47                                return false;
48                        }
49                       
50                        ccSearchUpdate();
51       
52                        letter = 'search';
53
54                        if ( letter != CC_actual_letter )
55                        {
56                                CC_actual_page = '1';
57                        }
58                        else
59                        {
60                                CC_actual_page = parseInt(data[1]);
61                        }
62       
63                        CC_actual_letter = letter;
64       
65                        if (CC_max_cards[0] == 0)
66                        {
67                                if(CC_visual == 'cards')
68                                        drawCards(0);
69                                else if(CC_visual == 'table')
70                                        drawTable(0);
71       
72                                setPages(0,0);
73                                return;
74                        }
75       
76                        if (data[0] == '0')
77                        {
78                                Element('cc_type_contact').value = data[1];
79                                CC_npages = 0;
80                                CC_actual_page = 1;
81                                if(CC_visual == 'cards')
82                                        drawCards(0);
83                                else if(CC_visual == 'table')
84                                        drawTable(0);
85                                setPages(0,0);
86                                return;
87                        }
88                        else
89                        {
90                                Element('cc_type_contact').value = data[10];
91                        }
92       
93                        if (typeof(data) != 'object')
94                        {
95                                showMessage(Element('cc_msg_err_contacting_server').value);
96                                return;
97                        }
98       
99                        if (typeof(data[3]) == 'object')
100                        {
101                                CC_npages = parseInt(data[0]);
102                                CC_actual_page = parseInt(data[1]);
103                                if(CC_visual == 'cards')
104                                        drawCards(data[3].length, data[10]);
105                                else if(CC_visual == 'table')
106                                        drawTable(data[3].length, data[10]);
107                                resizeWindow();
108                                populateCards(data, data[10]);
109                                setPages(data[0], data[1]);
110                        }
111                        else if (data['error'])
112                        {
113                                showMessage(data['error']);
114                        }
115                        else
116                        {
117                                showMessage(Element('cc_msg_err_contacting_server').value);
118                                return;
119                        }
120                };
121
122
123                /* Attributes */
124                this.onSearchFinish = null;
125                this.onClose = null;
126                this.onOpen = null;
127                this.DOMholder = params['holder'];
128                this.DOMdiv = document.createElement('div');
129                this.DOMfields = document.createElement('select');
130                this.DOMinput = document.createElement('input');
131                this.DOMbtn = document.createElement('input');
132                this.DOMAdv = document.createElement('input');
133                this.DOMbtn2 = document.createElement('input');
134                this.DOMbtn3 = document.createElement('input');
135                this.DOMinputx = document.createElement('input');
136                this.DOMprogHold = document.createElement('div');
137                this.DOMresult = document.createElement('div');
138
139                this.Connector = params['Connector'];
140                this.Connector.setProgressContent(1, params['conn_1_msg']);
141                this.Connector.setProgressContent(2, params['conn_2_msg']);
142                this.Connector.setProgressContent(3, params['conn_3_msg']);
143                this.Connector.setProgressHolder(this.DOMprogHold);
144
145                /* Initialization */
146                var _this = this;
147                var spacer = document.createTextNode(' ');
148
149                this.DOMdiv.style.position = 'relative';
150                this.DOMdiv.style.display = 'inline';
151                this.DOMdiv.style.width    = params['total_width'] ? params['total_width'] : params['input_width'] ? parseInt(params['input_width'])+210 + 'px' : '300px';
152                //this.DOMdiv.style.height   = '25px';
153
154                this.DOMfields.style.width = '50px';
155                this.DOMfields.style.display = 'none';
156                this.DOMfields.style.position = 'absolute';
157                this.DOMfields.style.visibility = 'hidden';
158                //this.DOMfields.style.height = parseInt(this.DOMdiv.style.height)/2 + 'px';
159
160                this.DOMinput.type = 'text';
161                this.DOMinput.value = params['value'] ? params['value'] : '';
162                this.DOMinput.id = 'DOMinput';
163                this.DOMinput.style.width = params['input_width'] ? params['input_width'] : '200px';
164                this.DOMinput.onkeypress = function (e) {
165                                if (is_ie)
166                                {
167                                        if (window.event.keyCode == 13) _this.go();
168                                }
169                                else
170                                {
171                                        if (e.which == 13) _this.go();
172                                }
173                        };
174
175                this.DOMinputx.type = 'text';
176                this.DOMinputx.value = params['value'] ? params['value'] : '';
177                this.DOMinputx.id = 'DOMinputx';
178                this.DOMinputx.style.width = '100px';
179                this.DOMinputx.onkeypress = function (e) {
180                                if (is_ie)
181                                {
182                                        if (window.event.keyCode == 13) _this.go();
183                                }
184                                else
185                                {
186                                        if (e.which == 13) _this.go();
187                                }
188                        };
189
190                //this.DOMinput.style.height = parseInt(this.DOMdiv.style.height)/2 + 'px';
191
192                this.DOMbtn.type = 'button';
193                //this.DOMbtn.style.height = parseInt(this.DOMdiv.style.height)/2 + 'px';
194//              this.DOMbtn.style.width = '60px';
195                this.DOMbtn.value = params['button_text'];
196                this.DOMbtn.onclick = function () {_this.go();};
197
198                this.DOMbtn2.type = 'text';
199                //this.DOMbtn2.style.height = parseInt(this.DOMdiv.style.height)/2 + 'px';
200                this.DOMbtn2.style.width = '60px';
201                this.DOMbtn2.disabled = 'disabled';
202                this.DOMbtn2.value = 'Nome:';
203
204                this.DOMbtn3.type = 'text';
205                //this.DOMbtn3.style.height = parseInt(this.DOMdiv.style.height)/2 + 'px';
206                this.DOMbtn3.style.width = '60px';
207                this.DOMbtn3.disabled = 'disabled';
208                this.DOMbtn3.value =  v_label + ':';
209
210                var btn = this.DOMbtn.cloneNode(true);
211
212                this.DOMAdv.type = 'button';
213//              this.DOMAdv.style.padding = '1px';
214                this.DOMAdv.value = 'Busca Avancada';
215                this.DOMAdv.id = 'advanced';
216                this.DOMAdv.style.display = 'none';
217                this.DOMAdv.onclick = function()
218                {
219                    var target = document.getElementById( 'Layer2' );
220
221                    if( !target.innerHTML )
222                    {
223                        var items = [];
224                        target.style.width = '';
225
226                        var config = [ { "cn":"Nome", "uid":"Matricula" }, advanced_search_fields ];
227
228                        for( var i = 0, counter = 2; i < config.length; i++ )
229                            for( attr in config[i] )
230                                items[counter++] = "<tr><td style='padding: 3px'>"+config[i][attr]+"</td><td style='padding: 5px;'><input type='text' name='advanced_search' label='"+attr+"'><br></td></tr>";
231
232                        var itemH = document.createElement('DIV');
233
234                        itemH.innerHTML = items ? '<table>' + items.join("") + '</table>' : '';
235                        target.appendChild( itemH );
236                        target.onkeydown = function (e){
237                                e = e || window.event;
238                                var key = e.keyCode || e.witch;
239                                if (key == 13){
240                                        _this.go();
241                                        e.stopPropagation();
242                                }
243                        }
244                        target.style.left = "507px";
245
246                        var holder = document.createElement('DIV');
247                        holder.setAttribute('align','center');
248
249                        var exact_search = document.createElement('input');
250                        exact_search.type = 'checkbox';
251                        exact_search.id = 'exact_search';
252                        exact_search.setAttribute( "checked", "checked" );
253
254                        var label_exact_search = document.createElement('label');
255                        label_exact_search.setAttribute( "rel", exact_search.id );
256                        label_exact_search.innerHTML = 'Busca Exata';
257
258                        btn.onclick = function(){ _this.go(); };
259                        var closeBtn = document.createElement('input');
260                        closeBtn.value = 'Fechar';
261                        closeBtn.type = 'button';
262                        closeBtn.onclick = function(){
263                            win.close();
264                            document.getElementById('overlay').style.visibility = 'hidden';
265                        };
266                       
267                        holder.appendChild( exact_search );
268                        holder.appendChild( label_exact_search );
269                        holder.appendChild( spacer.cloneNode(false) );
270                        holder.appendChild( btn );
271                        holder.appendChild( spacer.cloneNode(false) );
272                        holder.appendChild( closeBtn );
273                        holder.appendChild( spacer.cloneNode(false) );
274
275                        holder.style.padding = '5px';
276                        target.style.padding = '5px';
277
278                        target.appendChild( holder );
279                       
280                        this.win = win = new dJSWin({
281                                        id: 'ccSearch_Layer2',
282                                        content_id: 'Layer2',
283                                        width: '255px',
284                                        height: ( counter * 31 ) +'px',
285                                        title_color: '#3978d6',
286                                        bg_color: '#eee',
287                                        title: Element('cc_cs_title').value,                                           
288                                        title_text_color: 'white',
289                                        button_x_img: Element('cc_phpgw_img_dir').value+'/winclose.gif',
290                                        border: true });
291
292                        this.win.draw();
293                    }
294
295                    this.win.open();
296                };
297
298                this.DOMprogHold.style.position = 'absolute';
299                this.DOMprogHold.style.top = params['progress_top'] ? params['progress_top'] : '0px';
300                this.DOMprogHold.style.left = params['progress_left'] ? params['progress_left'] : '0px';
301                this.DOMprogHold.style.fontWeight = 'bold';
302                this.DOMprogHold.style.width = params['progress_width'] ? params['progress_width'] : '200px';
303
304                if (params['progress_color'])
305                        this.DOMprogHold.style.color = params['progress_color'];
306               
307                this.DOMresult.style.position = 'absolute';
308                this.DOMresult.style.top = params['progress_top'] ? params['progress_top'] : '0px';
309                this.DOMresult.style.left = params['progress_left'] ? params['progress_left'] : '0px';
310                this.DOMresult.style.fontWeight = 'bold';
311                this.DOMresult.style.width = params['progress_width'] ? params['progress_width'] : '200px';
312
313                if (params['progress_color'])
314                        this.DOMresult.style.color = params['progress_color'];
315
316                this.DOMholder.appendChild(this.DOMdiv);       
317                this.DOMdiv.appendChild(this.DOMfields);
318                this.DOMdiv.appendChild(this.DOMbtn2);
319                this.DOMdiv.appendChild(this.DOMinput);
320                if(v_label != false &  v_atrib != false)
321                    {
322                        this.DOMdiv.appendChild(this.DOMbtn3)
323                        this.DOMdiv.appendChild(this.DOMinputx);
324                    }
325                this.DOMdiv.appendChild(spacer);
326                this.DOMdiv.appendChild(this.DOMbtn);
327                this.DOMdiv.appendChild(spacer.cloneNode(false));
328                this.DOMdiv.appendChild(this.DOMAdv);
329                this.DOMdiv.appendChild(this.DOMprogHold);
330                this.DOMdiv.appendChild(this.DOMresult);
331        }
332       
333        ccSearchClass.prototype.go = function()
334        {
335                var data = new Array();
336               
337                this.DOMresult.innerHTML = '';
338
339                //TODO: Make Generic!
340                var type = Element('cc_type_contact').value;
341               
342                data['fields']           = new Array();
343               
344                if (type == 'groups') {
345                        data['fields']['id']     = 'group.id_group';                   
346                        data['fields']['search'] = 'group.title';
347                }               
348                else {                 
349                        data['fields']['id']     = 'contact.id_contact';               
350                        data['fields']['search'] = 'contact.names_ordered';                                     
351                }
352               
353                data['search_for']       = this.DOMinput.value;
354
355//                 var customFilter = '(mail=*@mail.prognus*)(uid=*c120455*)';
356
357                var customFilterDiv = document.getElementById( 'Layer2' );
358
359                if( customFilterDiv && customFilterDiv.style.visibility !== 'hidden' )
360                {
361                    var customFilter = cn = '';
362               
363                    var values = document.getElementsByName('advanced_search');
364
365                    for( var i = 0; i < values.length; i++ )
366                    {
367                        if( !values[i].value ) continue;
368                       
369                        if( values[i].getAttribute('label') === 'cn' )
370                        {
371                            cn = values[i].value;
372                            continue;
373                        }
374
375                        customFilter += '(' + values[i].getAttribute('label') + '=*' + values[i].value.replace( / /g, '*' ) + '*)';
376                    }
377
378                    if( customFilter )
379                    {
380                        if( document.getElementById('exact_search').checked )
381                            data['exact'] = 'true';
382
383                        data['search_for'] = customFilter;
384                        data['CN'] = cn;
385                        data['custom_filter'] = true;
386                    }
387                    else
388                        data['search_for'] = cn;
389
390                    win.close();
391                    document.getElementById('overlay').style.visibility = 'hidden';
392                }
393               
394//              var search_for = data['search_for'].split(' ');
395//              var greaterThan4 = false;
396//                var use_length = v_min;
397
398//                if (search_for.length == 1)
399//                    {
400//                        if(search_for[0].length == 0)
401//                            {
402//                                search_for[0] = "*";
403//                                data['search_for'] = "*";
404//                                use_length = 1;
405//                            }
406//                    }
407
408//              for (i = 0; i < search_for.length; i++)
409//              {
410//                      if (search_for[i].length >= use_length)
411//                      {
412//                              greaterThan4 = true;
413//                      }
414//              }
415
416//              if (!greaterThan4){
417//                      alert("Favor fazer a consulta com pelo menos " + v_min + " caracteres!");
418//                      return;
419//              }
420
421                var _this = this;
422               
423                var handler = this.mount_handler;
424        this.Connector.newRequest('search', CC_url+'search&data='+serialize(data), 'GET', handler);
425        }
Note: See TracBrowser for help on using the repository browser.