Changeset 8058


Ignore:
Timestamp:
03/27/13 09:38:13 (11 years ago)
Author:
cristiano
Message:

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

Location:
trunk/prototype/modules/calendar
Files:
2 edited

Legend:

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

    r8045 r8058  
    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 
  • trunk/prototype/modules/calendar/js/helpers.js

    r8052 r8058  
    15831583blkAddAtendee.find('.add-attendee-search input').keydown(function(event) { 
    15841584 
    1585     if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') {                  
    1586         var result = DataLayer.get('user', ["*", "name", $(this).val()], true); 
     1585    if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') { 
     1586        var result = DataLayer.get('user', { 'filter' :  ["*", "name", $(this).val()], criteria: { 'externalCatalogs' : true , 'personalContacts' : true }  }, true); 
    15871587 
    15881588        /** 
     
    16021602            if ($(event.target).is('input')) { 
    16031603                old_item = $(event.target).parents('li'); 
     1604 
     1605        var  userId = old_item.find('.id').html(); 
     1606 
     1607        if(userId == '') 
     1608        { 
     1609           var  userId = DataLayer.put('user', { 
     1610                name: old_item.find('.name').html(), 
     1611                mail: old_item.find('.mail').html(), 
     1612                isExternal: '1' 
     1613            }); 
     1614        } 
     1615 
    16041616                newAttendeeId = DataLayer.put('participant', { 
    1605                     user: old_item.find('.id').html(),  
     1617                    user: userId, 
    16061618                    isExternal: old_item.find('.isExternal').html() 
    16071619                }); 
Note: See TracChangeset for help on using the changeset viewer.