[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