source: trunk/expressoMail1_2/js/sharemailbox.js @ 1912

Revision 1912, 13.2 KB checked in by valmir.sena, 14 years ago (diff)

Ticket #858 - Alterar o comportamento do envio de mensagens por um usuário de uma conta compartilhada

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1        function cShareMailbox()
2        {
3                this.arrayWin = new Array();
4                this.el;
5                this.alert = false;
6        }
7
8        cShareMailbox.prototype.get_available_users = function(context)
9        {
10                var handler_get_available_users = function(data)
11                {
12                        select_available_users = document.getElementById('em_select_available_users');
13               
14                        //Limpa o select
15                        for(var i=0; i<select_available_users.options.length; i++)
16                        {
17                                select_available_users.options[i] = null;
18                                i--;
19                        }
20
21                        if ((data) && (data.length > 0))
22                        {
23                                // Necessario, pois o IE6 tem um bug que retira o primeiro options se o innerHTML estiver vazio.
24                                select_available_users.innerHTML = '#' + data;
25                                select_available_users.outerHTML = select_available_users.outerHTML;
26                       
27                                select_available_users.disabled = false;
28                                select_available_users_clone = document.getElementById('em_select_available_users').cloneNode(true);
29                                document.getElementById('em_input_searchUser').value = '';
30                        }
31                }
32                cExecute ("$this.ldap_functions.get_available_users2&context="+context, handler_get_available_users);
33        }
34
35        cShareMailbox.prototype.getaclfromuser = function(user)
36        {
37                var handler_getaclfromuser = function(data)
38                {
39                        Element('em_input_readAcl').checked = false;
40                        Element('em_input_deleteAcl').checked = false;
41                        Element('em_input_writeAcl').checked = false;
42                        Element('em_input_sendAcl').checked = false;
43                        Element('em_input_saveAcl').checked = false;
44                        Element('em_input_saveAcl').disabled = true;
45                       
46                        if (data[user].indexOf('lrs',0) >= 0)
47                        {
48                                Element('em_input_sendAcl').disabled = false;
49                                Element('em_input_readAcl').checked = true;
50                        }
51                        else
52                                Element('em_input_sendAcl').disabled = true;
53                               
54                        if (data[user].indexOf('d',0) >= 0)
55                        {
56                                Element('em_input_deleteAcl').checked = true;
57                        }
58                        if (data[user].indexOf('wi',0) >= 0)
59                        {
60                                Element('em_input_writeAcl').checked = true;
61                        }
62                        if (data[user].indexOf('p',0) >= 0)
63                        {
64                                Element('em_input_saveAcl').checked = true;
65                        }
66                        if (data[user] != "false" && data[user].indexOf('a',0) >= 0)
67                        {
68                                Element('em_input_sendAcl').disabled = false;
69                                Element('em_input_sendAcl').checked = true;
70                        }
71                        if (data[user] != "false" && data[user].indexOf('p',0) >= 0)
72                        {
73                                Element('em_input_saveAcl').disabled = false;
74                                Element('em_input_saveAcl').checked = true;
75                        }
76                        if( data[user] != "false" && Element('em_input_writeAcl').checked && Element('em_input_sendAcl').checked ){
77                                Element('em_input_saveAcl').disabled = false;
78                        } else Element('em_input_saveAcl').disabled = true;
79                }
80                cExecute ("$this.imap_functions.getaclfromuser&user="+user, handler_getaclfromuser);
81        }
82       
83        cShareMailbox.prototype.setaclfromuser = function()
84        {
85                var acl         = '';
86                var select      = Element('em_select_sharefolders_users');
87
88                if(select.selectedIndex == "-1"){
89                        alert("Selecione antes um usuário!");
90                        return false;
91                }
92                var user = select.options[select.selectedIndex].value;
93               
94                if (Element('em_input_readAcl').checked) {
95                        Element('em_input_sendAcl').disabled = false;
96                        acl = 'lrs';
97                }
98                else{
99                        Element('em_input_sendAcl').disabled = true;
100                        Element('em_input_sendAcl').checked = false;
101                }
102                               
103                if (Element('em_input_deleteAcl').checked)
104                        acl += 'd';
105
106                if (Element('em_input_writeAcl').checked) {
107                        acl += 'wi';                   
108                }
109               
110                if (Element('em_input_sendAcl').checked){
111                        acl += 'a';                     
112                } else {
113                        Element('em_input_saveAcl').disabled = true;
114                        Element('em_input_saveAcl').checked = false;
115                }
116               
117                if (Element('em_input_sendAcl').checked && Element('em_input_writeAcl').checked){
118                        Element('em_input_saveAcl').disabled = false;                           
119                } else {
120                        Element('em_input_saveAcl').disabled = true;
121                        Element('em_input_saveAcl').checked = false;
122                }
123               
124                if (Element('em_input_saveAcl').checked)
125                        acl += 'p';
126               
127                var handler_setaclfromuser = function(data) {
128                        if (!data)
129                                alert(data);   
130                        return true;
131                }
132                cExecute ("$this.imap_functions.setaclfromuser&user="+user+"&acl="+acl, handler_setaclfromuser);
133        }
134       
135        cShareMailbox.prototype.makeWindow = function(options)
136        {
137                _this = this;
138       
139                var el = document.createElement("DIV");
140                el.style.visibility = "hidden";
141                el.style.position = "absolute";
142                el.style.left = "0px";
143                el.style.top = "0px";
144                el.style.width = "0px";
145                el.style.height = "0px";
146                el.id = 'dJSWin_sharefolders';
147                document.body.appendChild(el);
148
149                if (Element('em_select_sharefolders_users'))
150                {
151                        var select_users = Element('em_select_sharefolders_users');
152                        select_users.innerHTML = '#' + options;
153                        select_users.outerHTML = select_users.outerHTML;
154                       
155                        Element('em_input_readAcl').checked = false;
156                        Element('em_input_deleteAcl').checked = false;
157                        Element('em_input_writeAcl').checked = false;
158                        Element('em_input_sendAcl').checked = false;
159                        Element('em_input_saveAcl').checked = false;
160                }
161                else
162                {
163                        el.innerHTML = "<table border=0><tbody><tr>"+
164                                                       
165                                                        "<td valign='bottom'>"+
166                                                                '<font color="red">'+
167                                                                        get_lang('Note: This sharing will take action on all of your folders and messages.')+
168                                                                        '<br><br>'+
169                                                                '</font>'+
170                                                                get_lang('Your mailbox is shared with')
171                                                                +":<br><br>"+
172                                                                "<select onchange=sharemailbox.getaclfromuser(this.value); id='em_select_sharefolders_users' size='13' style='width:250px;height:200px'>" + options + "</select>"+
173                                                        "</td>"+
174                                                       
175                                                        "<td>"+
176                                                                '<br><br><br><br><br><br>'+
177                                                                '<img onClick="javascript:sharemailbox.add_user();" src="templates/'+template+'/images/arrow_left.gif" style="vertical-align:middle;cursor:pointer;">' +
178                                                                '<br><br>'+
179                                                                '<img onClick="javascript:sharemailbox.remove_user();" src="templates/'+template+'/images/arrow_right.gif" style="vertical-align:middle;cursor:pointer;">' +
180                                                        "</td>"+
181                                                       
182                                                        "<td valign='bottom'><br>"+
183                                                                get_lang('Organization')+":&nbsp;" +
184                                                                "<select id='em_combo_org' onchange='javascript:sharemailbox.get_available_users(this.value);'></select>"+
185                                                               
186                                                                "<br><br>"+get_lang('Search user')+":<br>" +
187                                                                '<input id="em_input_searchUser" size="35" autocomplete="off"  onkeyup="javascript:sharemailbox.optionFinderTimeout(this)"><br>'+
188                                                               
189                                                                '<font color="red"><span id="em_span_searching">&nbsp;</span></font><br>'+
190                                                               
191                                                                "<select id='em_select_available_users' style='width:250px;height:200px' multiple></select></td>"+
192                                                        '</tr>'+
193                                                        '<tr><td>'+
194                                                                '<table border=0><tbody><tr><td colspan=2>'+
195                                                                        get_lang('Access right')+':'+
196                                                                '</td></tr>'+
197                                                                '<tr><td>'+get_lang('Read')+':</td><td><input id=\'em_input_readAcl\' onClick="return sharemailbox.setaclfromuser();" type="checkbox"><img title="'+get_lang("hlp_msg_read_acl")+'." src=\'./templates/'+template+'/images/ajuda.jpg\'></td></tr>'+
198                                                                '<tr><td>'+get_lang('Exclusion')+':</td><td><input id=\'em_input_deleteAcl\' onClick="return sharemailbox.setaclfromuser();" type="checkbox"><img title="'+get_lang('hlp_msg_delmov_acl')+'." src=\'./templates/'+template+'/images/ajuda.jpg\'></td></tr>'+
199                                                                '<tr><td>'+get_lang('Write')+':</td><td><input id=\'em_input_writeAcl\' onClick="return sharemailbox.setaclfromuser();" type="checkbox"><img title="'+get_lang('hlp_msg_addcreate_acl')+'." src=\'./templates/'+template+'/images/ajuda.jpg\'></td></tr>'+
200                                                                '<tr><td>'+get_lang('Send')+':</td><td><input id=\'em_input_sendAcl\' onClick="return sharemailbox.setaclfromuser();" type="checkbox"><img title="'+get_lang('hlp_msg_sendlike_acl')+'." src=\'./templates/'+template+'/images/ajuda.jpg\'></td></tr>'+
201                                                                '<tr><td>'+get_lang('Save')+':</td><td><input id=\'em_input_saveAcl\' onClick="return sharemailbox.setaclfromuser();" type="checkbox"><img title="'+get_lang('hlp_msg_savelike_acl')+'." src=\'./templates/'+template+'/images/ajuda.jpg\'></td></tr></tbody></table>'+
202                                                        '</td></tr>'+
203                        "</tbody></table>";
204                }
205
206                var handler_organizations = function(data){
207                        var user_organization = Element('user_organization').value;
208                       
209                        for(i = 0; i < data.length; i++) {
210                                Element('em_combo_org').options[i] = new Option(data[i].ou,data[i].dn);
211                                if(user_organization.toUpperCase() == data[i].ou.toUpperCase())
212                                {
213                                        Element('em_combo_org').options[i].selected = true;
214                                        _this.get_available_users(data[i].dn);
215                                }
216                        }
217                }
218                cExecute ("$this.ldap_functions.get_organizations2&referral=false", handler_organizations);
219
220                var butt = Element('dJSWin_wfolders_bok')
221                if (!butt){
222                        butt = document.createElement('INPUT');
223                        butt.id = 'dJSWin_wfolders_bok';
224                        butt.type = 'button';
225                        butt.value = get_lang('Save');
226                        el.appendChild(butt);
227                }
228                butt.onclick = function ()
229                {
230                        // Needed select all options from select
231                        var users_setacl = new Array();
232                        select_users = Element('em_select_sharefolders_users');
233                        for(var i=0; i<select_users.options.length; i++)
234                        {
235                                users_setacl[i] = select_users.options[i].value;
236                        }
237                        attributes = connector.serialize(users_setacl);
238                       
239                        var handler_save = function(data)
240                        {
241                                if (data)
242                                {
243                                        alert(get_lang('Shared options saved with success'));
244                                        sharemailbox.arrayWin[el.id].close();
245                                }
246                        }
247
248                        cExecute ("$this.imap_functions.setacl", handler_save, 'users='+attributes);
249
250                }
251               
252                var space = document.createElement('SPAN');
253                space.innerHTML = "&nbsp;&nbsp;";
254                el.appendChild(space);
255               
256                var butt = document.createElement('BUTTON');
257                var buttext = document.createTextNode(get_lang('Close'));
258                butt.appendChild(buttext);
259                butt.onclick = function () {sharemailbox.arrayWin[el.id].close();};
260                el.appendChild(butt);
261               
262                _this.showWindow(el);
263        }
264       
265        cShareMailbox.prototype.showWindow = function (div)
266        {
267                if(! div) {
268                        alert(get_lang('This list has no participants'));
269                        return;
270                }
271               
272                if(! this.arrayWin[div.id])
273                {
274                        div.style.height = "480px";
275                        div.style.width = "540px";
276                        var title = ":: "+get_lang("Mailbox Sharing")+" ::";
277                        var wHeight = div.offsetHeight + "px";
278                        var wWidth =  div.offsetWidth   + "px";
279                        div.style.width = div.offsetWidth - 5;
280
281                        win = new dJSWin({
282                                id: 'win_'+div.id,
283                                content_id: div.id,
284                                width: wWidth,
285                                height: wHeight,
286                                title_color: '#3978d6',
287                                bg_color: '#eee',
288                                title: title,
289                                title_text_color: 'white',
290                                button_x_img: '../phpgwapi/images/winclose.gif',
291                                border: true });
292                       
293                        this.arrayWin[div.id] = win;
294                        win.draw();
295                }
296                else {
297                        win = this.arrayWin[div.id];
298                }
299                Element('em_input_sendAcl').disabled = true;
300                Element('em_input_saveAcl').disabled = true;
301                win.open();
302        }
303       
304        var finderTimeout = '';
305        cShareMailbox.prototype.optionFinderTimeout = function(obj)
306        {
307                clearTimeout(finderTimeout);   
308                var oWait = document.getElementById("em_span_searching");
309                oWait.innerHTML = get_lang('Searching')+"...";
310                var finderTimeout = setTimeout("sharemailbox.optionFinder('"+obj.id+"')",500);
311        }
312       
313        cShareMailbox.prototype.optionFinder = function(id)
314        {
315                var oWait = document.getElementById("em_span_searching");
316                var oText = document.getElementById(id);
317                       
318                //Limpa todo o select
319               
320                var select_available_users_tmp = document.getElementById('em_select_available_users')
321                for(var i = 0;i < select_available_users_tmp.options.length; i++)
322                        select_available_users_tmp.options[i--] = null;
323
324                var RegExp_name = new RegExp("\\b"+oText.value, "i");
325               
326                //Inclui usuário começando com a pesquisa
327                for(i = 0; i < select_available_users_clone.length; i++){
328                        if (RegExp_name.test(select_available_users_clone[i].text))
329                        {
330                                sel = select_available_users_tmp.options;
331                                option = new Option(select_available_users_clone[i].text,select_available_users_clone[i].value);                               
332                                sel[sel.length] = option;
333                        }
334                }
335                oWait.innerHTML = '&nbsp;';
336        }
337       
338        cShareMailbox.prototype.add_user = function()
339        {
340                var select_available_users = document.getElementById('em_select_available_users');
341                var select_users = document.getElementById('em_select_sharefolders_users');
342
343                var count_available_users = select_available_users.length;
344                var count_users = select_users.options.length;
345                var new_options = '';
346       
347                for (i = 0 ; i < count_available_users ; i++)
348                {
349                        if (select_available_users.options[i].selected)
350                        {
351                                if(document.all)
352                                {
353                                        if ( (select_users.innerHTML.indexOf('value='+select_available_users.options[i].value)) == '-1' )
354                                        {
355                                                new_options +=  '<option value='
356                                                                        + select_available_users.options[i].value
357                                                                        + '>'
358                                                                        + select_available_users.options[i].text
359                                                                        + '</option>';
360                                        }
361                                }
362                                else
363                                {
364                                        if ( (select_users.innerHTML.indexOf('value="'+select_available_users.options[i].value+'"')) == '-1' )
365                                        {
366                                                new_options +=  '<option value='
367                                                                        + select_available_users.options[i].value
368                                                                        + '>'
369                                                                        + select_available_users.options[i].text
370                                                                        + '</option>';
371                                        }
372                                }
373                        }
374                }
375
376                if (new_options != '')
377                {
378                        select_users.innerHTML = '#' + new_options + select_users.innerHTML;
379                        select_users.outerHTML = select_users.outerHTML;
380                }
381        }
382
383        cShareMailbox.prototype.remove_user = function()
384        {
385                select_users = document.getElementById('em_select_sharefolders_users');
386       
387                for(var i = 0;i < select_users.options.length; i++)
388                        if(select_users.options[i].selected)
389                                select_users.options[i--] = null;
390                               
391                Element('em_input_readAcl').checked = false;
392                Element('em_input_deleteAcl').checked = false;
393                Element('em_input_writeAcl').checked = false;
394                Element('em_input_sendAcl').checked = false;
395                Element('em_input_saveAcl').checked = false;
396        }
397       
398       
399/* Build the Object */
400        var sharemailbox;
401        sharemailbox = new cShareMailbox();
Note: See TracBrowser for help on using the repository browser.