... | ... |
@@ -205,6 +205,9 @@ sub startup { |
205 | 205 |
|
206 | 206 |
# Fork |
207 | 207 |
$r->any('/fork')->name('fork'); |
208 |
+ |
|
209 |
+ # Fork |
|
210 |
+ $r->get('/network')->name('network'); |
|
208 | 211 |
} |
209 | 212 |
} |
210 | 213 |
|
... | ... |
@@ -9,6 +9,61 @@ use File::Temp (); |
9 | 9 |
|
10 | 10 |
has 'app'; |
11 | 11 |
|
12 |
+sub create_tab_index { |
|
13 |
+ my ($self, $tab_index_values) = @_; |
|
14 |
+ |
|
15 |
+ my $tab_index = "\t"; |
|
16 |
+ |
|
17 |
+ # Check config |
|
18 |
+ for my $key (keys %$tab_index_values) { |
|
19 |
+ my $value = $tab_index_values->{$key}; |
|
20 |
+ croak "Can't contain tab string in tab_index" |
|
21 |
+ if $key =~ /\t/; |
|
22 |
+ $tab_index .= "$key:$value\t"; |
|
23 |
+ } |
|
24 |
+ |
|
25 |
+ return $tab_index; |
|
26 |
+} |
|
27 |
+ |
|
28 |
+sub members { |
|
29 |
+ my ($self, $user, $project) = @_; |
|
30 |
+ |
|
31 |
+ # DBI |
|
32 |
+ my $dbi = $self->app->dbi; |
|
33 |
+ |
|
34 |
+ # Where |
|
35 |
+ my $where = $dbi->where; |
|
36 |
+ $where->clause(['and', (':tab_index{like}') x 2]); |
|
37 |
+ $where->param({ |
|
38 |
+ tab_index => ["%\toriginal_user:$user%", "%\toriginal_project:$project%"] |
|
39 |
+ }); |
|
40 |
+ |
|
41 |
+ # Rows |
|
42 |
+ my $members = $self->app->dbi |
|
43 |
+ ->model('project') |
|
44 |
+ ->select('user_id as id', where => $where) |
|
45 |
+ ->all; |
|
46 |
+ |
|
47 |
+ return $members; |
|
48 |
+} |
|
49 |
+ |
|
50 |
+sub parse_tab_index { |
|
51 |
+ my ($self, $tab_index) = @_; |
|
52 |
+ |
|
53 |
+ my $tab_index_values = {}; |
|
54 |
+ |
|
55 |
+ $tab_index =~ s/^\t//; |
|
56 |
+ $tab_index =~ s/\t$//; |
|
57 |
+ |
|
58 |
+ my @kvs = split /\t/, $tab_index; |
|
59 |
+ for my $kv (@kvs) { |
|
60 |
+ my ($key, $value) = split /:/, $kv, 2; |
|
61 |
+ $tab_index_values->{$key} = $value; |
|
62 |
+ } |
|
63 |
+ |
|
64 |
+ return $tab_index_values; |
|
65 |
+} |
|
66 |
+ |
|
12 | 67 |
sub create_project { |
13 | 68 |
my ($self, $user, $project, $opts) = @_; |
14 | 69 |
|
... | ... |
@@ -307,9 +362,19 @@ sub _create_project { |
307 | 362 |
$config = {%$config, %$new_config}; |
308 | 363 |
my $config_json = Mojo::JSON->new->encode($config); |
309 | 364 |
|
365 |
+ my $tab_index_values = {}; |
|
366 |
+ $tab_index_values->{original_user} = $config->{original_user} |
|
367 |
+ if defined $config->{original_user}; |
|
368 |
+ $tab_index_values->{original_project} = $config->{original_project} |
|
369 |
+ if defined $config->{original_project}; |
|
370 |
+ my $tab_index = $self->create_tab_index($tab_index_values) || ''; |
|
371 |
+ |
|
310 | 372 |
# Create project |
311 | 373 |
$self->app->dbi->model('project')->insert( |
312 |
- {config => $config_json}, |
|
374 |
+ { |
|
375 |
+ config => $config_json, |
|
376 |
+ tab_index => $tab_index |
|
377 |
+ }, |
|
313 | 378 |
id => [$user, $project] |
314 | 379 |
); |
315 | 380 |
} |
... | ... |
@@ -8,7 +8,7 @@ |
8 | 8 |
%> |
9 | 9 |
|
10 | 10 |
<div class="row"> |
11 |
- <div class="span11"> |
|
11 |
+ <div class="span10"> |
|
12 | 12 |
<ul class="breadcrumb"> |
13 | 13 |
<li><a href="<%= url_for('/') %>">Home</a></li> |
14 | 14 |
/ |
... | ... |
@@ -26,7 +26,8 @@ |
26 | 26 |
% } |
27 | 27 |
</ul> |
28 | 28 |
</div> |
29 |
- <div class="span1"> |
|
29 |
+ <div class="span2"> |
|
30 |
+ <a class="btn" href="<%= url_for("/$user/$project/network") %>" >Network</a> |
|
30 | 31 |
% if ($logined && $current_user ne $user ) { |
31 | 32 |
<a href="<%= url_for("/$user/$project/fork") %>" class="btn">Fork</a> |
32 | 33 |
% } else { |
... | ... |
@@ -0,0 +1,31 @@ |
1 |
+<% |
|
2 |
+ my $state; |
|
3 |
+ |
|
4 |
+ # API |
|
5 |
+ my $api = gitprep_api; |
|
6 |
+ |
|
7 |
+ # Members |
|
8 |
+ my $members = app->manager->members($user, $project); |
|
9 |
+%> |
|
10 |
+ |
|
11 |
+% layout 'common'; |
|
12 |
+ |
|
13 |
+ %= include '/include/header'; |
|
14 |
+ |
|
15 |
+ <div class="container" style="min-heigth:500px"> |
|
16 |
+ <h3>Members of the <%= $project %> Network</h3> |
|
17 |
+ <ul class="unstyled"> |
|
18 |
+ % for my $member (@$members) { |
|
19 |
+ <li> |
|
20 |
+ <a href="<%= url_for("/$member->{id}") %>"> |
|
21 |
+ <%= $member->{id} %> |
|
22 |
+ </a> |
|
23 |
+ / |
|
24 |
+ <a href="<%= url_for("/$member->{id}/$project") %>"> |
|
25 |
+ <%= $project %> |
|
26 |
+ </a> |
|
27 |
+ </li> |
|
28 |
+ % } |
|
29 |
+ </ul> |
|
30 |
+ </div> |
|
31 |
+ %= include '/include/footer'; |