⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addressbook.class.inc

📁 国外很不错的一个开源OA系统Group-Office
💻 INC
📖 第 1 页 / 共 3 页
字号:
<?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 + -