[mb-commits] r10089 - in mb_server/branches/TemplateToolkit/lib: . MusicBrainz/Server/Controller MusicBrainz/Server/Form/Model MusicBrainz/Server/Form/User
root at musicbrainz.org
root at musicbrainz.org
Fri Jul 11 01:14:38 UTC 2008
Author: acid2
Date: 2008-07-11 01:14:38 +0000 (Fri, 11 Jul 2008)
New Revision: 10089
Modified:
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/User.pm
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Model/UserPreference.pm
mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/User/Preferences.pm
mb_server/branches/TemplateToolkit/lib/UserPreference.pm
Log:
Saving user preferences - also reworked how UserPreference.pm works because this is currently dependant on Apache
Modified: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/User.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/User.pm 2008-07-11 00:51:04 UTC (rev 10088)
+++ mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Controller/User.pm 2008-07-11 01:14:38 UTC (rev 10089)
@@ -363,11 +363,10 @@
die "You must be logged in" unless $c->user_exists;
my $form = MusicBrainz::Server::Form::User::Preferences->new($c->user->get_object->GetName);
- $form->build_form;
$c->stash->{form} = $form;
$form->update_from_form ($c->req->params)
- if $c->form_posted;
+ if($c->form_posted);
$c->stash->{template} = 'user/preferences.tt';
}
Modified: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Model/UserPreference.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Model/UserPreference.pm 2008-07-11 00:51:04 UTC (rev 10088)
+++ mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/Model/UserPreference.pm 2008-07-11 01:14:38 UTC (rev 10089)
@@ -5,6 +5,7 @@
use MusicBrainz;
use UserStuff;
+use UserPreference;
use base 'Form::Processor';
@@ -18,18 +19,20 @@
$mb->Login();
my $us = new UserStuff($mb->{DBH});
- return $us->newFromName($id);
+ my $user = $us->newFromName($id);
+
+ my $prefs = UserPreference->newFromUser ($user);
+ $prefs->load;
+
+ return $prefs;
}
sub init_value {
my ($self, $field, $item) = @_;
+
$item ||= $self->item;
- my $mb = new MusicBrainz;
- $mb->Login();
- $self->item->{DBH} = $mb->{DBH};
-
- return UserPreference::get_for_user($field->name, $item);
+ return $item->get($field->name);
}
sub update_model {
@@ -40,7 +43,12 @@
$mb->Login();
$self->item->{DBH} = $mb->{DBH};
- die "apparently saving for mr. " . $self->item->GetName;
+ for my $field ($self->fields)
+ {
+ $self->item->set ($field->name, $field->value);
+ }
+
+ $self->item->save;
}
sub update_from_form {
Modified: mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/User/Preferences.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/User/Preferences.pm 2008-07-11 00:51:04 UTC (rev 10088)
+++ mb_server/branches/TemplateToolkit/lib/MusicBrainz/Server/Form/User/Preferences.pm 2008-07-11 01:14:38 UTC (rev 10089)
@@ -10,7 +10,6 @@
sub name { 'user_preferences' };
-
# profile {{{
sub profile
{
@@ -89,26 +88,26 @@
# 'Select' options {{{
sub options_autofix_open {
- return (
- "remember" => "how I last left it",
- "1" => "open",
- "0" => "closed",
- );
+ [
+ "remember", "how I last left it",
+ 1, "open",
+ 0, "closed",
+ ];
}
sub options_topmenu_dropdown_trigger {
- return (
+ [
"mouseover" => "When I move the mouse over the item",
"click" => "When I click the open submenu icon",
- );
+ ];
}
sub options_topmenu_submenu_types {
- return (
+ [
"both" => "Both",
"dropdownonly" => "Dropdown menus only (vertical)",
"staticonly" => "Static submenus only (horizontal)",
- );
+ ];
}
sub options_datetimeformat {
Modified: mb_server/branches/TemplateToolkit/lib/UserPreference.pm
===================================================================
--- mb_server/branches/TemplateToolkit/lib/UserPreference.pm 2008-07-11 00:51:04 UTC (rev 10088)
+++ mb_server/branches/TemplateToolkit/lib/UserPreference.pm 2008-07-11 01:14:38 UTC (rev 10089)
@@ -371,55 +371,145 @@
################################################################################
# get, set, load, save
################################################################################
+=head2 C<newFromUser>
+Instantiate a new UserPreference object for a specific user.
+
+=cut
+
+sub newFromUser
+{
+ my ($class, $user) = @_;
+
+ my $uid = $user->GetId
+ or carp "No user id could be found";
+
+ bless {
+ uid => $uid,
+ DBH => $user->{DBH},
+ prefs => {},
+ }, $class;
+}
+
+=head2 C<load>
+
+Loads the users preferences from the database. This B<will> override any changes that
+have been made.
+
+=cut
+
+sub load
+{
+ my $self = shift;
+ my $uid = $self->{uid};
+
+ my $sql = Sql->new($self->{DBH});
+ my $rows = $sql->SelectListOfLists(
+ "SELECT name, value FROM moderator_preference WHERE moderator = ?",
+ $uid,
+ );
+
+ my $preferences = {};
+ for (@$rows)
+ {
+ my ($key, $value) = @$_;
+
+ my $info = $prefs{$key}
+ or warn("Moderator #$uid has invalid saved preference '$key'"), next;
+
+ my $newValue = $info->{CHECK}->($value);
+
+ defined $newValue
+ or warn "Moderator #$uid has invalid saved value '$value' for preference '$key'";
+
+ $self->{prefs}->{$key} = $newValue;
+ }
+}
+
+=head2 C<get> KEY
+
+Gets a user preference with key KEY. If this preference is not present in the users preferences,
+the default value for it will be returned.
+
+=cut
+
sub get
{
- my ($key) = @_;
+ my ($self, $key) = @_;
+
my $info = $prefs{$key}
or carp("UserPreference::get called with invalid key '$key'"), return undef;
- require UserStuff;
- my $s = UserStuff->GetSession;
- my $value = $s->{"PREF_$key"};
+ my $value = $self->{prefs}->{$key};
defined($value) or return $info->{DEFAULT};
$value;
}
+=head2 C<set> KEY, VALUE
+
+Sets a user preference with KEY to VALUE
+
+=cut
+
sub set
{
- my ($key, $value) = @_;
+ my ($self, $key, $value) = @_;
+
my $info = $prefs{$key}
or carp("UserPreference::set called with invalid key '$key'"), return;
+
my $newvalue = $info->{CHECK}->($value);
defined $newvalue
or carp("UserPreference::set called with invalid value '$value' for key '$key'"), return;
- require UserStuff;
- my $s = UserStuff->GetSession;
- tied %$s
- or carp("UserPreference::set called, but %session is not tied"), return;
+ $self->{prefs}->{$key} = $newvalue;
+}
- $s->{"PREF_$key"} = $newvalue;
+=head2 C<save>
+
+Save the user preferences to the database
+
+=cut
+sub save {
+ my $self = shift;
+ my $uid = $self->{uid};
+
+ my $sql = Sql->new($self->{DBH});
+ my $wrap_transaction = $sql->{DBH}{AutoCommit};
+
+ eval {
+ $sql->Begin if $wrap_transaction;
+ $sql->Do("DELETE FROM moderator_preference WHERE moderator = ?", $uid);
+
+ while (my ($key, $value) = each %{$self->{prefs}})
+ {
+ $sql->Do("INSERT INTO moderator_preference (moderator, name, value) VALUES (?, ?, ?)",
+ $uid, $key, $value);
+ }
+
+ $sql->Commit if $wrap_transaction;
+ 1;
+ } or do {
+ my $e = $@;
+ $sql->Rollback if $wrap_transaction;
+ die $e;
+ };
}
-sub LoadForUser
+sub LoadForUser#{{{
{
my ($user) = @_;
my $uid = $user->GetId
or return;
- require UserStuff;
- my $s = UserStuff->GetSession;
- tied %$s
- or carp("UserPreference::LoadFromUser called, but %session is not tied"), return;
-
my $sql = Sql->new($user->{DBH});
my $rows = $sql->SelectListOfLists(
"SELECT name, value FROM moderator_preference WHERE moderator = ?",
$uid,
);
+ my $preferences = {};
for (@$rows)
{
my ($key, $value) = @$_;
@@ -430,10 +520,12 @@
defined $newvalue
or warn("Moderator #$uid has invalid saved value '$value' for preference '$key'"), next;
- $s->{"PREF_$key"} = $newvalue;
+ $preferences->{$key} = $newvalue;
}
-}
+ return $preferences;
+}#}}}
+
sub SaveForUser
{
my ($user) = @_;
More information about the MusicBrainz-commits
mailing list