XTaTIK

 view release on metacpan or  search on metacpan

lib/XTaTIK/Controller/Root.pm  view on Meta::CPAN

package XTaTIK::Controller::Root;

our $VERSION = '0.005002'; # VERSION

use Mojo::Base 'Mojolicious::Controller';
use XTaTIK::Common qw/n_to_br  set_product_pic/;
use experimental 'postderef';

sub index   {
    my $self = shift;

    my @products = $self->products->get_by_number(
        split /\n/, $self->xvar('hot_products')
    );

    set_product_pic( $self, @$_{qw/image number/} ) for @products;
    $self->stash( hot_products => \@products, );
}

sub products_category {
    my $self = shift;

    my ( $products, $return_path, $return_name )
    = $self->products->get_category( $self->stash('category') );

    @$products or $self->reply->not_found;

    for ( @$products ) {
        set_product_pic( $self, @$_{qw/image number/} ) for
            grep exists $_->{number}, $_->{contents}->@*;
    }

    my $title = $self->stash('category') =~ s{^\s*/\s*}{}r;
    $title = $self->xtext('products_nav_name') unless length $title;
    $title = join '/', (split m{\s*/\s*}, $title )[-2,-1]
        if $title =~ tr{/}{} > 1;

    $title =~ s{/}{ / }g;

    my $meta_desc = join ', ', reverse $self->xtext('market'),
        split m{\s*/\s*}, $title;

    $self->stash(
        products    => $products,
        return_path => $return_path,
        return_name => $return_name,
        page_title  => $title,
        meta_desc   => $meta_desc,
    );
}

sub product {
    my $self = shift;
    my ( $product ) = $self->products->get_by_url( $self->stash('url') );
    $product or $self->reply->not_found;

    set_product_pic( $self, @$product{qw/image number/} );

    my $desc = Mojo::DOM->new( $product->{description} )->all_text;
    $desc = "$product->{group_desc}; $desc"
        if length $product->{group_desc};

    $desc = substr($desc, 0, 152) . '...'
        if length $desc > 155;

    $self->stash(
        product   => $product,
        meta_desc => $desc,
    );
};

sub contact_post {
    my $self = shift;

    $self->form_checker(
        rules => {
            name => { max => 200, },
            email => { max => 200, },
            province => {
                valid_values => [
                    qw/AB  BC  MB  NB  NF  NT  NS  NU  ON  PE  QC  SK  YT/
                ],
                valid_values_error => 'Please choose your province',
            },
            message => { max => 100_000 },
        },
    );

    return $self->render( template => 'root/contact' )
        unless $self->form_checker_ok;

    # Check CSRF token
    return $self->render(text => 'Bad CSRF token!', status => 403)
        if $self->validation->csrf_protect->has_error('csrf_token');

    $self->stash( visitor_ip => $self->tx->remote_address );
    $self->stash( message => n_to_br( $self->param('message')) );

    $self->mail(
        test     => $self->config('mail')->{test},
        to       => $self->config('mail')->{to}{quicknote},



( run in 0.842 second using v1.01-cache-2.11-cpan-71847e10f99 )