addressbook.class.inc
来自「groupoffice」· INC 代码 · 共 1,110 行 · 第 1/3 页
INC
1,110 行
<?php/** * @copyright Intermesh 2003 * @author Merijn Schering <mschering@intermesh.nl> * @version $Revision: 1.76 $ $Date: 2006/04/10 13:21:11 $ * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. */class addressbook extends db { var $selector_is_enabled = false; function addressbook() { $this->db(); } function parse_address($address) { $address = trim($address); $address_arr['housenumber'] = ''; $address_arr['street'] = $address; if ($address != '') { $last_space = strrpos($address, ' '); if ($last_space !== false) { $address_arr['housenumber'] = substr($address, $last_space +1); $address_arr['street'] = substr($address, 0, $last_space); } } return $address_arr; } function get_addressinfo($zip) { $sql = "SELECT * FROM ab_zipcodes WHERE zip LIKE '$zip%'"; $this->query($sql); if ($this->next_record()) { return $this->Record; } return false; } function address_format($contact_id, $crlf='<br />') { if ($contact = $this->get_contact($contact_id)) { $name = format_name($contact['last_name'],$contact['first_name'],$contact['middle_name'], 'first_name'); $address = $name.$crlf; if ($contact['address'] != '') { $address .= $contact['address'].' '.$contact['address_no'].$crlf; } if ($contact['zip'] != '') { $address .= $contact['zip'].' '; } if ($contact['city'] != '') { $address .= $contact['city'].$crlf; } if ($contact['country'] != '') { $address .= $contact['country'].$crlf; } return $address; } return false; } function company_post_address_format($company_id, $crlf='<br />') { if ($company = $this->get_company($company_id)) { $address = $company['name'].$crlf; if ($company['post_address'] != '') { $address .= $company['post_address'].' '.$company['post_address_no'].$crlf; } if ($company['post_zip'] != '') { $address .= $company['post_zip'].' '; } if ($company['post_city'] != '') { $address .= $company['post_city'].$crlf; } if ($company['post_country'] != '') { $address .= $company['post_country'].$crlf; } return $address; } return false; } function update_settings($settings) { if(!isset($settings['user_id'])) { global $GO_SECURITY; $settings['user_id'] = $GO_SECURITY->user_id; } return $this->update_row('ab_settings', 'user_id', $settings); } function get_settings($user_id) { $this->query("SELECT * FROM ab_settings WHERE user_id='$user_id'"); if ($this->next_record(MYSQL_ASSOC)) { return $this->Record; } else { $this->query("INSERT INTO ab_settings ". "(user_id, search_type, search_contacts_field, "."search_companies_field, search_users_field) VALUES ". "('$user_id', 'contact','', '', '')"); return $this->get_settings($user_id); } } function select_contacts($target_field, $handler_file, $multiselect = 'true', $require_email_address = 'true', $show_users = 'true', $show_contacts = 'true', $show_companies = 'true', $show_mailings='true', $pass_value = 'email') { /*if (!$this->selector_is_enabled) { die('FATAL ERROR: called select contacts while contact_selector is not'.'enabled. Call enable_contact_selector() first outside a form!'); } else {*/ $link = "javascript:open_addressbook('$target_field',"; if ($target_field != '') { $link .= $target_field.'.value'; } else { $link .= "''"; } $link .= ", '$handler_file', '$multiselect', '$require_email_address', ". "'$show_users', '$show_contacts', '$show_companies', '$show_mailings', ". "'$pass_value');"; return $link; //} } function enable_contact_selector() { global $GO_CONFIG; return ' <form name="ab_form" action="'.$GO_CONFIG->control_url.'select/select.php" method="post" target="ab_select"> <input type="hidden" name="address_string" /> <input type="hidden" name="GO_HANDLER" /> <input type="hidden" name="GO_FIELD" /> <input type="hidden" name="multiselect" /> <input type="hidden" name="require_email_address" /> <input type="hidden" name="show_users" /> <input type="hidden" name="show_contacts" /> <input type="hidden" name="show_companies" /> <input type="hidden" name="show_mailings" /> <input type="hidden" name="pass_value" /> </form> <script type="text/javascript"> function open_addressbook(field, addresses, handler_file, multiselect, require_email_address, show_users, show_contacts, show_companies, show_mailings, pass_value) { var width = 620; var height = 400; var centered; x = (screen.availWidth - width) / 2; y = (screen.availHeight - height) / 2; centered = ",width=" + width + ",height=" + height + ",left=" + x + ",top=" + y + ",scrollbars=yes,resizable=yes,status=no"; var popup = window.open("about:blank", "ab_select", centered); document.ab_form.address_string.value = addresses; document.ab_form.GO_HANDLER.value = handler_file; document.ab_form.GO_FIELD.value = field; document.ab_form.multiselect.value = multiselect; document.ab_form.require_email_address.value = require_email_address; document.ab_form.show_users.value = show_users; document.ab_form.show_contacts.value = show_contacts; document.ab_form.show_companies.value = show_companies; document.ab_form.show_mailings.value = show_mailings; document.ab_form.pass_value.value = pass_value; document.ab_form.submit(); if (!popup.opener) popup.opener = self; popup.focus(); } </script> '; $this->selector_is_enabled = true; } function get_addressbooks() { $sql = "SELECT * FROM ab_addressbooks ORDER BY name ASC"; $this->query($sql); return $this->num_rows(); } function get_user_addressbooks($user_id) { $sql = "SELECT DISTINCT ab_addressbooks.* ". "FROM ab_addressbooks ". " INNER JOIN acl ON (ab_addressbooks.acl_read = acl.acl_id ". "OR ab_addressbooks.acl_write = acl.acl_id) ". "LEFT JOIN users_groups ON acl.group_id = users_groups.group_id ". "WHERE acl.user_id=$user_id ". "OR users_groups.user_id=$user_id ". "ORDER BY ab_addressbooks.name ASC"; $this->query($sql); return $this->num_rows(); } function add_addressbook($user_id, $name) { global $GO_SECURITY; $addressbook_id = $this->nextid('ab_addressbooks'); $acl_read = $GO_SECURITY->get_new_acl('acl_read addressbook_id: '.$addressbook_id); $acl_write = $GO_SECURITY->get_new_acl('acl_write addressbook_id: '.$addressbook_id); if ($addressbook_id > 0 && $acl_read > 0 && $acl_write > 0) { $sql = "INSERT INTO ab_addressbooks (id, user_id, name, acl_read, acl_write) VALUES ('$addressbook_id', '$user_id', '$name', '$acl_read', '$acl_write')"; if ($this->query($sql)) { $GO_SECURITY->add_user_to_acl($user_id, $acl_write); return $addressbook_id; } } else { $GO_SECURITY->delete_acl($acl_read); $GO_SECURITY->delete_acl($acl_write); } return false; } function update_addressbook($addressbook_id, $user_id, $name) { $sql = "UPDATE ab_addressbooks SET name='$name', user_id='$user_id' WHERE id='$addressbook_id'"; return $this->query($sql); } function get_addressbook_by_name($name) { $sql = "SELECT * FROM ab_addressbooks WHERE name='$name'"; $this->query($sql); if ($this->next_record()) { return $this->Record; } else { return false; } } function delete_addressbook($addressbook_id) { if($addressbook = $this->get_addressbook($addressbook_id)) { global $GO_SECURITY; $GO_SECURITY->delete_acl($addressbook['acl_read']); $GO_SECURITY->delete_acl($addressbook['acl_write']); $ab = new addressbook(); $this->get_contacts($addressbook_id); while($this->next_record()) { $ab->delete_contact($this->f('id')); } $this->get_companies($addressbook_id); while($this->next_record()) { $ab->delete_company($this->f('id')); } $sql = "DELETE FROM ab_addressbooks WHERE id='$addressbook_id'"; return $this->query($sql); } return false; } function get_addressbook($addressbook_id=0) { if($addressbook_id == 0) { global $GO_SECURITY, $GO_USERS; $sql = "SELECT * FROM ab_addressbooks WHERE user_id=".$GO_SECURITY->user_id; $this->query($sql); if($this->next_record()) { $addressbook_id = $this->f('id'); }else { $user = $GO_USERS->get_user($GO_SECURITY->user_id); $new_ab_name = format_name($user['last_name'], $user['first_name'], $user['middle_name'], 'last_name'); $x = 1; while ($this->get_addressbook_by_name(addslashes($new_ab_name))) { $new_ab_name = $_SESSION['GO_SESSION']['name'].' ('.$x.')'; $x ++; } $addressbook_id = $this->add_addressbook($GO_SECURITY->user_id, addslashes($new_ab_name)); } } $sql = "SELECT * FROM ab_addressbooks WHERE id='$addressbook_id'"; $this->query($sql); if ($this->next_record()) { return $this->Record; }else { return $this->get_addressbook(); } } function check_contact($user_id, $contact) { $sql = "SELECT id FROM ab_contacts "; $count = $this->get_user_addressbooks($user_id); if($count > 1) { while($this->next_record()) { $user_ab[] = $this->f('id'); } $sql .= "WHERE addressbook_id IN (".implode(",",$user_ab).") AND "; }elseif( $this->next_record()) { $sql .= "WHERE addressbook_id=".$this->f('id')." AND "; }else { return false; } $sql .= "((first_name='".$contact['first_name']."' AND middle_name='".$contact['middle_name']."' AND last_name='".$contact['last_name']."')"; if ($contact['email'] != '') { $sql .= " OR email='".$contact['email']."' OR email2='".$contact['email']."' OR email3='".$contact['email']."'"; } if ($contact['zip'] != '' && $contact['address_no'] != '') { $sql .= " AND (zip='".$contact['zip']."' AND address_no='".$contact['address_no']."')"; } $sql .= ");"; $this->query($sql); if ($this->next_record()) { return $this->f('id'); } return false; } function check_company($user_id, $company) { $sql = "SELECT id FROM ab_companies "; $count = $this->get_user_addressbooks($user_id); if($count > 1) { while($this->next_record()) { $user_ab[] = $this->f('id'); } $sql .= "WHERE addressbook_id IN (".implode(",",$user_ab).") AND "; }elseif( $this->next_record()) { $sql .= "WHERE addressbook_id=".$this->f('id')." AND "; }else { return false; } $sql .= "(name='".$company['name']."'"; if ($company['email'] != '') { $sql .= " OR email='".$company['email']."' "; } if ($company['zip'] != '' && $company['address_no'] != '') { $sql .= " OR (zip='".$company['zip']."' AND address_no='".$company['address_no']."')"; } $sql .= ");"; $this->query($sql); if ($this->next_record()) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?