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'), ), ); } // We clean up the file, too function delete() { $filename = $this->filename; if (parent::delete()) { @unlink(Avatar::path($filename)); } } function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('Avatar', $kv); } /** * Where should the avatar go for this user? */ 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) { $dir = common_config('avatar', 'dir'); if ($dir[strlen($dir)-1] != '/') { $dir .= '/'; } return $dir . $filename; } static function url($filename) { $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'); } $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'; return $protocol.'://'.$server.$path.$filename; } function displayUrl() { $server = common_config('avatar', 'server'); if ($server && !empty($this->filename)) { return Avatar::url($this->filename); } else { return $this->url; } } static function defaultImage($size) { static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile', AVATAR_STREAM_SIZE => 'stream', AVATAR_MINI_SIZE => 'mini'); return Theme::path('default-avatar-'.$sizenames[$size].'.png'); } }