Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MIR-1329 Reenable support for validation of PDF/A documents #998

Open
wants to merge 4 commits into
base: 2023.06.x
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -913,3 +913,11 @@ subselect.category.title = Kategorie ausw\u00E4hlen

user.profile.id.orcid = Ihre ORCID iD
selfRegistration.error.mailExists = Die E-Mail-Adresse wird bereits verwendet.
pdf.errorbox.warning.message=Achtung! Bei einigen Ihrer PDF/A Dokumente sind Fehler aufgetreten. Bitte stellen Sie sicher, dass ihre PDF/A Dokumente mit aktuellen und geeigneten Programmen erstellt wurden und lesen Sie die Fehlerdokumentation. Anbei finden Sie eine Liste der aufgetretenen Fehler!
pdf.errorbox.warning.heading=Warnung!
pdf.errorbox.success.heading=Erfolg!
pdf.errorbox.success.message=Ihre PDF Dokumente wurden \u00FCberpr\u00FCft und es wurden keine Fehler gefunden.
pdf.errorbox.button.info=Mehr Informationen
pdf.errorbox.button.download=Herunterladen
pdf.errorbox.conformity.level=Konformit\u00E4tstufe
pdf.errorbox.unknown.error=Keine weiteren Informationen!
Original file line number Diff line number Diff line change
Expand Up @@ -865,3 +865,11 @@ subselect.category.cancel = Cancel
subselect.category.title = Choose category

user.profile.id.orcid = Your ORCID iD
pdf.errorbox.warning.message=Attention! Errors have occurred with some of your PDF/A documents. Please make sure that your PDF/A documents were created with up-to-date and suitable programs and read the error documentation. You will find a list of the occurred errors below!
pdf.errorbox.warning.heading=Warning!
pdf.errorbox.success.heading=Success!
pdf.errorbox.success.message=Your PDF documents were verified and no errors were found.
pdf.errorbox.button.info=Learn More
pdf.errorbox.button.download=Download
pdf.errorbox.conformity.level=Conformity level
pdf.errorbox.unknown.error=No further information!
2 changes: 1 addition & 1 deletion mir-module/src/main/resources/config/mir/mycore.properties
Original file line number Diff line number Diff line change
Expand Up @@ -733,7 +733,7 @@ MCR.Object.Static.Content.Generator.mir-history.Transformer=mir-history
MCR.URIResolver.xslImports.mirworkflow=metadata/mir-workflow.xsl
MIR.Workflow.Menu=false
MIR.Workflow.Box=false

MIR.EnablePdfaValidationInWorkflow=false
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer something like MIR.Workflow.PDFValidation

##############################################################################
# new Metadata Layout #
##############################################################################
Expand Down
171 changes: 171 additions & 0 deletions mir-module/src/main/resources/xsl/metadata/mir-pdf-errorbox.xsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:i18n="xalan://org.mycore.services.i18n.MCRTranslation"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:mcrxsl="xalan://org.mycore.common.xml.MCRXMLFunctions"
xmlns:xalan="http://xml.apache.org/xalan"
version="1.0" exclude-result-prefixes="i18n mcrxsl">

<xsl:param name="WebApplicationBaseURL"/>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused Variables

<xsl:param name="ServletsBaseURL" />
<xsl:param name="HttpSession"/>

<xsl:template match="mycoreobject" mode="displayPdfError">

<xsl:variable name="errorMessages">
<xsl:apply-templates select="structure/derobjects/derobject" mode="displayPdfError"/>
</xsl:variable>

<xsl:choose>
<xsl:when test="contains($errorMessages,'Clause')">
<div class="container pdf-validation mb-3 px-0" id="accordion">
<div class="card-header bg-danger text-white">
<div class="list-group list-group-root well p-3">
<p class="h5">
<xsl:value-of select="i18n:translate('pdf.errorbox.warning.heading')"/>
</p>
<p>
<xsl:value-of select="i18n:translate('pdf.errorbox.warning.message')"/>
</p>
</div>
</div>
<div class="card-body border-left border-right border-bottom">
<xsl:copy-of select="$errorMessages"/>
</div>
</div>
</xsl:when>
<xsl:when test="string-length(normalize-space($errorMessages)) > 0 and not(contains($errorMessages,'Clause'))">
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and not(contains($errorMessages,'Clause')) is not necessary

<div class="card-header bg-success text-white mb-3">
<div class="list-group list-group-root well p-3">
<p class="h5">
<xsl:value-of select="i18n:translate('pdf.errorbox.success.heading')"/>
</p>
<p>
<xsl:value-of select="i18n:translate('pdf.errorbox.success.message')"/>
</p>
</div>
</div>
</xsl:when>
</xsl:choose>
</xsl:template>

<xsl:template match="structure/derobjects/derobject" mode="displayPdfError">
<xsl:variable name="derivateID" select="@xlink:href"/>
<xsl:variable name="result" select="document(concat('pdfAValidator:', $derivateID))"/>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There should be a notNull or exception uri resolver chained in, to prevent the resolver from crashing the whole metadata page like in MIR-1303

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am working on that ticket seperately and will be merging it into this branch in a seperate pull request.

<xsl:if test="not(normalize-space($result))">
<xsl:apply-templates select="$result/derivate/file" mode="displayPdfError"/>
</xsl:if>
<xsl:variable name="derivbase" select="concat($ServletsBaseURL,'MCRFileNodeServlet/',$result/derivate/@id,'/')" />
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused varables

<xsl:variable name="derivdir" select="concat($derivbase,$HttpSession)" />
</xsl:template>

<xsl:template match="file" mode="displayPdfError">
<xsl:variable name="derivate" select="../@id"/>
<xsl:variable name="name">
<xsl:call-template name="pdfError.getFilename">
<xsl:with-param name="filePath" select="@name"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="badgecolor">
<xsl:choose>
<xsl:when test="failed">danger</xsl:when>
<xsl:otherwise>success</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="uniqueFileId" select="generate-id(.)"/>
<div id="{$derivate}{$uniqueFileId}" class="font-weight-bold d-flex list-group list-group-root">
<a onclick="$('#{$derivate}{$uniqueFileId}cbButton').toggleClass('fa-chevron-right fa-chevron-down');"
data-toggle="collapse" href="#collapse{$derivate}{$uniqueFileId}"
class="text-left d-flex flex-md-row flex-grow-1 list-group-item align-items-center">
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unnecessary space in @class attribute.

<i id="{$derivate}{$uniqueFileId}cbButton" class="fa fa-chevron-right ml-auto mr-1"/>
<span class="flex-grow-1 font-weight-bold text-break">
<xsl:value-of select="$name"/>
</span>
<span class="badge badge-{$badgecolor} badge-pill align-self-center">
<xsl:value-of select="count(failed)"/>
</span>
</a>
</div>
<ul class="list-group collapse" id="collapse{$derivate}{$uniqueFileId}">
<li class="list-group-item d-flex flex-column flex-xl-row flex-grow-2 text-break">
<p class="flex-grow-1 col-lg-8 align-items-center">
<span class="text-muted pdf-term">
<xsl:value-of select="concat(i18n:translate('pdf.errorbox.conformity.level'),': ')"/>
</span>
<span class="pdf-value">
<xsl:value-of select="concat('PDF/A-',@flavour)"/>
</span>
</p>
<xsl:variable name="downloadLink">
<xsl:value-of select="concat($ServletsBaseURL,'MCRFileNodeServlet/',$derivate,'/',mcrxsl:encodeURIPath(@name))"/>
</xsl:variable>


<a class="btn btn-primary col" href="{$downloadLink}" target="_blank">
<xsl:value-of select="concat(i18n:translate('pdf.errorbox.button.download'),' ')"/>
<i class="fas fa-download"/>
</a>
</li>
<xsl:apply-templates select="failed" mode="displayPdfError"/>
</ul>
</xsl:template>

<xsl:template match="failed" mode="displayPdfError">
<li class="list-group-item d-flex flex-column flex-xl-row flex-grow-1 text-break">
<p class="flex-grow col-lg-8 col-md-9 align-self-center">
<span class="text-muted pdf-term">
Specification:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could be translated

</span>
<span class="pdf-value">
<xsl:value-of select="concat(' ', @specification, ' ')"/>
</span>
<span class="text-muted pdf-term">
Clause:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could be translated

</span>
<span class="pdf-value">
<xsl:value-of select="concat(' ', @clause, ' ')"/>
</span>
<span class="text-muted pdf-term">
Test:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could be translated

</span>
<span class="pdf-value">
<xsl:value-of select="concat(' ', @testNumber, ' ')"/>
</span>
</p>
<xsl:choose>
<xsl:when test="not(@link)">
<a class="btn btn-info col" role="button" href="{@Link}" target="_blank">
<xsl:value-of select="concat(i18n:translate('pdf.errorbox.button.info'),' ')"/>
<i class="fas fa-external-link-alt"/>
</a>
</xsl:when>
<xsl:otherwise>
<div class="text-center alert alert-danger col" role="alert">
<xsl:value-of select="i18n:translate('pdf.errorbox.unknown.error')"/>
</div>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:template>

<xsl:template name="pdfError.getFilename">
<xsl:param name="filePath" />
<xsl:variable name="rest-of" select="substring-after($filePath, '/')" />
<xsl:choose>
<xsl:when test="contains($rest-of, '/')">
<xsl:call-template name="pdfError.getFilename">
<xsl:with-param name="filePath" select="$rest-of" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:if test="normalize-space($rest-of)">
<xsl:value-of select="$rest-of" />
</xsl:if>
<xsl:if test="not(normalize-space($rest-of))">
<xsl:value-of select="$filePath" />
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>
7 changes: 6 additions & 1 deletion mir-module/src/main/resources/xsl/metadata/mir-workflow.xsl
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@

<xsl:import href="xslImport:modsmeta:metadata/mir-workflow.xsl"/>
<xsl:import href="xslImport:mirworkflow:metadata/mir-workflow.xsl"/>

<xsl:import href="mir-pdf-errorbox.xsl"/>
<xsl:param name="layout" select="'$'"/>
<xsl:param name="MIR.Workflow.Box" select="'false'"/>
<xsl:param name="MIR.Workflow.ReviewDerivateRequired" select="'true'"/>
<xsl:param name="MIR.Sherpa.API.Key" select="''"/>
<xsl:param name="CurrentUser"/>

<xsl:param name="MIR.Workflow.Debug" select="'false'"/>
<xsl:param name="MIR.EnablePdfaValidationInWorkflow" select="'false'"/>
<xsl:key use="@id" name="rights" match="/mycoreobject/rights/right"/>
<xsl:variable name="id" select="/mycoreobject/@ID"/>

Expand Down Expand Up @@ -127,6 +128,10 @@
Dokument submitted
</xsl:message>
</xsl:if>

<xsl:if test="normalize-space($MIR.EnablePdfaValidationInWorkflow)='true'">
<xsl:apply-templates select="." mode="displayPdfError"/>
</xsl:if>
</xsl:template>

<xsl:template match="mycoreobject" mode="creatorReview" priority="10">
Expand Down
Loading