Changeset 8059 for branches/2.5


Ignore:
Timestamp:
03/27/13 14:41:51 (11 years ago)
Author:
douglas
Message:

Ticket #3403 - Incluir pesquisa por participantes em Catálogos Externos e Catálogo Pessoal

Location:
branches/2.5/prototype/modules/calendar
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/2.5/prototype/modules/calendar/interceptors/DBMapping.php

    r8051 r8059  
    16341634    //TODO - Criar conceito separado para participantes externos e remover o criterio notExternal 
    16351635    public function findExternalPaticipants(&$uri, &$result, &$criteria, $original) { 
    1636         if (Config::me('uidNumber') && !isset($criteria['notExternal'])) { 
    1637             $newuri['concept'] = 'user'; 
    1638             $newuri['service'] = 'PostgreSQL'; 
    1639  
    1640             $newCriteria = $original['criteria']; 
    1641             $valid = true; 
    1642  
    1643             $newCriteria['filter'] = array('AND', $newCriteria['filter'], array('=', 'owner', Config::me('uidNumber'))); 
    1644             $externalUsers = Controller::find($newuri, $original['properties'] ? $original['properties'] : null, $newCriteria); 
    1645  
    1646             if (is_array($externalUsers)) { 
    1647                 foreach ($externalUsers as $i => $v) 
    1648                     $externalUsers[$i]['isExternal'] = '1'; 
    1649             } 
    1650             else 
    1651                 $externalUsers = array(); 
    1652  
    1653             if (!is_array($result)) 
    1654                 $result = array(); 
    1655  
    1656             return array_merge($result, $externalUsers); 
    1657         } 
     1636        if (Config::me('uidNumber') && !isset($criteria['notExternal'])) {  
     1637            $newuri['concept'] = 'user';  
     1638            $newuri['service'] = 'PostgreSQL';  
     1639  
     1640            $newCriteria = $original['criteria'];  
     1641            $valid = true;  
     1642  
     1643            $newCriteria['filter'] = array('AND', $newCriteria['filter'], array('=', 'owner', Config::me('uidNumber')));  
     1644            $externalUsers = Controller::find($newuri, $original['properties'] ? $original['properties'] : null, $newCriteria );  
     1645  
     1646            if (!is_array($result))  
     1647                $result = array();  
     1648  
     1649            if (is_array($externalUsers)) {  
     1650                foreach ($externalUsers as $i => $v)  
     1651                    $externalUsers[$i]['isExternal'] = '1';  
     1652            }  
     1653            else  
     1654                $externalUsers = array();  
     1655  
     1656            $result = array_merge($result, $externalUsers);  
     1657  
     1658  
     1659            if(isset($original['criteria']['externalCatalogs']) &&  $original['criteria']['externalCatalogs'] == true)  
     1660            {  
     1661                $externalCatalogs = self::findExternalCatalogContacts($original['criteria']['filter'][2]);  
     1662  
     1663                foreach($externalCatalogs as $i => $v)  
     1664                {  
     1665                    $exist = false;  
     1666                    foreach($result as $vv)  
     1667                    {  
     1668                        if($v['mail'] == $vv['mail'] )  
     1669                            $exist = true;  
     1670                    }  
     1671                    if(!$exist)  
     1672                        $result[] = $v;  
     1673                }  
     1674            }  
     1675  
     1676  
     1677            if(isset($original['criteria']['personalContacts']) &&  $original['criteria']['personalContacts'] == true)  
     1678            {  
     1679                $personalContacts = self::findPersonalContacts($original['criteria']['filter'][2]);  
     1680  
     1681                foreach($personalContacts as $i => $v)  
     1682                {  
     1683                    $exist = false;  
     1684                    foreach($result as $vv)  
     1685                    {  
     1686                        if($v['mail'] == $vv['mail'] )  
     1687                            $exist = true;  
     1688                    }  
     1689                    if(!$exist)  
     1690                        $result[] = $v;  
     1691                }  
     1692            }  
     1693  
     1694            return $result ;  
     1695        }  
    16581696    } 
    16591697 
     
    17741812            && ($timestamp >= ~PHP_INT_MAX); 
    17751813    } 
     1814  
     1815    static function findExternalCatalogContacts( $search )  
     1816    {  
     1817            $result = array();  
     1818            $external_srcs = array();  
     1819            $external_mappings = array();  
     1820  
     1821            include_once dirname(__DIR__) .'/../../../contactcenter/setup/external_catalogs.inc.php';  
     1822  
     1823            $search = str_replace(' ', '*', $search) ;  
     1824            $search = '*' . $search . '*';  
     1825  
     1826            foreach($external_srcs as $i => $v)  
     1827            {  
     1828                $con = ldap_connect($v['host']);  
     1829  
     1830                ldap_set_option( $con , LDAP_OPT_PROTOCOL_VERSION , 3 );  
     1831  
     1832                if( isset( $v['acc'] ) && isset( $v['pw'] ) )  
     1833                    ldap_bind( $con, $v['acc'], $v['pw'] );  
     1834  
     1835                $fields = array();  
     1836                $fields[] = $external_mappings[$i]['contact.names_ordered'][0];  
     1837                $fields[] = $external_mappings[$i]['contact.connection.typeof_connection.contact_connection_type_name']['email'][0];  
     1838  
     1839                $ldapFilter = '(&(objectClass='.$v['obj'].')(|('.$fields[0].'='.$search.')('.$fields[1].'='.$search.')))';  
     1840                $sr =  ldap_search( $con, utf8_encode($v['dn']) , $ldapFilter , $fields );  
     1841                if($sr)  
     1842                {  
     1843                    $search = ldap_get_entries($con, $sr);  
     1844  
     1845                    for ($j = 0; $j < $search["count"]; ++$j) {  
     1846                        $tmp = array();  
     1847                        $tmp['name'] = $search[$j][$fields[0]][0];  
     1848                        $tmp['mail'] = $search[$j][$fields[1]][0];  
     1849                        $tmp['isExternal'] = '1';  
     1850  
     1851                        $result[] = $tmp;  
     1852                    }  
     1853                }  
     1854            }  
     1855            return $result;  
     1856    }  
     1857  
     1858    static function findPersonalContacts($search_for)  
     1859    {  
     1860  
     1861              $query = 'select'  
     1862  
     1863                . ' C.id_connection,'  
     1864                . ' A.id_contact,'  
     1865                . ' A.names_ordered,'  
     1866                . ' A.alias,'  
     1867                . ' A.birthdate,'  
     1868                . ' A.sex,'  
     1869                . ' A.pgp_key,'  
     1870                . ' A.notes,'  
     1871                . ' A.web_page,'  
     1872                . ' A.corporate_name,'  
     1873                . ' A.job_title,'  
     1874                . ' A.department,'  
     1875                . ' C.connection_name,'  
     1876                . ' C.connection_value,'  
     1877                . ' B.id_typeof_contact_connection,'  
     1878                . ' phpgw_cc_contact_addrs.id_typeof_contact_address,'  
     1879                . ' phpgw_cc_addresses.address1,'  
     1880                . ' phpgw_cc_addresses.address2,'  
     1881                . ' phpgw_cc_addresses.complement,'  
     1882                . ' phpgw_cc_addresses.postal_code,'  
     1883                . ' phpgw_cc_city.city_name,'  
     1884                . ' phpgw_cc_state.state_name,'  
     1885                . ' phpgw_cc_addresses.id_country'  
     1886            ;  
     1887  
     1888            $query .= ' from'  
     1889                . ' phpgw_cc_contact A'  
     1890                . ' inner join phpgw_cc_contact_conns B on ( A.id_contact = B.id_contact )'  
     1891                . ' inner join phpgw_cc_connections C on ( B.id_connection = C.id_connection )'  
     1892                . ' left join phpgw_cc_contact_addrs on ( A.id_contact = phpgw_cc_contact_addrs.id_contact )'  
     1893                . ' left join phpgw_cc_addresses on ( phpgw_cc_contact_addrs.id_address = phpgw_cc_addresses.id_address )'  
     1894                . ' left join phpgw_cc_city on ( phpgw_cc_addresses.id_city = phpgw_cc_city.id_city )'  
     1895                . ' left join phpgw_cc_state on ( phpgw_cc_addresses.id_state = phpgw_cc_state.id_state)'  
     1896            ;  
     1897  
     1898            $query .= ' where '  
     1899                . 'A.id_owner=' . Config::me('uidNumber')  
     1900                . ' and lower(translate(names_ordered, \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))'  
     1901                . ' LIKE lower(translate(\'%' . $search_for . '%\', \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))';  
     1902  
     1903            //Se não existir parametro na busca, limita os usuarios no resultado da pesquisa.  
     1904            if(!$search_for){  
     1905                $query .= 'LIMIT 11';  
     1906            }  
     1907  
     1908            $r = Controller::service('PostgreSQL')->execResultSql($query);  
     1909  
     1910  
     1911            $all_contacts = array();  
     1912            foreach( $r as $i => $object )  
     1913            {  
     1914                if ( ! array_key_exists( $object[ 'id_contact' ], $all_contacts ) )  
     1915                    $all_contacts[ $object[ 'id_contact' ] ] = array(  
     1916                        'connection_value' => '',  
     1917                        'telephonenumber' => '',  
     1918                        'mobile' => '',  
     1919                        'cn' => '',  
     1920                        'id_contact' => '',  
     1921                        'id_connection' => '',  
     1922                        'alias' => '',  
     1923                        'birthdate' => '',  
     1924                        'sex' => '',  
     1925                        'pgp_key' => '',  
     1926                        'notes' => '',  
     1927                        'web_page' => '',  
     1928                        'corporate_name' => '',  
     1929                        'job_title' => '',  
     1930                        'department' => '',  
     1931                        'mail' => '',  
     1932                        'aternative-mail' => '',  
     1933                        'business-phone' => '',  
     1934                        'business-address' => '',  
     1935                        'business-complement' => '',  
     1936                        'business-postal_code' => '',  
     1937                        'business-city_name' => '',  
     1938                        'business-state_name' => '',  
     1939                        'business-id_country' => '',  
     1940                        'business-fax' => '',  
     1941                        'business-pager' => '',  
     1942                        'business-mobile' => '',  
     1943                        'business-address-2' => '',  
     1944                        'home-phone' => '',  
     1945                        'home-address' => '',  
     1946                        'home-complement' => '',  
     1947                        'home-postal_code' => '',  
     1948                        'home-city_name' => '',  
     1949                        'home-state_name' => '',  
     1950                        'home-fax' => '',  
     1951                        'home-pager' => '',  
     1952                        'home-address-2' => ''  
     1953  
     1954  
     1955                    );  
     1956  
     1957                switch( $object[ 'id_typeof_contact_connection' ] )  
     1958                {  
     1959                    case 1 :  
     1960                        $all_contacts[ $object[ 'id_contact' ] ][ 'connection_value' ] = $object[ 'connection_value' ];  
     1961                        switch ( strtolower( $object[ 'connection_name' ] ) )  
     1962                        {  
     1963                            case 'alternativo' :  
     1964                                $all_contacts[ $object[ 'id_contact' ] ][ 'alternative-mail' ] = $object[ 'connection_value' ];  
     1965                                break;  
     1966                            case 'principal' :  
     1967                                $all_contacts[ $object[ 'id_contact' ] ][ 'mail' ] = $object[ 'connection_value' ];  
     1968                                break;  
     1969                        }  
     1970                        break;  
     1971                    case 2 :  
     1972                        $all_contacts[ $object[ 'id_contact' ] ][ 'telephonenumber' ] = $object[ 'connection_value' ];  
     1973                        switch ( strtolower( $object[ 'connection_name' ] ) )  
     1974                        {  
     1975                            case 'casa' :  
     1976                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-phone' ] = $object[ 'connection_value' ];  
     1977                                break;  
     1978                            case 'celular' :  
     1979                                $all_contacts[ $object[ 'id_contact' ] ][ 'mobile' ] = $object[ 'connection_value' ];  
     1980                                break;  
     1981                            case 'trabalho' :  
     1982                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-phone' ] = $object[ 'connection_value' ];  
     1983                                break;  
     1984                            case 'fax' :  
     1985                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-fax' ] = $object[ 'connection_value' ];  
     1986                                break;  
     1987                            case 'pager' :  
     1988                                $all_contacts[ $object[ 'id_contact' ] ][ 'home-pager' ] = $object[ 'connection_value' ];  
     1989                                break;  
     1990                            case 'celular corporativo' :  
     1991                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-mobile' ] = $object[ 'connection_value' ];  
     1992                                break;  
     1993                            case 'pager corporativo' :  
     1994                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-pager' ] = $object[ 'connection_value' ];  
     1995                                break;  
     1996                            case 'fax corporativo' :  
     1997                                $all_contacts[ $object[ 'id_contact' ] ][ 'business-fax' ] = $object[ 'connection_value' ];  
     1998                                break;  
     1999                        }  
     2000                        break;  
     2001                }  
     2002  
     2003                $all_contacts[ $object[ 'id_contact' ] ][ 'cn' ] = utf8_encode($object[ 'names_ordered' ]);  
     2004                $all_contacts[ $object[ 'id_contact' ] ][ 'id_contact' ]    = $object[ 'id_contact' ];  
     2005                $all_contacts[ $object[ 'id_contact' ] ][ 'id_connection' ] = $object[ 'id_connection' ];  
     2006                $all_contacts[ $object[ 'id_contact' ] ][ 'alias' ]         = $object[ 'alias' ];  
     2007                $all_contacts[ $object[ 'id_contact' ] ][ 'birthdate' ]         = $object[ 'birthdate' ];  
     2008                $all_contacts[ $object[ 'id_contact' ] ][ 'sex' ]               = $object[ 'sex' ];  
     2009                $all_contacts[ $object[ 'id_contact' ] ][ 'pgp_key' ]           = $object[ 'pgp_key' ];  
     2010                $all_contacts[ $object[ 'id_contact' ] ][ 'notes' ]         = $object[ 'notes' ];  
     2011                $all_contacts[ $object[ 'id_contact' ] ][ 'web_page' ]          = $object[ 'web_page' ];  
     2012                $all_contacts[ $object[ 'id_contact' ] ][ 'corporate_name' ]= $object[ 'corporate_name' ];  
     2013                $all_contacts[ $object[ 'id_contact' ] ][ 'job_title' ]         = $object[ 'job_title' ];  
     2014                $all_contacts[ $object[ 'id_contact' ] ][ 'department' ]    = $object[ 'department' ];  
     2015  
     2016                switch( $object[ 'id_typeof_contact_address' ] )  
     2017                {  
     2018                    case 1 :  
     2019                        $all_contacts[ $object[ 'id_contact' ] ][ 'business-address' ]     = $object[ 'address1' ];  
     2020                        $all_contacts[ $object[ 'id_contact' ] ][ 'business-address-2' ]   = $object[ 'address2' ];  
     2021                        $all_contacts[ $object[ 'id_contact' ] ][ 'business-complement' ]  = $object[ 'complement' ];  
     2022                        $all_contacts[ $object[ 'id_contact' ] ][ 'business-postal_code' ] = $object[ 'postal_code' ];  
     2023                        $all_contacts[ $object[ 'id_contact' ] ][ 'business-city_name' ]   = $object[ 'city_name' ];  
     2024                        $all_contacts[ $object[ 'id_contact' ] ][ 'business-state_name' ]  = $object[ 'state_name' ];  
     2025                        $all_contacts[ $object[ 'id_contact' ] ][ 'business-id_country' ]  = $object[ 'id_country' ];  
     2026                        break;  
     2027                    case 2 :  
     2028                        $all_contacts[ $object[ 'id_contact' ] ][ 'home-address' ]     = $object[ 'address1' ];  
     2029                        $all_contacts[ $object[ 'id_contact' ] ][ 'home-address-2' ]   = $object[ 'address2' ];  
     2030                        $all_contacts[ $object[ 'id_contact' ] ][ 'home-complement' ]  = $object[ 'complement' ];  
     2031                        $all_contacts[ $object[ 'id_contact' ] ][ 'home-postal_code' ] = $object[ 'postal_code' ];  
     2032                        $all_contacts[ $object[ 'id_contact' ] ][ 'home-city_name' ]   = $object[ 'city_name' ];  
     2033                        $all_contacts[ $object[ 'id_contact' ] ][ 'home-state_name' ]  = $object[ 'state_name' ];  
     2034                        $all_contacts[ $object[ 'id_contact' ] ][ 'home-id_country' ]  = $object[ 'id_country' ];  
     2035                        break;  
     2036                }  
     2037            }  
     2038            $all = array_values($all_contacts);  
     2039  
     2040            $result = array();  
     2041            foreach($all as $i => $v)  
     2042            {  
     2043                if(!$v['mail']) continue;  
     2044  
     2045                $tmp = array();  
     2046                $tmp['mail'] = $v['mail'];  
     2047                $tmp['name'] = $v['cn'];  
     2048                $tmp['isExternal'] = '1';  
     2049                $result[] = $tmp;  
     2050            }  
     2051  
     2052            return $result;  
     2053  
     2054    }  
    17762055} 
    17772056 
  • branches/2.5/prototype/modules/calendar/js/helpers.js

    r8054 r8059  
    15791579blkAddAtendee.find('.add-attendee-search input').keydown(function(event) { 
    15801580 
    1581     if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') {                  
    1582         var result = DataLayer.get('user', ["*", "name", $(this).val()], true); 
     1581    if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') { 
     1582        var result = DataLayer.get('user', { 'filter' :  ["*", "name", $(this).val()], criteria: { 'externalCatalogs' : true , 'personalContacts' : true }  }, true); 
    15831583 
    15841584        /** 
     
    15981598            if ($(event.target).is('input')) { 
    15991599                old_item = $(event.target).parents('li'); 
     1600  
     1601        var  userId = old_item.find('.id').html();  
     1602  
     1603        if(userId == '')  
     1604        {  
     1605           var  userId = DataLayer.put('user', {  
     1606                name: old_item.find('.name').html(),  
     1607                mail: old_item.find('.mail').html(),  
     1608                isExternal: '1'  
     1609            });  
     1610        }  
     1611  
    16001612                newAttendeeId = DataLayer.put('participant', { 
    1601                     user: old_item.find('.id').html(),  
     1613                    user: userId, 
    16021614                    isExternal: old_item.find('.isExternal').html() 
    16031615                }); 
Note: See TracChangeset for help on using the changeset viewer.