<% # 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';
%= include '/include/errors', errors => $errors; %= include '/include/message', message => flash('message');
  • Repository name

  • %= text_field 'to-project' => $project_id, style => "width:80%"; Rename
  • Description

  • % my $description = $git->description(app->rep_info($user_id, $project_id)); % $description = '' unless defined $description; %= text_field 'description' => $description, style => "width:90%";
  • Website URL

  • <% my $website_url = app->dbi->model('project')->select('website_url', where => {user => $user_row_id, id => $project_id})->value; $website_url = '' unless defined $website_url; %> %= text_field 'website-url' => $website_url, style => "width:90%";
%= hidden_field op => 'save-settings';
  • Settings

  • Default Branch <% my $branches = $git->branches($self->app->rep_info($user_id, $project_id)); my $branch_names = [map { $_->{name} } @$branches]; my $default_branch = app->manager->default_branch($user_id, $project_id); push @$branch_names, $default_branch unless @$branch_names; param('default-branch', $default_branch); %> %= select_field 'default-branch' => $branch_names;
  • Make this repository private % my $private = app->manager->is_private_project($user_id, $project_id); % my @private_checked = $private ? (checked => undef) : (); %= hidden_field 'private' => 0; %= check_box 'private' => 1, @private_checked;
  • <% my $ignore_space_change = app->dbi->model('project')->select( 'ignore_space_change', where => {user => $user_row_id, id => $project_id} )->value; my @ignore_space_change_checked = $ignore_space_change ? (checked => undef) : (); %> Ignore space change in diff %= hidden_field 'ignore_space_change' => 0; %= check_box 'ignore_space_change' => 1, @ignore_space_change_checked;
  • <% my $guess_encoding = app->dbi->model('project')->select( 'guess_encoding', where => {user => $user_row_id, id => $project_id} )->value; %>
    Guess encoding
    (Guess encoding from the following encoding list. default is "UTF-8". if your source code is different from UTF-8, set comma separated encoding list. For example "cp932,UTF-8") %= text_field 'guess_encoding' => $guess_encoding;
  • Danger Zone

  • Delete this repository
    Once you delete a repository, there is no going back. Delete this repository %= hidden_field user => $user_id; %= hidden_field project => $project_id;
%= include '/include/footer';