Skip to content

Commit

Permalink
Aggregation editing taking Series in account
Browse files Browse the repository at this point in the history
  • Loading branch information
melmothx committed Jan 16, 2024
1 parent 45496a7 commit 9356c51
Show file tree
Hide file tree
Showing 11 changed files with 261 additions and 74 deletions.
8 changes: 8 additions & 0 deletions lib/AmuseWikiFarm/Controller/API.pm
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,14 @@ sub aggregations :Chained('api') :PathPart('aggregations') :Args(0) {
$c->detach($c->view('JSON'));
}

sub series :Chained('api') :PathPart('series') :Args(0) {
my ($self, $c) = @_;
my $out = [ $c->stash->{site}->aggregation_series->sorted->hri ];
$c->stash(json => $out);
$c->detach($c->view('JSON'));
}


sub collections :Chained('api') :PathPart('collections') :Args(0) {
my ($self, $c) = @_;
my $out = [ $c->stash->{site}->nodes->sorted
Expand Down
13 changes: 10 additions & 3 deletions lib/AmuseWikiFarm/Controller/Aggregation.pm
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,19 @@ sub edit :Chained('edit_gate') :PathPart('edit') :Args {
};
if (delete $params->{update}) {
Dlog_debug { "Params are $_" } $params;
my $updated = $site->create_aggregation($params);
$c->flash(status_msg => $c->loc("Thanks!"));
if (my $updated = $site->create_aggregation($params)) {
$c->flash(status_msg => $c->loc("Thanks!"));
}
else {
$c->flash(error_msg => $c->loc("Invalid data!"));
}
return $c->response->redirect($c->uri_for_action('/aggregation/manage'));
}
if ($id and $id =~ /\A\d+\z/a) {
if (my $agg = $site->aggregations->find($id)) {
$c->stash(aggregation => $agg->serialize);
my $agg_data = $agg->serialize;
Dlog_debug { "Data are $_" } $agg_data;
$c->stash(aggregation => $agg_data);
}
else {
return $c->detach('/not_found');
Expand All @@ -70,6 +76,7 @@ sub edit :Chained('edit_gate') :PathPart('edit') :Args {
else {
$c->stash(aggregation => {});
}
$c->stash(load_select2 => 1);
}

sub remove :Chained('edit_gate') :PathPart('remove') :Args(1) {
Expand Down
12 changes: 10 additions & 2 deletions lib/AmuseWikiFarm/Schema/Result/Aggregation.pm
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,8 @@ __PACKAGE__->belongs_to(
# Created by DBIx::Class::Schema::Loader v0.07051 @ 2024-01-16 14:21:51
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:sxPkc1Xhx6yiPrWTmTQApw

use AmuseWikiFarm::Log::Contextual;

sub sqlt_deploy_hook {
my ($self, $sqlt_table) = @_;
$sqlt_table->add_index(name => 'aggregation_uri_amw_index', fields => ['aggregation_uri']);
Expand Down Expand Up @@ -303,12 +305,18 @@ sub final_data {
my %data = $self->get_columns;
if (my $series = $self->aggregation_series) {
my %series = $series->get_columns;
my %issue_data = map { $_ => $data{$_} } (qw/aggregation_name
publication_place
publisher
/);
$data{aggregation_name} ||= join(' ', grep { /\w/ } ($series{aggregation_series_name}, $data{issue}));
foreach my $f (q/publication_place publication_date/) {
foreach my $f (qw/publication_place publisher/) {
$data{$f} ||= $series{$f};
}
$data{series} = \%series;
$data{issue_data} = \%issue_data;
$data{series_data} = \%series;
}
# Dlog_debug { "Final data is $_" } \%data;
return \%data;
}

Expand Down
4 changes: 2 additions & 2 deletions lib/AmuseWikiFarm/Schema/Result/OaiPmhRecord.pm
Original file line number Diff line number Diff line change
Expand Up @@ -401,8 +401,8 @@ sub marc21_record {
foreach my $agg (map { $_->final_data } $title->aggregations->sorted->all) {
Dlog_debug { "Aggregation is $_" } $agg;
my $name = $agg->{aggregation_name};
if ($agg->{series} and $agg->{series}->{aggregation_series_name}) {
$name = $agg->{series}->{aggregation_series_name};
if ($agg->{series_data} and $agg->{series_data}->{aggregation_series_name}) {
$name = $agg->{series_data}->{aggregation_series_name};
}
push @aggregations, {
't' => $name,
Expand Down
17 changes: 16 additions & 1 deletion lib/AmuseWikiFarm/Schema/Result/Site.pm
Original file line number Diff line number Diff line change
Expand Up @@ -5380,7 +5380,22 @@ sub create_aggregation {
push @errors, "Missing $required field";
}
}
if (my $series_data = $args->{aggregation_series}) {
# if passed in the root, just pick it up
if (defined $args->{aggregation_series_uri}) {
if (my $series_uri = $args->{aggregation_series_uri}) {
if (my $series = $self->aggregation_series->find({ aggregation_series_uri => $series_uri })) {
$rec{aggregation_series_id} = $series->aggregation_series_id;
}
else {
push @errors, "Bad Series uri";
}
}
else {
log_debug { "Removing the series" };
$rec{aggregation_series_id} = undef;
}
}
elsif (my $series_data = $args->{aggregation_series}) {
if (my $uri = muse_naming_algo($series_data->{aggregation_series_uri})) {
my %sd = (aggregation_series_uri => $uri);
foreach my $f (qw/aggregation_series_name publisher publication_place/) {
Expand Down
16 changes: 16 additions & 0 deletions lib/AmuseWikiFarm/Schema/ResultSet/AggregationSeries.pm
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package AmuseWikiFarm::Schema::ResultSet::AggregationSeries;

use utf8;
use strict;
use warnings;
use base 'DBIx::Class::ResultSet';

__PACKAGE__->load_components('Helper::ResultSet::Shortcut::HRI');

sub sorted {
my $self = shift;
my $me = $self->current_source_alias;
$self->search(undef, { order_by => "$me.aggregation_series_name" });
}

1;
7 changes: 7 additions & 0 deletions root/src/aggregation/aggregation.tt
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
<div class="page-header">
<h1>
[% aggregation.aggregation_name | html %]
[% IF c.user_exists %]
<a href="[% c.uri_for_action('/aggregation/edit', aggregation.aggregation_id) | html %]"
title="[% loc('Update') %]"
class="btn btn-default pull-right" role="button">
<span class="fa fa-edit"></span>
</a>
[% END %]
</h1>
</div>
<div class="well">
Expand Down
182 changes: 130 additions & 52 deletions root/src/aggregation/edit.tt
Original file line number Diff line number Diff line change
Expand Up @@ -6,85 +6,163 @@
[% loc('Update aggregation') %]
<em>
[% aggregation.aggregation_name | html %]
[% aggregation.series_number | html %]
</em>
[% ELSE %]
[% loc('Create new aggregation') %]
[% END %]
</h1>
</div>
<div>
<form action="[% c.uri_for_action('/aggregation/edit') %]" method="POST">
[% IF aggregation.aggregation_code %]
<input type="hidden" name="aggregation_code" value="[% aggregation.aggregation_code | html %]" />
[% ELSE %]
<form action="[% c.uri_for_action('/aggregation/edit') %]" method="POST" class="form-horizontal">
<div class="form-group">
<label for="aggregation_code">Code</label>
<input type="text" class="form-control" id="aggregation_code" name="aggregation_code"
pattern="[0-9a-z][0-9a-z-]{3,}" required>
<label class="col-sm-2 control-label" for="aggregation_series_uri">Series</label>
<div class="col-sm-4">
<input type="hidden" name="aggregation_series_uri"
value="[% IF aggregation.aggregation_series %][% aggregation.aggregation_series.aggregation_series_uri %][% END %]"
id="aggregation_series_uri" />
</div>
<label class="col-sm-1 control-label" for="issue">[% loc('Issue') %]</label>
<div class="col-sm-2">
<input type="text" class="form-control" id="issue"
name="issue"
value="[% aggregation.issue | html %]"
/>
</div>
<label class="col-sm-1 control-label" for="sorting_pos">[% loc('Order') %]</label>
<div class="col-sm-2">
<input type="number" class="form-control" id="sorting_pos" name="sorting_pos"
step="1" min="0"
value="[% aggregation.sorting_pos | html %]"
/>
</div>
</div>
[% END %]

[% IF aggregation.aggregation_uri %]
<input type="hidden" name="aggregation_uri" value="[% aggregation.aggregation_uri | html %]" />
[% ELSE %]
<div class="form-group">
<label for="aggregation_uri">URI</label>
<input type="text" class="form-control" id="aggregation_uri" name="aggregation_uri"
pattern="[0-9a-z][0-9a-z-]{3,}" required>
<label class="col-sm-2 control-label" for="aggregation_uri">URI</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="aggregation_uri" name="aggregation_uri"
pattern="[0-9a-z][0-9a-z-]{3,}" required>
</div>
</div>
[% END %]

<div class="form-group">
<label for="aggregation_name">[% loc('Name') %]</label>
<input type="text" class="form-control" id="aggregation_name" name="aggregation_name"
value="[% aggregation.aggregation_name | html %]"
required/>
<label class="col-sm-2 control-label" for="aggregation_name">[% loc('Name') %]</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="aggregation_name" name="aggregation_name"
value="[% aggregation.aggregation_name | html %]"
required/>
</div>
</div>
<div class="form-group">
<label for="series_number">[% loc('Series Number') %]</label>
<input type="text" class="form-control" id="series_number"
name="series_number"
value="[% aggregation.series_number | html %]"
/>
<label class="col-sm-2 control-label" for="publication_place">[% loc('Publication Place') %]</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="publication_place"
name="publication_place"
value="[% aggregation.publication_place | html %]"
/>
</div>
</div>
<div class="form-group">
<label for="sorting_pos">[% loc('Order') %]</label>
<input type="number" class="form-control" id="sorting_pos" name="sorting_pos"
step="1" min="0"
value="[% aggregation.sorting_pos %]"
/>
<label class="col-sm-2 control-label" for="publication_date">[% loc('Publication Date') %]</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="publication_date"
name="publication_date"
value="[% aggregation.publication_date | html %]"
/>
</div>
</div>

<div class="form-group">
<label for="publication_place">[% loc('Publication Place') %]</label>
<input type="text" class="form-control" id="publication_place"
name="publication_place"
value="[% aggregation.publication_place | html %]"
/>
<label class="col-sm-2 control-label" for="publication_date_year">[% loc('Year') %]</label>
<div class="col-sm-2">
<input type="number" step="1" class="form-control" id="publication_date_year"
name="publication_date_year"
value="[% aggregation.publication_date_year | html %]"
/>
</div>
<label class="col-sm-2 control-label" for="publication_date_month">[% loc('Month') %]</label>
<div class="col-sm-2">
<input type="number" step="1" min="0" max="12" class="form-control" id="publication_date_month"
name="publication_date_month"
value="[% aggregation.publication_date_month | html %]"
/>
</div>
<label class="col-sm-2 control-label" for="publication_date_day">[% loc('Day') %]</label>
<div class="col-sm-2">
<input type="number" step="1" min="0" max="31" class="form-control" id="publication_date_day"
name="publication_date_day"
value="[% aggregation.publication_date_day | html %]"
/>
</div>
</div>
<div class="form-group">
<label for="publication_date">[% loc('Publication Date') %]</label>
<input type="text" class="form-control" id="publication_date"
name="publication_date"
value="[% aggregation.publication_date | html %]"
/>
<label class="col-sm-2 control-label" for="publisher">[% loc('Publisher') %]</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="publisher"
name="publisher"
value="[% aggregation.publisher | html %]"
/>
</div>
</div>
<div class="form-group">
<label for="publisher">[% loc('Publisher') %]</label>
<input type="text" class="form-control" id="publisher"
name="publisher"
value="[% aggregation.publisher | html %]"
/>
</div>
<div class="form-group">
<label for="isbn">[% loc('ISBN') %]</label>
<input type="text" class="form-control" id="isbn"
name="isbn"
value="[% aggregation.isbn | html %]"
/>
<label class="col-sm-2 control-label" for="isbn">[% loc('ISBN') %]</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="isbn"
name="isbn"
value="[% aggregation.isbn | html %]"
/>
</div>
</div>
<input type="hidden" name="update" value="1">
<button type="submit" class="btn btn-default">Submit</button>
<div class="text-center">
<button type="submit" class="btn btn-default">Submit</button>
</div>
</form>
</div>
<script>
$(document).ready(function(data) {
function check_series() {
console.log("Checking");
if ($('#aggregation_series_uri').val()) {
$('#aggregation_name').prop('disabled', true);
$('#aggregation_name').prop('required', false);
$('#issue').prop('required', true);
$('#sorting_pos').prop('required', true);
$('#issue').prop('disabled', false);
$('#sorting_pos').prop('disabled', false);
}
else {
$('#aggregation_name').prop('disabled', false);
$('#aggregation_name').prop('required', true);
$('#issue').prop('required', false);
$('#sorting_pos').prop('required', false);
$('#issue').prop('disabled', true);
$('#sorting_pos').prop('disabled', true);
}
}
check_series();
$.get('/api/series', function(data) {
var el = $('#aggregation_series_uri');
var current = el.val();
var container = el.parent();
var dropdown = $('<select>', {
"id": el.attr('id'),
"name": el.attr('name'),
"class": "form-control"
});
dropdown.append($('<option>', { "value": "" }).text('------'));
for (var i = 0; i < data.length; i++) {
dropdown.append($('<option>', { "value": data[i].aggregation_series_uri })
.text(data[i].aggregation_series_name));
}
console.log(current);
dropdown.val(current);
el.remove();
container.append(dropdown);
dropdown.on('change', check_series);
dropdown.select2();

});
});
</script>
Loading

0 comments on commit 9356c51

Please sign in to comment.