Move common_avatar_* functions to Avatar

Moved the common_avatar_* functions to the Avatar class. Typically
either as methods on the object or as static methods. Replaced all the
uses of the functions in other modules.
This commit is contained in:
Evan Prodromou 2009-02-06 03:13:08 -05:00
parent d3ff8bfec6
commit 343cd6f205
22 changed files with 107 additions and 112 deletions

View File

@ -90,9 +90,9 @@ class AvatarbynicknameAction extends Action
$url = $avatar->url; $url = $avatar->url;
} else { } else {
if ($size == 'original') { if ($size == 'original') {
$url = common_default_avatar(AVATAR_PROFILE_SIZE); $url = Avatar::defaultImage(AVATAR_PROFILE_SIZE);
} else { } else {
$url = common_default_avatar($size+0); $url = Avatar::defaultImage($size+0);
} }
} }
common_redirect($url, 302); common_redirect($url, 302);

View File

@ -200,7 +200,7 @@ class AvatarsettingsAction extends AccountSettingsAction
'class' => 'avatar_view')); 'class' => 'avatar_view'));
$this->element('h2', null, _("Original")); $this->element('h2', null, _("Original"));
$this->elementStart('div', array('id'=>'avatar_original_view')); $this->elementStart('div', array('id'=>'avatar_original_view'));
$this->element('img', array('src' => common_avatar_url($this->filedata['filename']), $this->element('img', array('src' => Avatar::url($this->filedata['filename']),
'width' => $this->filedata['width'], 'width' => $this->filedata['width'],
'height' => $this->filedata['height'], 'height' => $this->filedata['height'],
'alt' => $user->nickname)); 'alt' => $user->nickname));
@ -212,7 +212,7 @@ class AvatarsettingsAction extends AccountSettingsAction
'class' => 'avatar_view')); 'class' => 'avatar_view'));
$this->element('h2', null, _("Preview")); $this->element('h2', null, _("Preview"));
$this->elementStart('div', array('id'=>'avatar_preview_view')); $this->elementStart('div', array('id'=>'avatar_preview_view'));
$this->element('img', array('src' => common_avatar_url($this->filedata['filename']), $this->element('img', array('src' => Avatar::url($this->filedata['filename']),
'width' => AVATAR_PROFILE_SIZE, 'width' => AVATAR_PROFILE_SIZE,
'height' => AVATAR_PROFILE_SIZE, 'height' => AVATAR_PROFILE_SIZE,
'alt' => $user->nickname)); 'alt' => $user->nickname));
@ -281,12 +281,12 @@ class AvatarsettingsAction extends AccountSettingsAction
$cur = common_current_user(); $cur = common_current_user();
$filename = common_avatar_filename($cur->id, $filename = Avatar::filename($cur->id,
image_type_to_extension($imagefile->type), image_type_to_extension($imagefile->type),
null, null,
'tmp'.common_timestamp()); 'tmp'.common_timestamp());
$filepath = common_avatar_path($filename); $filepath = Avatar::path($filename);
move_uploaded_file($imagefile->filepath, $filepath); move_uploaded_file($imagefile->filepath, $filepath);

View File

@ -263,7 +263,7 @@ class GrouplogoAction extends Action
'class' => 'avatar_view')); 'class' => 'avatar_view'));
$this->element('h2', null, _("Original")); $this->element('h2', null, _("Original"));
$this->elementStart('div', array('id'=>'avatar_original_view')); $this->elementStart('div', array('id'=>'avatar_original_view'));
$this->element('img', array('src' => common_avatar_url($this->filedata['filename']), $this->element('img', array('src' => Avatar::url($this->filedata['filename']),
'width' => $this->filedata['width'], 'width' => $this->filedata['width'],
'height' => $this->filedata['height'], 'height' => $this->filedata['height'],
'alt' => $this->group->nickname)); 'alt' => $this->group->nickname));
@ -275,7 +275,7 @@ class GrouplogoAction extends Action
'class' => 'avatar_view')); 'class' => 'avatar_view'));
$this->element('h2', null, _("Preview")); $this->element('h2', null, _("Preview"));
$this->elementStart('div', array('id'=>'avatar_preview_view')); $this->elementStart('div', array('id'=>'avatar_preview_view'));
$this->element('img', array('src' => common_avatar_url($this->filedata['filename']), $this->element('img', array('src' => Avatar::url($this->filedata['filename']),
'width' => AVATAR_PROFILE_SIZE, 'width' => AVATAR_PROFILE_SIZE,
'height' => AVATAR_PROFILE_SIZE, 'height' => AVATAR_PROFILE_SIZE,
'alt' => $this->group->nickname)); 'alt' => $this->group->nickname));
@ -343,12 +343,12 @@ class GrouplogoAction extends Action
return; return;
} }
$filename = common_avatar_filename($this->group->id, $filename = Avatar::filename($this->group->id,
image_type_to_extension($imagefile->type), image_type_to_extension($imagefile->type),
null, null,
'group-temp-'.common_timestamp()); 'group-temp-'.common_timestamp());
$filepath = common_avatar_path($filename); $filepath = Avatar::path($filename);
move_uploaded_file($imagefile->filepath, $filepath); move_uploaded_file($imagefile->filepath, $filepath);

View File

@ -166,7 +166,7 @@ class NoticesearchAction extends SearchAction
$avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE);
$this->elementStart('a', array('href' => $profile->profileurl, $this->elementStart('a', array('href' => $profile->profileurl,
'class' => 'url')); 'class' => 'url'));
$this->element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_STREAM_SIZE), $this->element('img', array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_STREAM_SIZE),
'class' => 'avatar photo', 'class' => 'avatar photo',
'width' => AVATAR_STREAM_SIZE, 'width' => AVATAR_STREAM_SIZE,
'height' => AVATAR_STREAM_SIZE, 'height' => AVATAR_STREAM_SIZE,

View File

@ -242,7 +242,7 @@ class ShowstreamAction extends Action
$this->elementStart('dl', 'entity_depiction'); $this->elementStart('dl', 'entity_depiction');
$this->element('dt', null, _('Photo')); $this->element('dt', null, _('Photo'));
$this->elementStart('dd'); $this->elementStart('dd');
$this->element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_PROFILE_SIZE), $this->element('img', array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE),
'class' => 'photo avatar', 'class' => 'photo avatar',
'width' => AVATAR_PROFILE_SIZE, 'width' => AVATAR_PROFILE_SIZE,
'height' => AVATAR_PROFILE_SIZE, 'height' => AVATAR_PROFILE_SIZE,

View File

@ -80,7 +80,7 @@ class TagotherAction extends Action
$this->elementStart('dl', 'entity_depiction'); $this->elementStart('dl', 'entity_depiction');
$this->element('dt', null, _('Photo')); $this->element('dt', null, _('Photo'));
$this->elementStart('dd'); $this->elementStart('dd');
$this->element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_PROFILE_SIZE), $this->element('img', array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE),
'class' => 'photo avatar', 'class' => 'photo avatar',
'width' => AVATAR_PROFILE_SIZE, 'width' => AVATAR_PROFILE_SIZE,
'height' => AVATAR_PROFILE_SIZE, 'height' => AVATAR_PROFILE_SIZE,

View File

@ -250,8 +250,8 @@ class TwittersettingsAction extends ConnectSettingsAction
$avatar = $other->getAvatar(AVATAR_MINI_SIZE); $avatar = $other->getAvatar(AVATAR_MINI_SIZE);
$avatar_url = ($avatar) ? $avatar_url = ($avatar) ?
common_avatar_display_url($avatar) : $avatar->displayUrl() :
common_default_avatar(AVATAR_MINI_SIZE); Avatar::defaultImage(AVATAR_MINI_SIZE);
$this->element('img', array('src' => $avatar_url, $this->element('img', array('src' => $avatar_url,
'width' => AVATAR_MINI_SIZE, 'width' => AVATAR_MINI_SIZE,

View File

@ -4,18 +4,18 @@
*/ */
require_once INSTALLDIR.'/classes/Memcached_DataObject.php'; require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
class Avatar extends Memcached_DataObject class Avatar extends Memcached_DataObject
{ {
###START_AUTOCODE ###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */ /* the code below is auto generated do not remove the above tag */
public $__table = 'avatar'; // table name public $__table = 'avatar'; // table name
public $profile_id; // int(4) primary_key not_null public $profile_id; // int(4) primary_key not_null
public $original; // tinyint(1) public $original; // tinyint(1)
public $width; // int(4) primary_key not_null public $width; // int(4) primary_key not_null
public $height; // int(4) primary_key not_null public $height; // int(4) primary_key not_null
public $mediatype; // varchar(32) not_null public $mediatype; // varchar(32) not_null
public $filename; // varchar(255) public $filename; // varchar(255)
public $url; // varchar(255) unique_key public $url; // varchar(255) unique_key
public $created; // datetime() not_null public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
@ -33,13 +33,51 @@ class Avatar extends Memcached_DataObject
{ {
$filename = $this->filename; $filename = $this->filename;
if (parent::delete()) { if (parent::delete()) {
@unlink(common_avatar_path($filename)); @unlink(Avatar::path($filename));
} }
} }
function &pkeyGet($kv) function &pkeyGet($kv)
{ {
return Memcached_DataObject::pkeyGet('Avatar', $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)
{
return INSTALLDIR . '/avatar/' . $filename;
}
static function url($filename)
{
return common_path('avatar/'.$filename);
}
function displayUrl()
{
$server = common_config('avatar', 'server');
if ($server) {
return 'http://'.$server.'/'.$this->filename;
} else {
return $this->url;
}
}
static function defaultAvatar($size)
{
static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile',
AVATAR_STREAM_SIZE => 'stream',
AVATAR_MINI_SIZE => 'mini');
return theme_path('default-avatar-'.$sizenames[$size].'.png');
}
} }

View File

@ -71,7 +71,7 @@ class Profile extends Memcached_DataObject
function setOriginal($filename) function setOriginal($filename)
{ {
$imagefile = new ImageFile($this->id, common_avatar_path($filename)); $imagefile = new ImageFile($this->id, Avatar::path($filename));
$avatar = new Avatar(); $avatar = new Avatar();
$avatar->profile_id = $this->id; $avatar->profile_id = $this->id;
@ -80,22 +80,22 @@ class Profile extends Memcached_DataObject
$avatar->mediatype = image_type_to_mime_type($imagefile->type); $avatar->mediatype = image_type_to_mime_type($imagefile->type);
$avatar->filename = $filename; $avatar->filename = $filename;
$avatar->original = true; $avatar->original = true;
$avatar->url = common_avatar_url($filename); $avatar->url = Avatar::url($filename);
$avatar->created = DB_DataObject_Cast::dateTime(); # current time $avatar->created = DB_DataObject_Cast::dateTime(); # current time
# XXX: start a transaction here # XXX: start a transaction here
if (!$this->delete_avatars() || !$avatar->insert()) { if (!$this->delete_avatars() || !$avatar->insert()) {
@unlink(common_avatar_path($filename)); @unlink(Avatar::path($filename));
return null; return null;
} }
foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) { 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 # We don't do a scaled one if original is our scaled size
if (!($avatar->width == $size && $avatar->height == $size)) { if (!($avatar->width == $size && $avatar->height == $size)) {
$scaled_filename = $imagefile->resize($size); $scaled_filename = $imagefile->resize($size);
//$scaled = DB_DataObject::factory('avatar'); //$scaled = DB_DataObject::factory('avatar');
$scaled = new Avatar(); $scaled = new Avatar();
$scaled->profile_id = $this->id; $scaled->profile_id = $this->id;
@ -104,7 +104,7 @@ class Profile extends Memcached_DataObject
$scaled->original = false; $scaled->original = false;
$scaled->mediatype = image_type_to_mime_type($imagefile->type); $scaled->mediatype = image_type_to_mime_type($imagefile->type);
$scaled->filename = $scaled_filename; $scaled->filename = $scaled_filename;
$scaled->url = common_avatar_url($scaled_filename); $scaled->url = Avatar::url($scaled_filename);
$scaled->created = DB_DataObject_Cast::dateTime(); # current time $scaled->created = DB_DataObject_Cast::dateTime(); # current time
if (!$scaled->insert()) { if (!$scaled->insert()) {
@ -194,4 +194,13 @@ class Profile extends Memcached_DataObject
} }
} }
function avatarUrl($size=AVATAR_PROFILE_SIZE)
{
$avatar = $this->getAvatar($size);
if ($avatar) {
return $avatar->displayUrl();
} else {
return Avatar::defaultImage($size);
}
}
} }

View File

@ -90,13 +90,13 @@ class User_group extends Memcached_DataObject
function setOriginal($filename) function setOriginal($filename)
{ {
$imagefile = new ImageFile($this->id, common_avatar_path($filename)); $imagefile = new ImageFile($this->id, Avatar::path($filename));
$orig = clone($this); $orig = clone($this);
$this->original_logo = common_avatar_url($filename); $this->original_logo = Avatar::url($filename);
$this->homepage_logo = common_avatar_url($imagefile->resize(AVATAR_PROFILE_SIZE)); $this->homepage_logo = Avatar::url($imagefile->resize(AVATAR_PROFILE_SIZE));
$this->stream_logo = common_avatar_url($imagefile->resize(AVATAR_STREAM_SIZE)); $this->stream_logo = Avatar::url($imagefile->resize(AVATAR_STREAM_SIZE));
$this->mini_logo = common_avatar_url($imagefile->resize(AVATAR_MINI_SIZE)); $this->mini_logo = Avatar::url($imagefile->resize(AVATAR_MINI_SIZE));
common_debug(common_log_objstring($this)); common_debug(common_log_objstring($this));
return $this->update($orig); return $this->update($orig);
} }

View File

@ -153,12 +153,12 @@ class ImageFile
imagecopyresampled($image_dest, $image_src, 0, 0, $x, $y, $size, $size, $w, $h); imagecopyresampled($image_dest, $image_src, 0, 0, $x, $y, $size, $size, $w, $h);
$outname = common_avatar_filename($this->id, $outname = Avatar::filename($this->id,
image_type_to_extension($this->type), image_type_to_extension($this->type),
$size, $size,
common_timestamp()); common_timestamp());
$outpath = common_avatar_path($outname); $outpath = Avatar::path($outname);
switch ($this->type) { switch ($this->type) {
case IMAGETYPE_GIF: case IMAGETYPE_GIF:

View File

@ -178,7 +178,7 @@ function jabber_format_entry($profile, $notice)
$entry .= "<link href='" . htmlspecialchars($profile->profileurl) . "'/>\n"; $entry .= "<link href='" . htmlspecialchars($profile->profileurl) . "'/>\n";
$entry .= "<link rel='self' type='application/rss+xml' href='" . $self_url . "'/>\n"; $entry .= "<link rel='self' type='application/rss+xml' href='" . $self_url . "'/>\n";
$entry .= "<author><name>" . $profile->nickname . "</name></author>\n"; $entry .= "<author><name>" . $profile->nickname . "</name></author>\n";
$entry .= "<icon>" . common_profile_avatar_url($profile, AVATAR_PROFILE_SIZE) . "</icon>\n"; $entry .= "<icon>" . $profile->avatarUrl(AVATAR_PROFILE_SIZE) . "</icon>\n";
$entry .= "</source>\n"; $entry .= "</source>\n";
$entry .= "<title>" . htmlspecialchars($msg) . "</title>\n"; $entry .= "<title>" . htmlspecialchars($msg) . "</title>\n";
$entry .= "<summary>" . htmlspecialchars($msg) . "</summary>\n"; $entry .= "<summary>" . htmlspecialchars($msg) . "</summary>\n";

View File

@ -183,8 +183,8 @@ class MailboxAction extends PersonalAction
'class' => 'url')); 'class' => 'url'));
$avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE);
$this->element('img', array('src' => ($avatar) ? $this->element('img', array('src' => ($avatar) ?
common_avatar_display_url($avatar) : $avatar->displayUrl() :
common_default_avatar(AVATAR_STREAM_SIZE), Avatar::defaultImage(AVATAR_STREAM_SIZE),
'class' => 'photo avatar', 'class' => 'photo avatar',
'width' => AVATAR_STREAM_SIZE, 'width' => AVATAR_STREAM_SIZE,
'height' => AVATAR_STREAM_SIZE, 'height' => AVATAR_STREAM_SIZE,

View File

@ -285,8 +285,8 @@ class NoticeListItem extends Widget
$avatar = $this->profile->getAvatar($avatar_size); $avatar = $this->profile->getAvatar($avatar_size);
$this->out->element('img', array('src' => ($avatar) ? $this->out->element('img', array('src' => ($avatar) ?
common_avatar_display_url($avatar) : $avatar->displayUrl() :
common_default_avatar($avatar_size), Avatar::defaultImage($avatar_size),
'class' => 'avatar photo', 'class' => 'avatar photo',
'width' => $avatar_size, 'width' => $avatar_size,
'height' => $avatar_size, 'height' => $avatar_size,

View File

@ -82,7 +82,7 @@ class NoticeSection extends Section
$profile->nickname, $profile->nickname,
'href' => $profile->profileurl, 'href' => $profile->profileurl,
'class' => 'url')); 'class' => 'url'));
$this->out->element('img', array('src' => (($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_MINI_SIZE)), $this->out->element('img', array('src' => (($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_MINI_SIZE)),
'width' => AVATAR_MINI_SIZE, 'width' => AVATAR_MINI_SIZE,
'height' => AVATAR_MINI_SIZE, 'height' => AVATAR_MINI_SIZE,
'class' => 'avatar photo', 'class' => 'avatar photo',

View File

@ -97,7 +97,7 @@ class ProfileList extends Widget
$avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE); $avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE);
$this->out->elementStart('a', array('href' => $this->profile->profileurl, $this->out->elementStart('a', array('href' => $this->profile->profileurl,
'class' => 'url')); 'class' => 'url'));
$this->out->element('img', array('src' => ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_STREAM_SIZE), $this->out->element('img', array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_STREAM_SIZE),
'class' => 'photo avatar', 'class' => 'photo avatar',
'width' => AVATAR_STREAM_SIZE, 'width' => AVATAR_STREAM_SIZE,
'height' => AVATAR_STREAM_SIZE, 'height' => AVATAR_STREAM_SIZE,

View File

@ -74,7 +74,7 @@ class ProfileMiniList extends ProfileList
'rel' => 'contact member', 'rel' => 'contact member',
'class' => 'url')); 'class' => 'url'));
$avatar = $this->profile->getAvatar(AVATAR_MINI_SIZE); $avatar = $this->profile->getAvatar(AVATAR_MINI_SIZE);
$this->out->element('img', array('src' => (($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_MINI_SIZE)), $this->out->element('img', array('src' => (($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_MINI_SIZE)),
'width' => AVATAR_MINI_SIZE, 'width' => AVATAR_MINI_SIZE,
'height' => AVATAR_MINI_SIZE, 'height' => AVATAR_MINI_SIZE,
'class' => 'avatar photo', 'class' => 'avatar photo',

View File

@ -86,7 +86,7 @@ class ProfileSection extends Section
'rel' => 'contact member', 'rel' => 'contact member',
'class' => 'url')); 'class' => 'url'));
$avatar = $profile->getAvatar(AVATAR_MINI_SIZE); $avatar = $profile->getAvatar(AVATAR_MINI_SIZE);
$this->out->element('img', array('src' => (($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_MINI_SIZE)), $this->out->element('img', array('src' => (($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_MINI_SIZE)),
'width' => AVATAR_MINI_SIZE, 'width' => AVATAR_MINI_SIZE,
'height' => AVATAR_MINI_SIZE, 'height' => AVATAR_MINI_SIZE,
'class' => 'avatar photo', 'class' => 'avatar photo',

View File

@ -199,7 +199,7 @@ class Rss10Action extends Action
$this->element('dc:date', null, common_date_w3dtf($notice->created)); $this->element('dc:date', null, common_date_w3dtf($notice->created));
$this->element('dc:creator', null, ($profile->fullname) ? $profile->fullname : $profile->nickname); $this->element('dc:creator', null, ($profile->fullname) ? $profile->fullname : $profile->nickname);
$this->element('sioc:has_creator', array('rdf:resource' => $creator_uri)); $this->element('sioc:has_creator', array('rdf:resource' => $creator_uri));
$this->element('laconica:postIcon', array('rdf:resource' => common_profile_avatar_url($profile))); $this->element('laconica:postIcon', array('rdf:resource' => $profile->avatarUrl()));
$this->element('cc:licence', array('rdf:resource' => common_config('license', 'url'))); $this->element('cc:licence', array('rdf:resource' => common_config('license', 'url')));
$this->elementEnd('item'); $this->elementEnd('item');
$this->creators[$creator_uri] = $profile; $this->creators[$creator_uri] = $profile;
@ -216,7 +216,7 @@ class Rss10Action extends Action
$this->element('foaf:name', null, $profile->fullname); $this->element('foaf:name', null, $profile->fullname);
} }
$this->element('sioc:id', null, $id); $this->element('sioc:id', null, $id);
$avatar = common_profile_avatar_url($profile); $avatar = $profile->avatarUrl();
$this->element('sioc:avatar', array('rdf:resource' => $avatar)); $this->element('sioc:avatar', array('rdf:resource' => $avatar));
$this->elementEnd('sioc:User'); $this->elementEnd('sioc:User');
} }

View File

@ -43,7 +43,7 @@ class TwitterapiAction extends Action
$avatar = $profile->getAvatar(AVATAR_STREAM_SIZE); $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE);
$twitter_user['profile_image_url'] = ($avatar) ? common_avatar_display_url($avatar) : common_default_avatar(AVATAR_STREAM_SIZE); $twitter_user['profile_image_url'] = ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_STREAM_SIZE);
$twitter_user['protected'] = 'false'; # not supported by Laconica yet $twitter_user['protected'] = 'false'; # not supported by Laconica yet
$twitter_user['url'] = ($profile->homepage) ? $profile->homepage : null; $twitter_user['url'] = ($profile->homepage) ? $profile->homepage : null;

View File

@ -395,15 +395,15 @@ function common_render_text($text)
function common_replace_urls_callback($text, $callback) { function common_replace_urls_callback($text, $callback) {
// Start off with a regex // Start off with a regex
preg_match_all('#(?:(?:(?:https?|ftps?|mms|rtsp|gopher|news|nntp|telnet|wais|file|prospero|webcal|xmpp|irc)://|(?:mailto|aim|tel):)[^.\s]+\.[^\s]+|(?:[^.\s/]+\.)+(?:museum|travel|[a-z]{2,4})(?:[:/][^\s]*)?)#i', $text, $matches); preg_match_all('#(?:(?:(?:https?|ftps?|mms|rtsp|gopher|news|nntp|telnet|wais|file|prospero|webcal|xmpp|irc)://|(?:mailto|aim|tel):)[^.\s]+\.[^\s]+|(?:[^.\s/]+\.)+(?:museum|travel|[a-z]{2,4})(?:[:/][^\s]*)?)#i', $text, $matches);
// Then clean up what the regex left behind // Then clean up what the regex left behind
$offset = 0; $offset = 0;
foreach($matches[0] as $url) { foreach($matches[0] as $url) {
$url = htmlspecialchars_decode($url); $url = htmlspecialchars_decode($url);
// Make sure we didn't pick up an email address // Make sure we didn't pick up an email address
if (preg_match('#^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$#i', $url)) continue; if (preg_match('#^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$#i', $url)) continue;
// Remove trailing punctuation // Remove trailing punctuation
$url = rtrim($url, '.?!,;:\'"`'); $url = rtrim($url, '.?!,;:\'"`');
@ -422,48 +422,48 @@ function common_replace_urls_callback($text, $callback) {
// Remove trailing punctuation again (in case there were some inside parens) // Remove trailing punctuation again (in case there were some inside parens)
$url = rtrim($url, '.?!,;:\'"`'); $url = rtrim($url, '.?!,;:\'"`');
// Make sure we didn't capture part of the next sentence // Make sure we didn't capture part of the next sentence
preg_match('#((?:[^.\s/]+\.)+)(museum|travel|[a-z]{2,4})#i', $url, $url_parts); preg_match('#((?:[^.\s/]+\.)+)(museum|travel|[a-z]{2,4})#i', $url, $url_parts);
// Were the parts capitalized any? // Were the parts capitalized any?
$last_part = (mb_strtolower($url_parts[2]) !== $url_parts[2]) ? true:false; $last_part = (mb_strtolower($url_parts[2]) !== $url_parts[2]) ? true:false;
$prev_part = (mb_strtolower($url_parts[1]) !== $url_parts[1]) ? true:false; $prev_part = (mb_strtolower($url_parts[1]) !== $url_parts[1]) ? true:false;
// If the first part wasn't cap'd but the last part was, we captured too much // If the first part wasn't cap'd but the last part was, we captured too much
if ((!$prev_part && $last_part)) { if ((!$prev_part && $last_part)) {
$url = substr_replace($url, '', mb_strpos($url, '.'.$url_parts[2], 0)); $url = substr_replace($url, '', mb_strpos($url, '.'.$url_parts[2], 0));
} }
// Capture the new TLD // Capture the new TLD
preg_match('#((?:[^.\s/]+\.)+)(museum|travel|[a-z]{2,4})#i', $url, $url_parts); preg_match('#((?:[^.\s/]+\.)+)(museum|travel|[a-z]{2,4})#i', $url, $url_parts);
$tlds = array('ac', 'ad', 'ae', 'aero', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao', 'aq', 'ar', 'arpa', 'as', 'asia', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb', 'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'biz', 'bj', 'bm', 'bn', 'bo', 'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cat', 'cc', 'cd', 'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'com', 'coop', 'cr', 'cu', 'cv', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec', 'edu', 'ee', 'eg', 'er', 'es', 'et', 'eu', 'fi', 'fj', 'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg', 'gh', 'gi', 'gl', 'gm', 'gn', 'gov', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw', 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il', 'im', 'in', 'info', 'int', 'io', 'iq', 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jobs', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw', 'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu', 'lv', 'ly', 'ma', 'mc', 'md', 'me', 'mg', 'mh', 'mil', 'mk', 'ml', 'mm', 'mn', 'mo', 'mobi', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'name', 'nc', 'ne', 'net', 'nf', 'ng', 'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'org', 'pa', 'pe', 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'pro', 'ps', 'pt', 'pw', 'py', 'qa', 're', 'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm', 'sn', 'so', 'sr', 'st', 'su', 'sv', 'sy', 'sz', 'tc', 'td', 'tel', 'tf', 'tg', 'th', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'tp', 'tr', 'travel', 'tt', 'tv', 'tw', 'tz', 'ua', 'ug', 'uk', 'us', 'uy', 'uz', 'va', 'vc', 've', 'vg', 'vi', 'vn', 'vu', 'wf', 'ws', 'ye', 'yt', 'yu', 'za', 'zm', 'zw'); $tlds = array('ac', 'ad', 'ae', 'aero', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao', 'aq', 'ar', 'arpa', 'as', 'asia', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb', 'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'biz', 'bj', 'bm', 'bn', 'bo', 'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cat', 'cc', 'cd', 'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'com', 'coop', 'cr', 'cu', 'cv', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec', 'edu', 'ee', 'eg', 'er', 'es', 'et', 'eu', 'fi', 'fj', 'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg', 'gh', 'gi', 'gl', 'gm', 'gn', 'gov', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw', 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il', 'im', 'in', 'info', 'int', 'io', 'iq', 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jobs', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw', 'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu', 'lv', 'ly', 'ma', 'mc', 'md', 'me', 'mg', 'mh', 'mil', 'mk', 'ml', 'mm', 'mn', 'mo', 'mobi', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'name', 'nc', 'ne', 'net', 'nf', 'ng', 'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'org', 'pa', 'pe', 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'pro', 'ps', 'pt', 'pw', 'py', 'qa', 're', 'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm', 'sn', 'so', 'sr', 'st', 'su', 'sv', 'sy', 'sz', 'tc', 'td', 'tel', 'tf', 'tg', 'th', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'tp', 'tr', 'travel', 'tt', 'tv', 'tw', 'tz', 'ua', 'ug', 'uk', 'us', 'uy', 'uz', 'va', 'vc', 've', 'vg', 'vi', 'vn', 'vu', 'wf', 'ws', 'ye', 'yt', 'yu', 'za', 'zm', 'zw');
if (!in_array($url_parts[2], $tlds)) continue; if (!in_array($url_parts[2], $tlds)) continue;
// Call user specified func // Call user specified func
$modified_url = $callback($url); $modified_url = $callback($url);
// Replace it! // Replace it!
$start = mb_strpos($text, $url, $offset); $start = mb_strpos($text, $url, $offset);
$text = mb_substr($text, 0, $start).$modified_url.mb_substr($text, $start + mb_strlen($url), mb_strlen($text)); $text = mb_substr($text, 0, $start).$modified_url.mb_substr($text, $start + mb_strlen($url), mb_strlen($text));
$offset = $start + mb_strlen($modified_url); $offset = $start + mb_strlen($modified_url);
} }
return $text; return $text;
} }
function common_linkify($url) { function common_linkify($url) {
$display = $url; $display = $url;
$url = (!preg_match('#^([a-z]+://|(mailto|aim|tel):)#i', $url)) ? 'http://'.$url:$url; $url = (!preg_match('#^([a-z]+://|(mailto|aim|tel):)#i', $url)) ? 'http://'.$url:$url;
if ($longurl = common_longurl($url)) { if ($longurl = common_longurl($url)) {
$longurl = htmlentities($longurl, ENT_QUOTES, 'UTF-8'); $longurl = htmlentities($longurl, ENT_QUOTES, 'UTF-8');
$title = "title=\"$longurl\""; $title = "title=\"$longurl\"";
} }
else $title = ''; else $title = '';
return "<a href=\"$url\" $title class=\"extlink\">$display</a>"; return "<a href=\"$url\" $title class=\"extlink\">$display</a>";
} }
@ -653,48 +653,6 @@ function common_relative_profile($sender, $nickname, $dt=null)
return null; return null;
} }
// where should the avatar go for this user?
function common_avatar_filename($id, $extension, $size=null, $extra=null)
{
global $config;
if ($size) {
return $id . '-' . $size . (($extra) ? ('-' . $extra) : '') . $extension;
} else {
return $id . '-original' . (($extra) ? ('-' . $extra) : '') . $extension;
}
}
function common_avatar_path($filename)
{
global $config;
return INSTALLDIR . '/avatar/' . $filename;
}
function common_avatar_url($filename)
{
return common_path('avatar/'.$filename);
}
function common_avatar_display_url($avatar)
{
$server = common_config('avatar', 'server');
if ($server) {
return 'http://'.$server.'/'.$avatar->filename;
} else {
return $avatar->url;
}
}
function common_default_avatar($size)
{
static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile',
AVATAR_STREAM_SIZE => 'stream',
AVATAR_MINI_SIZE => 'mini');
return theme_path('default-avatar-'.$sizenames[$size].'.png');
}
function common_local_url($action, $args=null, $fragment=null) function common_local_url($action, $args=null, $fragment=null)
{ {
$url = null; $url = null;
@ -1511,16 +1469,6 @@ function common_markup_to_html($c)
return Markdown($c); return Markdown($c);
} }
function common_profile_avatar_url($profile, $size=AVATAR_PROFILE_SIZE)
{
$avatar = $profile->getAvatar($size);
if ($avatar) {
return common_avatar_display_url($avatar);
} else {
return common_default_avatar($size);
}
}
function common_profile_uri($profile) function common_profile_uri($profile)
{ {
if (!$profile) { if (!$profile) {

View File

@ -74,7 +74,7 @@ class EnjitQueueHandler extends QueueHandler
$atom .= "<link href='" . $profile->profileurl . "'/>\n"; $atom .= "<link href='" . $profile->profileurl . "'/>\n";
$atom .= "<link rel='self' type='application/rss+xml' href='" . common_local_url('userrss', array('nickname' => $profile->nickname)) . "'/>\n"; $atom .= "<link rel='self' type='application/rss+xml' href='" . common_local_url('userrss', array('nickname' => $profile->nickname)) . "'/>\n";
$atom .= "<author><name>" . $profile->nickname . "</name></author>\n"; $atom .= "<author><name>" . $profile->nickname . "</name></author>\n";
$atom .= "<icon>" . common_profile_avatar_url($profile, AVATAR_PROFILE_SIZE) . "</icon>\n"; $atom .= "<icon>" . $profile->avatarUrl(AVATAR_PROFILE_SIZE) . "</icon>\n";
$atom .= "</source>\n"; $atom .= "</source>\n";
$atom .= "<title>" . htmlspecialchars($msg) . "</title>\n"; $atom .= "<title>" . htmlspecialchars($msg) . "</title>\n";
$atom .= "<summary>" . htmlspecialchars($msg) . "</summary>\n"; $atom .= "<summary>" . htmlspecialchars($msg) . "</summary>\n";