The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Labyrinth::Plugin::Event::Talks;

use warnings;
use strict;

use vars qw($VERSION);
$VERSION = '1.03';

=head1 NAME

Labyrinth::Plugin::Event::Talks - Event Talk handler for the Labyrinth framework.

=head1 DESCRIPTION

Contains all the event talk functionality for Labyrinth.

=cut

# -------------------------------------
# Library Modules

use base qw(Labyrinth::Plugin::Base);

use Clone qw(clone);

use Labyrinth::DBUtils;
use Labyrinth::MLUtils;
use Labyrinth::Session;
use Labyrinth::Support;
use Labyrinth::Users;
use Labyrinth::Variables;

# -------------------------------------
# Variables

# type: 0 = optional, 1 = mandatory
# html: 0 = none, 1 = text, 2 = textarea


my %fields = (
    eventid     => { type => 1, html => 0 },
    talkid      => { type => 0, html => 0 },
    userid      => { type => 1, html => 0 },
    guest       => { type => 0, html => 0 },
    talktitle   => { type => 1, html => 1 },
    abstract    => { type => 1, html => 2 },
    resource    => { type => 0, html => 2 },
);

my (@mandatory,@allfields);
for(keys %fields) {
    push @mandatory, $_     if($fields{$_}->{type});
    push @allfields, $_;
}

# -------------------------------------
# The Subs

=head1 ADMIN INTERFACE METHODS

=over 4

=item Admin

Provides list of the talks currently available.

=item Add

Add a new talk.

=item Edit

Edit an existing talk.

=item Save

Save the current talk.

=item Delete

Delete a talk.

=item EventSelect

Provides a dropdown list of events available.

=back

=cut

sub Admin {
    return  unless AccessUser(EDITOR);

    if($cgiparams{doaction}) {
        if($cgiparams{doaction} eq 'Delete') { Delete(); }
    }

    my @rows = $dbi->GetQuery('hash','AllTechTalks');
    $tvars{data} = \@rows   if(@rows);
}

sub Add {
    return  unless AccessUser(EDITOR);
    return  unless AuthorCheck('GetEventByID','eventid',EDITOR);

    $tvars{data}{ddusers}  = UserSelect(0,1,0,'Speaker',1);
    $tvars{data}{ddevents} = EventSelect($cgiparams{eventid});
}

sub Edit {
    return  unless AccessUser(EDITOR);
    return  unless AuthorCheck('GetEventByID','eventid',EDITOR);

    if($cgiparams{talkid}) {
        my @rows = $dbi->GetQuery('hash','GetTechTalkByID',$cgiparams{talkid});
        $tvars{data} = $rows[0] if(@rows);
        $tvars{data}{abstracted} = $tvars{data}{abstract};
        $tvars{data}{resourced}  = $tvars{data}{resource};
        $cgiparams{eventid}    ||= $tvars{data}{eventid};
    }

    my $opt = $cgiparams{talkid} ? $tvars{data}{userid} : 0;
    $tvars{data}{ddusers}  = UserSelect($opt,1,0,'Speaker',1);
    $tvars{data}{ddevents} = EventSelect($cgiparams{eventid});
}

sub Save {
    return  unless AccessUser(EDITOR);
    return  unless AuthorCheck('GetEventByID','eventid',EDITOR);

    my $opt = $cgiparams{talkid} ? $tvars{data}{userid} : 0;
    $tvars{data}{ddusers}  = UserSelect($opt,1,0,'Speaker',1);

    return  if FieldCheck(\@allfields,\@mandatory);

    $tvars{data}{guest} = ($tvars{data}{guest} ? 1 : 0);
    for(keys %fields) {
        next    unless($fields{$_});
           if($fields{$_}->{html} == 1) { $tvars{data}{$_} = CleanHTML($tvars{data}{$_}) }
        elsif($fields{$_}->{html} == 2) { $tvars{data}{$_} = CleanTags($tvars{data}{$_}) }
    }


    my @fields = (  $tvars{data}{eventid},
                    $tvars{data}{userid},
                    $tvars{data}{guest},
                    $tvars{data}{talktitle},
                    $tvars{data}{abstract},
                    $tvars{data}{resource}
    );

    if($cgiparams{talkid})
            { $dbi->DoQuery('SaveTechTalk',@fields,$cgiparams{talkid}); }
    else    { $cgiparams{talkid} = $dbi->IDQuery('AddTechTalk',@fields); }
}

sub Delete {
    return  unless AccessUser(ADMIN);
    my @ids = CGIArray('LISTED');
    return  unless @ids;

    for my $id (@ids) {
        $cgiparams{'talkid'} = $id;
        next    unless AuthorCheck('GetTechTalkByID','talkid',EDITOR);

        $dbi->DoQuery('DeleteTechTalk',$cgiparams{'talkid'});
    }
}

sub EventSelect {
    my ($opt,$blank) = @_;
    $blank ||= 0;

    my @list;
    my @rows = $dbi->GetQuery('hash','AllTalkEvents');
    for(@rows) { push @list, { id => $_->{eventid}, value => $_->{eventdate} . ' - ' . $_->{title} }; }
    unshift @list, { id => 0, value => 'Select Event'}  if($blank == 1);
    DropDownRows($opt,'eventid','id','value',@list);
}

1;

__END__

=head1 SEE ALSO

L<Labyrinth>

=head1 AUTHOR

Barbie, <barbie@missbarbell.co.uk> for
Miss Barbell Productions, L<http://www.missbarbell.co.uk/>

=head1 COPYRIGHT & LICENSE

  Copyright (C) 2002-2013 Barbie for Miss Barbell Productions
  All Rights Reserved.

  This module is free software; you can redistribute it and/or
  modify it under the Artistic License 2.0.

=cut