Mojolicious-Command-generate-bootstrap_app

 view release on metacpan or  search on metacpan

lib/Mojolicious/Command/generate/bootstrap_app.pm  view on Meta::CPAN

    my $self = shift;

    my $record = {};

    if ($self->_validate_form){
        $record->{login} = $self->_trim($self->param('login'));
        $record->{email}    = $self->_trim($self->param('email'));
        $record->{password} = $self->_encrypt_password($self->param('password'));
        $record->{admin}    = $self->param('admin') ? 1 : 0;

        try {
            $self->model('User')->create($record);
        }
        catch {
            $self->flash(class => 'alert alert-danger', message => $_);
            $self->redirect_to($self->req->headers->referrer);
        };
        $self->redirect_to('/users/list');
    }
    else {
        $self->redirect_to($self->req->headers->referrer);
    }
}

sub delete {
    my $self = shift;

    my $user = $self->model('User')->find( $self->stash('id') );
    my $login = $user->login;

    if ($user->id != $self->session->{user}->{id}){
        $user->delete;
        $self->flash( class => 'alert alert-info', message => "$login deleted." );
    }
    else {
        $self->flash( class => 'alert alert-danger', message => "You can not delete $login." );
    }

    $self->redirect_to('/users/list');
}

sub edit {
    my $self = shift;

    if (defined $self->stash('id')) {
        my $user = $self->model('User')->find($self->stash('id'));
        if ($user->id == $self->session->{user}->{id} || $self->session->{user}->{admin}) {
            $self->render( user => $user );
        }
        else {
            $self->flash( class => 'alert alert-danger', message => 'Not authorized.' );
            $self->redirect_to($self->req->headers->referrer);
        }
    }
    else {
        $self->flash( class => 'alert alert-danger', message => 'No user given.' );
        $self->redirect_to($self->req->headers->referrer);
    }
}

sub update {
    my $self = shift;

    my $record = {};

    if ($self->_validate_form){
        $record->{login} = $self->_trim($self->param('login'));
        $record->{email}    = $self->_trim($self->param('email'));
        $record->{password} = $self->_encrypt_password($self->param('password'));
        $record->{admin}    = $self->param('admin') ? 1 : 0;

        if (defined $self->param('id')) {
            my $user = $self->model('User')->find($self->param('id'));
            if ($user->id == $self->session->{user}->{id} || $self->session->{user}->{admin}) {
                $record->{id} = $self->param('id');
                try {
                    $self->model('User')->update_or_create($record);
                    $self->flash(class => 'alert alert-notice', message => 'Updated ' . $user->login);
                }
                catch {
                    $self->flash(class => 'alert alert-danger', message => $_);
                };
                $self->redirect_to($self->session->{user}->{admin} ? '/users/list' : '/');
            }
        }
        else {
            $self->flash(class => 'alert alert-danger', message => 'No user given.');
            $self->redirect_to($self->session->{user}->{admin} ? '/users/list' : '/');
        }
    }
    else {
        $self->redirect_to($self->req->headers->referrer);
    }
}

sub _trim {
    my ($self, $string) = @_;
    $string =~ s/^\s*(.*)\s*$/$1/gmx if defined $string;

    return $string
}

sub _validate_form {
    my $self = shift;

    if ($self->_trim($self->param('login')) !~ /[a-zA-Z]{3,10}/){
        $self->flash(class => 'alert alert-danger', message => $self->param('login') . ' does not match /[a-zA-Z]{3,10}/');
        return 0;
    }
    elsif ($self->param('password') ne $self->param('password_verify')){
        $self->flash(class => 'alert alert-danger', message => 'Passwords do not match.');
        return 0;
    }
    elsif ($self->param('password') eq ''){
        $self->flash(class => 'alert alert-danger', message => 'Password is empty.');
        return 0;
    }
    elsif (!Email::Valid->address($self->_trim($self->param('email')))){
        $self->flash(class => 'alert alert-danger', message => 'You have to provide a valid email address.');
        return 0;
    }



( run in 0.644 second using v1.01-cache-2.11-cpan-39bf76dae61 )