package EnsEMBL::Web::Command::Account::SetConfig;
### Sets a configuration as the one in current use
use strict;
use warnings;
use Class::Std;
use EnsEMBL::Web::RegObj;
use EnsEMBL::Web::Data::User;
use base 'EnsEMBL::Web::Command';
{
sub process {
my $self = shift;
my $object = $self->object;
## Set this config as the current one
my $user = $EnsEMBL::Web::RegObj::ENSEMBL_WEB_REGISTRY->get_user;
my ($current) = $user->currentconfigs;
$current ||= $user->add_to_currentconfigs({
config => $object->param('id'),
});
$current->config($object->param('id'));
$current->save;
#my $current_config = EnsEMBL::Web::Data::CurrentConfig->new({id=>$current->key});
#$current_config->config($object->param('id'));
#warn "Reset id to ", $current_config->config;
#$current_config->save;
## Forward to the appropriate page
my $url = CGI::escape($object->param('url'));
my $mode = $object->param('mode');
my $new_url;
if ($mode eq 'edit') {
$new_url = $self->url('/Account/Details');
} elsif ($url) {
$new_url = $url;
} else {
my $config = EnsEMBL::Web::Data::Record::Configuration::User->new($object->param('id'));
if ($config && $config->url) {
## get saved URL
$new_url = $config->url;
} else {
## Generic fallback
$new_url = $self->url('/Account/Details');
}
}
$object->redirect($new_url);
}
}
1;