Ignore:
Timestamp:
09/23/09 17:26:50 (15 years ago)
Author:
viani
Message:

Ticket #637 - Incluido click-to-call no organograma do workflow e melhorias na interface.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/workflow/inc/class.so_userinterface.inc.php

    r1310 r1446  
    352352        { 
    353353                /* initialize some variables */ 
    354                 $output = array('employees' => array()); 
     354                $output = array('employees' => array(), 'bygroup' => array( ) ); 
    355355                $ldapResult = array(); 
    356356 
    357357                /* search for the $searchTerm in the LDAP */ 
    358358                $ldap = &$GLOBALS['workflow']['workflowObjects']->getLDAP(); 
     359 
    359360                $list = @ldap_search($ldap, $GLOBALS['workflow']['factory']->getInstance('WorkflowLDAP')->getLDAPContext(), ('(&(cn=*' . $searchTerm . '*)(phpgwaccounttype=u))'), array('uidNumber', 'cn', 'telephoneNumber')); 
    360361                if ($list === false) 
     
    367368 
    368369                /* check if any result was found */ 
    369                 if (count($ldapResult) < 1) 
    370                         return $output; 
     370                //if (count($ldapResult) < 1) 
     371                //      return $output; 
     372 
     373                $uids = implode( ',', array_keys( $ldapResult ) ); 
    371374 
    372375                /* load employee information */ 
    373                 $query = "SELECT f.funcionario_id AS funcionario_id, f.area_id AS area_id, a.sigla AS area FROM funcionario f, area a, funcionario_status s WHERE (f.area_id = a.area_id) AND (f.organizacao_id = $organizationID) AND (f.funcionario_id IN (" . implode(',', array_keys($ldapResult))  .")) AND (f.funcionario_status_id = s.funcionario_status_id) AND (s.exibir = 'S')"; 
    374                 $result = $this->db->query($query); 
     376                $query = 'SELECT f.funcionario_id AS funcionario_id, f.area_id AS area_id, a.sigla AS area'; 
     377                $query .= ' FROM funcionario f, area a, funcionario_status s'; 
     378                $query .= " WHERE (f.area_id = a.area_id) AND (f.organizacao_id = {$organizationID})"; 
     379                $query .= " AND (" . ( ( ! empty( $uids ) ) ? "f.funcionario_id IN ({$uids}) OR " : '' ); 
     380                $query .= " a.sigla LIKE UPPER(?))"; 
     381                $query .= " AND (f.funcionario_status_id = s.funcionario_status_id) AND (s.exibir = 'S')"; 
     382                $query .= " ORDER BY a.sigla asc"; 
     383 
     384                $result = $this->db->query($query, array( "%{$searchTerm}%" ) ); 
     385 
     386                if ( ! $result ) 
     387                        return array( ); 
     388 
     389                $uids = array( ); 
    375390 
    376391                $employees = $result->GetArray(-1); 
     
    379394                        for ($j = 0; $j < $result->_numOfFields; $j++) 
    380395                                unset($employees[$i][$j]); 
    381                         $employees[$i]['cn'] = is_null($ldapResult[$employees[$i]['funcionario_id']]['cn']) ? '' : $ldapResult[$employees[$i]['funcionario_id']]['cn']; 
    382                         $employees[$i]['telephoneNumber'] = is_null($ldapResult[$employees[$i]['funcionario_id']]['telephoneNumber']) ? '' : $ldapResult[$employees[$i]['funcionario_id']]['telephoneNumber']; 
    383                 } 
    384  
    385                 $output['employees'] = $employees; 
     396 
     397                        if ( array_key_exists( $employees[$i]['funcionario_id'], $ldapResult ) ) 
     398                        { 
     399                                $employees[$i]['cn'] = is_null($ldapResult[$employees[$i]['funcionario_id']]['cn']) ? '' : $ldapResult[$employees[$i]['funcionario_id']]['cn']; 
     400                                $employees[$i]['telephoneNumber'] = is_null($ldapResult[$employees[$i]['funcionario_id']]['telephoneNumber']) ? '' : $ldapResult[$employees[$i]['funcionario_id']]['telephoneNumber']; 
     401                        } 
     402                        else 
     403                        { 
     404                                $employees[$i]['cn'] = $employees[$i]['funcionario_id']; 
     405                                $employees[$i]['telephoneNumber'] = ''; 
     406 
     407                                $output['bygroup'][ $employees[$i]['funcionario_id'] ] = $employees[ $i ]; 
     408                                array_splice( $employees, $i--, 1 ); 
     409                        } 
     410                } 
     411 
     412                if ( count( $output['bygroup'] ) ) 
     413                { 
     414                        $list = ldap_search($ldap, $GLOBALS['workflow']['factory']->getInstance('WorkflowLDAP')->getLDAPContext(), ('(&(|(uidNumber=' . implode( ')(uidNumber=', array_keys( $output['bygroup'] ) ) . '))(phpgwaccounttype=u))'), array('uidNumber', 'cn', 'telephoneNumber')); 
     415 
     416                        if ( $list !== false ) 
     417                        { 
     418                                $entries = ldap_get_entries($ldap, $list); 
     419 
     420                                for ( $i = 0; $i < $entries[ 'count' ]; $i++ ) 
     421                                { 
     422                                        $output[ 'bygroup' ][ $entries[$i]['uidnumber'][0] ][ 'cn' ] = $entries[$i]['cn'][0]; 
     423                                        $output[ 'bygroup' ][ $entries[$i]['uidnumber'][0] ][ 'telephoneNumber' ] = $entries[$i]['telephonenumber'][0]; 
     424                                } 
     425                        } 
     426                } 
     427 
     428                $output[ 'bygroup' ] = array_values( $output[ 'bygroup' ] ); 
     429                $output[ 'employees' ] = $employees; 
     430 
    386431                return $output; 
    387432        } 
Note: See TracChangeset for help on using the changeset viewer.