| 
									
										
										
										
											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-14 15:26:48 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-07 13:15:42 -04:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Table Definition for profile | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2008-09-26 12:18:24 -04:00
										 |  |  | require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; | 
					
						
							| 
									
										
										
										
											2008-05-07 13:15:42 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-10 12:47:22 -05:00
										 |  |  | class Profile extends Memcached_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 = 'profile';                         // table name
 | 
					
						
							|  |  |  |     public $id;                              // int(4)  primary_key not_null
 | 
					
						
							| 
									
										
										
										
											2008-07-10 00:51:26 -04:00
										 |  |  |     public $nickname;                        // varchar(64)  multiple_key not_null
 | 
					
						
							|  |  |  |     public $fullname;                        // varchar(255)  multiple_key
 | 
					
						
							| 
									
										
										
										
											2008-12-10 12:47:22 -05:00
										 |  |  |     public $profileurl;                      // varchar(255)
 | 
					
						
							| 
									
										
										
										
											2008-07-10 00:51:26 -04:00
										 |  |  |     public $homepage;                        // varchar(255)  multiple_key
 | 
					
						
							|  |  |  |     public $bio;                             // varchar(140)  multiple_key
 | 
					
						
							|  |  |  |     public $location;                        // varchar(255)  multiple_key
 | 
					
						
							| 
									
										
										
										
											2008-05-07 13:15:42 -04:00
										 |  |  |     public $created;                         // datetime()   not_null
 | 
					
						
							|  |  |  |     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* Static get */ | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     function staticGet($k,$v=null) | 
					
						
							|  |  |  |     { return Memcached_DataObject::staticGet('Profile',$k,$v); } | 
					
						
							| 
									
										
										
										
											2008-05-07 13:15:42 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* the code above is auto generated do not remove the tag below */ | 
					
						
							|  |  |  |     ###END_AUTOCODE
 | 
					
						
							| 
									
										
										
										
											2008-05-20 15:14:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     function getAvatar($width, $height=null) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         if (is_null($height)) { | 
					
						
							|  |  |  |             $height = $width; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return Avatar::pkeyGet(array('profile_id' => $this->id, | 
					
						
							|  |  |  |                                      'width' => $width, | 
					
						
							|  |  |  |                                      'height' => $height)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     function getOriginalAvatar() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $avatar = DB_DataObject::factory('avatar'); | 
					
						
							|  |  |  |         $avatar->profile_id = $this->id; | 
					
						
							|  |  |  |         $avatar->original = true; | 
					
						
							|  |  |  |         if ($avatar->find(true)) { | 
					
						
							|  |  |  |             return $avatar; | 
					
						
							|  |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:21:29 -05:00
										 |  |  |             return null; | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-04 19:32:15 -05:00
										 |  |  |     function setOriginal($filename) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |         $imagefile = new ImageFile($this->id, Avatar::path($filename)); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $avatar = new Avatar(); | 
					
						
							|  |  |  |         $avatar->profile_id = $this->id; | 
					
						
							| 
									
										
										
										
											2009-02-04 19:32:15 -05:00
										 |  |  |         $avatar->width = $imagefile->width; | 
					
						
							|  |  |  |         $avatar->height = $imagefile->height; | 
					
						
							|  |  |  |         $avatar->mediatype = image_type_to_mime_type($imagefile->type); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $avatar->filename = $filename; | 
					
						
							|  |  |  |         $avatar->original = true; | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |         $avatar->url = Avatar::url($filename); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $avatar->created = DB_DataObject_Cast::dateTime(); # current time
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # XXX: start a transaction here
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-04 19:32:15 -05:00
										 |  |  |         if (!$this->delete_avatars() || !$avatar->insert()) { | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |             @unlink(Avatar::path($filename)); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:21:29 -05:00
										 |  |  |             return null; | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) { | 
					
						
							|  |  |  |             # We don't do a scaled one if original is our scaled size
 | 
					
						
							|  |  |  |             if (!($avatar->width == $size && $avatar->height == $size)) { | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-04 19:32:15 -05:00
										 |  |  |                 $scaled_filename = $imagefile->resize($size); | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-04 19:32:15 -05:00
										 |  |  |                 //$scaled = DB_DataObject::factory('avatar');
 | 
					
						
							|  |  |  |                 $scaled = new Avatar(); | 
					
						
							|  |  |  |                 $scaled->profile_id = $this->id; | 
					
						
							|  |  |  |                 $scaled->width = $size; | 
					
						
							|  |  |  |                 $scaled->height = $size; | 
					
						
							|  |  |  |                 $scaled->original = false; | 
					
						
							|  |  |  |                 $scaled->mediatype = image_type_to_mime_type($imagefile->type); | 
					
						
							|  |  |  |                 $scaled->filename = $scaled_filename; | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |                 $scaled->url = Avatar::url($scaled_filename); | 
					
						
							| 
									
										
										
										
											2009-02-04 19:32:15 -05:00
										 |  |  |                 $scaled->created = DB_DataObject_Cast::dateTime(); # current time
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if (!$scaled->insert()) { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:21:29 -05:00
										 |  |  |                     return null; | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $avatar; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-21 13:57:18 -05:00
										 |  |  |     function delete_avatars($original=true) | 
					
						
							| 
									
										
										
										
											2008-12-25 09:46:01 -05:00
										 |  |  |     { | 
					
						
							|  |  |  |         $avatar = new Avatar(); | 
					
						
							|  |  |  |         $avatar->profile_id = $this->id; | 
					
						
							|  |  |  |         $avatar->find(); | 
					
						
							|  |  |  |         while ($avatar->fetch()) { | 
					
						
							|  |  |  |             if ($avatar->original) { | 
					
						
							|  |  |  |                 if ($original == false) { | 
					
						
							|  |  |  |                     continue; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             $avatar->delete(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     function getBestName() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         return ($this->fullname) ? $this->fullname : $this->nickname; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-07-07 01:43:58 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Get latest notice on or before date; default now
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     function getCurrentNotice($dt=null) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $notice = new Notice(); | 
					
						
							|  |  |  |         $notice->profile_id = $this->id; | 
					
						
							|  |  |  |         if ($dt) { | 
					
						
							|  |  |  |             $notice->whereAdd('created < "' . $dt . '"'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $notice->orderBy('created DESC, notice.id DESC'); | 
					
						
							|  |  |  |         $notice->limit(1); | 
					
						
							|  |  |  |         if ($notice->find(true)) { | 
					
						
							|  |  |  |             return $notice; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2008-12-23 14:21:29 -05:00
										 |  |  |         return null; | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     function getNotices($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-05-01 11:27:57 -07:00
										 |  |  |         // XXX: I'm not sure this is going to be any faster. It probably isn't.
 | 
					
						
							|  |  |  |         $ids = Notice::stream(array($this, '_streamDirect'), | 
					
						
							|  |  |  |                               array(), | 
					
						
							|  |  |  |                               'profile:notice_ids:' . $this->id, | 
					
						
							|  |  |  |                               $offset, $limit, $since_id, $before_id); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return Notice::getStreamByIds($ids); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function _streamDirect($offset, $limit, $since_id, $before_id, $since) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $notice = new Notice(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $notice->profile_id = $this->id; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $notice->selectAdd(); | 
					
						
							|  |  |  |         $notice->selectAdd('id'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($since_id != 0) { | 
					
						
							|  |  |  |             $notice->whereAdd('id > ' . $since_id); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($before_id != 0) { | 
					
						
							|  |  |  |             $notice->whereAdd('id < ' . $before_id); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!is_null($since)) { | 
					
						
							|  |  |  |             $notice->whereAdd('created > \'' . date('Y-m-d H:i:s', $since) . '\''); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $notice->orderBy('id DESC'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!is_null($offset)) { | 
					
						
							|  |  |  |             $notice->limit($offset, $limit); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $ids = array(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($notice->find()) { | 
					
						
							|  |  |  |             while ($notice->fetch()) { | 
					
						
							|  |  |  |                 $ids[] = $notice->id; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $ids; | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-01-21 13:57:18 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     function isMember($group) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $mem = new Group_member(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $mem->group_id = $group->id; | 
					
						
							|  |  |  |         $mem->profile_id = $this->id; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($mem->find()) { | 
					
						
							|  |  |  |             return true; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function isAdmin($group) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $mem = new Group_member(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $mem->group_id = $group->id; | 
					
						
							|  |  |  |         $mem->profile_id = $this->id; | 
					
						
							|  |  |  |         $mem->is_admin = 1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($mem->find()) { | 
					
						
							|  |  |  |             return true; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |     function avatarUrl($size=AVATAR_PROFILE_SIZE) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $avatar = $this->getAvatar($size); | 
					
						
							|  |  |  |         if ($avatar) { | 
					
						
							|  |  |  |             return $avatar->displayUrl(); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             return Avatar::defaultImage($size); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-05-07 13:15:42 -04:00
										 |  |  | } |