| 
									
										
										
										
											2008-05-07 13:15:42 -04:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2008-05-20 15:14:12 -04:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2008-05-14 15:26:48 -04:00
										 |  |  |  * Laconica - a distributed open-source microblogging tool | 
					
						
							|  |  |  |  * Copyright (C) 2008, Controlez-Vous, Inc. | 
					
						
							| 
									
										
										
										
											2008-05-20 15:14:12 -04:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2008-05-14 15:26:48 -04:00
										 |  |  |  * This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU Affero General Public License as published by | 
					
						
							|  |  |  |  * the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  |  * (at your option) any later version. | 
					
						
							| 
									
										
										
										
											2008-05-20 15:14:12 -04:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2008-05-14 15:26:48 -04:00
										 |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU Affero General Public License for more details. | 
					
						
							| 
									
										
										
										
											2008-05-20 15:14:12 -04:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2008-05-14 15:26:48 -04:00
										 |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-17 11:47:01 -04:00
										 |  |  | if (!defined('LACONICA')) { exit(1); } | 
					
						
							| 
									
										
										
										
											2008-05-07 13:15:42 -04:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Table Definition for user | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | require_once 'DB/DataObject.php'; | 
					
						
							| 
									
										
										
										
											2008-05-20 14:57:56 -04:00
										 |  |  | require_once 'Validate.php'; | 
					
						
							| 
									
										
										
										
											2008-05-07 13:15:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-15 15:55:13 -04:00
										 |  |  | class User extends DB_DataObject  | 
					
						
							| 
									
										
										
										
											2008-05-07 13:15:42 -04:00
										 |  |  | { | 
					
						
							|  |  |  |     ###START_AUTOCODE
 | 
					
						
							|  |  |  |     /* the code below is auto generated do not remove the above tag */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public $__table = 'user';                            // table name
 | 
					
						
							|  |  |  |     public $id;                              // int(4)  primary_key not_null
 | 
					
						
							| 
									
										
										
										
											2008-05-15 12:28:44 -04:00
										 |  |  |     public $nickname;                        // varchar(64)  unique_key
 | 
					
						
							| 
									
										
										
										
											2008-07-31 11:27:31 -04:00
										 |  |  |     public $password;                        // varchar(255)  
 | 
					
						
							| 
									
										
										
										
											2008-05-07 13:15:42 -04:00
										 |  |  |     public $email;                           // varchar(255)  unique_key
 | 
					
						
							| 
									
										
										
										
											2008-07-17 09:25:33 -04:00
										 |  |  |     public $incomingemail;                   // varchar(255)  unique_key
 | 
					
						
							| 
									
										
										
										
											2008-07-15 18:20:26 -04:00
										 |  |  |     public $emailnotifysub;                  // tinyint(1)   default_1
 | 
					
						
							| 
									
										
										
										
											2008-07-21 09:56:37 -04:00
										 |  |  |     public $emailmicroid;                    // tinyint(1)   default_1
 | 
					
						
							| 
									
										
										
										
											2008-07-31 11:27:31 -04:00
										 |  |  |     public $language;                        // varchar(50)  
 | 
					
						
							|  |  |  |     public $timezone;                        // varchar(50)  
 | 
					
						
							| 
									
										
										
										
											2008-07-21 09:56:37 -04:00
										 |  |  |     public $emailpost;                       // tinyint(1)   default_1
 | 
					
						
							| 
									
										
										
										
											2008-06-22 11:50:28 -04:00
										 |  |  |     public $jabber;                          // varchar(255)  unique_key
 | 
					
						
							| 
									
										
										
										
											2008-07-31 11:27:31 -04:00
										 |  |  |     public $jabbernotify;                    // tinyint(1)  
 | 
					
						
							|  |  |  |     public $jabberreplies;                   // tinyint(1)  
 | 
					
						
							| 
									
										
										
										
											2008-07-21 08:00:36 -04:00
										 |  |  |     public $jabbermicroid;                   // tinyint(1)   default_1
 | 
					
						
							| 
									
										
										
										
											2008-07-31 11:27:31 -04:00
										 |  |  |     public $updatefrompresence;              // tinyint(1)  
 | 
					
						
							| 
									
										
										
										
											2008-06-22 11:50:28 -04:00
										 |  |  |     public $sms;                             // varchar(64)  unique_key
 | 
					
						
							| 
									
										
										
										
											2008-07-31 11:27:31 -04:00
										 |  |  |     public $carrier;                         // int(4)  
 | 
					
						
							|  |  |  |     public $smsnotify;                       // tinyint(1)  
 | 
					
						
							|  |  |  |     public $smsreplies;                      // tinyint(1)  
 | 
					
						
							|  |  |  |     public $smsemail;                        // varchar(255)  
 | 
					
						
							| 
									
										
										
										
											2008-05-22 14:41:09 -04:00
										 |  |  |     public $uri;                             // varchar(255)  unique_key
 | 
					
						
							| 
									
										
										
										
											2008-07-31 11:27:31 -04:00
										 |  |  |     public $autosubscribe;                   // tinyint(1)  
 | 
					
						
							| 
									
										
										
										
											2008-05-07 13:15:42 -04:00
										 |  |  |     public $created;                         // datetime()   not_null
 | 
					
						
							|  |  |  |     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* Static get */ | 
					
						
							|  |  |  |     function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('User',$k,$v); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* the code above is auto generated do not remove the tag below */ | 
					
						
							|  |  |  |     ###END_AUTOCODE
 | 
					
						
							| 
									
										
										
										
											2008-05-20 15:14:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-14 10:54:36 -04:00
										 |  |  | 	function getProfile() { | 
					
						
							| 
									
										
										
										
											2008-05-17 15:20:01 -04:00
										 |  |  | 		$profile = DB_DataObject::factory('profile'); | 
					
						
							|  |  |  | 		$profile->id = $this->id; | 
					
						
							|  |  |  | 		if ($profile->find()) { | 
					
						
							|  |  |  | 			$profile->fetch(); | 
					
						
							|  |  |  | 			return $profile; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											2008-05-14 10:54:36 -04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-05-20 15:14:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-14 10:54:36 -04:00
										 |  |  | 	function isSubscribed($other) { | 
					
						
							|  |  |  | 		assert(!is_null($other)); | 
					
						
							|  |  |  | 		$sub = DB_DataObject::factory('subscription'); | 
					
						
							|  |  |  | 		$sub->subscriber = $this->id; | 
					
						
							|  |  |  | 		$sub->subscribed = $other->id; | 
					
						
							|  |  |  | 		return $sub->find(); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-06-22 10:56:44 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	# 'update' won't write key columns, so we have to do it ourselves.
 | 
					
						
							| 
									
										
										
										
											2008-07-09 18:46:30 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-22 10:56:44 -04:00
										 |  |  | 	function updateKeys(&$orig) { | 
					
						
							|  |  |  | 		$parts = array(); | 
					
						
							| 
									
										
										
										
											2008-07-21 09:56:37 -04:00
										 |  |  | 		foreach (array('nickname', 'email', 'jabber', 'incomingemail', 'sms', 'carrier', 'smsemail', 'language', 'timezone') as $k) { | 
					
						
							| 
									
										
										
										
											2008-06-22 11:32:20 -04:00
										 |  |  | 			if (strcmp($this->$k, $orig->$k) != 0) { | 
					
						
							| 
									
										
										
										
											2008-06-22 11:16:11 -04:00
										 |  |  | 				$parts[] = $k . ' = ' . $this->_quote($this->$k); | 
					
						
							| 
									
										
										
										
											2008-06-22 10:56:44 -04:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if (count($parts) == 0) { | 
					
						
							|  |  |  | 			# No changes
 | 
					
						
							| 
									
										
										
										
											2008-06-22 11:16:11 -04:00
										 |  |  | 			return true; | 
					
						
							| 
									
										
										
										
											2008-06-22 10:56:44 -04:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		$toupdate = implode(', ', $parts); | 
					
						
							| 
									
										
										
										
											2008-07-09 18:46:30 -04:00
										 |  |  | 		$qry = 'UPDATE ' . $this->tableName() . ' SET ' . $toupdate . | 
					
						
							| 
									
										
										
										
											2008-06-22 10:56:44 -04:00
										 |  |  | 		  ' WHERE id = ' . $this->id; | 
					
						
							|  |  |  | 		return $this->query($qry); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-07-09 18:46:30 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-22 14:04:37 -04:00
										 |  |  | 	function allowed_nickname($nickname) { | 
					
						
							|  |  |  | 		# XXX: should already be validated for size, content, etc.
 | 
					
						
							|  |  |  | 		static $blacklist = array('rss', 'xrds', 'doc', 'main', | 
					
						
							| 
									
										
										
										
											2008-07-09 18:31:44 -04:00
										 |  |  | 								  'settings', 'notice', 'user', | 
					
						
							| 
									
										
										
										
											2008-07-11 13:11:13 -04:00
										 |  |  | 								  'search', 'avatar'); | 
					
						
							| 
									
										
										
										
											2008-06-22 14:04:37 -04:00
										 |  |  | 		$merged = array_merge($blacklist, common_config('nickname', 'blacklist')); | 
					
						
							|  |  |  | 		return !in_array($nickname, $merged); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-06-22 23:08:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-07 01:43:58 -04:00
										 |  |  | 	function getCurrentNotice($dt=NULL) { | 
					
						
							|  |  |  | 		$profile = $this->getProfile(); | 
					
						
							| 
									
										
										
										
											2008-07-07 02:23:47 -04:00
										 |  |  | 		if (!$profile) { | 
					
						
							|  |  |  | 			return NULL; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2008-07-07 01:43:58 -04:00
										 |  |  | 		return $profile->getCurrentNotice($dt); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-07-20 15:30:05 -04:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	function getCarrier() { | 
					
						
							|  |  |  | 		return Sms_carrier::staticGet($this->carrier); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-07-20 16:16:20 -04:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	function subscribeTo($other) { | 
					
						
							|  |  |  | 		$sub = new Subscription(); | 
					
						
							|  |  |  | 		$sub->subscriber = $this->id; | 
					
						
							|  |  |  | 		$sub->subscribed = $other->id; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$sub->created = DB_DataObject_Cast::dateTime(); # current time
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (!$sub->insert()) { | 
					
						
							|  |  |  | 			return false; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		 | 
					
						
							| 
									
										
										
										
											2008-07-20 19:33:08 -04:00
										 |  |  | 		return true; | 
					
						
							| 
									
										
										
										
											2008-07-20 16:16:20 -04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-07-22 12:15:49 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	function noticesWithFriends($offset=0, $limit=20) { | 
					
						
							| 
									
										
										
										
											2008-07-22 12:02:13 -04:00
										 |  |  | 		 | 
					
						
							|  |  |  | 		$notice = new Notice(); | 
					
						
							|  |  |  | 		 | 
					
						
							| 
									
										
										
										
											2008-07-22 12:31:16 -04:00
										 |  |  | 		$notice->query('SELECT notice.* ' . | 
					
						
							|  |  |  | 					   'FROM notice JOIN subscription on notice.profile_id = subscription.subscribed ' . | 
					
						
							|  |  |  | 					   'WHERE subscription.subscriber = ' . $this->id . ' ' . | 
					
						
							|  |  |  | 					   'ORDER BY created DESC, notice.id DESC ' . | 
					
						
							|  |  |  | 					   'LIMIT ' . $offset . ', ' . $limit); | 
					
						
							| 
									
										
										
										
											2008-07-22 12:02:13 -04:00
										 |  |  | 		 | 
					
						
							| 
									
										
										
										
											2008-07-22 12:31:16 -04:00
										 |  |  | 		return $notice; | 
					
						
							| 
									
										
										
										
											2008-07-22 12:02:13 -04:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-08-13 20:20:38 -04:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	static function register($fields) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-25 14:41:04 -04:00
										 |  |  | 		# MAGICALLY put fields into current scope
 | 
					
						
							|  |  |  | 		 | 
					
						
							| 
									
										
										
										
											2008-08-13 20:20:38 -04:00
										 |  |  | 		extract($fields); | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		$profile = new Profile(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$profile->query('BEGIN'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$profile->nickname = $nickname; | 
					
						
							|  |  |  | 		$profile->profileurl = common_profile_url($nickname); | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		if ($fullname) { | 
					
						
							|  |  |  | 			$profile->fullname = $fullname; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if ($homepage) { | 
					
						
							|  |  |  | 			$profile->homepage = $homepage; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if ($bio) { | 
					
						
							|  |  |  | 			$profile->bio = $bio; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if ($location) { | 
					
						
							|  |  |  | 			$profile->location = $location; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2008-08-25 14:41:04 -04:00
										 |  |  | 		 | 
					
						
							|  |  |  | 		$profile->created = common_sql_now(); | 
					
						
							| 
									
										
										
										
											2008-08-13 20:20:38 -04:00
										 |  |  | 		 | 
					
						
							|  |  |  | 		$id = $profile->insert(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (!$id) { | 
					
						
							|  |  |  | 			common_log_db_error($profile, 'INSERT', __FILE__); | 
					
						
							|  |  |  | 		    return FALSE; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		$user = new User(); | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		$user->id = $id; | 
					
						
							|  |  |  | 		$user->nickname = $nickname; | 
					
						
							| 
									
										
										
										
											2008-08-25 14:41:04 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		if ($password) { # may not have a password for OpenID users
 | 
					
						
							|  |  |  | 			$user->password = common_munge_password($password, $id); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		$user->created = common_sql_now(); | 
					
						
							| 
									
										
										
										
											2008-08-13 20:20:38 -04:00
										 |  |  | 		$user->uri = common_user_uri($user); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$result = $user->insert(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (!$result) { | 
					
						
							|  |  |  | 			common_log_db_error($user, 'INSERT', __FILE__); | 
					
						
							|  |  |  | 			return FALSE; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		# Everyone is subscribed to themself
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$subscription = new Subscription(); | 
					
						
							|  |  |  | 		$subscription->subscriber = $user->id; | 
					
						
							|  |  |  | 		$subscription->subscribed = $user->id; | 
					
						
							|  |  |  | 		$subscription->created = $user->created; | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		$result = $subscription->insert(); | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		if (!$result) { | 
					
						
							|  |  |  | 			common_log_db_error($subscription, 'INSERT', __FILE__); | 
					
						
							|  |  |  | 			return FALSE; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		if ($email) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			$confirm = new Confirm_address(); | 
					
						
							|  |  |  | 			$confirm->code = common_confirmation_code(128); | 
					
						
							|  |  |  | 			$confirm->user_id = $user->id; | 
					
						
							|  |  |  | 			$confirm->address = $email; | 
					
						
							|  |  |  | 			$confirm->address_type = 'email'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			$result = $confirm->insert(); | 
					
						
							|  |  |  | 			if (!$result) { | 
					
						
							|  |  |  | 				common_log_db_error($confirm, 'INSERT', __FILE__); | 
					
						
							|  |  |  | 				return FALSE; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$profile->query('COMMIT'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if ($email) { | 
					
						
							|  |  |  | 			mail_confirm_address($confirm->code, | 
					
						
							|  |  |  | 								 $profile->nickname, | 
					
						
							|  |  |  | 								 $email); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return $user; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2008-05-07 13:15:42 -04:00
										 |  |  | } |