% # API my $api = gitprep_api; my $manager = app->manager; # Parameters my $op = param('op') || ''; my $user_id = param('user') || ''; my $user_row_id = $api->get_user_row_id($user_id); my $project_id = param('project'); # Authentication unless ($api->logined($user_id)) { $self->redirect_to('/'); return; } # Rename project my $git = app->git; my $errors; if (lc $self->req->method eq 'post') { if ($op eq 'rename-project') { # Parameters my $to_project = param('to-project'); # Validator my $vc = app->vc; # Validation result my $validation = $vc->validation; # "to-project" check if (!(defined $to_project && length $to_project)) { $validation->add_failed('to-project' => 'Repository name is empty.'); } elsif (length $to_project > 300) { $validation->add_failed('to-project' => 'Repository name is too long.'); } elsif (!$vc->check($to_project, 'project_name')) { $validation->add_failed('to-project' => 'Repository name contains invalid charactor.'); } elsif (app->manager->exists_project($user_id, $to_project)) { $validation->add_failed('to-project' => "$to_project is already exists"); } if ($validation->is_valid) { # Rename eval { app->manager->rename_project($user_id, $project_id, $to_project) }; if (my $e = $@) { app->log->error($e); $errors = ['Internal Error']; } else { flash(message => "Repository name is renamed to $to_project"); $self->redirect_to("/$user_id/$to_project/settings"); return; } } else { $errors = $validation->messages } } # Change description elsif ($op eq 'change-description') { # Parameters my $description = param('description'); $description = '' unless defined $description; # Validator my $vc = app->vc; # Validation result my $validation = $vc->validation; if (length $description > 300) { $validation->add_failed(description => 'description is too long'); } if ($validation->is_valid) { eval { $git->description(app->rep_info($user_id, $project_id), $description) }; if (my $e = $@) { app->log->error("/$user_id/$project_id/settings?op=description: $e"); $errors = ['Internal Error']; } else { flash(message => 'Description is changed.'); $self->redirect_to('current'); return; } } } # Change website URL elsif ($op eq 'change-website-url') { # Parameters my $website_url = param('website-url'); $website_url = '' unless defined $website_url; # Validator my $vc = app->vc; # Validation result my $validation = $vc->validation; if (length $website_url > 300) { $validation->add_failed('website-url' => 'Website URL is too long'); } if ($validation->is_valid) { app->dbi->model('project')->update( {website_url => $website_url}, where => {user => $user_row_id, id => $project_id} ); flash(message => 'Website URL is changed.'); $self->redirect_to('current'); return; } } # Change default branch elsif ($op eq 'save-settings') { # Parameters my $default_branch = param('default-branch'); my $private = param('private'); my $ignore_space_change = param('ignore_space_change'); my $guess_encoding = param('guess_encoding'); # Validator my $vc = app->vc; # Validation result my $validation = $vc->validation; # Check default branch if (defined $default_branch && length $default_branch > 300) { $validation->add_failed('default-branch' => 'default branch is too long'); } # Check private $private = $private ? 1 : 0; # Check ignore space change $ignore_space_change = $ignore_space_change ? 1 : 0; # Check guess encoding $guess_encoding //= ''; if (length $guess_encoding > 300) { $validation->add_failed(guess_encoding => 'guess_encoding is too long'); } my $params = {}; if (defined $default_branch) { $params->{default_branch} = $default_branch; } if (defined $private) { $params->{private} = $private; }; if (defined $ignore_space_change) { $params->{ignore_space_change} = $ignore_space_change; } if (defined $guess_encoding) { $params->{guess_encoding} = $guess_encoding; } my $dbi = app->dbi; eval { $dbi->model('project')->update( $params, where => {user => $user_row_id, id => $project_id} ); }; if (my $e = $@) { app->log->error("/$user_id/$project_id/settings?op=save-settings: $e"); $errors = ['Internal Error']; } else { flash(message => "Settings is saved"); $self->redirect_to('current'); return; } } # Delete project elsif ($op eq 'delete-project') { my $user_id = param('user'); my $project_id = param('project'); eval { app->manager->delete_project($user_id, $project_id) }; if (my $e = $@) { app->log->error("/$user_id/$project_id/settings: $e"); $errors = ['Internal Error']; } else { flash(message => "Repository $project_id is deleted."); $self->redirect_to("/$user_id"); return; } } } %> % layout 'common', title => 'Options'; %= javascript begin $(document).ready(function () { // Rename project $('#rename').on('click', function () { $('#form-rename-project').submit(); }); // Check matching deleted project $('input[name="deleted-project"]').on('keyup', function () { var deleted_project = $(this).val(); var project = "<%= $project_id %>"; if (deleted_project == project) { $('#delete').attr('class', 'btn btn-danger') .removeAttr('disabled'); } else { $('#delete').attr('class', 'btn btn-danger disabled') .attr('disabled', 'disabled'); } }); // Delete project $('#delete').on('click', function () { $('#form-delete-project').submit(); }); }); % end %= include '/include/header';