📄 addressbook.class.inc
字号:
<?php/** * @copyright Intermesh 2003 * @author Merijn Schering <mschering@intermesh.nl> * @version $Revision: 1.91 $ $Date: 2006/12/05 11:37:30 $ * * 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 is_duplicate_contact($contact) { $contact = array_map('addslashes', $contact); $contact['email']=isset($contact['email']) ? $contact['email'] : ''; $contact['first_name']=isset($contact['first_name']) ? $contact['first_name'] : ''; $contact['middle_name']=isset($contact['middle_name']) ? $contact['middle_name'] : ''; $contact['last_name']=isset($contact['last_name']) ? $contact['last_name'] : ''; $sql = "SELECT id FROM ab_contacts WHERE ". "addressbook_id='".$contact['addressbook_id']."' AND ". "first_name='".$contact['first_name']."' AND ". "middle_name='".$contact['middle_name']."' AND ". "last_name='".$contact['last_name']."' AND ". "email='".$contact['email']."'"; $this->query($sql); if($this->next_record()) { return $this->f('id'); } return false; } 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) { $zip = str_replace(' ', '', $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, $start=0, $offset=0) { $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); $count= $this->num_rows(); if($offset>0) { $sql .= " LIMIT $start, $offset"; $this->query($sql); } return $count; } function get_writable_addressbooks($user_id, $start=0, $offset=0) { $sql = "SELECT DISTINCT ab_addressbooks.* ". "FROM ab_addressbooks ". " INNER JOIN acl ON 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); $count= $this->num_rows(); if($offset>0) { $sql .= " LIMIT $start, $offset"; $this->query($sql); } return $count; } function get_first_writable_addressbook($user_id) { global $GO_SECURITY; $sql = "SELECT DISTINCT ab_addressbooks.* ". "FROM ab_addressbooks ". " INNER JOIN acl ON ab_addressbooks.acl_write = acl.acl_id ". "LEFT JOIN users_groups ON acl.group_id = users_groups.group_id ". "WHERE acl.user_id=".$GO_SECURITY->user_id." ". "OR users_groups.user_id=".$GO_SECURITY->user_id." ". "ORDER BY ab_addressbooks.name ASC"; $this->query($sql); if($this->next_record()) { return $this->Record; } return $this->get_addressbook(); } 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); $this->get_writable_addressbooks($GO_SECURITY->user_id); 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 ++; } if(!$addressbook_id = $this->add_addressbook($GO_SECURITY->user_id, addslashes($new_ab_name))) { return false; } } } $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 get_user_addressbook_ids($user_id) { if(!isset($_SESSION['GO_SESSION'][$user_id]['authorized_addressbooks'])) { $_SESSION['GO_SESSION'][$user_id]['authorized_addressbooks'] = array(); $this->get_user_addressbooks($user_id); while($this->next_record()) { $_SESSION['GO_SESSION'][$user_id]['authorized_addressbooks'][] = $this->f('id'); } } return $_SESSION['GO_SESSION'][$user_id]['authorized_addressbooks']; } function get_writable_addressbook_ids($user_id) { if(!isset($_SESSION['GO_SESSION'][$user_id]['writable_addressbooks'])) { $_SESSION['GO_SESSION'][$user_id]['writable_addressbooks'] = array(); $this->get_writable_addressbooks($user_id); while($this->next_record()) { $_SESSION['GO_SESSION'][$user_id]['writable_addressbooks'][] = $this->f('id'); } } return $_SESSION['GO_SESSION'][$user_id]['writable_addressbooks']; } function check_contact($user_id, $contact) { $sql = "SELECT id FROM ab_contacts "; $user_ab = $this->get_user_addressbook_ids($user_id); if(count($user_ab) > 1) { $sql .= "WHERE addressbook_id IN (".implode(",",$user_ab).") AND "; }elseif(count($user_ab)==1) { $sql .= "WHERE addressbook_id=".$user_ab[0]." 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 "; $user_ab = $this->get_user_addressbook_ids($user_id); if(count($user_ab) > 1) { $sql .= "WHERE addressbook_id IN (".implode(",",$user_ab).") AND "; }elseif(count($user_ab)==1) { $sql .= "WHERE addressbook_id=".$user_ab[0]." AND "; }else { return false; } $sql .= "(name='".$company['name']."'";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -