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
}
2009-05-18 17:18:57 -04: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 14:33:23 -05:00
{
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 ,
2009-06-08 11:55:32 -07:00
$offset , $limit , $since_id , $max_id , $since );
2009-05-01 11:27:57 -07:00
return Notice :: getStreamByIds ( $ids );
}
2009-05-18 17:18:57 -04: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 11:27:57 -07: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-29 16:54:24 -07:00
if ( $max_id != 0 ) {
$notice -> whereAdd ( 'id <= ' . $max_id );
2009-05-01 11:27:57 -07: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 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
}