$val) { $res[$key] = trim($val); } return $res; } function echoIfSet($addr_array, $key) { echo getIfSetFromAddr($addr_array, $key); } function deleteAddresses($part_sql) { global $db, $keep_history, $domain_id, $base_from_where, $table, $table_grp_adr, $table_groups; $sql = "SELECT * FROM $base_from_where AND ".$part_sql; $result = mysqli_query($db, $sql); $resultsnumber = mysqli_num_rows($result); $is_valid = $resultsnumber > 0; if($is_valid) { if($keep_history) { $sql = "UPDATE $table SET deprecated = now() WHERE deprecated is null AND ".$part_sql." AND domain_id = ".$domain_id; mysqli_query($db, $sql); $sql = "UPDATE $table_grp_adr SET deprecated = now() WHERE deprecated is null AND ".$part_sql." AND domain_id = ".$domain_id; mysqli_query($db, $sql); } else { $sql = "DELETE FROM $table_grp_adr WHERE ".$part_sql." AND domain_id = ".$domain_id; mysqli_query($db, $sql); $sql = "DELETE FROM $table WHERE ".$part_sql." AND domain_id = ".$domain_id; mysqli_query($db, $sql); } } return $is_valid; } function saveAddress($addr_array, $group_name = "") { global $db, $domain_id, $table, $table_grp_adr, $table_groups, $month_lookup, $base_from_where; if(isset($addr_array['id'])) { $set_id = "'".$addr_array['id']."'"; $src_tbl = $month_lookup." WHERE bmonth_num = 1"; } else { $set_id = "ifnull(max(id),0)+1"; // '0' is a bad ID $src_tbl = $table; } $sql = "INSERT INTO $table ( domain_id, id, firstname, middlename, lastname, nickname, company, title, address, home, mobile, work, fax, email, email2, email3, homepage, aday, amonth, ayear, bday, bmonth, byear, address2, phone2, photo, notes, created, modified) SELECT $domain_id domain_id , ".$set_id." id , '".getIfSetFromAddr($addr_array, 'firstname')."' firstname , '".getIfSetFromAddr($addr_array, 'middlename')."' lastname , '".getIfSetFromAddr($addr_array, 'lastname')."' lastname , '".getIfSetFromAddr($addr_array, 'nickname')."' nickname , '".getIfSetFromAddr($addr_array, 'company')."' company , '".getIfSetFromAddr($addr_array, 'title')."' title , '".getIfSetFromAddr($addr_array, 'address')."' address , '".getIfSetFromAddr($addr_array, 'home')."' home , '".getIfSetFromAddr($addr_array, 'mobile')."' mobile , '".getIfSetFromAddr($addr_array, 'work')."' work , '".getIfSetFromAddr($addr_array, 'fax')."' fax , '".getIfSetFromAddr($addr_array, 'email')."' email , '".getIfSetFromAddr($addr_array, 'email2')."' email2 , '".getIfSetFromAddr($addr_array, 'email3')."' email3 , '".getIfSetFromAddr($addr_array, 'homepage')."' homepage , '".getIfSetFromAddr($addr_array, 'aday')."' aday , '".getIfSetFromAddr($addr_array, 'amonth')."' amonth , '".getIfSetFromAddr($addr_array, 'ayear')."' ayear , '".getIfSetFromAddr($addr_array, 'bday')."' bday , '".getIfSetFromAddr($addr_array, 'bmonth')."' bmonth , '".getIfSetFromAddr($addr_array, 'byear')."' byear , '".getIfSetFromAddr($addr_array, 'address2')."' address2 , '".getIfSetFromAddr($addr_array, 'phone2')."' phone2 , '".getIfSetFromAddr($addr_array, 'photo')."' photo , '".getIfSetFromAddr($addr_array, 'notes')."' notes , now(), now() FROM ".$src_tbl; $result = mysqli_query($db, $sql); if(mysqli_errno($db) > 0) { echo "MySQL: ".mysqli_errno().": ".mysqli_error(); } $sql = "SELECT max(id) max_id from $table"; $result = mysqli_query($db, $sql); $rec = mysqli_fetch_array($result); $id = $rec['max_id']; if(!isset($addr_array['id']) && $group_name) { $sql = "INSERT INTO $table_grp_adr SELECT $domain_id domain_id, $id id, group_id, now(), now(), NULL FROM $table_groups WHERE group_name = '$group_name'"; $result = mysqli_query($db, $sql); } return $id; } function updateAddress($addr, $keep_photo = true) { global $db, $keep_history, $domain_id, $base_from_where, $table, $table_grp_adr, $table_groups, $only_phone; $addresses = Addresses::withID($addr['id']); $resultsnumber = $addresses->count(); $homepage = str_replace('http://', '', $addr['homepage']); $is_valid = $resultsnumber > 0; if($is_valid) { if($keep_history) { // Get current photo, if "$keep_photo" if($keep_photo) { $r = $addresses->nextAddress()->getData(); $addr['photo'] = $r['photo']; } $sql = "UPDATE $table SET deprecated = now() WHERE deprecated is null AND id = '".$addr['id']."' AND domain_id = '".$domain_id."';"; $result = mysqli_query($db, $sql); saveAddress($addr); } else { $sql = "UPDATE $table SET firstname = '".$addr['firstname']."' , lastname = '".$addr['lastname']."' , middlename = '".$addr['middlename']."' , nickname = '".$addr['nickname']."' , company = '".$addr['company']."' , title = '".$addr['title']."' , address = '".$addr['address']."' , home = '".$addr['home']."' , mobile = '".$addr['mobile']."' , work = '".$addr['work']."' , fax = '".$addr['fax']."' , email = '".$addr['email']."' , email2 = '".$addr['email2']."' , email3 = '".$addr['email3']."' , homepage = '".$addr['homepage']."' , aday = '".$addr['aday']."' , amonth = '".$addr['amonth']."' , ayear = '".$addr['ayear']."' , bday = '".$addr['bday']."' , bmonth = '".$addr['bmonth']."' , byear = '".$addr['byear']."' , address2 = '".$addr['address2']."' , phone2 = '".$addr['phone2']."' , notes = '".$addr['notes']."' ".($keep_photo ? "" : ", photo = '".$addr['photo']."'")." , modified = now() WHERE id = '".$addr['id']."' AND domain_id = '$domain_id';"; $result = mysqli_query($db, $sql); } // header("Location: view?id=$id"); } return $is_valid; } $phone_delims = array("'", '/', "-", " ", "(", ")", "."); class Address { private $address; // mother of all data private $phones; private $emails; function __construct($data) { $this->address = $data; $this->phones = $this->getPhones(); $this->emails = $this->getEMails(); } public function getData() { return $this->address; } public function getEMails() { $result = array(); if($this->address["email"] != "") $result[] = $this->address["email"]; if($this->address["email2"] != "") $result[] = $this->address["email2"]; if($this->address["email3"] != "") $result[] = $this->address["email3"]; return $result; } public function firstEMail() { return (!empty($this->emails) ? $this->emails[0] : ""); } public function getBirthday() { return new Birthday($this->address, "b"); } // // Phone order home->mobile->work->phone2 // public function getPhones() { $phones = array(); if($this->address["home"] != "") $phones[] = $this->address["home"]; if($this->address["mobile"] != "") $phones[] = $this->address["mobile"]; if($this->address["work"] != "") $phones[] = $this->address["work"]; if($this->address["phone2"] != "") $phones[] = $this->address["phone2"]; return $phones; } public function hasPhone() { return !empty($this->phones); } public function firstPhone() { return (!empty($this->phones) ? $this->phones[0] : ""); } // // Create a unified format for comparison an display. // public function unifyPhones( $phones , $prefix = "" , $remove_prefix = false ) { global $intl_prefix_reg, $default_provider, $phone_delims; $unifons = array(); // Remove all optical delimiters foreach($phones as $phone) { foreach($phone_delims as $phone_delim) { $phone = str_replace($phone_delim, "", $phone); } if($prefix != "" || $remove_prefix = true) { // Replace 00xxx => +xx $phone = preg_replace('/^00/', "+", $phone); // Replace 0 with $prefix (00 is already "+") if($prefix != "") { $phone = preg_replace('/^0/', $prefix, $phone); } // Replace xx (0) yy => xxyy $phone = preg_replace("/^(".$intl_prefix_reg.")0/", '${1}', $phone); // Replace +xx with 0 if($remove_prefix) { if(isset($default_provider)) { $remove_prefixes = str_replace("+", "\+",$default_provider); } else { $remove_prefixes = $intl_prefix_reg; } $phone = preg_replace("/^(".$remove_prefixes.")/", "0", $phone); } } $unifons[] = $phone; } return $unifons; } public function unifyPhone( $prefix = "" , $remove_prefix = false ) { $phones = array(); $phones[] = $this->firstPhone(); $unifons = $this->unifyPhones($phones, $prefix, $remove_prefix); return $unifons[0]; } // // Show the phone number in the shortes readable format. // public function shortPhone() { return $this->unifyPhone(); } public function shortPhones() { return $this->unifyPhones($this->getPhones()); } public function getPhoto($only_phone = false) { $b64 = explode(";", $this->address["photo"]); if(count($b64) >= 3 && ! $only_phone) { $b64 = $b64[2]; $b64 = explode(":", $b64); if(count($b64) >= 2) { $b64 = str_replace(" ", "", $b64[1]); return ($this->address["photo"] != "" ? 'Embedded Image
' : ""); } } } } class Addresses { private $result; function likePhone($row, $searchword) { global $db, $phone_delims; $replace = $row; $like = "'$searchword'"; foreach($phone_delims as $phone_delim) { $replace = "replace(".$replace.", '".mysqli_real_escape_string($db, $phone_delim)."','')"; $like = "replace(".$like. ", '".mysqli_real_escape_string($db, $phone_delim)."','')"; } return $replace." LIKE CONCAT('%',".$like.",'%')"; } protected function loadBy($load_type, $searchstring, $alphabet = "") { global $db, $base_from_where, $table; $sql = "SELECT DISTINCT $table.* FROM $base_from_where"; if($load_type == 'id') { $sql .= " AND $table.id='$searchstring'"; } elseif ($searchstring) { $searchwords = explode(" ", $searchstring); foreach($searchwords as $searchword) { $sql .= "AND ( lastname LIKE '%$searchword%' OR middlename LIKE '%$searchword%' OR firstname LIKE '%$searchword%' OR nickname LIKE '%$searchword%' OR company LIKE '%$searchword%' OR address LIKE '%$searchword%' OR ".$this->likePhone('home', $searchword)." OR ".$this->likePhone('work', $searchword)." OR ".$this->likePhone('mobile', $searchword)." OR ".$this->likePhone('fax', $searchword)." OR email LIKE '%$searchword%' OR email2 LIKE '%$searchword%' OR email3 LIKE '%$searchword%' OR address2 LIKE '%$searchword%' OR notes LIKE '%$searchword%' )"; } } if($alphabet) { $sql .= "AND ( lastname LIKE '$alphabet%' OR middlename LIKE '$alphabet%' OR nickname LIKE '$alphabet%' OR firstname LIKE '$alphabet%' )"; } if(true) { $sql .= "ORDER BY lastname, firstname ASC"; } else { $sql .= "ORDER BY firstname, lastname ASC"; } //* Paging $page = 1; $pagesize = 2200; if($pagesize > 0) { $sql .= " LIMIT ".($page-1)*$pagesize.",".$pagesize; } //*/ $this->result = mysqli_query($db, $sql); } public static function withSearchString($searchstring, $alphabet = "") { $instance = new self(); $instance->loadBy($searchstring, $alphabet); return $instance; } public static function withID( $id ) { $instance = new self(); $instance->loadBy('id', $id ); return $instance; } public function nextAddress() { $myrow = mysqli_fetch_array($this->result); if($myrow) { return new Address(trimAll($myrow)); } else { return false; } } public function getResults() { return $this->result; } public function count() { return mysqli_num_rows($this->getResults()); } } ?>