+sub action_revert_to {
+ my ($self, %params) = @_;
+
+ return $self->js->error(t8('Cannot revert a versioned copy.'))->render($self) if $self->requirement_spec->working_copy_id;
+
+ my $versioned_copy = SL::DB::RequirementSpec->new(id => $::form->{versioned_copy_id})->load;
+
+ $self->requirement_spec->copy_from($versioned_copy);
+ my $version = $versioned_copy->versions->[0];
+ $version->update_attributes(working_copy_id => $self->requirement_spec->id);
+
+ flash_later('info', t8('The requirement spec has been reverted to version #1.', $versioned_copy->version->version_number));
+ $self->js->redirect_to($self->url_for(action => 'show', id => $self->requirement_spec->id))->render($self);
+}
+
+sub action_create_pdf {
+ my ($self, %params) = @_;
+
+ my $base_name = $self->requirement_spec->type->template_file_name || 'requirement_spec';
+ my @pictures = $self->prepare_pictures_for_printing;
+ my %result = SL::Template::LaTeX->parse_and_create_pdf("${base_name}.tex", SELF => $self, rspec => $self->requirement_spec);
+
+ unlink @pictures unless ($::lx_office_conf{debug} || {})->{keep_temp_files};
+
+ $::form->error(t8('Conversion to PDF failed: #1', $result{error})) if $result{error};
+
+ my $attachment_name = $self->requirement_spec->type->description . ' ' . ($self->requirement_spec->working_copy_id || $self->requirement_spec->id);
+ $attachment_name .= ' (v' . $self->requirement_spec->version->version_number . ')' if $self->requirement_spec->version;
+ $attachment_name .= '.pdf';
+ $attachment_name =~ s/[^\wäöüÄÖÜß \-\+\(\)\[\]\{\}\.,]+/_/g;
+
+ $self->send_file($result{file_name}, type => 'application/pdf', name => $attachment_name);
+ unlink $result{file_name};
+}
+
+sub action_create_html {
+ my ($self, %params) = @_;
+
+ my $base_name = $self->requirement_spec->type->template_file_name || 'requirement_spec';
+ my @pictures = $self->prepare_pictures_for_printing;
+ my $content = SL::Helper::CreatePDF->create_parsed_file(
+ template => "${base_name}.html",
+ format => 'html',
+ template_type => 'HTML',
+ variables => {
+ SELF => $self,
+ rspec => $self->requirement_spec,
+ });
+
+ # $content is now a scalar of bytes, but $self->render() expects a
+ # scalar of characters.
+ $content = Encode::decode('utf-8', $content);
+
+ $self->render(\$content, { layout => 0, process => 0 });
+}
+
+sub action_select_template_to_paste {