2008-05-07 18:15:42 +01:00
< ? php
2008-05-20 20:14:12 +01:00
/*
2008-05-14 20:26:48 +01:00
* Laconica - a distributed open - source microblogging tool
* Copyright ( C ) 2008 , Controlez - Vous , Inc .
2008-05-20 20:14:12 +01:00
*
2008-05-14 20:26:48 +01: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 20:14:12 +01:00
*
2008-05-14 20:26:48 +01: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 20:14:12 +01:00
*
2008-05-14 20:26:48 +01: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 16:47:01 +01:00
if ( ! defined ( 'LACONICA' )) { exit ( 1 ); }
2008-05-14 20:26:48 +01:00
2008-05-07 18:15:42 +01:00
/**
* Table Definition for profile
*/
2008-09-26 17:18:24 +01:00
require_once INSTALLDIR . '/classes/Memcached_DataObject.php' ;
2008-05-07 18:15:42 +01:00
2008-12-10 17:47:22 +00:00
class Profile extends Memcached_DataObject
2008-05-07 18:15:42 +01: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 05:51:26 +01:00
public $nickname ; // varchar(64) multiple_key not_null
public $fullname ; // varchar(255) multiple_key
2008-12-10 17:47:22 +00:00
public $profileurl ; // varchar(255)
2008-07-10 05:51:26 +01:00
public $homepage ; // varchar(255) multiple_key
public $bio ; // varchar(140) multiple_key
public $location ; // varchar(255) multiple_key
2008-05-07 18:15:42 +01:00
public $created ; // datetime() not_null
public $modified ; // timestamp() not_null default_CURRENT_TIMESTAMP
/* Static get */
2008-12-23 19:33:23 +00:00
function staticGet ( $k , $v = null )
{ return Memcached_DataObject :: staticGet ( 'Profile' , $k , $v ); }
2008-05-07 18:15:42 +01:00
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
2008-05-20 20:14:12 +01:00
2008-12-23 19:33:23 +00:00
function getAvatar ( $width , $height = null )
{
2008-12-23 19:19:07 +00:00
if ( is_null ( $height )) {
$height = $width ;
}
return Avatar :: pkeyGet ( array ( 'profile_id' => $this -> id ,
'width' => $width ,
'height' => $height ));
}
2008-12-23 19:33:23 +00:00
function getOriginalAvatar ()
{
2008-12-23 19:19:07 +00:00
$avatar = DB_DataObject :: factory ( 'avatar' );
$avatar -> profile_id = $this -> id ;
$avatar -> original = true ;
if ( $avatar -> find ( true )) {
return $avatar ;
} else {
2008-12-23 19:21:29 +00:00
return null ;
2008-12-23 19:19:07 +00:00
}
}
2009-02-05 00:32:15 +00:00
function setOriginal ( $filename )
2008-12-23 19:33:23 +00:00
{
2009-02-06 08:13:08 +00:00
$imagefile = new ImageFile ( $this -> id , Avatar :: path ( $filename ));
2008-12-23 19:19:07 +00:00
$avatar = new Avatar ();
$avatar -> profile_id = $this -> id ;
2009-02-05 00:32:15 +00:00
$avatar -> width = $imagefile -> width ;
$avatar -> height = $imagefile -> height ;
$avatar -> mediatype = image_type_to_mime_type ( $imagefile -> type );
2008-12-23 19:19:07 +00:00
$avatar -> filename = $filename ;
$avatar -> original = true ;
2009-02-06 08:13:08 +00:00
$avatar -> url = Avatar :: url ( $filename );
2008-12-23 19:19:07 +00:00
$avatar -> created = DB_DataObject_Cast :: dateTime (); # current time
# XXX: start a transaction here
2009-02-05 00:32:15 +00:00
if ( ! $this -> delete_avatars () || ! $avatar -> insert ()) {
2009-02-06 08:13:08 +00:00
@ unlink ( Avatar :: path ( $filename ));
2008-12-23 19:21:29 +00:00
return null ;
2008-12-23 19:19:07 +00: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 08:13:08 +00:00
2009-02-05 00:32:15 +00:00
$scaled_filename = $imagefile -> resize ( $size );
2009-02-06 08:13:08 +00:00
2009-02-05 00:32:15 +00: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 08:13:08 +00:00
$scaled -> url = Avatar :: url ( $scaled_filename );
2009-02-05 00:32:15 +00:00
$scaled -> created = DB_DataObject_Cast :: dateTime (); # current time
if ( ! $scaled -> insert ()) {
2008-12-23 19:21:29 +00:00
return null ;
2008-12-23 19:19:07 +00:00
}
}
}
return $avatar ;
}
2009-01-21 18:57:18 +00:00
function delete_avatars ( $original = true )
2008-12-25 14:46:01 +00: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 19:19:07 +00:00
2008-12-23 19:33:23 +00:00
function getBestName ()
{
2008-12-23 19:19:07 +00:00
return ( $this -> fullname ) ? $this -> fullname : $this -> nickname ;
}
2008-07-07 06:43:58 +01:00
# Get latest notice on or before date; default now
2008-12-23 19:33:23 +00:00
function getCurrentNotice ( $dt = null )
{
2008-12-23 19:19:07 +00: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 19:21:29 +00:00
return null ;
2008-12-23 19:19:07 +00:00
}
2009-05-18 22:18:57 +01:00
function getTaggedNotices ( $offset = 0 , $limit = NOTICES_PER_PAGE , $since_id = 0 , $before_id = 0 , $since = null , $tag = null )
{
// XXX: I'm not sure this is going to be any faster. It probably isn't.
$ids = Notice :: stream ( array ( $this , '_streamTaggedDirect' ),
array (),
'profile:notice_ids:' . $this -> id ,
$offset , $limit , $since_id , $before_id , $since , $tag );
common_debug ( print_r ( $ids , true ));
return Notice :: getStreamByIds ( $ids );
}
function getNotices ( $offset = 0 , $limit = NOTICES_PER_PAGE , $since_id = 0 , $before_id = 0 , $since = null )
2008-12-23 19:33:23 +00:00
{
2009-05-01 19:27:57 +01: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 ,
2009-06-08 19:55:32 +01:00
$offset , $limit , $since_id , $max_id , $since );
2009-05-01 19:27:57 +01:00
return Notice :: getStreamByIds ( $ids );
}
2009-05-18 22:18:57 +01:00
function _streamTaggedDirect ( $offset , $limit , $since_id , $before_id , $since = null , $tag = null )
{
common_debug ( '_streamTaggedDirect()' );
$notice = new Notice ();
$notice -> profile_id = $this -> id ;
$query = " select id from notice join notice_tag on id=notice_id where tag=' " . $notice -> escape ( $tag ) . " ' and profile_id= " . $notice -> escape ( $notice -> profile_id );
if ( $since_id != 0 ) {
$query .= " and id > $since_id " ;
}
if ( $before_id != 0 ) {
$query .= " and id < $before_id " ;
}
if ( ! is_null ( $since )) {
$query .= " and created > ' " . date ( 'Y-m-d H:i:s' , $since ) . " ' " ;
}
$query .= ' order by id DESC' ;
if ( ! is_null ( $offset )) {
$query .= " limit $offset , $limit " ;
}
$notice -> query ( $query );
$ids = array ();
while ( $notice -> fetch ()) {
common_debug ( print_r ( $notice , true ));
$ids [] = $notice -> id ;
}
return $ids ;
}
function _streamDirect ( $offset , $limit , $since_id , $before_id , $since = null )
2009-05-01 19:27:57 +01:00
{
$notice = new Notice ();
$notice -> profile_id = $this -> id ;
$notice -> selectAdd ();
$notice -> selectAdd ( 'id' );
if ( $since_id != 0 ) {
$notice -> whereAdd ( 'id > ' . $since_id );
}
2009-05-30 00:54:24 +01:00
if ( $max_id != 0 ) {
$notice -> whereAdd ( 'id <= ' . $max_id );
2009-05-01 19:27:57 +01:00
}
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 19:19:07 +00:00
}
2009-01-21 18:57:18 +00: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 08:13:08 +00:00
function avatarUrl ( $size = AVATAR_PROFILE_SIZE )
{
$avatar = $this -> getAvatar ( $size );
if ( $avatar ) {
return $avatar -> displayUrl ();
} else {
return Avatar :: defaultImage ( $size );
}
}
2008-05-07 18:15:42 +01:00
}