| 
									
										
										
										
											2008-05-15 12:28:44 -04:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Table Definition for avatar | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2008-09-26 12:18:24 -04:00
										 |  |  | require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; | 
					
						
							| 
									
										
										
										
											2008-05-15 12:28:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-22 17:52:02 -04:00
										 |  |  | class Avatar extends Managed_DataObject | 
					
						
							| 
									
										
										
										
											2008-05-15 12:28:44 -04:00
										 |  |  | { | 
					
						
							|  |  |  |     ###START_AUTOCODE
 | 
					
						
							|  |  |  |     /* the code below is auto generated do not remove the above tag */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public $__table = 'avatar';                          // table name
 | 
					
						
							|  |  |  |     public $profile_id;                      // int(4)  primary_key not_null
 | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |     public $original;                        // tinyint(1)
 | 
					
						
							| 
									
										
										
										
											2008-05-15 12:28:44 -04:00
										 |  |  |     public $width;                           // int(4)  primary_key not_null
 | 
					
						
							|  |  |  |     public $height;                          // int(4)  primary_key not_null
 | 
					
						
							|  |  |  |     public $mediatype;                       // varchar(32)   not_null
 | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |     public $filename;                        // varchar(255)
 | 
					
						
							| 
									
										
										
										
											2008-05-19 09:40:57 -04:00
										 |  |  |     public $url;                             // varchar(255)  unique_key
 | 
					
						
							|  |  |  |     public $created;                         // datetime()   not_null
 | 
					
						
							|  |  |  |     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 | 
					
						
							| 
									
										
										
										
											2008-05-15 12:28:44 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* the code above is auto generated do not remove the tag below */ | 
					
						
							|  |  |  |     ###END_AUTOCODE
 | 
					
						
							| 
									
										
										
										
											2011-08-02 11:54:27 -04:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											2011-08-22 17:52:02 -04:00
										 |  |  |     public static function schemaDef() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return array( | 
					
						
							|  |  |  |             'fields' => array( | 
					
						
							|  |  |  |                 'profile_id' => array('type' => 'int', 'not null' => true, 'description' => 'foreign key to profile table'), | 
					
						
							|  |  |  |                 'original' => array('type' => 'int', 'size' => 'tiny', 'default' => 0, 'description' => 'uploaded by user or generated?'), | 
					
						
							|  |  |  |                 'width' => array('type' => 'int', 'not null' => true, 'description' => 'image width'), | 
					
						
							|  |  |  |                 'height' => array('type' => 'int', 'not null' => true, 'description' => 'image height'), | 
					
						
							|  |  |  |                 'mediatype' => array('type' => 'varchar', 'length' => 32, 'not null' => true, 'description' => 'file type'), | 
					
						
							|  |  |  |                 'filename' => array('type' => 'varchar', 'length' => 255, 'description' => 'local filename, if local'), | 
					
						
							|  |  |  |                 'url' => array('type' => 'varchar', 'length' => 255, 'description' => 'avatar location'), | 
					
						
							|  |  |  |                 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'), | 
					
						
							|  |  |  |                 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             'primary key' => array('profile_id', 'width', 'height'), | 
					
						
							|  |  |  |             'unique keys' => array( | 
					
						
							|  |  |  |                 'avatar_url_key' => array('url'), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             'foreign keys' => array( | 
					
						
							|  |  |  |                 'avatar_profile_id_fkey' => array('profile', array('profile_id' => 'id')), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             'indexes' => array( | 
					
						
							|  |  |  |                 'avatar_profile_id_idx' => array('profile_id'), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-07-09 18:46:30 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-01 11:37:59 +02:00
										 |  |  |     // We clean up the file, too
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     function delete() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $filename = $this->filename; | 
					
						
							|  |  |  |         if (parent::delete()) { | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |             @unlink(Avatar::path($filename)); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-01 11:37:59 +02:00
										 |  |  |     /* | 
					
						
							|  |  |  |      * Deletes all avatars (but may spare the original) from a profile. | 
					
						
							|  |  |  |      *  | 
					
						
							|  |  |  |      * @param   Profile $target     The profile we're deleting avatars of. | 
					
						
							|  |  |  |      * @param   boolean $original   Whether original should be removed or not. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public static function deleteFromProfile(Profile $target, $original=true) { | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |             $avatars = self::getProfileAvatars($target); | 
					
						
							|  |  |  |             foreach ($avatars as $avatar) { | 
					
						
							|  |  |  |                 if ($avatar->original && !$original) { | 
					
						
							|  |  |  |                     continue; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 $avatar->delete(); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } catch (NoResultException $e) { | 
					
						
							|  |  |  |             // There are no avatars to delete, a sort of success.
 | 
					
						
							| 
									
										
										
										
											2013-09-30 22:13:37 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2013-10-01 11:37:59 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return true; | 
					
						
							| 
									
										
										
										
											2013-09-30 22:13:37 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-02 15:01:11 +02:00
										 |  |  |     public static function getUploaded(Profile $target) | 
					
						
							| 
									
										
										
										
											2013-09-30 22:13:37 +02:00
										 |  |  |     { | 
					
						
							|  |  |  |         $avatar = new Avatar(); | 
					
						
							|  |  |  |         $avatar->profile_id = $target->id; | 
					
						
							|  |  |  |         $avatar->original = true; | 
					
						
							|  |  |  |         if (!$avatar->find(true)) { | 
					
						
							|  |  |  |             throw new NoResultException($avatar); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2013-10-04 13:36:45 +02:00
										 |  |  |         if (!file_exists(Avatar::path($avatar->filename))) { | 
					
						
							|  |  |  |             // The delete call may be odd for, say, unmounted filesystems
 | 
					
						
							|  |  |  |             // that cause a file to currently not exist, but actually it does...
 | 
					
						
							|  |  |  |             $avatar->delete(); | 
					
						
							|  |  |  |             throw new FileNotFoundException(Avatar::path($avatar->filename)); | 
					
						
							| 
									
										
										
										
											2013-10-01 11:37:59 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2013-10-04 13:36:45 +02:00
										 |  |  |         return $avatar; | 
					
						
							| 
									
										
										
										
											2013-10-01 11:37:59 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-30 22:13:37 +02:00
										 |  |  |     public static function getProfileAvatars(Profile $target) { | 
					
						
							|  |  |  |         $avatar = new Avatar(); | 
					
						
							|  |  |  |         $avatar->profile_id = $target->id; | 
					
						
							| 
									
										
										
										
											2013-10-01 11:37:59 +02:00
										 |  |  |         if (!$avatar->find()) { | 
					
						
							|  |  |  |             throw new NoResultException($avatar); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2013-09-30 22:13:37 +02:00
										 |  |  |         return $avatar->fetchAll(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-28 23:21:09 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Where should the avatar go for this user? | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |     static function filename($id, $extension, $size=null, $extra=null) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if ($size) { | 
					
						
							|  |  |  |             return $id . '-' . $size . (($extra) ? ('-' . $extra) : '') . $extension; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             return $id . '-original' . (($extra) ? ('-' . $extra) : '') . $extension; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     static function path($filename) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-06-15 10:45:50 -07:00
										 |  |  |         $dir = common_config('avatar', 'dir'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($dir[strlen($dir)-1] != '/') { | 
					
						
							|  |  |  |             $dir .= '/'; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $dir . $filename; | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     static function url($filename) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-06-15 10:45:50 -07:00
										 |  |  |         $path = common_config('avatar', 'path'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($path[strlen($path)-1] != '/') { | 
					
						
							|  |  |  |             $path .= '/'; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($path[0] != '/') { | 
					
						
							|  |  |  |             $path = '/'.$path; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $server = common_config('avatar', 'server'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (empty($server)) { | 
					
						
							|  |  |  |             $server = common_config('site', 'server'); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-11-25 19:22:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-11 16:51:15 -05:00
										 |  |  |         $ssl = common_config('avatar', 'ssl'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (is_null($ssl)) { // null -> guess
 | 
					
						
							|  |  |  |             if (common_config('site', 'ssl') == 'always' && | 
					
						
							|  |  |  |                 !common_config('avatar', 'server')) { | 
					
						
							|  |  |  |                 $ssl = true; | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 $ssl = false; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $protocol = ($ssl) ? 'https' : 'http'; | 
					
						
							| 
									
										
										
										
											2009-06-15 10:45:50 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-11 16:51:15 -05:00
										 |  |  |         return $protocol.'://'.$server.$path.$filename; | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function displayUrl() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $server = common_config('avatar', 'server'); | 
					
						
							| 
									
										
										
										
											2011-04-18 16:59:17 -04:00
										 |  |  |         if ($server && !empty($this->filename)) { | 
					
						
							| 
									
										
										
										
											2009-06-15 10:45:50 -07:00
										 |  |  |             return Avatar::url($this->filename); | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |         } else { | 
					
						
							|  |  |  |             return $this->url; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-06 04:03:03 -05:00
										 |  |  |     static function defaultImage($size) | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |     { | 
					
						
							|  |  |  |         static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile', | 
					
						
							|  |  |  |                                   AVATAR_STREAM_SIZE => 'stream', | 
					
						
							|  |  |  |                                   AVATAR_MINI_SIZE => 'mini'); | 
					
						
							| 
									
										
										
										
											2009-11-08 17:04:46 -05:00
										 |  |  |         return Theme::path('default-avatar-'.$sizenames[$size].'.png'); | 
					
						
							| 
									
										
										
										
											2009-02-06 03:13:08 -05:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2013-09-30 22:13:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     static function newSize(Profile $target, $size) { | 
					
						
							|  |  |  |         $size = floor($size); | 
					
						
							| 
									
										
										
										
											2013-10-01 11:37:59 +02:00
										 |  |  |         if ($size < 1 || $size > common_config('avatar', 'maxsize')) { | 
					
						
							| 
									
										
										
										
											2013-09-30 22:13:37 +02:00
										 |  |  |             // TRANS: An error message when avatar size is unreasonable
 | 
					
						
							| 
									
										
										
										
											2013-10-01 11:37:59 +02:00
										 |  |  |             throw new Exception(_m('Avatar size too large')); | 
					
						
							| 
									
										
										
										
											2013-09-30 22:13:37 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-02 15:01:11 +02:00
										 |  |  |         $original = Avatar::getUploaded($target); | 
					
						
							| 
									
										
										
										
											2013-09-30 22:13:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $imagefile = new ImageFile($target->id, Avatar::path($original->filename)); | 
					
						
							|  |  |  |         $filename = $imagefile->resize($size); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $scaled = clone($original); | 
					
						
							|  |  |  |         $scaled->original = false; | 
					
						
							|  |  |  |         $scaled->width = $size; | 
					
						
							|  |  |  |         $scaled->height = $size; | 
					
						
							|  |  |  |         $scaled->url = Avatar::url($filename); | 
					
						
							| 
									
										
										
										
											2013-10-01 11:37:59 +02:00
										 |  |  |         $scaled->filename = $filename; | 
					
						
							|  |  |  |         $scaled->created = common_sql_now(); | 
					
						
							| 
									
										
										
										
											2013-09-30 22:13:37 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (!$scaled->insert()) { | 
					
						
							|  |  |  |             // TRANS: An error message when unable to insert avatar data into the db
 | 
					
						
							|  |  |  |             throw new Exception(_m('Could not insert new avatar data to database')); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Return the new avatar object
 | 
					
						
							|  |  |  |         return $scaled; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-05-15 12:28:44 -04:00
										 |  |  | } |