%args>
$limit => 10
$start => 1
$page => undef
$show_approval_buttons => undef
$creator => '%'
$wf_type => 'I18N_OPENXPKI_WF_TYPE_CERTIFICATE_SIGNING_REQUEST'
%args>
<% i18nGettext ('I18N_OPENXPKI_CLIENT_HTML_MASON_WORKFLOW_SHOW_PENDING_REQUESTS_TITLE') %>
<% i18nGettext('I18N_OPENXPKI_CLIENT_HTML_MASON_WORKFLOW_SHOW_PENDING_REQUESTS_DESC') %>
% if ($creator ne '%') {
<% i18nGettext('I18N_OPENXPKI_CLIENT_HTML_MASON_WORKFLOW_SHOW_PENDING_REQUESTS_LIMITED_TO_CREATOR', '__CREATOR__' => $creator) %>
% }
% if ($show_approval_buttons) {
<& /service/send_form.mhtml &>
<& /service/close_form.mhtml &>
% }
<%init>
use OpenXPKI::Serialization::Simple;
use Data::Dumper;
my $ser = OpenXPKI::Serialization::Simple->new();
my $search_context = [
{
KEY => 'creator',
VALUE => $creator,
}
];
my @results;
my $nr_msg = $context->{client}->send_receive_command_msg(
"search_workflow_instances_count",
{
"TYPE" => $wf_type,
'CONTEXT' => $search_context,
'STATE' => [ 'PENDING', 'APPROVAL' ],
},
);
my $count = $nr_msg->{PARAMS};
my $pageInfo;
if (! defined $show_approval_buttons) {
$pageInfo = $m->comp('/lib/paging.mhtml',
totalEntries => $count,
entriesPerPage => $limit,
page => $page,
start => $start,
url => 'show_pending_requests.html',
);
}
my %optional_params;
if (defined $pageInfo) {
$optional_params{LIMIT} = $limit;
$optional_params{START} = $pageInfo->first - 1;
}
my $msg = $context->{client}->send_receive_command_msg(
"search_workflow_instances",
{
"TYPE" => $wf_type,
'CONTEXT' => $search_context,
'STATE' => [ 'PENDING', 'APPROVAL' ],
%optional_params,
},
);
my @instances;
if (defined $msg->{PARAMS} && ref $msg->{PARAMS} eq 'ARRAY') {
@instances = @{ $msg->{PARAMS} };
}
# TODO - error handling
foreach my $instance (@instances) {
my $wf_info = $context->{client}->send_receive_command_msg(
'get_workflow_info',
{
WORKFLOW => $wf_type,
ID => $instance->{'WORKFLOW.WORKFLOW_SERIAL'},
},
);
# TODO - error handling
$m->comp('/lib/debug.mhtml',
'level' => 10,
'msg' => Dumper $wf_info,
);
my $wf_context = $wf_info->{PARAMS}->{WORKFLOW}->{CONTEXT};
my $san_ref = $ser->deserialize($wf_context->{'cert_subject_alt_name'});
$m->comp('/lib/debug.mhtml',
'level' => 10,
'msg' => Dumper $san_ref,
);
my @subject_alt_names;
if (defined $san_ref && ref $san_ref eq 'ARRAY') {
foreach my $san_pair (@{ $san_ref }) {
push @subject_alt_names, $san_pair->[0] . ':' . $san_pair->[1];
}
}
$m->comp('/lib/debug.mhtml',
'level' => 10,
'msg' => Dumper \@subject_alt_names,
);
# TODO - error handling
my @tickets;
if (exists $wf_context->{'ticket'}) {
my $tickets = $ser->deserialize($wf_context->{'ticket'});
foreach my $key (keys %{ $tickets }) {
my $ticket_entry;
$ticket_entry->{ID} = $tickets->{$key};
my $url_msg = $context->{client}->send_receive_command_msg(
'get_url_for_ticket',
{
NOTIFIER => $key,
TICKET => $tickets->{$key},
},
);
$ticket_entry->{URL} = $url_msg->{PARAMS};
push @tickets, $ticket_entry;
}
}
push @results, {
'SERIAL' => $instance->{'WORKFLOW.WORKFLOW_SERIAL'},
'LAST_UPDATE' => $instance->{'WORKFLOW.WORKFLOW_LAST_UPDATE'},
'SUBJECT' => $wf_context->{'cert_subject'},
'SUBJECT_ALT_NAMES' => \@subject_alt_names,
'PROFILE' => $wf_context->{'cert_profile'},
'ROLE' => $wf_context->{'cert_role'},
'CREATOR' => $wf_context->{'creator'},
'TICKETS' => \@tickets,
};
}
%init>