W6DC6K4INJQOJYR553ISCKZV7YIOGHEM3FZQPOLAPSZQ3KSJDMRQC 2AUODJBTW2UJ47UB3SREZ7O7UTTJDQ4AGUQMPZAI4F3Y6BUF6LUQC J5UVLXOK6EDIL5I7VKWH4V2QDS4DPD7FHRK6XBWSXFRQS4JKXFZQC K5BEBWKMPMTXDZTZECMJ32LCL354WMOM3RPEFWGHJFB3QH7FH6WAC B72GLND4UQKSGNGIY4FA6HLQNFS42SKRXV5NHTHADUJRU73NELAAC 7YBYT2LQML2PKEO6UO4444AGSASS664UCDXW2YO3ALB7THQHCEBQC UVMFS73TI6RARMAAGY2UVS5LCPZUKLQECXQQVER4F7S4BNUXQQ3AC PBFZEQLZXMOBQIWL5WQWH7D62XG6M7ROEEAH6PWAKKKOM3W5I3RQC JD27RBKM7ROBUKBEQDFSCPO3MDE2AFZ6DSSKFUPJ7IC2MCGDVFGAC LQNBKF3DKVYK3NPDGK7OLOTIWIF4HR3EKLRYNLZJB4G3NMIVBCEAC $project->update;
my %jobsetNames;foreach my $param (keys %{$c->request->params}) {next unless $param =~ /^jobset-(\w+)-name$/;my $baseName = $1;next if $baseName eq "template";my $jobsetName = $c->request->params->{"jobset-$baseName-name"};die "Invalid jobset name: $jobsetName" unless $jobsetName =~ /^[[:alpha:]]\w*$/;my $nixExprPath = $c->request->params->{"jobset-$baseName-nixexprpath"};die "Invalid Nix expression path: $nixExprPath" unless $nixExprPath =~ /^\w++$/; # !!! strictermy $nixExprInput = $c->request->params->{"jobset-$baseName-nixexprinput"};die "Invalid Nix expression input name: $nixExprInput" unless $nixExprInput =~ /^\w+$/;$jobsetNames{$jobsetName} = 1;if ($baseName =~ /^\d+$/) { # numeric base name is auto-generated, i.e. a new entrymy $jobset = $c->model('DB::Jobsets')->create({ project => $project->name, name => $jobsetName, description => $c->request->params->{"jobset-$baseName-description"}, nixexprpath => $nixExprPath, nixexprinput => $nixExprInput});} else { # it's an existing jobset(my $jobset) = $project->jobsets->search({name => $baseName});die unless defined $jobset;$jobset->name($jobsetName);$jobset->description($c->request->params->{"jobset-$baseName-description"});$jobset->nixexprpath($nixExprPath);$jobset->nixexprinput($nixExprInput);$jobset->update;}}# Get rid of deleted jobsets, i.e., ones that are no longer submitted in the parameters.my @jobsets = $project->jobsets->all;foreach my $jobset (@jobsets) {$jobset->delete unless defined $jobsetNames{$jobset->name};}
[% IF create %]<h1>New Project</h1>[% ELSE %]<h1>Project <tt>[% curProject.name %]</tt></h1>[% END %]<h2>General information</h2><table>[% IF edit %]<tr><th>Identifier:</th><td><tt>[% INCLUDE maybeEditString param="name" value=curProject.name %]</tt></td></tr>[% END %]<tr><th>Display name:</th><td>[% INCLUDE maybeEditString param="displayname" value=curProject.displayname %]</td></tr><tr><th>Description:</th><td>[% INCLUDE maybeEditString param="description" value=curProject.description %]</td></tr></table><h2>Definition</h2>[% IF curProject.jobsets.size > 0 %]
<div class="indent jobset">
<td><tt>[% INCLUDE maybeEditString value=jobset.nixexprpath %]</tt> in input <tt>[% INCLUDE maybeEditString value=jobset.nixexprinput %]</tt></td>
<td><tt>[% INCLUDE maybeEditString param="jobset-$baseName-nixexprpath" value=jobset.nixexprpath %]</tt> in input<tt>[% INCLUDE maybeEditString param="jobset-$baseName-nixexprinput" value=jobset.nixexprinput %]</tt></td>
[% END -%]
[% IF edit %]<p><button onclick='$(this).parents(".jobset").remove()' id="jobset-[% baseName %]-delete">Delete this jobset</button></p>[% END %]</div></div>[% END %][% IF edit %]<form action="[% IF create %][% c.uri_for('/createproject/submit') %][% ELSE %][% c.uri_for('/project' curProject.name 'submit') %][% END %]" method="post">[% END %][% IF create %]<h1>New Project</h1>[% ELSE %]<h1>Project <tt>[% curProject.name %]</tt></h1>[% END %]<h2>General information</h2><table>[% IF edit %]<tr><th>Identifier:</th><td><tt>[% INCLUDE maybeEditString param="name" value=curProject.name %]</tt></td></tr>[% END %]<tr><th>Display name:</th><td>[% INCLUDE maybeEditString param="displayname" value=curProject.displayname %]</td></tr><tr><th>Description:</th><td>[% INCLUDE maybeEditString param="description" value=curProject.description %]</td></tr></table><h2>Jobsets</h2>[% IF curProject.jobsets && curProject.jobsets.size > 0 || edit %][% IF edit %]<p><button id="add-jobset">Add a new jobset</button></p><div id="jobset-template" class="template">[% INCLUDE renderJobset jobset="" baseName="template" %]</div><script>var id = 0;$("#add-jobset").click(function() {var newid = "jobset-" + id++;$("#jobset-template").clone(true).attr("id", newid).insertAfter($("#jobset-template")).show();$("#jobset-template-name", $("#" + newid)).attr("name", newid + "-name").attr("value", newid);$("#jobset-template-description", $("#" + newid)).attr("name", newid + "-description");$("#jobset-template-nixexprpath", $("#" + newid)).attr("name", newid + "-nixexprpath");$("#jobset-template-nixexprinput", $("#" + newid)).attr("name", newid + "-nixexprinput");return false;});</script>[% END %]
<form action="[% c.uri_for('/project' curProject.name 'delete') %]" method="post"><p><input type="submit" value="Delete this project" /></p></form>
[% IF !create %]<form action="[% c.uri_for('/project' curProject.name 'delete') %]" method="post"><p><input id="delete-project" type="submit" value="Delete this project" /></p></form>