@@ -123,28 +123,31 @@ sub ia_base :Chained('base') :PathPart('view') :CaptureArgs(1) { # /ia/view/cal
123
123
124
124
my $permissions ;
125
125
my $is_admin ;
126
- my $edit_class = " hide" ;
126
+ my $can_edit ;
127
+ my $can_commit ;
127
128
my $commit_class = " hide" ;
128
129
129
130
if ($c -> user) {
130
131
$permissions = $c -> stash-> {ia }-> users-> find($c -> user-> id);
131
132
$is_admin = $c -> user-> admin;
132
- }
133
133
134
- if ($permissions || $is_admin ) {
135
- $edit_class = " " ;
134
+ if ($permissions || $is_admin ) {
135
+ $can_edit = 1 ;
136
136
137
- if ($is_admin ) {
138
- my $edits = get_edits($c -> d, $c -> stash-> {ia }-> name);
137
+ if ($is_admin ) {
138
+ my $edits = get_edits($c -> d, $c -> stash-> {ia }-> name);
139
+ $can_commit = 1;
139
140
140
- if (ref $edits eq ' ARRAY' ) {
141
- $commit_class = " " ;
141
+ if (length $edits && ref $edits eq ' HASH' ) {
142
+ $commit_class = ' ' ;
143
+ }
142
144
}
143
145
}
144
146
}
145
147
146
148
$c -> stash-> {title } = $c -> stash-> {ia }-> name;
147
- $c -> stash-> {edit_class } = $edit_class ;
149
+ $c -> stash-> {can_edit } = $can_edit ;
150
+ $c -> stash-> {can_commit } = $can_commit ;
148
151
$c -> stash-> {commit_class } = $commit_class ;
149
152
150
153
my @topics = $c -> d-> rs(' Topic' )-> search(
@@ -165,9 +168,12 @@ sub ia_json :Chained('ia_base') :PathPart('json') :Args(0) {
165
168
166
169
my $ia = $c -> stash-> {ia };
167
170
my @topics = map { $_ -> name} $ia -> topics;
168
-
169
- my @issues = $c -> d-> rs(' InstantAnswer::Issues' )-> find({instant_answer_id => $ia -> id});
170
- my @ia_issues ;
171
+ my $edited ;
172
+ my @issues = $c -> d-> rs(' InstantAnswer::Issues' )-> search({instant_answer_id => $ia -> id});
173
+ my @ia_issues ;
174
+ my %ia_data ;
175
+ my $permissions ;
176
+ my $is_admin ;
171
177
172
178
for my $issue (@issues ) {
173
179
if ($issue ) {
@@ -180,7 +186,9 @@ sub ia_json :Chained('ia_base') :PathPart('json') :Args(0) {
180
186
}
181
187
}
182
188
183
- $c -> stash-> {x } = {
189
+ my $other_queries = $ia -> other_queries? decode_json($ia -> other_queries) : undef ;
190
+
191
+ $ia_data {live } = {
184
192
id => $ia -> id,
185
193
name => $ia -> name,
186
194
description => $ia -> description,
@@ -190,14 +198,33 @@ sub ia_json :Chained('ia_base') :PathPart('json') :Args(0) {
190
198
dev_milestone => $ia -> dev_milestone,
191
199
perl_module => $ia -> perl_module,
192
200
example_query => $ia -> example_query,
193
- other_queries => $ia -> other_queries? decode_json( $ia -> other_queries) : undef ,
201
+ other_queries => $other_queries ,
194
202
code => $ia -> code? decode_json($ia -> code) : undef ,
195
203
topic => \@topics ,
196
204
attribution => $ia -> attribution? decode_json($ia -> attribution) : undef ,
197
205
issues => \@ia_issues ,
198
206
template => $ia -> template,
199
207
};
200
208
209
+ if ($c -> user) {
210
+ $permissions = $c -> stash-> {ia }-> users-> find($c -> user-> id);
211
+ $is_admin = $c -> user-> admin;
212
+
213
+ if ($is_admin || $permissions ) {
214
+ $edited = current_ia($c -> d, $ia );
215
+ $ia_data {edited } = {
216
+ name => $edited -> {name },
217
+ description => $edited -> {description },
218
+ status => $edited -> {status },
219
+ example_query => $edited -> {example_query },
220
+ other_queries => $edited -> {other_queries }-> {value },
221
+ topic => $edited -> {topic },
222
+ };
223
+ }
224
+ }
225
+
226
+ $c -> stash-> {x } = \%ia_data ;
227
+
201
228
$c -> stash-> {not_last_url } = 1;
202
229
$c -> forward($c -> view(' JSON' ));
203
230
}
@@ -307,16 +334,8 @@ sub commit_save :Chained('commit_base') :PathPart('save') :Args(0) {
307
334
}
308
335
}
309
336
}
310
-
311
- my $edits = get_edits($c -> d, $ia -> name);
312
337
313
- if (ref $edits eq ' ARRAY' ) {
314
- foreach my $edit (@{$edits }) {
315
- foreach my $field (keys %{$edit }){
316
- remove_edit($ia , $field );
317
- }
318
- }
319
- }
338
+ remove_edits($ia );
320
339
}
321
340
}
322
341
@@ -411,7 +430,7 @@ sub current_ia {
411
430
sub add_edit {
412
431
my ($ia , $field , $value ) = @_ ;
413
432
414
- my $orig_data = $ia -> get_column($field );
433
+ my $orig_data = $ia -> get_column($field ) || ' ' ;
415
434
my $current_updates = $ia -> get_column(' updates' ) || ();
416
435
417
436
if ($value ne $orig_data ){
@@ -448,10 +467,18 @@ sub remove_edit {
448
467
my $column_updates = $ia -> get_column(' updates' );
449
468
my $edits = $column_updates ? decode_json($column_updates ) : undef ;
450
469
$edits -> {$field } = undef ;
451
-
470
+
452
471
$ia -> update({updates => $edits });
453
472
}
454
473
474
+ # given a result set, remove
475
+ # all the entries from the updates column
476
+ sub remove_edits {
477
+ my ($ia ) = @_ ;
478
+
479
+ $ia -> update({updates => ' ' });
480
+ }
481
+
455
482
# given the IA name return the data in the updates
456
483
# column as an array of hashes
457
484
sub get_edits {
0 commit comments