- Timestamp:
- 05/21/08 16:56:17 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/contactcenter/inc/class.bo_global_ldap_catalog.inc.php
r167 r284 16 16 */ 17 17 include_once('class.abo_catalog.inc.php'); 18 18 19 19 class bo_global_ldap_catalog extends abo_catalog 20 20 { 21 21 var $ldap; 22 22 23 23 var $src_info; 24 24 25 25 var $trans_table; 26 26 27 // used to determine if a catalog is external 28 var $external; 29 27 30 var $fields = array( 28 31 'id_contact' => true, … … 40 43 'pgp_key' => true, 41 44 'notes' => true, 42 45 'department' => true, 46 47 'empNumber' => true, 48 43 49 /* Array fields */ 44 50 'companies' => true, … … 47 53 'connections' => true 48 54 ); 49 55 50 56 /* 51 57 52 58 @function global_ldap_catalog 53 59 @abstract Constructor 54 60 @author Raphael Derosso Pereira 55 61 @author Mário César Kolling (external catalogs) 62 56 63 @param integer $id_source The ID of the LDAP source 57 64 @param string $context Ldap bind DN 65 @param integer $external 0 = internal catalog, 1 = external catalog 66 58 67 */ 59 function bo_global_ldap_catalog ( $id_source, $context ) 60 { 68 function bo_global_ldap_catalog ( $id_source, $context, $external = 0 ) 69 { 70 71 $this->external = $external; 72 61 73 if (!function_exists('ldap_search')) 62 74 { 63 75 exit('PHP LDAP support Unavailable!'); 64 76 } 65 77 66 78 $this->ldap = CreateObject('contactcenter.bo_ldap_manager'); 67 68 $all_src = $this->ldap->get_all_ldap_sources(); 79 80 if ($this->external) 81 { 82 $all_src = $this->ldap->get_external_ldap_sources(); 83 } 84 else 85 { 86 $all_src = $this->ldap->get_all_ldap_sources(); 87 } 69 88 70 89 if (!$all_src[$id_source] or !$context) … … 75 94 $this->src_info = $all_src[$id_source]; 76 95 $this->src_info['context'] = $context; 77 $this->trans_table = $this->ldap->get_ldap_fields_association($id_source); 78 } 79 96 97 if ($this->external) 98 { 99 $this->trans_table = $this->ldap->get_external_ldap_fields_association($id_source); 100 } 101 else 102 { 103 $this->trans_table = $this->ldap->get_ldap_fields_association($id_source); 104 } 105 } 106 80 107 /* 81 108 82 109 @function find 83 110 @abstract Searches the LDAP directory for the specified fields with … … 85 112 that matches the rules. 86 113 @author Raphael Derosso Pereira 87 114 88 115 @param array $what The fields to be taken 89 116 @param array $rules The rules to be match. See class.abo_catalog.inc.php … … 94 121 'offset' => (integer) [NOT IMPLEMENTED] 95 122 ) 96 123 97 124 */ 98 125 function find($what, $rules=false, $other=false) 99 126 { 100 127 $restric_fields = $this->get_restrictions_without_branch($rules); 101 128 102 129 $trans_f = $this->translate_fields($what, $restric_fields); 103 130 104 131 foreach($trans_f as $orig => $field_a) 105 132 { … … 109 136 } 110 137 } 111 138 112 139 $fields = array_unique($fields); 113 140 114 141 $filter = $this->process_restrictions($rules, $trans_f); 115 142 116 143 if(strstr($this->src_info['context'], "ldap://")) { 117 144 $refer_context = str_replace("??base","",preg_replace('!^(ldap://[^/]+)/(.*$)!', '\\2', $this->src_info['context'])); 118 $host = preg_replace('!^(ldap://[^/]+)/.*$!', '\\1', $this->src_info['context']); 145 $host = preg_replace('!^(ldap://[^/]+)/.*$!', '\\1', $this->src_info['context']); 119 146 $this->src_info['host'] = $host; 120 //$this->src_info['acc'] = '';121 //$this->src_info['pw'] = '';122 } 147 $this->src_info['acc'] = ''; 148 $this->src_info['pw'] = ''; 149 } 123 150 124 151 $ldap = $GLOBALS['phpgw']->common->ldapConnect($this->src_info['host'], $this->src_info['acc'], $this->src_info['pw'], true); 125 152 126 153 if (!$ldap) 127 154 { 128 155 return false; 129 156 } 130 131 $fields[] ='phpgwAccountVisible'; 132 $result_r = @ldap_search($ldap ,($refer_context ? $refer_context : $this->src_info['context']), $filter, $fields); 157 158 if (!$this->external) 159 { 160 $fields[] ='phpgwAccountVisible'; 161 } 162 163 $result_r = @ldap_search($ldap ,($refer_context ? $refer_context : $this->src_info['context']), $filter, $fields, 0); 133 164 134 165 if (!$result_r) … … 136 167 return false; 137 168 } 138 169 139 170 if ($other['order']) 140 171 { … … 150 181 } 151 182 } 152 183 153 184 $result_u = ldap_get_entries($ldap, $result_r); 154 185 155 186 $i = 0; 156 187 foreach ($result_u as $index => $result_p) 157 188 { 158 if ($index === 'count' or $index === 'dn' or $result_p['phpgwaccountvisible'][0] == '-1')189 if ($index === 'count' or $index === 'dn' or (!$this->external and $result_p['phpgwaccountvisible'][0] == '-1')) 159 190 { 160 191 continue; 161 192 } 162 193 163 194 foreach ($trans_f as $orig => $trans) 164 195 { … … 178 209 $i++; 179 210 } 180 211 181 212 return $return; 182 213 } 183 214 184 215 /* 185 216 186 217 @function translate_fields 187 218 @abstract Return the LDAP objectClass fields that corresponds to the 188 219 specified parameter fields 189 220 @author Raphael Derosso Pereira 190 221 191 222 @param array $fields The fields in the standard ContactCenter format 192 223 @param array $rules The rules 193 224 194 225 */ 195 226 function translate_fields ( $fields, &$restric_fields ) 196 227 { 197 228 $return = array(); 198 229 199 230 $i = 0; 200 231 foreach ($fields as $field) … … 204 235 continue; 205 236 } 206 237 207 238 if (!is_array($this->trans_table[$field])) 208 239 { 209 240 $reference = $this->trans_table[$field]; 210 241 211 242 reset($restric_fields); 212 243 while(list(,$field_r) = each($restric_fields)) 213 244 { 245 214 246 if ($field_r['field'] === $reference and array_key_exists($field_r['value'], $this->trans_table[$reference])) 215 247 { … … 220 252 else 221 253 { 254 222 255 if (!is_array($return[$field])) 223 256 { … … 230 263 } 231 264 } 232 265 233 266 if (count($return)) 234 267 { 235 268 return $return; 236 269 } 237 270 238 271 return false; 239 272 } 240 273 241 274 /* 242 275 243 276 @function process_restrictions 244 277 @abstract Returns a LDAP filter string that corresponds to the 245 278 specified restriction rules 246 279 @author Raphael Derosso Pereira 247 280 248 281 @param string $rules The restriction rules 249 282 250 283 */ 251 284 function process_restrictions( $rules, &$trans_table, $join_type='&' ) … … 255 288 return null; 256 289 } 257 290 258 291 foreach($rules as $rule_i => $rule) 259 292 { … … 267 300 $join = '|'; 268 301 break; 269 302 270 303 case 'AND': 271 304 $join = '&'; 272 305 break; 273 306 274 307 case 'NOT': 275 308 $join = '!'; 276 309 break; 277 310 278 311 default: 279 312 $join = $join_type; … … 281 314 $return_t[] = $this->process_restrictions($rule['sub_branch'], $trans_table, $join); 282 315 break; 283 316 284 317 case '=': 285 318 if (array_key_exists($rule['field'], $trans_table)) … … 292 325 } 293 326 break; 294 295 case '!=': 327 328 case '!=': 296 329 if (array_key_exists($rule['field'], $trans_table)) 297 330 { … … 303 336 } 304 337 break; 305 338 306 339 case '<=': 307 340 case '<': … … 315 348 } 316 349 break; 317 350 318 351 case '>': 319 352 case '>=': … … 327 360 } 328 361 break; 329 362 330 363 case 'NULL': 331 364 if (array_key_exists($rule['field'], $trans_table)) … … 338 371 } 339 372 break; 340 373 341 374 case 'IN': 342 375 if (array_key_exists($rule['field'], $trans_table)) … … 358 391 $value_1 = strtoupper(str_replace('%', '*', $rule['value'])); 359 392 $value_2 = strtolower($value_1); 360 393 361 394 foreach($trans_table[$rule['field']] as $field) 362 395 { … … 367 400 } 368 401 break; 369 402 370 403 */ case 'LIKE': 371 404 if (array_key_exists($rule['field'], $trans_table)) 372 405 { 373 406 $value = str_replace('%', '*', $rule['value']); 374 407 375 408 foreach($trans_table[$rule['field']] as $field) 376 409 { … … 380 413 } 381 414 break; 382 415 383 416 case 'NOT NULL': 384 417 if (array_key_exists($rule['field'], $trans_table)) … … 391 424 } 392 425 break; 393 426 394 427 case 'NOT IN': 395 428 if (array_key_exists($rule['field'], $trans_table)) … … 411 444 $value_1 = strtoupper(str_replace('%', '*', $rule['value'])); 412 445 $value_2 = strtolower($value_1); 413 446 414 447 foreach($trans_table[$rule['field']] as $field) 415 448 { … … 425 458 { 426 459 $value = str_replace('%', '*', $rule['value']); 427 460 428 461 foreach($trans_table[$rule['field']] as $field) 429 462 { … … 435 468 } 436 469 } 437 470 438 471 if (count($return_t)) 439 472 { … … 453 486 454 487 /*! 455 488 456 489 @function get_restrictions_without_branch 457 490 @abstract Returns an array containing the restrictions ignoring the 458 491 branches 459 492 @author Raphael Derosso Pereira 460 493 461 494 @param array $restrictions The restrictions 462 495 463 496 */ 464 497 function get_restrictions_without_branch(&$restrictions) … … 468 501 return null; 469 502 } 470 503 471 504 $fields = array(); 472 505 473 506 foreach ($restrictions as $restrict_data) 474 507 { … … 478 511 $fields = array_merge($fields, $this->get_restrictions_without_branch($restrict_data['sub_branch'])); 479 512 break; 480 513 481 514 case '=': 482 case '!=': 515 case '!=': 483 516 case '<=': 484 517 case '<': … … 495 528 array_push($fields, $restrict_data); 496 529 break; 497 530 498 531 default: 499 exit('Error in '.__FILE__.' on '.__LINE__.'<br>The restriction type passed was: '.$restrict_data['type']); 500 } 501 } 502 532 exit('Error in '.__FILE__.' on '.__LINE__.'<br>The restriction type passed was: '.$restrict_data['type']); 533 } 534 } 535 503 536 return $fields; 504 537 } 505 506 538 539 507 540 /*********************************************************************\ 508 541 * Methods to Get Data * 509 542 \*********************************************************************/ 510 511 543 544 512 545 /*! 513 546 514 547 @function get_single_entry 515 548 @abstract Returns all information requested about one contact 516 549 @author Raphael Derosso Pereira 517 550 518 551 @param integer $id_contact The contact ID 519 552 @param array $fields The array returned by get_fields with true 520 553 on the fields to be taken. 521 554 522 555 */ 523 556 function get_single_entry ( $id_contact, $fields ) 524 557 { 525 if (!is_array($fields)) 526 { 527 if (is_object($GLOBALS['phpgw']->log)) 558 if (!is_array($fields)) 559 { 560 if (is_object($GLOBALS['phpgw']->log)) 528 561 { 529 562 $GLOBALS['phpgw']->log->message(array( … … 531 564 'line' => __LINE__, 532 565 'file' => __FILE__)); 533 566 534 567 $GLOBALS['phpgw']->log->commit(); 535 568 } 536 else 569 else 537 570 { 538 571 exit('Argument Error on: <br>File:'.__FILE__.'<br>Line:'.__LINE__.'<br>'); 539 572 } 540 573 } 541 574 542 575 $ldap = $GLOBALS['phpgw']->common->ldapConnect($this->src_info['host'],$this->src_info['acc'],$this->src_info['pw'],true); 543 576 544 577 if (!$ldap) 545 578 { 546 579 return false; 547 580 } 548 581 549 582 $resource = ldap_read($ldap, $id_contact, 'objectClass='.$this->src_info['obj']); 550 583 $n_entries = ldap_count_entries($ldap, $resource); … … 553 586 return false; 554 587 } 555 588 556 589 $first_entry = ldap_first_entry($ldap, $resource); 557 590 $contact = ldap_get_attributes($ldap,$first_entry); 558 if($contact['jpegPhoto']){ 559 $contact['jpegPhoto'] = ldap_get_values_len ($ldap, $first_entry, "jpegPhoto"); 591 if($contact['jpegPhoto']){ 592 $contact['jpegPhoto'] = ldap_get_values_len ($ldap, $first_entry, "jpegPhoto"); 560 593 } 561 594 562 595 // print_r($contact); 563 596 564 597 // $contact_data = $this->fields; 565 598 566 599 foreach($fields as $field => $trueness) 567 600 { … … 571 604 continue; 572 605 } 573 606 574 607 switch ($field) 575 608 { … … 580 613 $l_fields['department'] = $this->trans_table['contact.business_info.department']; 581 614 $l_fields['company_notes'] = $this->trans_table['contact.company.company_notes']; 582 615 583 616 $contact_data['companies'] = array(); 584 617 foreach($l_fields as $l_field => $l_value) … … 588 621 continue; 589 622 } 590 591 $contact_data['companies']['company1'][$l_field] = $contact[$l_value[0]][0];592 } 593 623 624 $contact_data['companies']['company1'][$l_field] = utf8_decode($contact[$l_value[0]][0]); 625 } 626 594 627 if (!(count($contact_data['companies']))) 595 628 { … … 597 630 } 598 631 break; 599 632 600 633 case 'relations': 601 634 unset($l_fields); … … 604 637 unset($contact_data['relations']); 605 638 } 606 639 607 640 $contact_data['relations'] = array(); 608 641 if (!is_array($this->trans_table['contact.contact_related.names_ordered'])) … … 612 645 continue; 613 646 } 614 647 615 648 $i = 1; 616 649 foreach($trans as $l_type => $l_type_fields) … … 620 653 continue; 621 654 } 622 655 623 656 $contact_data['relations']['relation'.$i]['type'] = $l_type; 624 $contact_data['relations']['relation'.$i]['names_ordered'] = $contact[$l_type_fields[0]][0];657 $contact_data['relations']['relation'.$i]['names_ordered'] = utf8_decode($contact[$l_type_fields[0]][0]); 625 658 $i++; 626 659 } 627 660 } 628 661 629 662 if (!(count($contact_data['relations']))) 630 663 { … … 632 665 } 633 666 break; 634 667 635 668 case 'addresses': 636 669 unset($l_fields); … … 661 694 continue; 662 695 } 663 696 664 697 $i = 1; 665 698 foreach($trans as $l_type => $l_type_fields) … … 669 702 continue; 670 703 } 671 704 672 705 $contact_data['addresses']['address'.$i]['type'] = $l_type; 673 $contact_data['addresses']['address'.$i][$l_field] = $contact[$l_type_fields[0]][0];706 $contact_data['addresses']['address'.$i][$l_field] = utf8_decode($contact[$l_type_fields[0]][0]); 674 707 $i++; 675 708 } … … 677 710 else 678 711 { 679 $contact_data['addresses']['address1'][$l_field] = $contact[$l_value[0]][0];680 } 681 } 682 712 $contact_data['addresses']['address1'][$l_field] = utf8_decode($contact[$l_value[0]][0]); 713 } 714 } 715 683 716 if (!(count($contact_data['addresses']))) 684 717 { … … 686 719 } 687 720 break; 688 721 689 722 case 'connections': 690 723 $preferences = ExecMethod('contactcenter.ui_preferences.get_preferences'); … … 707 740 continue; 708 741 } 709 742 710 743 $i = 1; 711 744 foreach($trans as $l_type => $l_type_fields) … … 715 748 continue; 716 749 } 717 750 718 751 switch ($l_type) 719 752 { … … 726 759 } 727 760 $contact_data['connections']['connection'.$i]['type'] = $l_type; 728 $contact_data['connections']['connection'.$i][$l_field] = $contact[$l_type_fields[0]][0];761 $contact_data['connections']['connection'.$i][$l_field] = utf8_decode($contact[$l_type_fields[0]][0]); 729 762 $i++; 730 763 } … … 732 765 else 733 766 { 734 $contact_data['connections']['connection1'][$l_field] = $contact[$l_value[0]][0];735 } 736 } 737 767 $contact_data['connections']['connection1'][$l_field] = utf8_decode($contact[$l_value[0]][0]); 768 } 769 } 770 738 771 if (!(count($contact_data['connections']))) 739 772 { … … 741 774 } 742 775 break; 743 776 744 777 case 'prefix': 745 778 unset($l_fields); … … 750 783 continue; 751 784 } 752 753 $contact_data['prefix'] = $contact[$l_fields[0]][0];754 break; 755 785 786 $contact_data['prefix'] = utf8_decode($contact[$l_fields[0]][0]); 787 break; 788 756 789 case 'suffix': 757 790 unset($l_fields); … … 762 795 continue; 763 796 } 764 765 $contact_data['suffix'] = $contact[$l_fields[0]][0];766 break; 767 797 798 $contact_data['suffix'] = utf8_decode($contact[$l_fields[0]][0]); 799 break; 800 768 801 case 'status': 769 802 unset($l_fields); … … 774 807 continue; 775 808 } 776 777 $contact_data['status'] = $contact[$l_fields[0]][0];778 break; 779 809 810 $contact_data['status'] = utf8_decode($contact[$l_fields[0]][0]); 811 break; 812 780 813 case 'photo': 781 814 unset($l_fields); … … 786 819 continue; 787 820 } 788 821 789 822 $contact_data['photo'] = $contact[$l_fields[0]][0]; 790 break; 823 break; 791 824 792 825 default: … … 798 831 continue; 799 832 } 800 833 801 834 if(count($contact[$l_fields[0]]) > 1) 802 $contact_data[$field] = $contact[$l_fields[0]]; 835 { 836 $tmp = array(); 837 foreach ($contact[$l_fields[0]] as $i => $j) 838 { 839 $tmp["$i"] = utf8_decode($j); 840 } 841 //$contact_data[$field] = $contact[$l_fields[0]]; 842 $contact_data[$field] = $tmp; 843 } 803 844 else 804 $contact_data[$field] = $contact[$l_fields[0]][0];805 806 break; 807 } 808 } 809 845 $contact_data[$field] = utf8_decode($contact[$l_fields[0]][0]); 846 847 break; 848 } 849 } 850 810 851 if (!is_array($contact_data)) 811 852 { 812 853 return false; 813 854 } 814 855 815 856 return $contact_data; 816 857 } 817 858 859 /*! 860 861 @function get_all_entries 862 @abstract Returns all information requested about a bunch of contacts, usually a page 863 @author Raphael Derosso Pereira 864 @author Mário César Kolling 865 866 @param string $filter Filter (returned by generate_filter). 867 @param array $fields The array returned by get_fields with true 868 on the fields to be taken. 869 870 */ 871 function get_all_entries($filter, $fields) 872 { 873 if (!is_array($fields)) 874 { 875 if (is_object($GLOBALS['phpgw']->log)) 876 { 877 $GLOBALS['phpgw']->log->message(array( 878 'text' => 'F-BadcontactcenterParam, wrong get_single_entry parameters type.', 879 'line' => __LINE__, 880 'file' => __FILE__)); 881 882 $GLOBALS['phpgw']->log->commit(); 883 } 884 else 885 { 886 exit('Argument Error on: <br>File:'.__FILE__.'<br>Line:'.__LINE__.'<br>'); 887 } 888 } 889 890 $ldap = $GLOBALS['phpgw']->common->ldapConnect($this->src_info['host'],$this->src_info['acc'],$this->src_info['pw'],true); 891 892 if (!$ldap) 893 { 894 return false; 895 } 896 897 $resource = @ldap_search($ldap, $this->src_info['dn'], $filter); 898 $n_entries = @ldap_count_entries($ldap, $resource); 899 900 ldap_sort($ldap, $resource, 'cn'); 901 902 if ( $n_entries < 1) 903 { 904 return false; 905 } 906 907 $contacts = array(); 908 909 for ($entry = ldap_first_entry($ldap, $resource); 910 $entry != false; 911 $entry = ldap_next_entry($ldap, $entry)) 912 { 913 $contact = ldap_get_attributes($ldap,$entry); 914 if($contact['jpegPhoto']){ 915 $contact['jpegPhoto'] = ldap_get_values_len ($ldap, $entry, "jpegPhoto"); 916 } 917 918 foreach($fields as $field => $trueness) 919 { 920 if (!$trueness) 921 { 922 //unset($contact_data[$field]); 923 continue; 924 } 925 926 switch ($field) 927 { 928 case 'companies': 929 unset($l_fields); 930 $l_fields['company_name'] = $this->trans_table['contact.company.company_name']; 931 $l_fields['title'] = $this->trans_table['contact.business_info.title']; 932 $l_fields['department'] = $this->trans_table['contact.business_info.department']; 933 $l_fields['company_notes'] = $this->trans_table['contact.company.company_notes']; 934 935 ///Relaciona o array com o atributo 'employeeNumber' do RHDS 936 $l_fields['empNumber'] = $this->trans_table['contact.business_info.empNumber']; 937 938 $contact_data['companies'] = array(); 939 foreach($l_fields as $l_field => $l_value) 940 { 941 if (!( $contact[$l_value[0]][0])) 942 { 943 continue; 944 } 945 946 $contact_data['companies']['company1'][$l_field] = utf8_decode($contact[$l_value[0]][0]); 947 } 948 949 if (!(count($contact_data['companies']))) 950 { 951 unset($contact_data['companies']); 952 } 953 break; 954 955 case 'relations': 956 unset($l_fields); 957 if (!$this->trans_table['contact.contact_related.names_ordered']) 958 { 959 unset($contact_data['relations']); 960 } 961 962 $contact_data['relations'] = array(); 963 if (!is_array($this->trans_table['contact.contact_related.names_ordered'])) 964 { 965 if (!($trans = $this->trans_table[$this->trans_table['contact.contact_related.names_ordered']])) 966 { 967 continue; 968 } 969 970 $i = 1; 971 foreach($trans as $l_type => $l_type_fields) 972 { 973 if (!($contact[$l_type_fields[0]][0])) 974 { 975 continue; 976 } 977 978 $contact_data['relations']['relation'.$i]['type'] = $l_type; 979 $contact_data['relations']['relation'.$i]['names_ordered'] = utf8_decode($contact[$l_type_fields[0]][0]); 980 $i++; 981 } 982 } 983 984 if (!(count($contact_data['relations']))) 985 { 986 unset($contact_data['relations']); 987 } 988 break; 989 990 case 'addresses': 991 unset($l_fields); 992 $l_fields['address1'] = $this->trans_table['contact.address.address1']; 993 $l_fields['address2'] = $this->trans_table['contact.address.address2']; 994 $l_fields['complement'] = $this->trans_table['contact.address.complement']; 995 $l_fields['address_other'] = $this->trans_table['contact.address.address_other']; 996 $l_fields['postal_code'] = $this->trans_table['contact.address.postal_code']; 997 $l_fields['po_box'] = $this->trans_table['contact.address.po_box']; 998 $l_fields['id_city'] = $this->trans_table['contact.address.city.id_city']; 999 $l_fields['city_name'] = $this->trans_table['contact.address.city.city_name']; 1000 $l_fields['city_timezone'] = $this->trans_table['contact.address.city.city_timezone']; 1001 $l_fields['city_geo_location'] = $this->trans_table['contact.address.city.city_geo_location']; 1002 $l_fields['id_state'] = $this->trans_table['contact.address.city.state.id_state']; 1003 $l_fields['state_name'] = $this->trans_table['contact.address.city.state.state_name']; 1004 $l_fields['state_symbol'] = $this->trans_table['contact.address.city.state.state_symbol']; 1005 $l_fields['id_country'] = $this->trans_table['contact.address.city.country.id_country']; 1006 $l_fields['country_name'] = $this->trans_table['contact.address.city.country.country_name']; 1007 $l_fields['address_is_default'] = $this->trans_table['contact.address.address_is_default']; 1008 1009 $contact_data['addresses'] = array(); 1010 foreach($l_fields as $l_field => $l_value) 1011 { 1012 if (!is_array($l_value)) 1013 { 1014 if (!($trans = $this->trans_table[$l_value])) 1015 { 1016 continue; 1017 } 1018 1019 $i = 1; 1020 foreach($trans as $l_type => $l_type_fields) 1021 { 1022 if (!($contact[$l_type_fields[0]][0])) 1023 { 1024 continue; 1025 } 1026 1027 $contact_data['addresses']['address'.$i]['type'] = $l_type; 1028 $contact_data['addresses']['address'.$i][$l_field] = utf8_decode($contact[$l_type_fields[0]][0]); 1029 $i++; 1030 } 1031 } 1032 else 1033 { 1034 $contact_data['addresses']['address1'][$l_field] = utf8_decode($contact[$l_value[0]][0]); 1035 } 1036 } 1037 1038 if (!(count($contact_data['addresses']))) 1039 { 1040 unset($contact_data['addresses']); 1041 } 1042 break; 1043 1044 case 'connections': 1045 $preferences = ExecMethod('contactcenter.ui_preferences.get_preferences'); 1046 if (!is_array($preferences)) 1047 { 1048 $preferences['personCardEmail'] = 1; 1049 $preferences['personCardPhone'] = 2; 1050 } 1051 unset($l_fields); 1052 $l_fields['connection_name'] = $this->trans_table['contact.connection.connection_name']; 1053 $l_fields['connection_value'] = $this->trans_table['contact.connection.connection_value']; 1054 1055 $contact_data['connections'] = array(); 1056 foreach($l_fields as $l_field => $l_value) 1057 { 1058 if (!is_array($l_value)) 1059 { 1060 if (!($trans = $this->trans_table[$l_value])) 1061 { 1062 continue; 1063 } 1064 1065 $i = 1; 1066 foreach($trans as $l_type => $l_type_fields) 1067 { 1068 if (!($contact[$l_type_fields[0]][0])) 1069 { 1070 continue; 1071 } 1072 1073 switch ($l_type) 1074 { 1075 case 'email': 1076 $contact_data['connections']['connection'.$i]['id_type'] = $preferences['personCardEmail']; 1077 break; 1078 1079 default: 1080 $contact_data['connections']['connection'.$i]['id_type'] = $preferences['personCardPhone']; 1081 } 1082 $contact_data['connections']['connection'.$i]['type'] = $l_type; 1083 $contact_data['connections']['connection'.$i][$l_field] = utf8_decode($contact[$l_type_fields[0]][0]); 1084 $i++; 1085 } 1086 } 1087 else 1088 { 1089 $contact_data['connections']['connection1'][$l_field] = utf8_decode($contact[$l_value[0]][0]); 1090 } 1091 } 1092 1093 if (!(count($contact_data['connections']))) 1094 { 1095 unset($contact_data['connections']); 1096 } 1097 break; 1098 1099 case 'prefix': 1100 unset($l_fields); 1101 $l_fields = $this->trans_table['contact.prefixes.prefix']; 1102 if (!$l_fields or !$contact[$l_fields[0]][0]) 1103 { 1104 unset($contact_data['prefix']); 1105 continue; 1106 } 1107 1108 $contact_data['prefix'] = utf8_decode($contact[$l_fields[0]][0]); 1109 break; 1110 1111 case 'suffix': 1112 unset($l_fields); 1113 $l_fields = $this->trans_table['contact.suffixes.suffix']; 1114 if (!$l_fields or !$contact[$l_fields[0]][0]) 1115 { 1116 unset($contact_data['suffix']); 1117 continue; 1118 } 1119 1120 $contact_data['suffix'] = utf8_decode($contact[$l_fields[0]][0]); 1121 break; 1122 1123 case 'status': 1124 unset($l_fields); 1125 $l_fields = $this->trans_table['contact.status.status_name']; 1126 if (!$l_fields or !$contact[$l_fields[0]][0]) 1127 { 1128 unset($contact_data['status']); 1129 continue; 1130 } 1131 1132 $contact_data['status'] = utf8_decode($contact[$l_fields[0]][0]); 1133 break; 1134 1135 case 'photo': 1136 unset($l_fields); 1137 $l_fields = $this->trans_table['contact.photo']; 1138 if (!$l_fields or !$contact[$l_fields[0]][0]) 1139 { 1140 unset($contact_data['photo']); 1141 continue; 1142 } 1143 1144 $contact_data['photo'] = $contact[$l_fields[0]][0]; 1145 break; 1146 1147 default: 1148 unset($l_fields); 1149 $l_fields = $this->trans_table['contact.'.$field]; 1150 if (!$l_fields or !$contact[$l_fields[0]][0]) 1151 { 1152 unset($contact_data[$field]); 1153 continue; 1154 } 1155 1156 if(count($contact[$l_fields[0]]) > 1) 1157 { 1158 $tmp = array(); 1159 foreach ($contact[$l_fields[0]] as $i => $j) 1160 { 1161 $tmp["$i"] = utf8_decode($j); 1162 } 1163 //$contact_data[$field] = $contact[$l_fields[0]]; 1164 $contact_data[$field] = $tmp; 1165 } 1166 else 1167 $contact_data[$field] = utf8_decode($contact[$l_fields[0]][0]); 1168 1169 break; 1170 1171 } 1172 } 1173 1174 if (is_array($contact_data)) 1175 { 1176 $contacts[ldap_get_dn($ldap, $entry)] = $contact_data; 1177 } 1178 1179 } 1180 1181 return $contacts; 1182 } 1183 818 1184 function get_multiple_entries ( $id_contacts, $fields, $other_data = false ) 819 1185 { 820 1186 if (!is_array($id_contacts) or !is_array($fields) or ($other_data != false and !is_array($other_data))) 821 1187 { 822 if (is_object($GLOBALS['phpgw']->log)) 1188 if (is_object($GLOBALS['phpgw']->log)) 823 1189 { 824 1190 $GLOBALS['phpgw']->log->message(array( … … 826 1192 'line' => __LINE__, 827 1193 'file' => __FILE__)); 828 1194 829 1195 $GLOBALS['phpgw']->log->commit(); 830 1196 } … … 833 1199 } 834 1200 } 835 1201 836 1202 $contacts = array(); 837 1203 838 1204 if ($other_data) 839 1205 { 840 1206 //TODO 841 1207 } 842 843 foreach ($id_contacts as $id) 844 { 845 $contacts[$id] = $this->get_single_entry($id,$fields); 846 } 847 848 return $contacts; 1208 1209 $filter = $this->generate_filter($id_contacts); 1210 1211 //$teste = $this->get_all_entries($filter, $fields); 1212 1213 return $this->get_all_entries($filter, $fields); 1214 } 1215 1216 function generate_filter($id_contacts) 1217 { 1218 if (($size = count($id_contacts))) 1219 { 1220 $filter = '(&(objectClass='.$this->src_info['obj'] . ')(|'; 1221 for ($i = 0; $i < $size; $i++) 1222 { 1223 1224 /* 1225 * Não utiliza mais a função ldap_explode, usa a expressão regular a seguir para pegar o primeiro 1226 * componente da dn 1227 */ 1228 preg_match('/^(\w*=[^,]*),.*$/', $id_contacts[$i], $cn); 1229 1230 /* 1231 * Adicionados os str_replace para adicionar caracteres de escape em frente aos caracteres '(' e ')', 1232 * posteriormente poderá ser necessário substituir por uma expressão regular mais genérica. 1233 */ 1234 if ($cn[1]) 1235 { 1236 /* 1237 * Esta operação resolve o problema causado pela conversão de caracteres acentuados realizada 1238 * pela função ldap_explode_dn(). Talvez seja necessário utilizar esta tradução em outros lugares, 1239 * neste caso é mais apropriado colocar dentro de uma função. 1240 */ 1241 //foreach($cn as $key=>$value){ 1242 // $cn[$key]=preg_replace("/\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\1')).''", $value); 1243 //} 1244 1245 $filter .= '(' . str_replace(')', '\)', str_replace('(','\(',$cn[1])) . ')'; 1246 } 1247 } 1248 $filter .= '))'; 1249 } 1250 1251 return $filter; 1252 849 1253 } 850 1254 … … 876 1280 return null; 877 1281 } 878 1282 879 1283 function get_relations ($id_contact,$extra=false) 880 1284 { 881 1285 } 882 1286 883 1287 function get_addresses ( $id_contact,$extra=false ) 884 1288 { 885 1289 } 886 1290 887 1291 function get_connections ( $id_contact,$extra=false ) 888 1292 { 889 1293 } 890 1294 891 1295 function get_companies ( $id_contact, $extra=false ) 892 1296 { 893 1297 } 894 1298 895 1299 function get_all_prefixes ( ) 896 1300 { 897 1301 } 898 1302 899 1303 function get_all_suffixes ( ) 900 1304 { 901 1305 } 902 1306 903 1307 function get_all_status ( ) 904 1308 { 905 1309 } 906 1310 907 1311 function get_all_relations_types ( ) 908 1312 { 909 1313 } 910 1314 911 1315 function get_all_addresses_types ( ) 912 1316 { 913 1317 } 914 1318 915 1319 function get_all_connections_types ( ) 916 1320 { 917 1321 } 918 1322 919 1323 function get_vcard ( $id_contact ) 920 1324 { 921 1325 } 922 923 924 925 1326 1327 1328 1329 926 1330 function get_global_tree ( $root ) 927 1331 { 928 1332 } 929 1333 930 1334 function get_actual_brach ( ) 931 1335 { 932 1336 } 933 1337 934 1338 function set_actual_branch ( $branch ) 935 1339 {
Note: See TracChangeset
for help on using the changeset viewer.