Changeset 6848


Ignore:
Timestamp:
07/23/12 14:28:41 (7 years ago)
Author:
cristiano
Message:

Ticket #2978 - Dificuldade no mapeamento de ACLs para ações de pastas compartilhadas

Location:
trunk/expressoMail1_2
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoMail1_2/inc/class.functions.inc.php

    r6714 r6848  
    1818                     
    1919                    $zones = $this->getTimezones(); 
    20                     $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['timezone'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['timezone'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['timezone'] : sprintf("%s", array_search("America/Sao_Paulo", $zones)); 
     20                    $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['timezone'] = isset($GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['timezone']) ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['timezone'] : sprintf("%s", array_search("America/Sao_Paulo", $zones)); 
    2121 
    2222                    $timezone_index = $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['timezone']; 
  • trunk/expressoMail1_2/inc/class.imap_functions.inc.php

    r6818 r6848  
    42814281        { 
    42824282                $this->ldap = new ldap_functions(); 
    4283  
    4284                 $return = array(); 
    42854283                $mbox_stream = $this->open_mbox(); 
    42864284                $mbox_acl = imap_getacl($mbox_stream, 'INBOX'); 
    42874285 
    4288                 $i = 0; 
     4286                $oldAcls = array('d' , 'c' , 'a'); 
     4287                $newAcls = array('xte','ik', ''); 
     4288 
     4289                $return = array(); 
    42894290                foreach ($mbox_acl as $user => $acl) 
    42904291                { 
    4291                         if ($user != $this->username) 
     4292                        if($user == $this->username)  
     4293                                continue; 
     4294 
     4295                        //Compatibiliza acls no padrão antigo para o novo 
     4296                        $acl = str_replace($oldAcls, $oldAcls, $acl); 
     4297 
     4298                        $return[$user] = array( 
     4299                                        'cn' => $this->ldap->uid2cn($user) , 
     4300                                        'acls' => $acl 
     4301                                        ); 
     4302                } 
     4303                return $return; 
     4304        } 
     4305 
     4306        function setacl($params) 
     4307        { 
     4308                $old_users = $this->getacl(); 
     4309                $new_users = unserialize($params['acls']); 
     4310 
     4311                $mbox_stream = $this->open_mbox(); 
     4312                $serverString = "{".$this->imap_server.":".$this->imap_port.$this->imap_options."}"; 
     4313                $mailboxes_list = imap_getmailboxes($mbox_stream, $serverString, "user".$this->imap_delimiter.$this->username."*");                 
     4314 
     4315                foreach ($new_users as $user => $value) { 
     4316                        if(isset($old_users[$user]) && $value['acls'] == $old_users[$user]['acls']) 
    42924317                        { 
    4293                                 $return[$i]['uid'] = $user; 
    4294                                 $return[$i]['cn'] = $this->ldap->uid2cn($user); 
    4295                         } 
    4296                         $i++; 
    4297                 } 
    4298                 return $return; 
    4299         } 
    4300  
    4301         function setacl($params) 
    4302         { 
    4303                 $old_users = $this->getacl(); 
    4304                 if (!count($old_users)) 
    4305                         $old_users = array(); 
    4306  
    4307                 $tmp_array = array(); 
    4308                 foreach ($old_users as $index => $user_info) 
     4318                                unset($old_users[$user]); 
     4319                                unset($new_users[$user]); 
     4320                        } 
     4321                } 
     4322 
     4323                foreach ($new_users as $user => $value) 
    43094324                { 
    4310                         $tmp_array[$index] = $user_info['uid']; 
    4311                 } 
    4312                 $old_users = $tmp_array; 
    4313  
    4314                 $users = unserialize($params['users']); 
    4315                 if (!count($users)) 
    4316                         $users = array(); 
    4317  
    4318                 //$add_share = array_diff($users, $old_users); 
    4319                 $remove_share = array_diff($old_users, $users); 
    4320  
    4321                 $mbox_stream = $this->open_mbox(); 
    4322  
    4323                 $serverString = "{".$this->imap_server.":".$this->imap_port.$this->imap_options."}"; 
    4324                 $mailboxes_list = imap_getmailboxes($mbox_stream, $serverString, "user".$this->imap_delimiter.$this->username."*"); 
    4325  
    4326                 /*if (count($add_share)) 
     4325                if (is_array($mailboxes_list)) 
     4326                { 
     4327                    foreach ($mailboxes_list as $key => $val) 
     4328                    { 
     4329                        $folder = str_replace($serverString, "", imap_utf7_decode($val->name)); 
     4330                        $folder = str_replace("&-", "&", $folder); 
     4331                        imap_setacl ($mbox_stream, $folder, "$user", $value['acls']); 
     4332 
     4333                    } 
     4334                } 
     4335                if(isset($old_users[$user])) 
     4336                        unset($old_users[$user]); 
     4337                } 
     4338 
     4339                foreach ($old_users as $user => $value) 
    43274340                { 
    4328                         foreach ($add_share as $index=>$uid) 
    4329                         { 
    4330                         if (is_array($mailboxes_list)) 
    4331                         { 
    4332                         foreach ($mailboxes_list as $key => $val) 
    4333                         { 
    4334                         $folder = str_replace($serverString, "", imap_utf7_decode($val->name)); 
    4335                                                 imap_setacl ($mbox_stream, $folder, "$uid", "lrswipcda"); 
    4336                         } 
    4337                         } 
    4338                         } 
    4339                 }*/ 
    4340  
    4341                 if (count($remove_share)) 
    4342                 { 
    4343                         foreach ($remove_share as $index=>$uid) 
    4344                         { 
    4345                             if (is_array($mailboxes_list)) 
    4346                             { 
    4347                                 foreach ($mailboxes_list as $key => $val) 
    4348                                 { 
    4349                                     $folder = str_replace($serverString, "", imap_utf7_decode($val->name)); 
    4350                                     $folder = str_replace("&-", "&", $folder); 
    4351                                     imap_setacl ($mbox_stream, $folder, "$uid", ""); 
    4352                                 } 
    4353                             } 
    4354                         } 
    4355                 } 
     4341                if (is_array($mailboxes_list)) 
     4342                { 
     4343                    foreach ($mailboxes_list as $key => $val) 
     4344                    { 
     4345                        $folder = str_replace($serverString, "", imap_utf7_decode($val->name)); 
     4346                        $folder = str_replace("&-", "&", $folder); 
     4347                        imap_setacl ($mbox_stream, $folder, "$user", ""); 
     4348 
     4349                    } 
     4350                } 
     4351                } 
     4352                 
    43564353 
    43574354                return true; 
    43584355        } 
    43594356 
    4360         function getaclfromuser($params) 
    4361         { 
    4362                 $useracl = $params['user']; 
    4363                 $return = array(); 
    4364                 $mbox_stream = $this->open_mbox(); 
    4365                 if($params['getShared']){                
    4366                          $mbox_acl = imap_getacl($mbox_stream, 'user'.$this->imap_delimiter.$useracl);           
    4367                         foreach ($mbox_acl as $user => $acl) 
    4368                         { 
    4369                                 if (($user == $this->username) && ($user != $useracl)) 
    4370                                 { 
    4371                                         $return[$useracl] = $acl; 
    4372                                 } 
    4373                         }                         
    4374                 }else {  
    4375                         $mbox_acl = imap_getacl($mbox_stream, 'INBOX'); 
    4376                         foreach ($mbox_acl as $user => $acl) 
    4377                         { 
    4378                                 if (($user != $this->username) && ($user == $useracl)) 
    4379                                 { 
    4380                                         $return[$user] = $acl; 
    4381                                 } 
    4382                         } 
    4383                 } 
    4384                 if(count($return) == 0) 
    4385                                 $return[$useracl] = 'false'; 
    4386                                  
    4387                 return $return; 
    4388         } 
    43894357 
    43904358        function getacltouser($user, $decode = false) 
     
    44084376                else  
    44094377                    return ''; 
    4410         } 
    4411  
    4412  
    4413         function setaclfromuser($params) 
    4414         { 
    4415                 $user = $params['user']; 
    4416                 $acl = $params['acl']; 
    4417  
    4418                 $mbox_stream = $this->open_mbox(); 
    4419  
    4420                 $serverString = "{".$this->imap_server.":".$this->imap_port.$this->imap_options."}"; 
    4421                 $mailboxes_list = imap_getmailboxes($mbox_stream, $serverString, "user".$this->imap_delimiter.$this->username."*"); 
    4422  
    4423                 if (is_array($mailboxes_list)) 
    4424                 { 
    4425                         foreach ($mailboxes_list as $key => $val) 
    4426                         { 
    4427                                 $folder = str_replace($serverString, "", imap_utf7_encode($val->name)); 
    4428                                 $folder = str_replace("&-", "&", $folder); 
    4429                                 if (!imap_setacl ($mbox_stream, $folder, $user, $acl)) 
    4430                                 { 
    4431                                         $return = imap_last_error(); 
    4432                                 } 
    4433                         } 
    4434                 } 
    4435                 if (isset($return)) 
    4436                         return $return; 
    4437                 else 
    4438                         return true; 
    44394378        } 
    44404379 
  • trunk/expressoMail1_2/inc/class.ldap_functions.inc.php

    r6528 r6848  
    8888                $this->ldap_context = $_SESSION['phpgw_info']['expressomail']['server']['ldap_context']; 
    8989 
    90                 if($_SESSION['phpgw_info']['expressomail']['server']['ldap_master_host'] && 
     90                if( isset($_SESSION['phpgw_info']['expressomail']['server']['ldap_master_host']) && 
     91                        isset($_SESSION['phpgw_info']['expressomail']['server']['ldap_master_root_dn']) && 
     92                        isset($_SESSION['phpgw_info']['expressomail']['server']['ldap_master_root_pw']) && 
     93                        $_SESSION['phpgw_info']['expressomail']['server']['ldap_master_host'] && 
    9194                        $_SESSION['phpgw_info']['expressomail']['server']['ldap_master_root_dn'] && 
    9295                        $_SESSION['phpgw_info']['expressomail']['server']['ldap_master_root_pw']) { 
  • trunk/expressoMail1_2/js/sharemailbox.js

    r6551 r6848  
    22        { 
    33                this.xtools             = new xtools('../expressoMail1_2/templates/'); 
     4 
     5                var users; 
    46        } 
    57 
     
    3335        cShareMailbox.prototype.getaclfromuser = function(user) 
    3436        { 
    35                 var handler_getaclfromuser = function(data) 
    36                 { 
    37                         Element('em_input_readAcl').checked             = false; 
    38                         Element('em_input_deleteAcl').checked   = false; 
    39                         Element('em_input_writeAcl').checked    = false; 
    40                         Element('em_input_sendAcl').checked             = false; 
    41                          
    42             Element('em_input_deleteAcl').disabled      = true; 
    43             Element('em_input_writeAcl').disabled       = true; 
    44                          
    45                         if (data[user].indexOf('lrs',0) >= 0) 
    46                         { 
    47                                 Element('em_input_sendAcl').disabled = false; 
    48                                 Element('em_input_deleteAcl').disabled = false; 
    49                 Element('em_input_writeAcl').disabled = false ; 
    50                                 Element('em_input_readAcl').checked = true; 
    51                         } 
    52                         else 
    53                         { 
    54                                 Element('em_input_sendAcl').disabled = true; 
    55                         } 
    56                          
    57                         if (data[user].indexOf('d',0) >= 0) 
    58                         { 
    59                                 Element('em_input_deleteAcl').checked = true; 
    60                                 Element('em_input_deleteAcl').disabled = false; 
    61                         } 
    62                          
    63                         if (data[user].indexOf('w',0) >= 0) 
    64                         { 
    65                                 Element('em_input_writeAcl').checked = true; 
    66                 Element('em_input_writeAcl').disabled = false 
    67                         } 
    68                          
    69                         if (data[user] != "false" && data[user].indexOf('p',0) >= 0) 
    70                         { 
    71                                 Element('em_input_sendAcl').disabled = false; 
    72                                 Element('em_input_sendAcl').checked = true; 
    73                         }                        
    74  
    75                 } 
    76                  
    77                 cExecute ("$this.imap_functions.getaclfromuser&user="+user, handler_getaclfromuser); 
     37 
     38                Element('em_input_readAcl').checked             = false; 
     39                Element('em_input_deleteAcl').checked   = false; 
     40                Element('em_input_writeAcl').checked    = false; 
     41                Element('em_input_sendAcl').checked             = false; 
     42                 
     43            Element('em_input_deleteAcl').disabled      = true; 
     44            Element('em_input_writeAcl').disabled       = true; 
     45                 
     46                if ((this.users[user].acls.indexOf('l',0) >= 0) && 
     47                        (this.users[user].acls.indexOf('r',0) >= 0) && 
     48                        (this.users[user].acls.indexOf('s',0) >= 0) ) 
     49                { 
     50                        Element('em_input_sendAcl').disabled = false; 
     51                        Element('em_input_deleteAcl').disabled = false; 
     52                Element('em_input_writeAcl').disabled = false ; 
     53                        Element('em_input_readAcl').checked = true; 
     54                } 
     55                else 
     56                        Element('em_input_sendAcl').disabled = true; 
     57                 
     58                 
     59                if ((this.users[user].acls.indexOf('x',0) >= 0) && 
     60                        (this.users[user].acls.indexOf('t',0) >= 0) && 
     61                        (this.users[user].acls.indexOf('e',0) >= 0) ) 
     62                { 
     63                        Element('em_input_deleteAcl').checked = true; 
     64                        Element('em_input_deleteAcl').disabled = false; 
     65                } 
     66                 
     67                if ((this.users[user].acls.indexOf('w',0) >= 0) && 
     68                        (this.users[user].acls.indexOf('i',0) >= 0) && 
     69                        (this.users[user].acls.indexOf('k',0) >= 0) ) 
     70                { 
     71                        Element('em_input_writeAcl').checked = true; 
     72                Element('em_input_writeAcl').disabled = false 
     73                } 
     74                 
     75                if (this.users[user].acls != "false" && this.users[user].acls.indexOf('p',0) >= 0) 
     76                { 
     77                        Element('em_input_sendAcl').disabled = false; 
     78                        Element('em_input_sendAcl').checked = true; 
     79                }                        
    7880        } 
    7981         
     
    106108            Element('em_input_writeAcl').disabled       = true; 
    107109            Element('em_input_writeAcl').checked        = false; 
    108                          
    109110                } 
    110111                                 
    111112                if (Element('em_input_deleteAcl').checked) 
    112                         acl += 'ida'; 
     113                        acl += 'xte'; 
    113114 
    114115                if (Element('em_input_writeAcl').checked) { 
    115                         acl += 'wc';                     
     116                        acl += 'wik';                    
    116117                }                
    117118                if (Element('em_input_sendAcl').checked){ 
    118                         acl += 'pa';                     
    119                 } 
    120                  
    121                 var handler_setaclfromuser = function(data) { 
    122                         if (!data) 
    123                                 alert(data);     
    124                         return true; 
    125                 } 
    126                 cExecute ("$this.imap_functions.setaclfromuser&user="+user+"&acl="+acl, handler_setaclfromuser); 
     119                        acl += 'p';                      
     120                } 
     121 
     122                this.users[user].acls = acl; 
    127123        } 
    128124         
     
    172168                                                                        click: function() 
    173169                                                                        { 
    174                                                                                 $(this).dialog("destroy"); 
    175                                                                                 div.removeChild(div.firstChild);         
     170                                                                                $(div).dialog("close"); 
    176171                                                                        }, 
    177172                                                                        style: "margin-top: -2.1em"  
     
    180175                                                                        text: get_lang("Save"), 
    181176                                                                        click: function() 
    182                                                                         { 
    183                                                                                 // Needed select all options from select 
    184                                                                                 var users_setacl = new Array(); 
    185                                                                                 var select_users = Element('em_select_sharefolders_users'); 
    186  
    187                                                                                 for(var i = 0; i < select_users.options.length; i++) 
    188                                                                                 { 
    189                                                                                         users_setacl[i] = select_users.options[i].value; 
    190                                                                                 } 
    191                                                                                 var attributes = connector.serialize(users_setacl); 
    192                                                                                  
    193                                                                                 var handler_save = function(data) 
    194                                                                                 { 
    195                                                                                         if (data) 
    196                                                                                         { 
    197                                                                                                 var sharedFoldersUsers = document.getElementById('em_select_sharefolders_users'); 
    198                                                                                                  
    199                                                                                                 for( var i = 0;i < sharedFoldersUsers.options.length; i++ ) 
    200                                                                                                 { 
    201                                                                                                         if( sharedFoldersUsers.options[i].selected ) 
    202                                                                                                         { 
    203                                                                                                                 var value       = sharedFoldersUsers.options[i].value; 
    204                                                                                                                 var text        = sharedFoldersUsers.options[i].text; 
    205                                                                                                                 sharedFoldersUsers.options[i].parentNode.removeChild(sharedFoldersUsers.options[i]); 
    206                                                                                                                 sharedFoldersUsers.options[sharedFoldersUsers.options.length] = new Option( text, value, false, false); 
    207                                                                                                         } 
    208                                                                                                 } 
    209                                                                                                  
    210                                                                                                 Element('em_input_readAcl').checked             = false; 
    211                                                                                                 Element('em_input_deleteAcl').checked   = false; 
    212                                                                                                 Element('em_input_writeAcl').checked    = false; 
    213                                                                                                 Element('em_input_sendAcl').checked             = false; 
    214                                                                                                  
    215                                                                                     Element('em_input_deleteAcl').disabled      = true; 
    216                                                                                     Element('em_input_writeAcl').disabled       = true; 
    217                                                                                                 Element('em_input_sendAcl').disabled    = true; 
    218  
    219                                                                                                 //$("#sharemailbox").empty(); 
    220                                                                                                 //$("#sharemailbox").dialog("destroy"); 
    221                                                                                                 $("#sharemailbox").parents().find(".ui-icon-closethick").trigger("click"); 
    222                                                                                                  
    223                                                                                                 write_msg(get_lang('Shared options saved with success')); 
    224  
    225                                                                                         } 
    226                                                                                 } 
    227  
    228                                                                                 cExecute ("$this.imap_functions.setacl", handler_save, 'users='+attributes); 
    229                                                                                  
     177                                                                        {                                                                        
     178                                                                                $.ajax({ 
     179                                                                                                  url: 'controller.php?' + $.param( { 
     180                                                                                                                                          action: '$this.imap_functions.setacl', 
     181                                                                                                                                      acls: connector.serialize(sharemailbox.users)}  
     182                                                                                                                                      ), 
     183                                                                                                  success: function( data ){ 
     184                                                                                                      data = connector.unserialize( data ); 
     185                                                                                                       
     186                                                                                                      if( data ) 
     187                                                                                                          { 
     188                                                                                                                write_msg(get_lang('Shared options saved with success')); 
     189                                                                                                                $(div).dialog("close"); 
     190                                 
     191                                                                                                          } 
     192                                                                                                  }, 
     193                                                                                                  beforeSend: function( jqXHR, settings ){ 
     194                                                                                                        connector.showProgressBar(); 
     195                                                                                                  }, 
     196                                                                                                  complete: function( jqXHR, settings ){ 
     197                                                                                                        connector.hideProgressBar(); 
     198                                                                                                  } 
     199 
     200                                                                                           }); 
     201 
    230202                                                                        }, 
    231203                                                                        style: "margin-top: -2.1em"  
     
    267239 
    268240                var selectSharedFolders = Element('em_select_sharefolders_users'); 
    269                  
    270                 for( var i in optionsData ) 
    271                 { 
    272                         selectSharedFolders.options[selectSharedFolders.options.length] = new Option(optionsData[i].cn, optionsData[i].uid, false, false); 
    273                 } 
     241                this.users = optionsData; 
     242                for( var i in optionsData )      
     243                        selectSharedFolders.options[selectSharedFolders.options.length] = new Option(optionsData[i].cn, i, false, false); 
     244                 
    274245        } 
    275246         
     
    331302                                        } 
    332303                                } 
     304                                var newobject = new Object; 
     305                                newobject.cn = select_available_users.options[i].text; 
     306                                newobject.acls = ""; 
     307                                this.users[select_available_users.options[i].value] = newobject; 
    333308                        } 
    334309                } 
     
    339314                        select_users.outerHTML = select_users.outerHTML; 
    340315                } 
     316 
     317 
     318 
    341319        } 
    342320 
     
    349327                var user = select.options[select.selectedIndex].value; 
    350328                 
    351                 var handler_setaclfromuser = function(data) { 
    352                         if (!data) 
    353                                 alert(data);     
    354                         return true; 
    355                 } 
    356                  
    357                 cExecute ("$this.imap_functions.setaclfromuser&user="+user+"&acl="+acl, handler_setaclfromuser); 
    358            
    359          
    360                 for( var i = 0 ; i < select_users.options.length; i++ ) 
    361                 { 
    362                         if( select_users.options[i].selected ) 
    363                         { 
    364                                 select_users.options[i--] = null; 
    365                         } 
    366                 } 
    367                  
     329                delete this.users[user]; 
     330 
     331                select.options[select.selectedIndex] = null; 
     332 
    368333                Element('em_input_readAcl').checked = false; 
    369334                Element('em_input_deleteAcl').checked = false; 
    370335                Element('em_input_writeAcl').checked = false; 
    371336                Element('em_input_sendAcl').checked = false; 
     337 
    372338         
    373339        } 
Note: See TracChangeset for help on using the changeset viewer.