Changeset 317 for trunk/expressoAdmin1_2/inc/class.ldap_functions.inc.php
- Timestamp:
- 06/17/08 14:43:30 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/expressoAdmin1_2/inc/class.ldap_functions.inc.php
r221 r317 616 616 if (!@ldap_add ( $this->ldap, $dn, $entry )) 617 617 { 618 $result['status'] = false; 619 $result['msg'] = "Erro na funcao ldap_functions->ldap_add_entry ($dn).\nRetorno do servidor:" . ldap_error($this->ldap); 618 $result['status'] = false; 619 $result['error_number'] = ldap_errno($this->ldap); 620 $result['msg'] = "Erro na funcao ldap_functions->ldap_add_entry ($dn).\nRetorno do servidor:" . ldap_errno($this->ldap) . ldap_error($this->ldap); 620 621 } 621 622 else … … 743 744 { 744 745 $result['status'] = false; 745 $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist ($mail).\nRetorno do servidor:" . ldap_error($ldapMasterConnect); 746 if (ldap_errno($ldapMasterConnect) == '50') 747 { 748 $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist.\n" . 749 "O usuário utilizado para gravação no LDAP, DEVE ter direito de escrita.\n". 750 "O usuário " . $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] . " não tem este direito.\n". 751 "Edite \"Configuração Global do Catálogo\", no módulo Administrador, Catálogo de Endereços e adicione um usuário com direitos de escrita."; 752 } 753 else 754 $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist.\nRetorno do servidor:" . ldap_error($ldapMasterConnect); 746 755 } 747 756 … … 794 803 { 795 804 $result['status'] = false; 796 $result['msg'] = "Erro na funcao ldap_functions->remove_user2maillist ($mail).\n\nRetorno do servidor:" . ldap_error($this->ldap); 805 if (ldap_errno($ldapMasterConnect) == '50') 806 { 807 $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist.\n" . 808 "O usuário utilizado para gravação no LDAP, DEVE ter direito de escrita.\n". 809 "O usuário " . $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] . " não tem este direito.\n". 810 "Edite \"Configuração Global do Catálogo\", no módulo Administrador, Catálogo de Endereços e adicione um usuário com direitos de escrita."; 811 } 812 else 813 $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist.\nRetorno do servidor:" . ldap_error($ldapMasterConnect); 797 814 } 798 815 ldap_close($ldapMasterConnect); … … 1271 1288 { 1272 1289 $return['status'] = false; 1290 $return['error_number'] = ldap_errno($this->ldap); 1273 1291 $return['msg'] = 'Erro em ldap_funcitons->replace_user_attributes: ' . ldap_error($this->ldap); 1274 1292 } … … 1284 1302 { 1285 1303 $return['status'] = false; 1304 $return['error_number'] = ldap_errno($this->ldap); 1286 1305 $return['msg'] = 'Erro em ldap_funcitons->add_user_attributes: ' . ldap_error($this->ldap); 1287 1306 } … … 1360 1379 } 1361 1380 } 1362 1381 1382 //INSTITUTIONAL ACCOUNTS 1383 $attrs = array(); 1384 $attrs['mailForwardingAddress'] = $user_info['mail']; 1385 1386 $justthese = array("dn"); 1387 $filter="(&(phpgwAccountType=i)(mailforwardingaddress=".$user_info['mail']."))"; 1388 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese); 1389 $entries = ldap_get_entries($this->ldap, $search); 1390 1391 for ($i=0; $i<$entries['count']; $i++) 1392 { 1393 if ( !@ldap_mod_del($this->ldap, $entries[$i]['dn'], $attrs) ) 1394 { 1395 $result['status'] = false; 1396 $result['msg'] = "Erro na funcao ldap_functions->delete_user, instutional_accounts.\nRetorno do servidor:" . ldap_error($this->ldap); 1397 } 1398 } 1399 1363 1400 // MAILLISTS 1364 1401 $attrs = array(); … … 1387 1424 { 1388 1425 $return['status'] = false; 1389 $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap); 1426 if (ldap_errno($ldapMasterConnect) == '50') 1427 { 1428 $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist.\n" . 1429 "O usuário utilizado para gravação no LDAP, DEVE ter direito de escrita.\n". 1430 "O usuário " . $_SESSION['phpgw_info']['expresso']['cc_ldap_server']['acc'] . " não tem este direito.\n". 1431 "Edite \"Configuração Global do Catálogo\", no módulo Administrador, Catálogo de Endereços e adicione um usuário com direitos de escrita."; 1432 } 1433 else 1434 $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist.\nRetorno do servidor:" . ldap_error($ldapMasterConnect); 1390 1435 } 1391 1436 } … … 1601 1646 return $return; 1602 1647 } 1648 function exist_domain_name_sid($sambadomainname, $sambasid) 1649 { 1650 $context = $GLOBALS['phpgw_info']['server']['ldap_context']; 1651 1652 $justthese = array("dn","sambaDomainName"); 1653 $filter="(&(objectClass=sambaDomain)(sambaSID=$sambasid)(sambaDomainName=$sambadomainname))"; 1654 $search = ldap_search($this->ldap, $context, $filter, $justthese); 1655 $count_entries = ldap_count_entries($this->ldap, $search); 1656 1657 if ($count_entries > 0) 1658 return true; 1659 else 1660 return false; 1661 } 1603 1662 1604 1663 function add_sambadomain($sambadomainname, $sambasid, $context) … … 1615 1674 { 1616 1675 $return['status'] = false; 1617 $return['msg'] = "Erro na funcao ldap_functions->add_sambadomain ($dn).\nRetorno do servidor: " . ldap_error($this->ldap);1676 $return['msg'] = "Erro ao adicionar Samba Domain"; 1618 1677 } 1619 1678 else … … 1670 1729 } 1671 1730 1672 1731 function create_institutional_accounts($params) 1732 { 1733 /* Begin: Access verification */ 1734 if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'add_institutional_accounts')) 1735 { 1736 $return['status'] = false; 1737 $return['msg'] = $this->functions->lang('You do not have right to create institutional accounts') . "."; 1738 return $return; 1739 } 1740 1741 $access_granted = false; 1742 foreach ($this->manager_contexts as $idx=>$manager_context) 1743 { 1744 if (stristr($params['context'], $manager_context)) 1745 { 1746 $access_granted = true; 1747 break; 1748 } 1749 } 1750 if (!$access_granted) 1751 { 1752 $return['status'] = false; 1753 $return['msg'] = $this->functions->lang('You do not have access to this organization') . "."; 1754 return $return; 1755 } 1756 /* End: Access verification */ 1757 1758 /* Begin: Validation */ 1759 if ( (empty($params['cn'])) || (empty($params['mail'])) ) 1760 { 1761 $result['status'] = false; 1762 $result['msg'] = $this->functions->lang('Field mail or name is empty'); 1763 return $result; 1764 } 1765 1766 if (! eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$", $params['mail']) ) 1767 { 1768 $result['status'] = false; 1769 $result['msg'] = $this->functions->lang('Field mail is not formed correcty') . '.'; 1770 return $result; 1771 } 1772 1773 $uid = 'institutional_account_' . $params['mail']; 1774 $dn = "uid=$uid," . $params['context']; 1775 1776 $filter = "(mail=".$params['mail'].")"; 1777 $justthese = array("cn"); 1778 $search = @ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese); 1779 $entries = @ldap_get_entries($this->ldap,$search); 1780 if ($entries['count'] != 0) 1781 { 1782 $result['status'] = false; 1783 $result['msg'] = $this->functions->lang('Field mail already in use'); 1784 return $result; 1785 } 1786 /* End: Validation */ 1787 1788 $info = array(); 1789 $info['cn'] = $params['cn']; 1790 $info['sn'] = $params['cn']; 1791 $info['uid'] = $uid; 1792 $info['mail'] = $params['mail']; 1793 $info['phpgwAccountType'] = 'i'; 1794 $info['objectClass'][] = 'inetOrgPerson'; 1795 $info['objectClass'][] = 'phpgwAccount'; 1796 $info['objectClass'][] = 'top'; 1797 $info['objectClass'][] = 'person'; 1798 $info['objectClass'][] = 'qmailUser'; 1799 $info['objectClass'][] = 'organizationalPerson'; 1800 1801 if ($params['accountStatus'] == 'on') 1802 { 1803 $info['accountStatus'] = 'active'; 1804 } 1805 if ($params['phpgwAccountVisible'] == 'on') 1806 { 1807 $info['phpgwAccountVisible'] = '-1'; 1808 } 1809 1810 if (!empty($params['owners'])) 1811 { 1812 foreach($params['owners'] as $index=>$uidnumber) 1813 { 1814 $info['mailForwardingAddress'][] = $this->uidnumber2mail($uidnumber); 1815 } 1816 } 1817 1818 $result = array(); 1819 if (!@ldap_add ( $this->ldap, $dn, $info )) 1820 { 1821 $result['status'] = false; 1822 $result['msg'] = $this->functions->lang('Error in function') . ' ldap_functions->create_institutional_accounts'; 1823 $result['msg'] .= "\n" . $this->functions->lang('Server return') . ': ' . ldap_error($this->ldap); 1824 } 1825 else 1826 $result['status'] = true; 1827 1828 return $result; 1829 } 1830 1831 function save_institutional_accounts($params) 1832 { 1833 /* Begin: Access verification */ 1834 if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'edit_institutional_accounts')) 1835 { 1836 $return['status'] = false; 1837 $return['msg'] = $this->functions->lang('You do not have right to edit institutional accounts') . "."; 1838 return $return; 1839 } 1840 $access_granted = false; 1841 foreach ($this->manager_contexts as $idx=>$manager_context) 1842 { 1843 if (stristr($params['context'], $manager_context)) 1844 { 1845 $access_granted = true; 1846 break; 1847 } 1848 } 1849 if (!$access_granted) 1850 { 1851 $return['status'] = false; 1852 $return['msg'] = $this->functions->lang('You do not have access to this organization') . "."; 1853 return $return; 1854 } 1855 /* End: Access verification */ 1856 1857 /* Begin: Validation */ 1858 if ( (empty($params['cn'])) || (empty($params['mail'])) ) 1859 { 1860 $result['status'] = false; 1861 $result['msg'] = $this->functions->lang('Field mail or name is empty') . '.'; 1862 return $result; 1863 } 1864 1865 if (! eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$", $params['mail']) ) 1866 { 1867 $result['status'] = false; 1868 $result['msg'] = $this->functions->lang('Field mail is not formed correcty') . '.'; 1869 return $result; 1870 } 1871 1872 $uid = 'institutional_account_' . $params['mail']; 1873 $dn = strtolower("uid=$uid," . $params['context']); 1874 $anchor = strtolower($params['anchor']); 1875 1876 $filter = "(mail=".$params['mail'].")"; 1877 $justthese = array("cn"); 1878 $search = @ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese); 1879 $entries = @ldap_get_entries($this->ldap,$search); 1880 1881 if ( ($entries['count'] > 1) || (($entries['count'] == 1) && ($entries[0]['dn'] != $anchor)) ) 1882 { 1883 $result['status'] = false; 1884 $result['msg'] = $this->functions->lang('Field mail already in use.'); 1885 return $result; 1886 } 1887 /* End: Validation */ 1888 1889 $result = array(); 1890 $result['status'] = true; 1891 1892 if ($anchor != $dn) 1893 { 1894 if (!@ldap_rename($this->ldap, $anchor, "uid=$uid", $params['context'], true)) 1895 { 1896 $result['status'] = false; 1897 $result['msg'] = $this->functions->lang('Error in function') . ' ldap_functions->save_institutional_accounts: ldap_rename'; 1898 $result['msg'] .= "\n" . $this->functions->lang('Server return') . ': ' . ldap_error($this->ldap); 1899 } 1900 } 1901 1902 $info = array(); 1903 $info['cn'] = $params['cn']; 1904 $info['sn'] = $params['cn']; 1905 $info['uid'] = $uid; 1906 $info['mail'] = $params['mail']; 1907 1908 if ($params['accountStatus'] == 'on') 1909 $info['accountStatus'] = 'active'; 1910 else 1911 $info['accountStatus'] = array(); 1912 1913 if ($params['phpgwAccountVisible'] == 'on') 1914 $info['phpgwAccountVisible'] = '-1'; 1915 else 1916 $info['phpgwAccountVisible'] = array(); 1917 1918 if (!empty($params['owners'])) 1919 { 1920 foreach($params['owners'] as $index=>$uidnumber) 1921 { 1922 $mailForwardingAddress = $this->uidnumber2mail($uidnumber); 1923 if ($mailForwardingAddress != '') 1924 $info['mailForwardingAddress'][] = $mailForwardingAddress; 1925 } 1926 } 1927 else 1928 $info['mailForwardingAddress'] = array(); 1929 1930 if (!@ldap_modify ( $this->ldap, $dn, $info )) 1931 { 1932 $result['status'] = false; 1933 $result['msg'] = $this->functions->lang('Error in function') . ' ldap_functions->save_institutional_accounts: ldap_modify'; 1934 $result['msg'] .= "\n" . $this->functions->lang('Server return') . ': ' . ldap_error($this->ldap); 1935 } 1936 1937 return $result; 1938 } 1939 1940 function get_institutional_accounts($params) 1941 { 1942 if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'list_institutional_accounts')) 1943 { 1944 $return['status'] = false; 1945 $return['msg'] = $this->functions->lang('You do not have right to list institutional accounts') . "."; 1946 return $return; 1947 } 1948 1949 $input = $params['input']; 1950 $justthese = array("cn", "mail", "uid"); 1951 $trs = array(); 1952 1953 foreach ($this->manager_contexts as $idx=>$context) 1954 { 1955 $institutional_accounts = ldap_search($this->ldap, $context, ("(&(phpgwAccountType=i)(|(mail=$input*)(cn=*$input*)))"), $justthese); 1956 $entries = ldap_get_entries($this->ldap, $institutional_accounts); 1957 1958 for ($i=0; $i<$entries['count']; $i++) 1959 { 1960 $tr = "<tr class='normal' onMouseOver=this.className='selected' onMouseOut=this.className='normal'><td onClick=edit_institutional_account('".$entries[$i]['uid'][0]."')>" . $entries[$i]['cn'][0] . "</td><td onClick=edit_institutional_account('".$entries[$i]['uid'][0]."')>" . $entries[$i]['mail'][0] . "</td><td align='center' onClick=delete_institutional_accounts('".$entries[$i]['uid'][0]."')><img HEIGHT='16' WIDTH='16' src=./expressoAdmin1_2/templates/default/images/delete.png></td></tr>"; 1961 $trs[$tr] = $entries[$i]['cn'][0]; 1962 } 1963 } 1964 1965 $trs_string = ''; 1966 if (count($trs)) 1967 { 1968 natcasesort($trs); 1969 foreach ($trs as $tr=>$cn) 1970 { 1971 $trs_string .= $tr; 1972 } 1973 } 1974 1975 $return['status'] = 'true'; 1976 $return['trs'] = $trs_string; 1977 return $return; 1978 } 1979 1980 function get_institutional_account_data($params) 1981 { 1982 if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'edit_institutional_accounts')) 1983 { 1984 $return['status'] = false; 1985 $return['msg'] = $this->functions->lang('You do not have right to list institutional accounts') . "."; 1986 return $return; 1987 } 1988 1989 $uid = $params['uid']; 1990 $justthese = array("accountStatus", "phpgwAccountVisible", "cn", "mail", "mailForwardingAddress"); 1991 1992 $institutional_accounts = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], ("(&(phpgwAccountType=i)(uid=$uid))"), $justthese); 1993 $entrie = ldap_get_entries($this->ldap, $institutional_accounts); 1994 1995 if ($entrie['count'] != 1) 1996 { 1997 $return['status'] = 'false'; 1998 $return['msg'] = 'Problemas carregando dados.'; 1999 } 2000 else 2001 { 2002 $tmp_user_context = split(",", $entrie[0]['dn']); 2003 $tmp_reverse_user_context = array_reverse($tmp_user_context); 2004 array_pop($tmp_reverse_user_context); 2005 $return['user_context'] = implode(",", array_reverse($tmp_reverse_user_context)); 2006 2007 $return['status'] = 'true'; 2008 $return['accountStatus'] = $entrie[0]['accountstatus'][0]; 2009 $return['phpgwAccountVisible'] = $entrie[0]['phpgwaccountvisible'][0]; 2010 $return['cn'] = $entrie[0]['cn'][0]; 2011 $return['mail'] = $entrie[0]['mail'][0]; 2012 2013 if ($entrie[0]['mailforwardingaddress']['count'] > 0) 2014 { 2015 $a_cn = array(); 2016 for ($i=0; $i<$entrie[0]['mailforwardingaddress']['count']; $i++) 2017 { 2018 $tmp = $this->mailforwardingaddress2uidnumber($entrie[0]['mailforwardingaddress'][$i]); 2019 if (!$tmp) {} 2020 else 2021 $a_cn[$tmp['uidnumber']] = $tmp['cn']; 2022 } 2023 natcasesort($a_cn); 2024 foreach($a_cn as $uidnumber => $cn) 2025 { 2026 $return['owners'] .= '<option value='. $uidnumber .'>' . $cn . '</option>'; 2027 } 2028 } 2029 } 2030 2031 return $return; 2032 } 2033 2034 function mailforwardingaddress2uidnumber($mail) 2035 { 2036 $justthese = array("uidnumber","cn"); 2037 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], ("(&(phpgwAccountType=u)(mail=$mail))"), $justthese); 2038 $entrie = ldap_get_entries($this->ldap, $search); 2039 if ($entrie['count'] != 1) 2040 return false; 2041 else 2042 { 2043 $return['uidnumber'] = $entrie[0]['uidnumber'][0]; 2044 $return['cn'] = $entrie[0]['cn'][0]; 2045 return $return; 2046 } 2047 } 2048 2049 function delete_institutional_account_data($params) 2050 { 2051 if (!$this->functions->check_acl($_SESSION['phpgw_info']['expresso']['user']['account_lid'], 'remove_institutional_accounts')) 2052 { 2053 $return['status'] = false; 2054 $return['msg'] = $this->functions->lang('You do not have right to delete institutional accounts') . "."; 2055 return $return; 2056 } 2057 2058 $uid = $params['uid']; 2059 $return['status'] = true; 2060 2061 $justthese = array("cn"); 2062 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], ("(&(phpgwAccountType=i)(uid=$uid))"), $justthese); 2063 $entrie = ldap_get_entries($this->ldap, $search); 2064 if ($entrie['count'] > 1) 2065 { 2066 $return['status'] = false; 2067 $return['msg'] = $this->functions->lang('More then one uid was found'); 2068 return $return; 2069 } 2070 if ($entrie['count'] == 0) 2071 { 2072 $return['status'] = false; 2073 $return['msg'] = $this->functions->lang('No uid was found'); 2074 return $return; 2075 } 2076 2077 $dn = $entrie[0]['dn']; 2078 if (!@ldap_delete($this->ldap, $dn)) 2079 { 2080 $return['status'] = false; 2081 $return['msg'] = $this->functions->lang('Error in function') . " ldap_functions->delete_institutional_accounts: ldap_delete"; 2082 $return['msg'] .= "\n" . $this->functions->lang('Server return') . ': ' . ldap_error($this->ldap); 2083 return $return; 2084 } 2085 2086 return $return; 2087 } 2088 2089 function replace_mail_from_institutional_account($newMail, $oldMail) 2090 { 2091 $filter = "(&(phpgwAccountType=i)(mailforwardingaddress=$oldMail))"; 2092 $justthese = array("dn"); 2093 $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese); 2094 $entries = ldap_get_entries($this->ldap, $search); 2095 $result['status'] = true; 2096 for ($i=0; $i<$entries['count']; $i++) 2097 { 2098 $attrs['mailforwardingaddress'] = $oldMail; 2099 $res1 = @ldap_mod_del($this->ldap, $entries[$i]['dn'], $attrs); 2100 $attrs['mailforwardingaddress'] = $newMail; 2101 $res2 = @ldap_mod_add($this->ldap, $entries[$i]['dn'], $attrs); 2102 2103 if ((!$res1) || (!$res2)) 2104 { 2105 $result['status'] = false; 2106 $return['msg'] = $this->functions->lang('Error in function') . " ldap_functions->replace_mail_from_institutional_account."; 2107 } 2108 } 2109 2110 return $result; 2111 } 1673 2112 } 1674 2113 ?>
Note: See TracChangeset
for help on using the changeset viewer.