Ticket #566: blockeditpersonaldata_expresso20_backport.patch

File blockeditpersonaldata_expresso20_backport.patch, 17.9 KB (added by niltonneto, 14 years ago)

Backporting da implementação para versão 2.0

  • expressoAdmin1_2/inc/class.db_functions.inc.php

     
    420420                } 
    421421                else 
    422422                        $return['members'] = array(); 
    423  
     423                //  ACL Block Personal Data 
     424                $query = "SELECT acl_rights FROM phpgw_acl WHERE acl_location = 'blockpersonaldata' AND acl_account = '" . $gidnumber . "'"; 
     425                $this->db->query($query); 
     426                if($this->db->next_record()) { 
     427                        $block_personal_data = $this->db->row(); 
     428                        $return['acl_block_personal_data'] = $block_personal_data['acl_rights']; 
     429                } 
    424430                return $return; 
    425431        } 
    426432         
     
    725731                         
    726732                return; 
    727733        } 
    728          
     734        function save_acl_personal_data($gidnumber, $new_acl_personal_data, $op = '') { 
     735                if($op == 'add') 
     736                        $sql = "INSERT INTO phpgw_acl (acl_appname, acl_location, acl_account, acl_rights) " 
     737                                . "VALUES('preferences','blockpersonaldata','$gidnumber',$new_acl_personal_data)";               
     738                elseif($op == 'remove') 
     739                        $sql = "DELETE FROM phpgw_acl WHERE acl_account = '$gidnumber' and acl_location = 'blockpersonaldata'"; 
     740                else 
     741                        $sql = "UPDATE phpgw_acl SET acl_rights = $new_acl_personal_data WHERE acl_account = '$gidnumber' " 
     742                                . "and acl_location = 'blockpersonaldata'"; 
     743                                 
     744                //error_log($sql); 
     745                $this->db->query($sql); 
     746                 
     747                return; 
     748        }        
    729749} 
    730750?> 
  • expressoAdmin1_2/inc/class.functions.inc.php

     
    822822                        return true; 
    823823                } 
    824824                 
     825                function make_list_personal_data_fields($account_lid, $acl = '') 
     826                { 
     827                        // Sem restricao nenhuma na edicao dos campos pessoais  => $acl=0; 
     828                        // Com restricao apenas na edicao do Tel. Comercial     => $acl=1; 
     829                        // Com restricao apenas na edicao do Tel. Celular               => $acl=2; 
     830                        // Com restricao na edicao do Tel. Comercial e Celular  => $acl=3; 
     831                        // Com restricao apenas na edicao do Tel. Residencial   => $acl=4; 
     832                        // .... 
     833                        // Com restricao de ediᅵᅵo em todos os campos pessoais      => $acl=7; 
     834                         
     835                        $personal_data_fields = array(   
     836                                        array("text" => lang("%1 telephone number", lang("Commercial")) , "acl" => 1), 
     837                                        array("text" => lang("%1 telephone number", lang("Mobile"))             , "acl" => 2), 
     838                                        array("text" => lang("%1 telephone number", lang("Home"))               , "acl" => 4)); 
     839                        $list_personal_data = "<tr>"; 
     840                                                 
     841                        foreach($personal_data_fields as $i => $data_field)     { 
     842                                $checked = ($data_field['acl'] & $acl) ? "CHECKED" : ""; 
     843                                $list_personal_data .= "<td align=right bgcolor='#DDDDDD'>{$data_field['text']}</td>". 
     844                                "<td bgcolor='#DDDDDD' width='10'><input type='checkbox' name='acl_block_personal_data[]'". 
     845                                " value='{$data_field['acl']}' $checked></td>"; 
     846                        } 
     847                        $list_personal_data .= "</tr>"; 
     848                        return $list_personal_data; 
     849                } 
    825850                function make_lang($ram_lang) 
    826851                { 
    827852                        $a_lang = split("_", $ram_lang); 
  • expressoAdmin1_2/inc/class.group.inc.php

     
    111111                        { 
    112112                                $group_info['phpgwaccountvisible'] = '-1'; 
    113113                        } 
    114                          
     114                        //      PERSONAL DATA FIELDS TO BLOCK. 
     115                        if(is_array($params['acl_block_personal_data'])){ 
     116                                $acl_personal_data = 0; 
     117                                foreach($params['acl_block_personal_data'] as $i => $data_field){ 
     118                                        $acl_personal_data |= intval($data_field); 
     119                                } 
     120                                $this->db_functions->save_acl_personal_data($id, $acl_personal_data, 'add'); 
     121                        }                        
    115122                        $result = $this->ldap_functions->ldap_add_entry($dn, $group_info); 
    116123                        if (!$result['status']) 
    117124                        { 
     
    420427                        } 
    421428                        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////                       
    422429                         
     430                        // PERSONAL DATA FIELDS TO BLOCK. 
     431                        $old_acl_personal_data = intval($old_values['acl_block_personal_data']); 
     432                        $new_acl_personal_data = 0; 
     433                        if(is_array($new_values['acl_block_personal_data'])){                            
     434                                foreach($new_values['acl_block_personal_data'] as $i => $data_field){ 
     435                                        $new_acl_personal_data |= intval($data_field); 
     436                                } 
     437                        } 
     438                        if($new_acl_personal_data != $old_acl_personal_data){ 
     439                                if($new_acl_personal_data > 0 && $old_acl_personal_data == 0) { 
     440                                        $this->db_functions->save_acl_personal_data($new_values['gidnumber'], $new_acl_personal_data, 'add'); 
     441                                        $this->db_functions->write_log("added ACL block personal data to group","dn:$dn -> acl: $new_acl_personal_data"); 
     442                                } 
     443                                elseif($new_acl_personal_data == 0 && $old_acl_personal_data > 0){ 
     444                                        $this->db_functions->save_acl_personal_data($new_values['gidnumber'], $new_acl_personal_data, 'remove'); 
     445                                        $this->db_functions->write_log("removed ACL block personal data to group","dn:$dn"); 
     446                                } 
     447                                else{ 
     448                                        $this->db_functions->save_acl_personal_data($new_values['gidnumber'], $new_acl_personal_data); 
     449                                        $this->db_functions->write_log("changed ACL block personal data to group","dn:$dn ->  acl: $old_acl_personal_data => $new_acl_personal_data"); 
     450                                } 
     451                        } 
    423452                        return $return; 
    424453                }                
    425454                 
  • expressoAdmin1_2/inc/class.uigroups.inc.php

     
    195195                                $combo_manager_org .= $this->functions->get_organizations($context, trim(strtolower($group_info['context']))); 
    196196                        $combo_all_orgs = $this->functions->get_organizations($GLOBALS['phpgw_info']['server']['ldap_context'], trim(strtolower($group_info['context']))); 
    197197                         
     198                        // Chama funcao para criar lista de campos disponiveis na edicao de dados pessoais. 
     199                        $personal_data_fields = $this->functions->make_list_personal_data_fields($manager_lid);                  
    198200                        // Chama funcao para criar lista de aplicativos disponiveis. 
    199201                        $apps = $this->functions->make_list_app($manager_lid); 
    200202                         
     
    227229                                'concatenateDomain'                     => $this->current_config['expressoAdmin_concatenateDomain'], 
    228230                                'defaultDomain'                         => $this->current_config['expressoAdmin_defaultDomain'], 
    229231                                'apps'                                          => $apps, 
     232                                'personal_data_fields'          => $personal_data_fields,                        
    230233                                'use_attrs_samba_checked'       => '', 
    231234                                'disabled_samba'                        => 'disabled', 
    232235                                'display_samba_options'         => $this->current_config['expressoAdmin_samba_support'] == 'true' ? '' : '"display:none"', 
     
    313316                         
    314317                        // Chama funcao para criar lista de aplicativos disponiveis. 
    315318                        $apps = $this->functions->make_list_app($manager_lid, $group_info['apps']); 
    316                          
     319                        // Chama funcao para criar lista de campos disponiveis na edicao de dados pessoais. 
     320                        $personal_data_fields = $this->functions->make_list_personal_data_fields($manager_lid, $group_info['acl_block_personal_data']);                  
    317321                        // Cria combo de dominios do samba 
    318322                        if ($this->current_config['expressoAdmin_samba_support'] == 'true') 
    319323                        { 
     
    343347                                'email'                                         => $group_info['email'], 
    344348                                'description'                           => $group_info['description'], 
    345349                                'apps'                                          => $apps, 
     350                                'personal_data_fields'          => $personal_data_fields,                        
    346351                                'use_attrs_samba_checked'       => $group_info['sambaGroup'] ? 'CHECKED' : '', 
    347352                                'disabled_samba'                        => $group_info['sambaGroup'] ? '' : 'disabled', 
    348353                                'disable_email_groups'          => $this->functions->check_acl($manager_lid,'edit_email_groups') ? '' : 'disabled', 
  • expressoAdmin1_2/templates/default/groups_form.tpl

    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
     
    100100                                        </tr> 
    101101 
    102102                                        <tr> 
     103                                        <td colspan="3"> 
     104                                                {lang_block_personal_data_edit}: 
     105                                                <br> 
     106                                                <table width="50%" border="0"> 
     107                                                                {personal_data_fields} 
     108                                                        </table> 
     109                                                </td> 
     110                                        </tr>                                    
     111                                        <tr> 
    103112                                                <td colspan="3" align="left" bgcolor="{color_bg1}"> 
    104113                                                        <input type="button" value="{lang_save}" onClick="javascript:validate_fields('{type}','{restrictionsOnGroup}');"> 
    105114                                                        <input type="button" value="{lang_back}" onClick="document.location.href='{back_url}'"> 
  • phpgwapi/inc/class.accounts_ldap.inc.php

     
    6262                        else 
    6363                        { 
    6464                                /* jakjr: using justthese with ldap_search */ 
    65                                 $justthese = array("uidnumber", "gidnumber", "uid", "cn", "givenname", "sn", "mail", "phpgwaccountstatus", "phpgwaccountexpires", "phpgwaccounttype", "phpgwlastpasswdchange","phpgwagreeterm","telephonenumber"); 
     65                                $justthese = array("uidnumber", "gidnumber", "uid", "cn", "givenname", "sn", "mail", "phpgwaccountstatus", "phpgwaccountexpires", "phpgwaccounttype", "phpgwlastpasswdchange","phpgwagreeterm","telephonenumber","mobile","homephone"); 
    6666                                $sri = @ldap_search($this->ds, $this->user_context, ("(&(uidnumber=" . (int)$this->account_id.")(phpgwaccounttype=u))"), $justthese); 
    6767                        } 
    6868                        if(!$sri) 
     
    8989                                        $this->data['email'] = $allValues[0]['mail'][0]; 
    9090                                } 
    9191                                $this->data['telephonenumber']   = $allValues[0]['telephonenumber'][0]; 
     92                                $this->data['mobile']   = $allValues[0]['mobile'][0]; 
     93                                $this->data['homephone']   = $allValues[0]['homephone'][0]; 
    9294                                /* jakjr: this is not used for expressoLivre */ 
    9395                                /* 
    9496                                $this->data['lastlogin']         = $allValues[0]['phpgwaccountlastlogin'][0]; 
  • preferences/changepersonaldata.php

     
    3737                'form' => 'changepersonaldata.tpl' 
    3838        )); 
    3939 
    40         $GLOBALS['phpgw']->template->set_var('lang_commercial_telephonenumber',lang('Commercial Telephone number')); 
     40        $GLOBALS['phpgw']->template->set_var('lang_commercial_telephonenumber',lang('%1 telephone number',lang('Commercial'))); 
    4141        $GLOBALS['phpgw']->template->set_var('lang_ps_commercial_telephonenumber', 
    4242        lang('Observation') . ': ' . lang('This telephone number will apear in searches for your name, and it will be visible for all ExpressoLivre Users') . '.'); 
     43        $GLOBALS['phpgw']->template->set_var('lang_mobile_telephonenumber',lang('%1 telephone number',lang('Mobile'))); 
     44        $GLOBALS['phpgw']->template->set_var('lang_homephone_telephonenumber',lang('%1 telephone number',lang('Home'))); 
    4345        $GLOBALS['phpgw']->template->set_var('lang_change',lang('Change')); 
    4446        $GLOBALS['phpgw']->template->set_var('lang_cancel',lang('Cancel')); 
    4547        $GLOBALS['phpgw']->template->set_var('form_action',$GLOBALS['phpgw']->link('/preferences/changepersonaldata.php')); 
    4648 
    4749        /* Get telephone number from ldap or from post */ 
    4850        $ldap_conn = $GLOBALS['phpgw']->common->ldapConnect(); 
    49         $result = ldap_search($ldap_conn, $GLOBALS['phpgw_info']['server']['ldap_context'], 'uid='.$GLOBALS['phpgw_info']['user']['account_lid'], array('telephonenumber')); 
     51        $result = ldap_search($ldap_conn, $GLOBALS['phpgw_info']['server']['ldap_context'], 'uid='.$GLOBALS['phpgw_info']['user']['account_lid'], array('telephonenumber','mobile','homephone')); 
    5052        $entrie = ldap_get_entries($ldap_conn, $result); 
    51         $GLOBALS['phpgw']->template->set_var('telephonenumber',$_POST['telephonenumber'] ? $_POST['telephonenumber'] : $entrie[0]['telephonenumber'][0]); 
     53 
     54        /* BEGIN ACL Check for Personal Data Fields.*/ 
     55        $disabledTelephoneNumber = false; 
     56        $disabledMobile = false; 
     57        $disabledHomePhone = false; 
     58        if ($GLOBALS['phpgw']->acl->check('blockpersonaldata',1)) { 
     59                $disabledTelephoneNumber = '"disabled=true"'; 
     60        } 
     61        if ($GLOBALS['phpgw']->acl->check('blockpersonaldata',2)) { 
     62                $disabledMobile = '"disabled=true"'; 
     63        } 
     64        if ($GLOBALS['phpgw']->acl->check('blockpersonaldata',4)) { 
     65                $disabledHomePhone = '"disabled=true"'; 
     66        } 
     67        /* END ACL Check for Personal Data Fields.*/ 
     68         
     69        $GLOBALS['phpgw']->template->set_var('telephonenumber',($_POST['telephonenumber'] ? $_POST['telephonenumber'] : $entrie[0]['telephonenumber'][0]).$disabledTelephoneNumber); 
     70        $GLOBALS['phpgw']->template->set_var('mobile',($_POST['mobile'] ? $_POST['mobile'] : $entrie[0]['mobile'][0]).$disabledMobile); 
     71        $GLOBALS['phpgw']->template->set_var('homephone',($_POST['homephone'] ? $_POST['homephone'] : $entrie[0]['homephone'][0]).$disabledHomePhone); 
     72         
     73 
    5274        ldap_close($ldap_conn); 
    5375 
    5476        if ($GLOBALS['phpgw_info']['server']['auth_type'] != 'ldap') 
     
    5880 
    5981        if ($_POST['change']) 
    6082        { 
    61                 if ($_POST['telephonenumber'] != $GLOBALS['phpgw_info']['user']['telephonenumber']) 
     83                if ($_POST['telephonenumber'] != $GLOBALS['phpgw_info']['user']['telephonenumber'] || $_POST['mobile'] != $GLOBALS['phpgw_info']['user']['mobile'] 
     84                 || $_POST['homephone'] != $GLOBALS['phpgw_info']['user']['homephone']) 
    6285                { 
    6386                        $pattern = '/\([0-9]{2,3}\)[0-9]{4}-[0-9]{4}$/'; 
    6487                        if ((strlen($_POST['telephonenumber']) != 0) && (!preg_match($pattern, $_POST['telephonenumber']))) 
    6588                        { 
    66                                 $errors[] = lang('Format of telephone number is invalid.'); 
     89                                $errors[] = lang('Format of %1 telephone number is invalid.', lang("Commercial")); 
    6790                        } 
    68                         else 
     91                        if ((strlen($_POST['mobile']) != 0) && (!preg_match($pattern, $_POST['mobile']))) 
     92                        { 
     93                                $errors[] = lang('Format of %1 telephone number is invalid.', lang("Mobile")); 
     94                        } 
     95                        if ((strlen($_POST['homephone']) != 0) && (!preg_match($pattern, $_POST['homephone']))) 
     96                        { 
     97                                $errors[] = lang('Format of %1 telephone number is invalid.', lang("Home")); 
     98                        } 
     99                        if(!is_array($errors)) 
    69100                        { 
    70101                                // Use LDAP Replication mode, if available 
    71102                                if ( (!empty($GLOBALS['phpgw_info']['server']['ldap_master_host'])) && 
     
    83114                                        $ldap_conn = $GLOBALS['phpgw']->common->ldapConnect(); 
    84115                                } 
    85116                                 
    86                                 if ($GLOBALS['phpgw_info']['user']['telephonenumber']) 
    87                                 { 
     117                                if(!$disabledTelephoneNumber && ($_POST['telephonenumber'] != $GLOBALS['phpgw_info']['user']['telephonenumber'])) { 
    88118                                        if (strlen($_POST['telephonenumber']) == 0) { 
    89119                                                $info['telephonenumber'] = $GLOBALS['phpgw_info']['user']['telephonenumber']; 
    90120                                                $result = @ldap_mod_del($ldap_conn, $GLOBALS['phpgw_info']['user']['account_dn'], $info); 
    91121                                        } 
     122                                        elseif(strlen($GLOBALS['phpgw_info']['user']['telephonenumber']) == 0) { 
     123                                                $info['telephonenumber'] = $_POST['telephonenumber']; 
     124                                                $result = @ldap_mod_add($ldap_conn, $GLOBALS['phpgw_info']['user']['account_dn'], $info); 
     125                                        }                                        
    92126                                        else { 
    93127                                                $info['telephonenumber'] = $_POST['telephonenumber']; 
    94128                                                $result = @ldap_mod_replace($ldap_conn, $GLOBALS['phpgw_info']['user']['account_dn'], $info); 
    95129                                        } 
     130                                        unset($info['telephonenumber']); 
    96131                                } 
    97                                 else 
    98                                 { 
    99                                         $info['telephonenumber'] = $_POST['telephonenumber']; 
    100                                         $result = @ldap_mod_add($ldap_conn, $GLOBALS['phpgw_info']['user']['account_dn'], $info); 
     132                                if (!$disabledMobile && ($_POST['mobile'] != $GLOBALS['phpgw_info']['user']['mobile'])) { 
     133                                        if (strlen($_POST['mobile']) == 0) { 
     134                                                $info['mobile'] = $GLOBALS['phpgw_info']['user']['mobile']; 
     135                                                $result = @ldap_mod_del($ldap_conn, $GLOBALS['phpgw_info']['user']['account_dn'], $info); 
     136                                        } 
     137                                        elseif(strlen($GLOBALS['phpgw_info']['user']['mobile']) == 0) { 
     138                                                $info['mobile'] = $_POST['mobile']; 
     139                                                $result = @ldap_mod_add($ldap_conn, $GLOBALS['phpgw_info']['user']['account_dn'], $info); 
     140                                        } 
     141                                        else { 
     142                                                $info['mobile'] = $_POST['mobile']; 
     143                                                $result = @ldap_mod_replace($ldap_conn, $GLOBALS['phpgw_info']['user']['account_dn'], $info); 
     144                                        } 
     145                                        unset($info['mobile']); 
    101146                                } 
     147                                if (!$disabledHomePhone && ($_POST['homephone'] != $GLOBALS['phpgw_info']['user']['homephone'])) { 
     148                                        if (strlen($_POST['homephone']) == 0) { 
     149                                                $info['homephone'] = $GLOBALS['phpgw_info']['user']['homephone']; 
     150                                                $result = @ldap_mod_del($ldap_conn, $GLOBALS['phpgw_info']['user']['account_dn'], $info); 
     151                                        } 
     152                                        elseif(strlen($GLOBALS['phpgw_info']['user']['homephone']) == 0) { 
     153                                                $info['homephone'] = $_POST['homephone']; 
     154                                                $result = @ldap_mod_add($ldap_conn, $GLOBALS['phpgw_info']['user']['account_dn'], $info); 
     155                                        } 
     156                                        else { 
     157                                                $info['homephone'] = $_POST['homephone']; 
     158                                                $result = @ldap_mod_replace($ldap_conn, $GLOBALS['phpgw_info']['user']['account_dn'], $info); 
     159                                        } 
     160                                        unset($info['homephone']); 
     161                                } 
     162                                ldap_close($ldap_conn);  
    102163                        } 
    103164                         
    104165                        if(is_array($errors)) 
  • preferences/templates/default/changepersonaldata.tpl

    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
     
    1717                <p style="text-align:justify; width:350px;"><b><font color='red'>{lang_ps_commercial_telephonenumber}</font></b></p> 
    1818        </td> 
    1919     </tr> 
     20     <tr><td colspan=2 height="20px"></td></tr> 
     21     <tr> 
     22       <td> 
     23        {lang_mobile_telephonenumber}: 
     24       </td> 
     25       <td> 
     26        <input type="input" autocomplete="off" name="mobile" size=12 value="{mobile}" maxlength="13" onkeyUp="FormatTelephoneNumber(event, this);">&nbsp;(xx)xxxx-xxxx 
     27       </td> 
     28     </tr> 
     29     <tr> 
     30       <td> 
     31        {lang_homephone_telephonenumber}: 
     32       </td> 
     33       <td> 
     34        <input type="input" autocomplete="off" name="homephone" size=12 value="{homephone}" maxlength="13" onkeyUp="FormatTelephoneNumber(event, this);">&nbsp;(xx)xxxx-xxxx 
     35       </td> 
     36     </tr> 
     37        <tr><td colspan=2 height="20px"></td></tr> 
     38      
    2039     <tr> 
    2140       <td colspan="3"> 
    2241        <table cellspacing="0"><tr><br>