Showing 3 changed files with 47 additions and 12 deletions
+12 -1
lib/Gitprep/Manager.pm
... ...
@@ -89,6 +89,16 @@ sub is_admin {
89 89
   return $is_admin;
90 90
 }
91 91
 
92
+sub is_private_project {
93
+  my ($self, $user, $project) = @_;
94
+  
95
+  # Is private
96
+  my $private = $self->app->dbi->model('project')
97
+    ->select('private', id => [$user, $project])->value;
98
+  
99
+  return $private;
100
+}
101
+
92 102
 sub members {
93 103
   my ($self, $user, $project) = @_;
94 104
   
... ...
@@ -321,7 +331,8 @@ EOS
321 331
   my $project_columns = [
322 332
     "default_branch not null default 'master'",
323 333
     "original_user not null default ''",
324
-    "original_pid integer not null default 0"
334
+    "original_pid integer not null default 0",
335
+    "private not null default 0"
325 336
   ];
326 337
   for my $column (@$project_columns) {
327 338
     eval { $dbi->execute("alter table project add column $column") };
+35 -11
templates/settings.html.ep
... ...
@@ -1,6 +1,7 @@
1 1
 <%
2 2
   # API
3 3
   my $api = gitprep_api;
4
+  my $manager = app->manager;
4 5
   
5 6
   # Parameters
6 7
   my $op = param('op') || '';
... ...
@@ -39,8 +40,8 @@
39 40
       }
40 41
       else {
41 42
         eval { app->manager->rename_project($user, $project, $to_project) };
42
-        if ($@) {
43
-          app->log->error($@);
43
+        if (my $e = $@) {
44
+          app->log->error($e);
44 45
           $errors = ['Internal Error'];
45 46
         }
46 47
         else {
... ...
@@ -59,8 +60,8 @@
59 60
     $description = '' unless defined $description;
60 61
     
61 62
     eval { $git->description($user, $project, $description) };
62
-    if ($@) {
63
-      app->log->error("/$user/$project/settings?op=description: $@");
63
+    if (my $e = $@) {
64
+      app->log->error("/$user/$project/settings?op=description: $e");
64 65
       $errors = ['Internal Error'];
65 66
     }
66 67
     else {
... ...
@@ -74,8 +75,8 @@
74 75
   elsif ($op eq 'default-branch' && $post) {
75 76
     my $default_branch = param('default-branch');
76 77
     eval { app->manager->default_branch($user, $project, $default_branch) };
77
-    if ($@) {
78
-      app->log->error("/$user/$project/settings?op=default-branch: $@");
78
+    if (my $e = $@) {
79
+      app->log->error("/$user/$project/settings?op=default-branch: $e");
79 80
       $errors = ['Internal Error'];
80 81
     }
81 82
     else {
... ...
@@ -85,6 +86,27 @@
85 86
     }
86 87
   }
87 88
   
89
+  # Private repository
90
+  elsif ($op eq 'private' && $post) {
91
+    my $private = param('private') ? 1 : 0;
92
+    
93
+    eval {
94
+      app->dbi->model('project')->update(
95
+        {private => $private},
96
+        id => [$user, $project]
97
+      );
98
+    };
99
+    if (my $e = $@) {
100
+      app->log->error("/$user/$project/settings?op=private: $e");
101
+      $errors = ['Internal Error'];
102
+    }
103
+    else {
104
+      flash(message => 'Private status is saved.');
105
+      $self->redirect_to('current');
106
+      return;
107
+    }
108
+  }
109
+  
88 110
   # Delete project
89 111
   elsif ($op eq 'delete-project' && $post) {
90 112
     
... ...
@@ -92,8 +114,8 @@
92 114
     my $project = param('project');
93 115
     
94 116
     eval { app->manager->delete_project($user, $project) };
95
-    if ($@) {
96
-      app->log->error("/$user/$project/settings:$@");
117
+    if (my $e = $@) {
118
+      app->log->error("/$user/$project/settings: $e");
97 119
       $errors = ['Internal Error'];
98 120
     }
99 121
     else {
... ...
@@ -191,9 +213,11 @@
191 213
       <div class="border-gray radius-bottom" style="padding:5px 10px;border-top:none;">
192 214
         <form id="form-default-branch" action="<%= url_for->query(op => 'private') %>" method="post" style="margin-bottom:0px">
193 215
           <span>Make this repository private</span>
194
-          %# my $private = $git->description($user, $project);
195
-          % my $private = 1;
196
-          %= check_box 'private' => $private, style => 'margin-top:0px;margin-left:5px;margin-right:10px';
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';
197 221
           <input type="submit" class="btn" value="Save">
198 222
         </form>
199 223
       </div>
BIN
xt/basic.db
Binary file not shown.