Add thread creation ability
This commit is contained in:
parent
51b2c54e9a
commit
ff55197474
|
@ -67,17 +67,26 @@ sub startup {
|
||||||
# router
|
# router
|
||||||
my $r = $self->routes;
|
my $r = $self->routes;
|
||||||
|
|
||||||
|
# controller routes
|
||||||
|
## index page
|
||||||
|
$r->get('/')->to(
|
||||||
|
controller => 'Controller::Index',
|
||||||
|
action => 'index'
|
||||||
|
);
|
||||||
# view subforum
|
# view subforum
|
||||||
$r->get('/subforum/:id')->to(
|
$r->get('/subforum/:id')->to(
|
||||||
controller => 'Controller::ViewSubf',
|
controller => 'Controller::ViewSubf',
|
||||||
action => 'subf_view'
|
action => 'subf_view'
|
||||||
);
|
);
|
||||||
|
|
||||||
# controller routes
|
# create thread
|
||||||
## index page
|
$r->get('/thread/new/:id')->to(
|
||||||
$r->get('/')->to(
|
controller => 'Controller::NewThread',
|
||||||
controller => 'Controller::Index',
|
action => 'thread_compose'
|
||||||
action => 'index'
|
);
|
||||||
|
$r->post('/thread/new/:id')->to(
|
||||||
|
controller => 'Controller::NewThread',
|
||||||
|
action => 'thread_submit'
|
||||||
);
|
);
|
||||||
|
|
||||||
## registration page
|
## registration page
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
package CharmBoard::Controller::NewThread;
|
||||||
|
|
||||||
|
use utf8;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use experimental qw(try smartmatch);
|
||||||
|
|
||||||
|
use Mojo::Base 'Mojolicious::Controller', -signatures;
|
||||||
|
|
||||||
|
sub thread_compose {
|
||||||
|
my $self = shift;
|
||||||
|
|
||||||
|
my $subf_id = $self->param('id');
|
||||||
|
my $subf_cat =
|
||||||
|
$self->schema->resultset('Subforums')->cat_from_id($subf_id);
|
||||||
|
my $cat_title =
|
||||||
|
$self->schema->resultset('Categories')
|
||||||
|
->title_from_id($subf_cat);
|
||||||
|
|
||||||
|
$self->render(
|
||||||
|
template => 'thread_compose',
|
||||||
|
subf_id => $subf_id,
|
||||||
|
cat_title => $cat_title,
|
||||||
|
subf_title => $self->schema->resultset('Subforums')
|
||||||
|
->title_from_id($subf_id),
|
||||||
|
error => $self->flash('error'),
|
||||||
|
message => $self->flash('message')
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
sub thread_submit {
|
||||||
|
my $self = shift;
|
||||||
|
|
||||||
|
my $thread_title = $self->param('thread-title');
|
||||||
|
my $post_content = $self->param('post-content');
|
||||||
|
my $post_time = time;
|
||||||
|
|
||||||
|
my $catch_error;
|
||||||
|
|
||||||
|
# make sure post data is valid
|
||||||
|
try {
|
||||||
|
($thread_title, $post_content)
|
||||||
|
or die "Please fill both the title and post content fields"
|
||||||
|
} catch ($catch_error) {
|
||||||
|
$self->flash(error => $catch_error);
|
||||||
|
$self->redirect_to('/thread/new/:id')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
|
@ -9,25 +9,25 @@ use base qw(DBIx::Class::Core);
|
||||||
|
|
||||||
__PACKAGE__->table('users');
|
__PACKAGE__->table('users');
|
||||||
__PACKAGE__->add_columns(
|
__PACKAGE__->add_columns(
|
||||||
user_id =>
|
user_id =>
|
||||||
{ data_type => 'integer',
|
{ data_type => 'integer',
|
||||||
is_numeric => 1,
|
is_numeric => 1,
|
||||||
is_nullable => 0,
|
is_nullable => 0,
|
||||||
is_auto_increment => 1,
|
is_auto_increment => 1,
|
||||||
},
|
},
|
||||||
username =>
|
username =>
|
||||||
{ data_type => 'text',
|
{ data_type => 'text',
|
||||||
is_nullable => 0,
|
is_nullable => 0,
|
||||||
},
|
},
|
||||||
email =>
|
email =>
|
||||||
{ data_type => 'text',
|
{ data_type => 'text',
|
||||||
is_nullable => 0,
|
is_nullable => 0,
|
||||||
},
|
},
|
||||||
password =>
|
password =>
|
||||||
{ data_type => 'text',
|
{ data_type => 'text',
|
||||||
is_nullable => 0,
|
is_nullable => 0,
|
||||||
},
|
},
|
||||||
salt =>
|
salt =>
|
||||||
{ data_type => 'text',
|
{ data_type => 'text',
|
||||||
is_nullable => 0,
|
is_nullable => 0,
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
% layout 'default', title => $self->board_name;
|
% layout 'default',
|
||||||
|
% title => $self->board_name;
|
||||||
|
|
||||||
<% my $cat_header = begin %>
|
<% my $cat_header = begin %>
|
||||||
% my $_cat_id = shift; my $_name = shift;
|
% my $_cat_id = shift; my $_name = shift;
|
||||||
|
|
|
@ -7,8 +7,8 @@ if ($self->session('is_auth') == 1) {
|
||||||
$userControls = "<a href=\"/logout\">logout</a>"}
|
$userControls = "<a href=\"/logout\">logout</a>"}
|
||||||
else {
|
else {
|
||||||
$userControls =
|
$userControls =
|
||||||
"<a href=\"/login\">login</a> |
|
"<a href=\"/login\">login</a> |
|
||||||
<a href=\"/register\">register</a>"};
|
<a href=\"/register\">register</a>"};
|
||||||
%>
|
%>
|
||||||
<a href="/"><h2><%== $self->board_name %></h2></a>
|
<a href="/"><h2><%== $self->board_name %></h2></a>
|
||||||
<%== $userControls %><br /><br />
|
<%== $userControls %><br /><br />
|
|
@ -1,4 +1,5 @@
|
||||||
% layout 'default', title => $self->board_name . ' - Login';
|
% layout 'default',
|
||||||
|
% title => $self->board_name . ' - Login';
|
||||||
% if ($error) {
|
% if ($error) {
|
||||||
<p style="color: red"><%= $error %></p>
|
<p style="color: red"><%= $error %></p>
|
||||||
%};
|
%};
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
% layout 'default', title => $self->board_name . ' - Registration';
|
% layout 'default',
|
||||||
|
% title => $self->board_name . ' - Registration';
|
||||||
% if ($error) {
|
% if ($error) {
|
||||||
<p style="color: red"><%= $error %></p>
|
<p style="color: red"><%= $error %></p>
|
||||||
%};
|
%};
|
||||||
|
@ -8,23 +9,23 @@
|
||||||
<p>fields marked with <span style="color: red">*</span> are required</p>
|
<p>fields marked with <span style="color: red">*</span> are required</p>
|
||||||
<form method="post" action='/register'>
|
<form method="post" action='/register'>
|
||||||
username: <input
|
username: <input
|
||||||
id="username"
|
id="username"
|
||||||
name="username"
|
name="username"
|
||||||
/><span style="color: red"> *</span><br />
|
/><span style="color: red"> *</span><br />
|
||||||
email: <input
|
email: <input
|
||||||
id="email"
|
id="email"
|
||||||
name="email"
|
name="email"
|
||||||
type="email"
|
type="email"
|
||||||
/><span style="color: red"> *</span><br />
|
/><span style="color: red"> *</span><br />
|
||||||
password: <input
|
password: <input
|
||||||
id="password"
|
id="password"
|
||||||
name="password"
|
name="password"
|
||||||
type="password"
|
type="password"
|
||||||
/><span style="color: red"> *</span><br />
|
/><span style="color: red"> *</span><br />
|
||||||
confirm password: <input
|
confirm password: <input
|
||||||
id="confirm-password"
|
id="confirm-password"
|
||||||
name="confirm-password"
|
name="confirm-password"
|
||||||
type="password"
|
type="password"
|
||||||
/><span style="color: red"> *</span><br />
|
/><span style="color: red"> *</span><br />
|
||||||
<input type="submit" value="register account" />
|
<input type="submit" value="register account" />
|
||||||
</form>
|
</form>
|
|
@ -1,14 +1,16 @@
|
||||||
% layout 'default', title => $subf_title . ' - ' . $self->board_name;
|
% layout 'default',
|
||||||
|
% title => $subf_title . ' - ' . $self->board_name;
|
||||||
% my @thread_list = @{stash('thread_list')};
|
% my @thread_list = @{stash('thread_list')};
|
||||||
|
|
||||||
<% my $thread_item = begin %>
|
<% my $thread_item = begin %>
|
||||||
% my $_thread_id = shift; my $_thread_title = shift;
|
% my $_thread_id = shift; my $_thread_title = shift;
|
||||||
<div class=" thread-item thread-<%= $_thread_id %>">
|
<div class=" thread-item thread-<%= $_thread_id %>">
|
||||||
<a href="/thread/<%= $_thread_id %>"></a>
|
<a href="/thread/<%= $_thread_id %>"></a>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<a href="/"><%= $self->board_name %></a> » <%= $cat_title %> » <%= $subf_title %>
|
<a href="/"><%= $self->board_name %></a> » <%= $cat_title %> »
|
||||||
|
<%= $subf_title %>
|
||||||
<br /><br />
|
<br /><br />
|
||||||
|
|
||||||
<% if (! @thread_list) { %>
|
<% if (! @thread_list) { %>
|
||||||
|
@ -17,7 +19,7 @@ like to <a href="/thread/new/<%= $subf_id %>">make one?</a>
|
||||||
<% } else {
|
<% } else {
|
||||||
foreach my $thread_id (@thread_list) { %>
|
foreach my $thread_id (@thread_list) { %>
|
||||||
<%= $thread_item->(
|
<%= $thread_item->(
|
||||||
$thread_id,
|
$thread_id,
|
||||||
$self->schema->resultset('Threads')->
|
$self->schema->resultset('Threads')->
|
||||||
title_from_id($thread_id)) %>
|
title_from_id($thread_id)) %>
|
||||||
<% }} %>
|
<% }} %>
|
|
@ -0,0 +1,20 @@
|
||||||
|
% layout 'default',
|
||||||
|
% title => 'New thread - ' . $self->board_name;
|
||||||
|
<a href="/"><%= $self->board_name %></a> » <%= $cat_title %> »
|
||||||
|
<%= $subf_title %> » new thread
|
||||||
|
<br /><br />
|
||||||
|
<form method="post" action="/thread/new/<%= $subf_id %>">
|
||||||
|
<input
|
||||||
|
id="thread-title"
|
||||||
|
name="thread-title"
|
||||||
|
type="text"
|
||||||
|
placeholder="thread title"
|
||||||
|
/><br />
|
||||||
|
<textarea
|
||||||
|
id="post-content"
|
||||||
|
name="post-content"
|
||||||
|
cols="50" rows="5"
|
||||||
|
placeholder="post content">
|
||||||
|
</textarea><br /><br />
|
||||||
|
<input type="submit" value="post!" />
|
||||||
|
</form>
|
Loading…
Reference in New Issue