Changeset 6859 for branches/2.4


Ignore:
Timestamp:
07/24/12 10:24:52 (12 years ago)
Author:
eduardow
Message:

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

Location:
branches/2.4/expressoMail1_2
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/2.4/expressoMail1_2/inc/class.functions.inc.php

    r6754 r6859  
    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']; 
  • branches/2.4/expressoMail1_2/inc/class.imap_functions.inc.php

    r6840 r6859  
    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                         { 
    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) 
     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']) 
     4317                                        { 
     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 
  • branches/2.4/expressoMail1_2/inc/class.ldap_functions.inc.php

    r6754 r6859  
    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']) { 
  • branches/2.4/expressoMail1_2/js/sharemailbox.js

    r6754 r6859  
    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        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      
     42Element('em_input_deleteAcl').disabled      = true;  
     43Element('em_input_writeAcl').disabled       = true;  
     44      
     45    if ((this.users[user].acls.indexOf('l',0) >= 0) &&  
     46            (this.users[user].acls.indexOf('r',0) >= 0) &&  
     47            (this.users[user].acls.indexOf('s',0) >= 0) )  
     48    {  
     49            Element('em_input_sendAcl').disabled = false;  
     50            Element('em_input_deleteAcl').disabled = false;  
     51    Element('em_input_writeAcl').disabled = false ;  
     52            Element('em_input_readAcl').checked = true;  
     53    }  
     54    else  
     55            Element('em_input_sendAcl').disabled = true;  
     56      
     57      
     58    if ((this.users[user].acls.indexOf('x',0) >= 0) &&  
     59            (this.users[user].acls.indexOf('t',0) >= 0) &&  
     60            (this.users[user].acls.indexOf('e',0) >= 0) )  
     61    {  
     62            Element('em_input_deleteAcl').checked = true;  
     63            Element('em_input_deleteAcl').disabled = false;  
     64    }  
     65      
     66    if ((this.users[user].acls.indexOf('w',0) >= 0) &&  
     67            (this.users[user].acls.indexOf('i',0) >= 0) &&  
     68            (this.users[user].acls.indexOf('k',0) >= 0) )  
     69    {  
     70            Element('em_input_writeAcl').checked = true;  
     71    Element('em_input_writeAcl').disabled = false  
     72    }  
     73      
     74    if (this.users[user].acls != "false" && this.users[user].acls.indexOf('p',0) >= 0)  
     75    {  
     76            Element('em_input_sendAcl').disabled = false;  
     77            Element('em_input_sendAcl').checked = true;  
     78    }                         
    7879        } 
    7980         
     
    105106            Element('em_input_deleteAcl').checked       = false; 
    106107            Element('em_input_writeAcl').disabled       = true; 
    107             Element('em_input_writeAcl').checked        = false; 
    108                          
     108            Element('em_input_writeAcl').checked        = false;              
    109109                } 
    110110                                 
    111111                if (Element('em_input_deleteAcl').checked) 
    112                         acl += 'ida'; 
     112                        acl += 'xte'; 
    113113 
    114114                if (Element('em_input_writeAcl').checked) { 
    115                         acl += 'wc';                     
     115                        acl += 'wik';                    
    116116                }                
    117117                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); 
     118                        acl += 'p';                       
     119        }  
     120 
     121        this.users[user].acls = acl; 
    127122        } 
    128123         
     
    172167                                                                        click: function() 
    173168                                                                        { 
    174                                                                                 $(this).dialog("destroy"); 
    175                                                                                 div.removeChild(div.firstChild);         
     169                                                                                $(div).dialog("close");  
    176170                                                                        }, 
    177171                                                                        style: "margin-top: -2.1em"  
     
    180174                                                                        text: get_lang("Save"), 
    181175                                                                        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); 
     176                                                                        {                                                                         
     177                                                $.ajax({  
     178                                                               url: 'controller.php?' + $.param( {  
     179                                                                                                          action: '$this.imap_functions.setacl',  
     180                                                                                                      acls: connector.serialize(sharemailbox.users)}   
     181                                                                                                      ),  
     182                                                                  success: function( data ){  
     183                                                                      data = connector.unserialize( data );  
     184                                                                        
     185                                                                      if( data )  
     186                                                                          {  
     187                                                                                write_msg(get_lang('Shared options saved with success'));  
     188                                                                                $(div).dialog("close");  
     189 
     190                                                                          }  
     191                                                                  },  
     192                                                                  beforeSend: function( jqXHR, settings ){  
     193                                                                        connector.showProgressBar();  
     194                                                                  },  
     195                                                                  complete: function( jqXHR, settings ){  
     196                                                                        connector.hideProgressBar();  
     197                                                                  }  
     198 
     199                                                           });  
    229200                                                                                 
    230201                                                                        }, 
     
    267238 
    268239                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                 } 
     240                this.users = optionsData;  
     241            for( var i in optionsData )       
     242                    selectSharedFolders.options[selectSharedFolders.options.length] = new Option(optionsData[i].cn, i, false, false); 
    274243        } 
    275244         
     
    331300                                        } 
    332301                                } 
     302                                var newobject = new Object;  
     303                newobject.cn = select_available_users.options[i].text;  
     304                newobject.acls = "";  
     305                this.users[select_available_users.options[i].value] = newobject; 
     306 
    333307                        } 
    334308                } 
     
    339313                        select_users.outerHTML = select_users.outerHTML; 
    340314                } 
     315 
     316 
     317 
    341318        } 
    342319 
     
    349326                var user = select.options[select.selectedIndex].value; 
    350327                 
    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                 } 
     328                delete this.users[user];  
     329                  
     330            select.options[select.selectedIndex] = null; 
    367331                 
    368332                Element('em_input_readAcl').checked = false; 
     
    371335                Element('em_input_sendAcl').checked = false; 
    372336         
     337 
    373338        } 
    374339                 
Note: See TracChangeset for help on using the changeset viewer.