Changeset 6047 in subversion


Ignore:
Timestamp:
Apr 7, 2012 3:47:38 AM (14 months ago)
Author:
alec
Message:
  • Improved validation and forced RDN in required_fields (#1488254)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/roundcubemail/program/include/rcube_ldap.php

    r6033 r6047  
    128128            } 
    129129        } 
    130         else if ($this->coltypes['address']) 
     130        else if ($this->coltypes['address']) { 
    131131            $this->coltypes['address'] = array('type' => 'textarea', 'childs' => null, 'limit' => 1, 'size' => 40); 
     132        } 
    132133 
    133134        // make sure 'required_fields' is an array 
    134         if (!is_array($this->prop['required_fields'])) 
     135        if (!is_array($this->prop['required_fields'])) { 
    135136            $this->prop['required_fields'] = (array) $this->prop['required_fields']; 
    136  
    137         foreach ($this->prop['required_fields'] as $key => $val) 
     137        } 
     138 
     139        // make sure LDAP_rdn field is required 
     140        if (!empty($this->prop['LDAP_rdn']) && !in_array($this->prop['LDAP_rdn'], $this->prop['required_fields'])) { 
     141            $this->prop['required_fields'][] = $this->prop['LDAP_rdn']; 
     142        } 
     143 
     144        foreach ($this->prop['required_fields'] as $key => $val) { 
    138145            $this->prop['required_fields'][$key] = $this->_attr_name(strtolower($val)); 
     146        } 
    139147 
    140148        // Build sub_fields filter 
     
    963971    public function validate(&$save_data, $autofix = false) 
    964972    { 
     973        // validate e-mail addresses 
     974        if (!parent::validate($save_data, $autofix)) { 
     975            return false; 
     976        } 
     977 
    965978        // check for name input 
    966979        if (empty($save_data['name'])) { 
     
    973986        $ldap_data = $this->_map_data($save_data); 
    974987        foreach ($this->prop['required_fields'] as $fld) { 
    975             if (!isset($ldap_data[$fld])) { 
     988            if (!isset($ldap_data[$fld]) || $ldap_data[$fld] === '') { 
    976989                $missing[$fld] = 1; 
    977990            } 
     
    982995            if ($autofix) { 
    983996                $reverse_map = array_flip($this->fieldmap); 
    984                 $name_parts = preg_split('/[\s,.]+/', $save_data['name']); 
    985                 if ($missing['sn']) { 
    986                     $sn_field = $reverse_map['sn']; 
    987                     $save_data[$sn_field] = array_pop ($name_parts); 
    988                 } 
    989                 if ($missing[($fn_field = $this->fieldmap['firstname'])]) { 
     997                $name_parts  = preg_split('/[\s,.]+/', $save_data['name']); 
     998                $sn_field    = $this->fieldmap['surname']; 
     999                $fn_field    = $this->fieldmap['firstname']; 
     1000 
     1001                if ($sn_field && $missing[$sn_field]) { 
     1002                    $save_data['surname'] = array_pop($name_parts); 
     1003                    unset($missing[$sn_field]); 
     1004                } 
     1005 
     1006                if ($fn_field && $missing[$fn_field]) { 
    9901007                    $save_data['firstname'] = array_shift($name_parts); 
    991                 } 
    992  
    993                 return $this->validate($save_data, false); 
     1008                    unset($missing[$fn_field]); 
     1009                } 
    9941010            } 
    9951011 
    9961012            // TODO: generate message saying which fields are missing 
    997             $this->set_error(self::ERROR_VALIDATE, 'formincomplete'); 
    998             return false; 
    999         } 
    1000  
    1001         // validate e-mail addresses 
    1002         return parent::validate($save_data, $autofix); 
     1013            if (!empty($missing)) { 
     1014                $this->set_error(self::ERROR_VALIDATE, 'formincomplete'); 
     1015                return false; 
     1016            } 
     1017        } 
     1018 
     1019        return true; 
    10031020    } 
    10041021 
Note: See TracChangeset for help on using the changeset viewer.