Define and use is_public and ownerid methods.
Patch by kareila.
diffs (124 lines):
diff -r f85d8534fa0f -r 92e2e6b2f18e cgi-bin/DW/Mood.pm
--- a/cgi-bin/DW/Mood.pm Fri Jun 25 15:32:49 2010 +0800
+++ b/cgi-bin/DW/Mood.pm Fri Jun 25 19:05:56 2010 +0800
@@ -210,12 +210,43 @@ sub get_picture {
return 0; # couldn't find a picture anywhere in the parent chain
}
-# object method: get theme description (adapted from LJ::mood_theme_des)
+# get theme description (adapted from LJ::mood_theme_des)
+# arguments: theme id (only required if called as class method)
sub des {
- my ( $self ) = @_;
- my $themeid = $self->id or return undef;
+ my $self = shift;
+ return $self->prop( 'des', @_ );
+}
+
+# get named property of mood theme from cache
+sub prop {
+ my ( $self, $prop, $themeid ) = @_;
+
+ if ( defined $themeid ) {
+ # make sure the theme is valid and cached
+ $self = $self->load_theme( $themeid ) or return;
+ } else {
+ # make sure we have an object loaded
+ $themeid = $self->id or return;
+ }
+
my $m = $LJ::CACHE_MOOD_THEME{$themeid};
- return $m ? $m->{des} : undef;
+ return $m ? $m->{$prop} : undef;
+}
+
+# given a theme, lookup the user who owns it
+# arguments: theme id (only required if called as class method)
+# returns: userid, undef on failure
+sub ownerid {
+ my $self = shift;
+ return $self->prop( 'ownerid', @_ );
+}
+
+# given a theme, check whether it is public
+# arguments: theme id (only required if called as class method)
+# returns: Y/N/undef
+sub is_public {
+ my $self = shift;
+ return $self->prop( 'is_public', @_ );
}
# clear cached theme data from memory
diff -r f85d8534fa0f -r 92e2e6b2f18e
cgi-bin/LJ/Console/Command/MoodthemePublic.pm
--- a/cgi-bin/LJ/Console/Command/MoodthemePublic.pm Fri Jun 25 15:32:49
2010 +0800
+++ b/cgi-bin/LJ/Console/Command/MoodthemePublic.pm Fri Jun 25 19:05:56
2010 +0800
@@ -43,10 +43,7 @@ sub execute {
unless $public =~ /^[YN]$/;
my $msg = ($public eq "Y") ? "public" : "not public";
- my $dbh = LJ::get_db_writer();
- my $sth = $dbh->prepare("SELECT is_public FROM moodthemes WHERE
moodthemeid = ?");
- $sth->execute($themeid);
- my $old_value = $sth->fetchrow_array;
+ my $old_value = DW::Mood->is_public( $themeid );
return $self->error("This theme doesn't seem to exist.")
unless $old_value;
@@ -54,7 +51,12 @@ sub execute {
return $self->error("This theme is already marked as $msg.")
if $old_value eq $public;
+ my $dbh = LJ::get_db_writer() or
+ return $self->error( "Database unavailable" );
$dbh->do("UPDATE moodthemes SET is_public = ? WHERE moodthemeid = ?",
undef, $public, $themeid);
+ return $self->error( "Database error: " . $dbh->errstr ) if $dbh->err;
+ DW::Mood->clear_cache( $themeid );
+
return $self->print("Theme #$themeid marked as $msg.");
}
diff -r f85d8534fa0f -r 92e2e6b2f18e
cgi-bin/LJ/Console/Command/MoodthemeSetpic.pm
--- a/cgi-bin/LJ/Console/Command/MoodthemeSetpic.pm Fri Jun 25 15:32:49
2010 +0800
+++ b/cgi-bin/LJ/Console/Command/MoodthemeSetpic.pm Fri Jun 25 19:05:56
2010 +0800
@@ -43,13 +43,12 @@ sub execute {
return $self->error("Sorry, your account type doesn't let you create new
mood themes")
unless $remote->can_create_moodthemes;
- my $dbh = LJ::get_db_writer();
-
- my $sth = $dbh->prepare("SELECT ownerid FROM moodthemes WHERE moodthemeid
= ?");
- $sth->execute($themeid);
- my $owner = $sth->fetchrow_array;
+ my $owner = DW::Mood->ownerid( $themeid );
return $self->error("You do not own this mood theme.")
unless $owner == $remote->id;
+
+ my $dbh = LJ::get_db_writer() or
+ return $self->error( "Database unavailable" );
$width += 0;
$height += 0;
diff -r f85d8534fa0f -r 92e2e6b2f18e cgi-bin/LJ/Customize.pm
--- a/cgi-bin/LJ/Customize.pm Fri Jun 25 15:32:49 2010 +0800
+++ b/cgi-bin/LJ/Customize.pm Fri Jun 25 19:05:56 2010 +0800
@@ -791,15 +791,11 @@ sub s2_implicit_style_create
# returns: themeid if public or owned by user, false otherwise
# </LJFUNC>
sub validate_moodthemeid {
- my $class = shift;
- my ($u, $themeid) = @_;
- my $dbr = LJ::get_db_reader();
- if ($themeid) {
- my ($mownerid, $mpublic) = $dbr->selectrow_array("SELECT ownerid,
is_public FROM moodthemes ".
- "WHERE
moodthemeid=?", undef, $themeid);
- $themeid = 0 unless $mpublic eq 'Y' || $mownerid == $u->{'userid'};
- }
- return $themeid
+ my ( $class, $u, $themeid ) = @_;
+ my $theme = DW::Mood->new( $themeid );
+ return 0 unless $theme &&
+ ( $theme->is_public eq 'Y' || $theme->ownerid == $u->userid );
+ return $themeid;
}
# <LJFUNC>
_______________________________________________
dw-changelog mailing list
[email protected]
http://lists.dwscoalition.org/mailman/listinfo/dw-changelog