1 contributor
<%
my $op = param('op') || '';
my $errors;
if ($op eq 'create') {
# API
my $api = gitprep_api;
# Validation
my $params = $api->params;
my $keyword_check = sub {
my $value = shift;
return ($value || '') =~ /^[a-zA-Z0-9_\-]+$/
};
my $rule = [
project => [
['not_blank' => 'Repository name is empty'],
[$keyword_check => 'Invalid repository name']
],
description => [
'any'
]
];
my $validator = app->validator;
my $vresult = $validator->validate($params, $rule);
# Git
my $git = app->git;
if ($vresult->is_ok) {
# Not logined
unless ($api->logined) {
return $self->render_exception;
}
my $data = $vresult->data;
my $user = session('user_id');
my $project = $data->{project};
my $description = $data->{description};
if ($git->exists_repository($user, $project)) {
$errors = ['Repositry already exists'];
}
else {
# Create repository
eval {
$git->create_repository(
$user,
$project,
{description => $description}
);
};
$api->croak($@) if $@;
# Create repository data
eval {
app->dbi->model('project')
->insert({config => '{}'}, id => [$user, $project]);
};
if ($@) {
my $error = $@;
$git->remove_repository($user, $project);
$api->croak($error);
}
# Go to user page
$self->redirect_to("/$user/$project");
return 1;
}
}
else { $errors = $vresult->messages }
}
%>
% layout 'common';
%= include '/include/header';
<div class="container">
% if ($errors) {
<div class="alert alert-error">
<button type="button" class="close" data-dismiss="alert">×</button>
% for my $error (@$errors) {
<p><%= $error %></p>
% }
</div>
% }
<form action="<%= url_for->query(op => 'create') %>" method="post">
<div><b>Repository name</b></div>
<div><%= input_tag 'project', type => 'text', style => 'width:300px' %></div>
<div><b>Description</b> (optional)</div>
<div><%= input_tag 'description', type => 'text', style => 'width:600px' %></div>
<input type="submit" class="btn" value="Create repository">
</form>
</div>
%= include '/include/footer';