forward port of 6.8.4 avatar changes, -r 357:369

This commit is contained in:
Colin Kuskie 2005-12-29 18:03:59 +00:00
parent 73531dfa5f
commit da95226072
6 changed files with 2124 additions and 1809 deletions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,289 @@
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2005 Plain Black Corporation.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#-------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#-------------------------------------------------------------------
use lib "../../lib";
use strict;
use Getopt::Long;
use WebGUI::Session;
use WebGUI::SQL;
use WebGUI::Asset;
use Parse::PlainConfig;
my $toVersion = "6.8.4"; # make this match what version you're going to
my $quiet; # this line required
start(); # this line required
fixDefaultThreadTemplate();
enableAvatarProfileField();
finish(); # this line required
#-------------------------------------------------
sub fixDefaultThreadTemplate {
print "\Add avatar to default thread template.\n" unless ($quiet);
my $template = <<EOT1;
<a name="id<tmpl_var assetId>" id="id<tmpl_var assetId>"></a>
<tmpl_if session.var.adminOn>
<p><tmpl_var controls></p>
</tmpl_if>
<style type="text/css">
.postBorder {
border: 1px solid #cccccc;
margin-bottom: 10px;
}
.postBorderCurrent {
border: 3px dotted black;
margin-bottom: 10px;
}
.postSubject {
border-bottom: 1px solid #cccccc;
font-weight: bold;
padding: 3px;
}
.postData {
border-bottom: 1px solid #cccccc;
font-size: 11px;
background-color: #eeeeee;
color: black;
padding: 3px;
}
.postControls {
border-top: 1px solid #cccccc;
background-color: #eeeeee;
color: black;
padding: 3px;
}
.postMessage {
padding: 3px;
}
.currentThread {
background-color: #eeeeee;
}
.threadHead {
font-weight: bold;
border-bottom: 1px solid #cccccc;
font-size: 11px;
background-color: #eeeeee;
color: black;
padding: 3px;
}
.threadData {
font-size: 11px;
padding: 3px;
}
</style>
<div style="float: left; width: 70%">
<h1><a href="<tmpl_var collaboration.url>"><tmpl_var collaboration.title></a></h1>
</div>
<div style="width: 30%; float: left; text-align: right;">
<tmpl_if layout.isFlat>
<a href="<tmpl_var layout.nested.url>"><tmpl_var layout.nested.label></a>
<tmpl_else>
<a href="<tmpl_var layout.flat.url>"><tmpl_var layout.flat.label></a>
</tmpl_if>
</div>
<div style="clear: both;"></div>
<tmpl_if layout.isFlat>
<!-- begin flat layout -->
<tmpl_loop post_loop>
<div class="postBorder<tmpl_if isCurrent>Current</tmpl_if>">
<a name="<tmpl_var assetId>"></a>
<div class="postSubject">
<tmpl_var title>
</div>
<div class="postData">
<div style="float: left; width: 50%">
<b><tmpl_var user.label>:</b>
<tmpl_if user.isVisitor>
<tmpl_var username><tmpl_if avatar.url><img src="<tmpl_var avatar.url>" /></tmpl_if>
<tmpl_else>
<a href="<tmpl_var userProfile.url>"><tmpl_var username><tmpl_if avatar.url><img src="<tmpl_var avatar.url>" border="0" alt="avatar" /></tmpl_if></a>
</tmpl_if>
<br />
<b><tmpl_var date.label>:</b> <tmpl_var dateSubmitted.human><br />
</div>
<div>
<b><tmpl_var views.label>:</b> <tmpl_var views><br />
<b><tmpl_var rating.label>:</b> <tmpl_var rating>
<tmpl_unless hasRated>
&nbsp; &nbsp;<tmpl_var rate.label> [ <a href="<tmpl_var rate.url.1>">1</a>, <a href="<tmpl_var rate.url.2>">2</a>, <a href="<tmpl_var rate.url.3>">3</a>, <a href="<tmpl_var rate.url.4>">4</a>, <a href="<tmpl_var rate.url.5>">5</a> ]
</tmpl_unless>
<br />
<tmpl_if user.isModerator>
<b><tmpl_var status.label>:</b> <tmpl_var status> &nbsp; &nbsp; [ <a href="<tmpl_var approve.url>"><tmpl_var approve.label></a> | <a href="<tmpl_var deny.url>"><tmpl_var deny.label></a> ]<br />
<tmpl_else>
<tmpl_if user.isPoster>
<b><tmpl_var status.label>:</b> <tmpl_var status><br />
</tmpl_if>
</tmpl_if>
</div>
</div>
<div class="postMessage">
<tmpl_var content>
<tmpl_loop attachment_loop>
<div style="float: left; padding: 5px;"><a href="<tmpl_var url>"><tmpl_if isImage><img src="<tmpl_var thumbnail>" border="0" alt="<tmpl_var filename>" /><tmpl_else><img src="<tmpl_var icon>" border="0" alt="<tmpl_var filename>" align="middle" /> <tmpl_var filename></tmpl_if></a></div>
</tmpl_loop>
<div style="clear: both;"></div>
</div>
<tmpl_unless isLocked>
<div class="postControls">
<tmpl_if user.canReply>
<a href="<tmpl_var reply.url>">[<tmpl_var reply.label>]</a>
</tmpl_if>
<tmpl_if user.canEdit>
<a href="<tmpl_var edit.url>">[<tmpl_var edit.label>]</a>
<a href="<tmpl_var delete.url>">[<tmpl_var delete.label>]</a>
</tmpl_if>
</div>
</tmpl_unless>
</div>
</tmpl_loop>
<!-- end flat layout -->
</tmpl_if>
<tmpl_if layout.isNested>
<!-- begin nested layout -->
<tmpl_loop post_loop>
<div style="margin-left: <tmpl_var depthX10>px;">
<div class="postBorder<tmpl_if isCurrent>Current</tmpl_if>">
<a name="<tmpl_var assetId>"></a>
<div class="postSubject">
<tmpl_var title>
</div>
<div class="postData">
<div style="float: left; width: 50%">
<b><tmpl_var user.label>:</b>
<tmpl_if user.isVisitor>
<tmpl_var username><tmpl_if avatar.url><img src="<tmpl_var avatar.url>" /></tmpl_if>
<tmpl_else>
<a href="<tmpl_var userProfile.url>"><tmpl_var username><tmpl_if avatar.url><img src="<tmpl_var avatar.url>" border="0" alt="avatar" /></tmpl_if></a>
</tmpl_if>
<br />
<b><tmpl_var date.label>:</b> <tmpl_var dateSubmitted.human><br />
</div>
<div>
<b><tmpl_var views.label>:</b> <tmpl_var views><br />
<b><tmpl_var rating.label>:</b> <tmpl_var rating>
<tmpl_unless hasRated>
&nbsp; &nbsp;<tmpl_var rate.label> [ <a href="<tmpl_var rate.url.1>">1</a>, <a href="<tmpl_var rate.url.2>">2</a>, <a href="<tmpl_var rate.url.3>">3</a>, <a href="<tmpl_var rate.url.4>">4</a>, <a href="<tmpl_var rate.url.5>">5</a> ]
</tmpl_unless>
<br />
<tmpl_if user.isModerator>
<b><tmpl_var status.label>:</b> <tmpl_var status> &nbsp; &nbsp; [ <a href="<tmpl_var approve.url>"><tmpl_var approve.label></a> | <a href="<tmpl_var deny.url>"><tmpl_var deny.label></a> ]<br />
<tmpl_else>
<tmpl_if user.isPoster>
<b><tmpl_var status.label>:</b> <tmpl_var status><br />
</tmpl_if>
</tmpl_if>
</div>
</div>
<div class="postMessage">
<tmpl_var content>
<tmpl_loop attachment_loop>
<div style="float: left; padding: 5px;"><a href="<tmpl_var url>"><tmpl_if isImage><img src="<tmpl_var thumbnail>" border="0" alt="<tmpl_var filename>" /><tmpl_else><img src="<tmpl_var icon>" border="0" alt="<tmpl_var filename>" align="middle" /> <tmpl_var filename></tmpl_if></a></div>
</tmpl_loop>
<div style="clear: both;"></div>
</div>
<tmpl_unless isLocked>
<div class="postControls">
<tmpl_if user.canReply>
<a href="<tmpl_var reply.url>">[<tmpl_var reply.label>]</a>
</tmpl_if>
<tmpl_if user.canEdit>
<a href="<tmpl_var edit.url>">[<tmpl_var edit.label>]</a>
<a href="<tmpl_var delete.url>">[<tmpl_var delete.label>]</a>
</tmpl_if>
</div>
</tmpl_unless>
</div>
</div>
</tmpl_loop>
<!-- end nested layout -->
</tmpl_if>
<tmpl_if pagination.pageCount.isMultiple>
<div class="pagination" style="margin-top: 20px;">
[ <tmpl_var pagination.previousPage> | <tmpl_var pagination.pageList.upTo10> | <tmpl_var pagination.nextPage> ]
</div>
</tmpl_if>
<div style="margin-top: 20px;">
<tmpl_if previous.url>
<a href="<tmpl_var previous.url>">[<tmpl_var previous.label>]</a>
</tmpl_if>
<tmpl_if next.url>
<a href="<tmpl_var next.url>">[<tmpl_var next.label>]</a>
</tmpl_if>
<tmpl_if user.canPost>
<a href="<tmpl_var add.url>">[<tmpl_var add.label>]</a>
</tmpl_if>
<tmpl_if user.isModerator>
<tmpl_if isSticky>
<a href="<tmpl_var unstick.url>">[<tmpl_var unstick.label>]</a>
<tmpl_else>
<a href="<tmpl_var stick.url>">[<tmpl_var stick.label>]</a>
</tmpl_if>
<tmpl_if isLocked>
<a href="<tmpl_var unlock.url>">[<tmpl_var unlock.label>]</a>
<tmpl_else>
<a href="<tmpl_var lock.url>">[<tmpl_var lock.label>]</a>
</tmpl_if>
</tmpl_if>
<tmpl_unless user.isVisitor>
<tmpl_if user.isSubscribed>
<a href="<tmpl_var unsubscribe.url>">[<tmpl_var unsubscribe.label>]</a>
<tmpl_else>
<a href="<tmpl_var subscribe.url>">[<tmpl_var subscribe.label>]</a>
</tmpl_if>
</tmpl_unless>
</div>
EOT1
my $asset = WebGUI::Asset->new("PBtmpl0000000000000032","WebGUI::Asset::Template");
$asset->addRevision({template=>$template})->commit;
}
# ---- DO NOT EDIT BELOW THIS LINE ----
#-------------------------------------------------
sub start {
my $configFile;
$|=1; #disable output buffering
GetOptions(
'configFile=s'=>\$configFile,
'quiet'=>\$quiet
);
WebGUI::Session::open("../..",$configFile);
WebGUI::Session::refreshUserInfo(3);
WebGUI::SQL->write("insert into webguiVersion values (".quote($toVersion).",'upgrade',".time().")");
}
#-------------------------------------------------
sub enableAvatarProfileField {
print "\tMake user profile Avatar field visible and editable.\n" unless ($quiet);
WebGUI::SQL->write("update userProfileField set visible=1 where fieldName='avatar'");
WebGUI::SQL->write("update userProfileField set editable=1 where fieldName='avatar'");
}
#-------------------------------------------------
sub finish {
WebGUI::Session::close();
}

View file

@ -234,6 +234,35 @@ sub getApproveUrl {
#-------------------------------------------------------------------
=head2 getAvatarUrl ( )
Returns a URL to the owner's avatar.
=cut
sub getAvatarUrl {
my $self = shift;
my $avatarUrl;
return $avatarUrl unless
$self->getThread->getParent->getValue("avatarsEnabled");
my $user = WebGUI::User->new($self->get('ownerUserId'));
#Get avatar field, storage Id.
my $storageId = $user->profileField("avatar");
my $avatar = WebGUI::Storage::Image->get($storageId);
if ($avatar) {
#Get url from storage object.
foreach my $imageName (@{$avatar->getFiles}) {
if ($avatar->isImage($imageName)) {
$avatarUrl = $avatar->getUrl($imageName);
last;
}
}
}
return $avatarUrl;
}
#-------------------------------------------------------------------
=head2 getDeleteUrl ( )
Formats the url to delete a post.
@ -386,6 +415,7 @@ sub getTemplateVars {
my %var = %{$self->get};
$var{"userId"} = $self->get("ownerUserId");
$var{"user.isPoster"} = $self->isPoster;
$var{"avatar.url"} = $self->getAvatarUrl;
$var{"userProfile.url"} = $self->getUrl("op=viewProfile;uid=".$self->get("ownerUserId"));
$var{"dateSubmitted.human"} = epochToHuman($self->get("dateSubmitted"));
$var{"dateUpdated.human"} = epochToHuman($self->get("dateUpdated"));

View file

@ -82,25 +82,6 @@ sub appendPostListTemplateVars {
} else {
$url = $post->getUrl."#".$post->getId;
}
my $avatarUrl;
if ($self->get('avatarsEnabled')) {
#ownerUserId from post
#Create user object.
my $user = WebGUI::User->new($post->get('ownerUserId'));
#Get avatar field, storage Id.
my $storageId = $user->profileField("avatar");
my $avatar = WebGUI::Storage::Image->get($storageId);
if ($avatar) {
#Get url from storage object.
foreach my $imageName (@{$avatar->getFiles}) {
if ($avatar->isImage($imageName)) {
$avatarUrl = $avatar->getThumbnailUrl($imageName);
last;
}
}
$avatarUrl = $avatar->getUrl;
}
}
push(@{$var->{post_loop}}, {
%{$post->get},
"id"=>$post->getId,
@ -124,7 +105,7 @@ sub appendPostListTemplateVars {
"isFourth"=>(($i+1)%4==0),
"isFifth"=>(($i+1)%5==0),
"user.isPoster"=>$post->isPoster,
"avatar.url"=>$avatarUrl,
"avatar.url"=>$post->getAvatarUrl,
%lastReply
});
$i++;
@ -445,8 +426,6 @@ sub duplicate {
return $newAsset;
}
#-------------------------------------------------------------------
sub getEditForm {
my $self = shift;

View file

@ -1072,6 +1072,11 @@ A conditional indicating that is true if this Post is the fifth in this Collabor
<b>user.isPoster</b><br>
A conditional indicating that is true if the current user submitted this Post.
<p>
<b>avatar.url</b><br>
A URL to the avatar for the owner of the Post, if avatars are enabled and the
user has an avatar.
<p>
<b>lastReply.*</b><br>
These variables are only defined if the <b>Display last reply</b> property is set to true

View file

@ -312,6 +312,11 @@ The name of the user who last updated or submitted the Post.
Another name for <b>rating.value</b>
<p>
<p>
<b>avatar.url</b><br>
A URL to the avatar for the owner of the Post, if avatars are enabled in the parent
Collaboration System and the user has an avatar.
<b>views</b><br>
The number of times that this post has been viewed.
<p>