Showing 5 changed files with 94 additions and 83 deletions
+10 -16
lib/Gitprep/Manager.pm
... ...
@@ -235,24 +235,16 @@ sub rename_project {
235 235
   # Rename project
236 236
   my $git = $self->app->git;
237 237
   my $dbi = $self->app->dbi;
238
-  my $error = {};
239
-  if ($self->exists_project($user, $to_project))
240
-  {
241
-    $error->{message} = 'Already exists';
242
-    return $error;
243
-  }
244
-  else {
238
+  my $error;
239
+  eval {
245 240
     $dbi->connector->txn(sub {
246
-      $self->_rename_project($user, $project, $to_project);
247
-      $self->_rename_rep($user, $project, $to_project);
241
+      eval { $self->_rename_project($user, $project, $to_project) };
242
+      croak $error = $@ if $@;
243
+      eval { $self->_rename_rep($user, $project, $to_project) };
244
+      croak $error = $@ if $@;
248 245
     });
249
-    if ($@) {
250
-      $error->{message} = 'Rename failed';
251
-      return $error;
252
-    }
253
-  }
254
-  
255
-  return 1;
246
+  };
247
+  croak $error if $error;
256 248
 }
257 249
 
258 250
 sub setup_database {
... ...
@@ -550,6 +542,8 @@ sub exists_project {
550 542
   my $dbi = $self->app->dbi;
551 543
   my $row = $dbi->model('project')->select(id => [$user, $project])->one;
552 544
   
545
+  use D;d $row;
546
+  
553 547
   return $row ? 1 : 0;
554 548
 }
555 549
 
+11
templates/include/errors.html.ep
... ...
@@ -0,0 +1,11 @@
1
+<%
2
+  my $errors = stash('errors');
3
+%>
4
+% if ($errors) {
5
+  <div class="alert alert-error">
6
+    <button type="button" class="close" data-dismiss="alert">&times;</button>
7
+    % for my $error (@$errors) {
8
+      <p><%= $error %></p>
9
+    % }
10
+  </div>
11
+% }
+9
templates/include/message.html.ep
... ...
@@ -0,0 +1,9 @@
1
+<%
2
+  my $message = stash('message');
3
+%>
4
+% if (defined $message) {
5
+  <div class="alert alert-success">
6
+    <button type="button" class="close" data-dismiss="alert">&times;</button>
7
+    <p><%= $message %></p>
8
+  </div>
9
+% }
+53 -66
templates/settings.html.ep
... ...
@@ -15,7 +15,9 @@
15 15
   
16 16
   # Rename project
17 17
   my $git = app->git;
18
-  if ($op eq 'rename-project') {
18
+  my $errors;
19
+  my $post = lc $self->req->method eq 'post';
20
+  if ($op eq 'rename-project' && $post) {
19 21
   
20 22
     # Validation
21 23
     my $params = $api->params;
... ...
@@ -26,7 +28,7 @@
26 28
       project => [
27 29
         'project_name'
28 30
       ],
29
-      'renamed-project' => [
31
+      'to-project' => [
30 32
         'project_name'
31 33
       ]
32 34
     ];
... ...
@@ -37,36 +39,48 @@
37 39
       my $data = $vresult->data;
38 40
       my $user = $data->{user};
39 41
       my $project = $data->{project};
40
-      my $renamed_project = $data->{'renamed-project'};
42
+      my $to_project = $data->{'to-project'};
41 43
       
42 44
       # Rename
43
-      my $manager = app->manager;
44
-      my $error = $manager->rename_project($user, $project, $renamed_project);
45
-      if (ref $error) {
46
-        $self->render(json => {ok => 0, message => $error->{message}});
45
+      if (app->manager->exists_project($user, $to_project)) {
46
+        $errors = ["$to_project is already exists"];
47 47
       }
48 48
       else {
49
-        $self->render(json => {ok => 1});
49
+        eval { app->manager->rename_project($user, $project, $to_project) };
50
+        if ($@) {
51
+          $errors = ['Internal Error'];
52
+        }
53
+        else {
54
+          flash(message => "Repository name is renamed to $to_project");
55
+          $self->redirect_to("/$user/$to_project/settings");
56
+          $self->finish_rendering;
57
+          return;
58
+        }
50 59
       }
51
-      return $self->res->body;
52
-    }
53
-    else {
54
-      $self->render(json => {ok => 0, message => 'Invalid Parameters'});
55 60
     }
61
+    else { $errors = $vresult->messages }
56 62
   }
57 63
   
58 64
   # Change description
59
-  elsif ($op eq 'change_description') {
65
+  elsif ($op eq 'change-description' && $post) {
60 66
     my $description = param('description');
61 67
     $description = '' unless defined $description;
62 68
     
63
-    $git->description($user, $project, $description);
64
-    $self->render(json => {ok => 1});
65
-    return $self->res->body;
69
+    eval { $git->description($user, $project, $description) };
70
+    if ($@) {
71
+      app->log->error("/settings?op=change-description: $@");
72
+      $errors = ['Internal Error'];
73
+    }
74
+    else {
75
+      flash(message => 'Description is saved.');
76
+      $self->redirect_to('current');
77
+      $self->finish_rendering;
78
+      return;
79
+    }
66 80
   }
67 81
   
68 82
   # Delete project
69
-  elsif ($op eq 'delete-project') {
83
+  elsif ($op eq 'delete-project' && $post) {
70 84
   
71 85
     # Validation
72 86
     my $params = $api->params;
... ...
@@ -109,38 +123,9 @@
109 123
     
110 124
     $(document).ready(function () {
111 125
     
112
-      // Rename project name
126
+      // Rename project
113 127
       $('#rename').on('click', function () {
114
-        var renamed_project = $('input[name="renamed-project"]').val();
115
-        
116
-        var url = "<%= url_for %>";
117
-        var data = {
118
-          op : "rename-project",
119
-          user: "<%= $user %>",
120
-          project: "<%= $project %>",
121
-          'renamed-project': renamed_project
122
-        };
123
-        $.post(url, data, function (result) {
124
-          if (result.ok) {
125
-            location.href = "<%= url_for("/$user") %>" + '/' + renamed_project;
126
-          }
127
-          else {
128
-            $('#modal-message-text').text('Rename failed:' + result.message);
129
-            $('#modal-message').modal('show');
130
-          }
131
-        });
132
-      });
133
-      
134
-      // Change description
135
-      $('a[href="#description"]').on('click', function () {
136
-        var description = $('input[name="description"]').val();
137
-        var url = "<%= url_for %>?op=change_description&description=" + description;
138
-        $.post(url, function (result) {
139
-          if (result.ok) {
140
-            $('#modal-message-text').text('Description is changed');
141
-            $('#modal-message').modal('show');
142
-          }
143
-        });
128
+        $('#form-rename-project').submit();
144 129
       });
145 130
       
146 131
       // Check matching deleted project
... ...
@@ -189,6 +174,8 @@
189 174
   %= include '/include/header';
190 175
   
191 176
   <div class="container">
177
+    %= include '/include/errors', errors => $errors;
178
+    %= include '/include/message', message => flash('message');
192 179
     %= include '/include/project_header';
193 180
     
194 181
     <div style="margin-bottom:20px">
... ...
@@ -198,26 +185,26 @@
198 185
         </h4>
199 186
       </div>
200 187
       <div class="border-gray" style="padding:5px;border-top:none">
201
-        <div >Repository Name</div>
202
-        <div>
203
-          %= text_field 'renamed-project' => $project, style => 'margin-top:9px';
204
-          <a href="#rename-confirm" role="button" class="btn" data-toggle="modal">
205
-            Rename
206
-          </a>
207
-        </div>
188
+        <form id="form-rename-project" action="<%= url_for->query(op => 'rename-project') %>" method="post" style="margin-bottom:0px">
189
+          <div >Repository Name</div>
190
+          <div>
191
+            %= text_field 'to-project' => $project, style => 'margin-top:9px';
192
+            <a href="#rename-confirm" role="button" class="btn" data-toggle="modal">
193
+              Rename
194
+            </a>
195
+          </div>
196
+        </form>
208 197
       </div>
209 198
       <div class="border-gray" style="padding:5px;border-top:none">
210
-        <div >Description</div>
211
-        <div>
212
-          % my $description = $git->description($user, $project);
213
-          % $description = '' unless defined $description;
214
-          %= text_field 'description' => $description, class => 'span8', style => 'margin-top:9px';
215
-          <a class="btn" href="#description">Save</a>
216
-        </div>
217
-        <div id="description-success" class="alert alert-success" style="width:150px;display:none">
218
-          <button type="button" class="close" data-dismiss="alert">&times;</button>
219
-          Savaed!
220
-        </div>
199
+        <form action="<%= url_for->query(op => 'change-description') %>" method="post" style="margin-bottom:0px">
200
+          <div >Description</div>
201
+          <div>
202
+            % my $description = $git->description($user, $project);
203
+            % $description = '' unless defined $description;
204
+            %= text_field 'description' => $description, class => 'span8', style => 'margin-top:9px';
205
+            <input type="submit" class="btn" value="Save">
206
+          </div>
207
+        </form>
221 208
       </div>
222 209
       <div class="border-gray" style="padding:5px;border-top:none">
223 210
         Default Branch
+11 -1
xt/admin.t
... ...
@@ -332,7 +332,17 @@ note 'User Account Settings';
332 332
       ->content_like(qr/first commit/)
333 333
       ->content_like(qr/t2\.git/)
334 334
       ->content_like(qr/README/)
335
-    ;    
335
+    ;
336
+    
337
+    # Settings page(don't has README)
338
+    $t->get_ok('/kimoto1/t1/settings')
339
+      ->content_like(qr/Settings/)
340
+    ;
341
+    
342
+    # Settings page(has README)
343
+    $t->get_ok('/kimoto1/t2/settings')
344
+      ->content_like(qr/Settings/)
345
+    ;
336 346
   }
337 347
 }
338 348