| ... | ... |
@@ -297,6 +297,9 @@ sub startup {
|
| 297 | 297 |
# Settings |
| 298 | 298 |
$r->any('/settings' => template '/settings');
|
| 299 | 299 |
|
| 300 |
+ # Collaboration |
|
| 301 |
+ $r->any('/settings/collaboration' => template '/settings/collaboration');
|
|
| 302 |
+ |
|
| 300 | 303 |
# Fork |
| 301 | 304 |
$r->any('/fork' => template '/fork');
|
| 302 | 305 |
|
| ... | ... |
@@ -171,74 +171,84 @@ |
| 171 | 171 |
%= include '/include/message', message => flash('message');
|
| 172 | 172 |
%= include '/include/project_header'; |
| 173 | 173 |
|
| 174 |
- <div style="margin-bottom:20px"> |
|
| 175 |
- <div class="border-gray bk-gray-light radius-top" style="padding-left:5px"> |
|
| 176 |
- <h4> |
|
| 177 |
- Settings |
|
| 178 |
- </h4> |
|
| 174 |
+ <div class="row"> |
|
| 175 |
+ <div class="span2"> |
|
| 176 |
+ <ul class="unstyled" style="font-size:13px;"> |
|
| 177 |
+ <li class="border-gray" style="padding:5px;"><b>Options</b></li> |
|
| 178 |
+ <li class="border-gray" style="border-top:none;padding:6px;"><a href="<%= url_for("/$user/$project/settings/collaboration") %>">Collaborators</a></li>
|
|
| 179 |
+ </ul> |
|
| 179 | 180 |
</div> |
| 180 |
- <div class="border-gray" style="padding:5px 10px;border-top:none"> |
|
| 181 |
- <form id="form-rename-project" action="<%= url_for->query(op => 'rename-project') %>" method="post" style="margin-bottom:0px"> |
|
| 182 |
- <div >Repository Name</div> |
|
| 183 |
- <div> |
|
| 184 |
- %= text_field 'to-project' => $project, style => 'margin-top:9px'; |
|
| 185 |
- <a href="#rename-confirm" role="button" class="btn" data-toggle="modal"> |
|
| 186 |
- Rename |
|
| 187 |
- </a> |
|
| 181 |
+ <div class="span10"> |
|
| 182 |
+ <div style="margin-bottom:20px"> |
|
| 183 |
+ <div class="border-gray bk-gray-light radius-top" style="padding-left:5px"> |
|
| 184 |
+ <h4> |
|
| 185 |
+ Settings |
|
| 186 |
+ </h4> |
|
| 188 | 187 |
</div> |
| 189 |
- </form> |
|
| 190 |
- </div> |
|
| 191 |
- <div class="border-gray" style="padding:5px 10px;border-top:none"> |
|
| 192 |
- <form action="<%= url_for->query(op => 'change-description') %>" method="post" style="margin-bottom:0px"> |
|
| 193 |
- <div >Description</div> |
|
| 194 |
- <div> |
|
| 195 |
- % my $description = $git->description($user, $project); |
|
| 196 |
- % $description = '' unless defined $description; |
|
| 197 |
- %= text_field 'description' => $description, class => 'span8', style => 'margin-top:9px'; |
|
| 198 |
- <input type="submit" class="btn" value="Save"> |
|
| 188 |
+ <div class="border-gray" style="padding:5px 10px;border-top:none"> |
|
| 189 |
+ <form id="form-rename-project" action="<%= url_for->query(op => 'rename-project') %>" method="post" style="margin-bottom:0px"> |
|
| 190 |
+ <div >Repository Name</div> |
|
| 191 |
+ <div> |
|
| 192 |
+ %= text_field 'to-project' => $project, style => 'margin-top:9px'; |
|
| 193 |
+ <a href="#rename-confirm" role="button" class="btn" data-toggle="modal"> |
|
| 194 |
+ Rename |
|
| 195 |
+ </a> |
|
| 196 |
+ </div> |
|
| 197 |
+ </form> |
|
| 199 | 198 |
</div> |
| 200 |
- </form> |
|
| 201 |
- </div> |
|
| 202 |
- <div class="border-gray radius-bottom" style="padding:5px 10px;border-top:none;"> |
|
| 203 |
- <form id="form-default-branch" action="<%= url_for->query(op => 'default-branch') %>" method="post" style="margin-bottom:0px"> |
|
| 204 |
- Default Branch |
|
| 205 |
- % my $branches = $git->branches($user, $project); |
|
| 206 |
- % my $branch_names = [map { $_->{name} } @$branches];
|
|
| 207 |
- % my $default_branch = app->manager->default_branch($user, $project); |
|
| 208 |
- % push @$branch_names, $default_branch unless @$branch_names; |
|
| 209 |
- % param('default-branch', $default_branch);
|
|
| 210 |
- %= select_field 'default-branch' => $branch_names, style => 'margin-top:5px'; |
|
| 211 |
- </form> |
|
| 212 |
- </div> |
|
| 213 |
- <div class="border-gray radius-bottom" style="padding:5px 10px;border-top:none;"> |
|
| 214 |
- <form id="form-default-branch" action="<%= url_for->query(op => 'private') %>" method="post" style="margin-bottom:0px"> |
|
| 215 |
- <span>Make this repository private</span> |
|
| 216 |
- % my $private = app->manager->is_private_project($user, $project); |
|
| 217 |
- % if ($private) {
|
|
| 218 |
- % param('private', 1);
|
|
| 219 |
- % } |
|
| 220 |
- %= check_box 'private' => 1, style => 'margin-top:0px;margin-left:5px;margin-right:10px'; |
|
| 221 |
- <input type="submit" class="btn" value="Save"> |
|
| 222 |
- </form> |
|
| 223 |
- </div> |
|
| 224 |
- </div> |
|
| 225 |
- |
|
| 226 |
- <div style="margin-bottom:30px"> |
|
| 227 |
- <div class="border-gray bk-gray-light radius-top" style="background:red;padding-left:5px"> |
|
| 228 |
- <h4 style="color:white">Danger Zone</h4> |
|
| 229 |
- </div> |
|
| 230 |
- <div class="border-gray radius-bottom" style="padding:5px 10px;border-top:none"> |
|
| 231 |
- <form id="form-delete-project" action="<%= url_for->query(op => 'delete-project') %>" method="post"> |
|
| 232 |
- <div><b>Delete this repository</b></div> |
|
| 233 |
- <span class="muted"> |
|
| 234 |
- Once you delete a repository, there is no going back. |
|
| 235 |
- </span> |
|
| 236 |
- <a style="color:red" href="#delete-confirm" role="button" class="btn" data-toggle="modal"> |
|
| 237 |
- Delete this repository |
|
| 238 |
- </a> |
|
| 239 |
- %= hidden_field user => $user; |
|
| 240 |
- %= hidden_field project => $project; |
|
| 241 |
- </form> |
|
| 199 |
+ <div class="border-gray" style="padding:5px 10px;border-top:none"> |
|
| 200 |
+ <form action="<%= url_for->query(op => 'change-description') %>" method="post" style="margin-bottom:0px"> |
|
| 201 |
+ <div >Description</div> |
|
| 202 |
+ <div> |
|
| 203 |
+ % my $description = $git->description($user, $project); |
|
| 204 |
+ % $description = '' unless defined $description; |
|
| 205 |
+ %= text_field 'description' => $description, class => 'span8', style => 'margin-top:9px'; |
|
| 206 |
+ <input type="submit" class="btn" value="Save"> |
|
| 207 |
+ </div> |
|
| 208 |
+ </form> |
|
| 209 |
+ </div> |
|
| 210 |
+ <div class="border-gray radius-bottom" style="padding:5px 10px;border-top:none;"> |
|
| 211 |
+ <form id="form-default-branch" action="<%= url_for->query(op => 'default-branch') %>" method="post" style="margin-bottom:0px"> |
|
| 212 |
+ Default Branch |
|
| 213 |
+ % my $branches = $git->branches($user, $project); |
|
| 214 |
+ % my $branch_names = [map { $_->{name} } @$branches];
|
|
| 215 |
+ % my $default_branch = app->manager->default_branch($user, $project); |
|
| 216 |
+ % push @$branch_names, $default_branch unless @$branch_names; |
|
| 217 |
+ % param('default-branch', $default_branch);
|
|
| 218 |
+ %= select_field 'default-branch' => $branch_names, style => 'margin-top:5px'; |
|
| 219 |
+ </form> |
|
| 220 |
+ </div> |
|
| 221 |
+ <div class="border-gray radius-bottom" style="padding:5px 10px;border-top:none;"> |
|
| 222 |
+ <form id="form-default-branch" action="<%= url_for->query(op => 'private') %>" method="post" style="margin-bottom:0px"> |
|
| 223 |
+ <span>Make this repository private</span> |
|
| 224 |
+ % my $private = app->manager->is_private_project($user, $project); |
|
| 225 |
+ % if ($private) {
|
|
| 226 |
+ % param('private', 1);
|
|
| 227 |
+ % } |
|
| 228 |
+ %= check_box 'private' => 1, style => 'margin-top:0px;margin-left:5px;margin-right:10px'; |
|
| 229 |
+ <input type="submit" class="btn" value="Save"> |
|
| 230 |
+ </form> |
|
| 231 |
+ </div> |
|
| 232 |
+ </div> |
|
| 233 |
+ |
|
| 234 |
+ <div style="margin-bottom:30px"> |
|
| 235 |
+ <div class="border-gray bk-gray-light radius-top" style="background:red;padding-left:5px"> |
|
| 236 |
+ <h4 style="color:white">Danger Zone</h4> |
|
| 237 |
+ </div> |
|
| 238 |
+ <div class="border-gray radius-bottom" style="padding:5px 10px;border-top:none"> |
|
| 239 |
+ <form id="form-delete-project" action="<%= url_for->query(op => 'delete-project') %>" method="post"> |
|
| 240 |
+ <div><b>Delete this repository</b></div> |
|
| 241 |
+ <span class="muted"> |
|
| 242 |
+ Once you delete a repository, there is no going back. |
|
| 243 |
+ </span> |
|
| 244 |
+ <a style="color:red" href="#delete-confirm" role="button" class="btn" data-toggle="modal"> |
|
| 245 |
+ Delete this repository |
|
| 246 |
+ </a> |
|
| 247 |
+ %= hidden_field user => $user; |
|
| 248 |
+ %= hidden_field project => $project; |
|
| 249 |
+ </form> |
|
| 250 |
+ </div> |
|
| 251 |
+ </div> |
|
| 242 | 252 |
</div> |
| 243 | 253 |
</div> |
| 244 | 254 |
</div> |
| ... | ... |
@@ -0,0 +1,63 @@ |
| 1 |
+<% |
|
| 2 |
+ # API |
|
| 3 |
+ my $api = gitprep_api; |
|
| 4 |
+ my $manager = app->manager; |
|
| 5 |
+ |
|
| 6 |
+ # Parameters |
|
| 7 |
+ my $op = param('op') || '';
|
|
| 8 |
+ my $user = param('user') || '';
|
|
| 9 |
+ |
|
| 10 |
+ # Authentication |
|
| 11 |
+ unless ($api->logined($user)) {
|
|
| 12 |
+ $self->redirect_to('/');
|
|
| 13 |
+ return; |
|
| 14 |
+ } |
|
| 15 |
+ |
|
| 16 |
+ # Rename project |
|
| 17 |
+ my $git = app->git; |
|
| 18 |
+ my $errors; |
|
| 19 |
+ if ($op eq 'add' && lc $self->req->method eq 'post') {
|
|
| 20 |
+ my $collaborator = param('collaborator');
|
|
| 21 |
+ |
|
| 22 |
+ eval { $git->description($user, $project) };
|
|
| 23 |
+ if (my $e = $@) {
|
|
| 24 |
+ app->log->error(url_with . ": $e"); |
|
| 25 |
+ $errors = ['Internal Error']; |
|
| 26 |
+ } |
|
| 27 |
+ else {
|
|
| 28 |
+ flash(message => 'Collaborator is added.'); |
|
| 29 |
+ $self->redirect_to('current');
|
|
| 30 |
+ return; |
|
| 31 |
+ } |
|
| 32 |
+ } |
|
| 33 |
+%> |
|
| 34 |
+ |
|
| 35 |
+% layout 'common', title => 'Collaboration'; |
|
| 36 |
+ |
|
| 37 |
+ %= include '/include/header'; |
|
| 38 |
+ |
|
| 39 |
+ <div class="container"> |
|
| 40 |
+ %= include '/include/errors', errors => $errors; |
|
| 41 |
+ %= include '/include/message', message => flash('message');
|
|
| 42 |
+ %= include '/include/project_header'; |
|
| 43 |
+ |
|
| 44 |
+ <div class="row"> |
|
| 45 |
+ <div class="span2"> |
|
| 46 |
+ <ul class="unstyled" style="font-size:13px;"> |
|
| 47 |
+ <li class="border-gray" style="padding:6px;"><a href="<%= url_for("/$user/$project/settings") %>">Options</a></li>
|
|
| 48 |
+ <li class="border-gray" style="border-top:none;padding:5px;"><b>Collaborators</b></li> |
|
| 49 |
+ </ul> |
|
| 50 |
+ </div> |
|
| 51 |
+ <div class="span10"> |
|
| 52 |
+ <div style="font-size:16px;margin-top:10px;margin-bottom:10px"><b>Manage Collaborators</b></div> |
|
| 53 |
+ <form action="<%= url_for->query(op => 'add') %>" method="post"> |
|
| 54 |
+ <div class="well" style="padding:5px"> |
|
| 55 |
+ <%= text_field 'collaborator', style => 'margin-bottom:0' %> |
|
| 56 |
+ <input type="submit" value="Add"" > |
|
| 57 |
+ </div> |
|
| 58 |
+ </form> |
|
| 59 |
+ </div> |
|
| 60 |
+ </div> |
|
| 61 |
+ </div> |
|
| 62 |
+ |
|
| 63 |
+ %= include '/include/footer'; |