use SL::DB::RequirementSpecStatus;
use SL::DB::RequirementSpecType;
use SL::DB::RequirementSpec;
+use SL::Helper::CreatePDF qw();
use SL::Helper::Flash;
use SL::Locale::String;
use SL::Template::LaTeX;
(
scalar => [ qw(requirement_spec_item visible_item visible_section) ],
'scalar --get_set_init' => [ qw(requirement_spec customers types statuses complexities risks projects project_types project_statuses default_project_type default_project_status copy_source js
- current_text_block_output_position models time_based_units) ],
+ current_text_block_output_position models time_based_units html_template) ],
);
__PACKAGE__->run_before('setup');
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 {
my ($self) = @_;
);
}
+sub init_html_template {
+ my ($self) = @_;
+ my $base_name = $self->requirement_spec->type->template_file_name || 'requirement_spec';
+ my $template = SL::Helper::CreatePDF->find_template(name => $base_name, extension => 'html');
+ return !!$template;
+}
+
1;
plugins: [ "themes", "json_data", "ui", "crrm", "dnd" ]
});
- ns.create_context_menus(data.is_template);
+ ns.create_context_menus(data);
$('#requirement_spec_tabs').on("tabsbeforeactivate", ns.tabs_before_activate);
ns.time_based_units = data.time_based_units;
$.download("controller.pl", data);
};
+ns.create_reqspec_html = function(key, opt) {
+ window.open("controller.pl?action=RequirementSpec/create_html&id=" + encodeURIComponent($('#requirement_spec_id').val()), '_blank');
+ return true;
+};
+
ns.copy_reqspec = function(key, opt) {
window.location.href = "controller.pl?action=RequirementSpec/new©_source_id=" + encodeURIComponent($('#requirement_spec_id').val());
return true;
return true;
};
+ns.create_html_for_versioned_copy_ajax_call = function(key, opt) {
+ window.open("controller.pl?action=RequirementSpec/create_html&id=" + encodeURIComponent(ns.find_versioned_copy_id(opt.$trigger) || $('#requirement_spec_id').val()), '_blank');
+ return true;
+};
+
ns.revert_to_versioned_copy_ajax_call = function(key, opt) {
if (!confirm(kivi.t8('Do you really want to revert to this version?')))
return true;
// ----------------------------- context menus -----------------------------
// -------------------------------------------------------------------------
-ns.create_context_menus = function(is_template) {
- if (is_template) {
+ns.create_context_menus = function(data) {
+ if (data.is_template) {
var general_actions = {
sep98: "---------"
, general_actions: { name: kivi.t8('Requirement spec template actions'), className: 'context-menu-heading' }
sep98: "---------"
, general_actions: { name: kivi.t8('Requirement spec actions'), className: 'context-menu-heading' }
, create_pdf: { name: kivi.t8('Create PDF'), icon: "pdf", callback: kivi.requirement_spec.create_reqspec_pdf }
+ , create_html: { name: kivi.t8('Create HTML'), icon: "html", callback: kivi.requirement_spec.create_reqspec_html }
, create_version: { name: kivi.t8('Create new version'), icon: "new", callback: kivi.requirement_spec.create_version, disabled: kivi.requirement_spec.disable_commands }
, copy_reqspec: { name: kivi.t8('Copy requirement spec'), icon: "copy", callback: kivi.requirement_spec.copy_reqspec }
, delete_reqspec: { name: kivi.t8('Delete requirement spec'), icon: "delete", callback: kivi.requirement_spec.delete_reqspec }
, paste_template: { name: kivi.t8('Paste template'), icon: "paste", callback: kivi.requirement_spec.paste_template }
};
+ var versioned_copy_actions = {
+ heading: { name: kivi.t8('Version actions'), className: 'context-menu-heading' }
+ , create_version_pdf: { name: kivi.t8('Create PDF'), icon: "pdf", callback: kivi.requirement_spec.create_pdf_for_versioned_copy_ajax_call }
+ , create_version_html: { name: kivi.t8('Create HTML'), icon: "html", callback: kivi.requirement_spec.create_html_for_versioned_copy_ajax_call }
+ , revert_to_version: { name: kivi.t8('Revert to version'), icon: "revert", callback: kivi.requirement_spec.revert_to_versioned_copy_ajax_call, disabled: kivi.requirement_spec.disable_versioned_copy_item_commands }
+ };
+
+ if (!data.html_template_exists) {
+ delete general_actions.create_html;
+ delete versioned_copy_actions.create_version_html;
+ }
+
$.contextMenu({
selector: '.versioned-copy-context-menu',
- items: $.extend({
- heading: { name: kivi.t8('Version actions'), className: 'context-menu-heading' }
- , create_version_pdf: { name: kivi.t8('Create PDF'), icon: "pdf", callback: kivi.requirement_spec.create_pdf_for_versioned_copy_ajax_call }
- , revert_to_version: { name: kivi.t8('Revert to version'), icon: "revert", callback: kivi.requirement_spec.revert_to_versioned_copy_ajax_call, disabled: kivi.requirement_spec.disable_versioned_copy_item_commands }
- }, general_actions)
+ items: $.extend(versioned_copy_actions, general_actions)
});
$.contextMenu({