Skip to content
Snippets Groups Projects
Commit d850512c authored by Jerome Chauveau's avatar Jerome Chauveau
Browse files

handler image book (gestion images dans archive zip)

parent db050ef5
Branches
Tags
No related merge requests found
......@@ -3,7 +3,7 @@
import('pages.article.ArticleHandler');
class ImageDataHandler extends ArticleHandler
class ArticleImageDataHandler extends ArticleHandler
{
......@@ -50,7 +50,6 @@ class ImageDataHandler extends ArticleHandler
*/
public function zimage(array $args, Request $request)
{
import('lib.pkp.classes.submission.SubmissionFile');
$imgName = $args[1];
$dependentFilesIterator = Services::get('submissionFile')->getMany([
......
<?php
import('pages.catalog.CatalogBookHandler');
class BookImageDataHandler extends CatalogBookHandler
{
/**
* @param array $args
* @param Request $request
* @return mixed
*/
public function image(array $args, Request $request)
{
$fileId = $args[1];
$submission = $this->getAuthorizedContextObject(ASSOC_TYPE_SUBMISSION);
import('lib.pkp.classes.submission.SubmissionFile');
$dependentFilesIterator = Services::get('submissionFile')->getMany([
'assocTypes' => [ASSOC_TYPE_SUBMISSION_FILE],
'submissionIds' => [$submission->getId()],
'fileStages' => [SUBMISSION_FILE_DEPENDENT],
'includeDependentFiles' => true,
]);
$submissionFile = null;
foreach ($dependentFilesIterator as $dependentFile) {
if ($fileId == $dependentFile->getData('fileId')) {
$submissionFile = $dependentFile;
break;
}
}
// Download file if exists
if (!Services::get('file')->fs->has($submissionFile->getData('path'))) {
$request->getDispatcher()->handle404();
}
$filename = Services::get('file')
->formatFilename($submissionFile->getData('path'), $submissionFile->getLocalizedData('name'));
return Services::get('file')->download($submissionFile->getData('path'), $filename);
}
/**
* Image from zip archive submission file
* @param array $args
* @param Request $request
* @return mixed
*/
public function zimage(array $args, Request $request)
{
import('lib.pkp.classes.submission.SubmissionFile');
$imgName = $args[1];
$submission = $this->getAuthorizedContextObject(ASSOC_TYPE_SUBMISSION);
$dependentFilesIterator = Services::get('submissionFile')->getMany([
'submissionIds' => [$submission->getId()],
'fileStages' => [SUBMISSION_FILE_SUBMISSION],
]);
$submissionFile = null;
$result = iterator_to_array($dependentFilesIterator);
if(sizeof($result) != 1) {
$request->getDispatcher()->handle404();
}
else {
$submissionFile = $result[0];
$filename = Services::get('file')
->formatFilename($submissionFile->getData('path'), $submissionFile->getLocalizedData('path'));
$pathInfo = pathinfo($filename);
$imagePath = $pathInfo['dirname'] . DIRECTORY_SEPARATOR . $pathInfo['filename'] . DIRECTORY_SEPARATOR . $imgName;
return Services::get('file')->download($imagePath, $imgName);
}
}
}
......@@ -17,6 +17,9 @@ class OMPViewHtmlHandler extends Handler
return parent::authorize($request, $args, $roleAssignments);
}
/**
* @throws Exception
*/
public function viewhtml($args, $request)
{
......@@ -68,8 +71,21 @@ class OMPViewHtmlHandler extends Handler
$fileMgr = new PrivateFileManager();
$path = $fileMgr->getBasePath();
$filesDir = $path . DIRECTORY_SEPARATOR;
//$xmlFilePath = $filesDir . $filePath;
$zipMode = $targetFile->getData('mimetype') === "application/zip";
if($zipMode){
$fileInfo = pathinfo($filePath);
XML2HTMLPlugin::unzipSubmissionUpload($targetFile);
$xmlFilePath =
$filesDir . $fileInfo['dirname'] . DIRECTORY_SEPARATOR . $fileInfo['filename'] . DIRECTORY_SEPARATOR . $fileInfo['filename'] . '.xml';
}
else
$xmlFilePath = $filesDir . $filePath;
$html = XML2HTMLPlugin::transform($xmlFilePath);
if($zipMode) {
$html = XML2HTMLPlugin::resolveZipImagePaths($html, $submission->getId(), $xmlFilePath, $request, 'catalog');
}
else
$html = XML2HTMLPlugin::resolveImagePaths($html, $targetFile, $request);
$baseUrl = $request->getBaseUrl() . '/' . $plugin->getPluginPath();
$templateMgr->addStyleSheet('xml2htmlStyles', $baseUrl . '/resources/styles/article.css');
......
......@@ -146,7 +146,7 @@ class XML2HTMLPlugin extends GenericPlugin
return false;
}
$html = $zipMode
? $this->resolveZipImagePaths(XML2HTMLPlugin::transform($xmlFilePath), $submissionId, $xmlFilePath)
? $this->resolveZipImagePaths(XML2HTMLPlugin::transform($xmlFilePath), $submissionId, $xmlFilePath, $this->getRequest())
: $this->resolveImagePaths(XML2HTMLPlugin::transform($xmlFilePath), $submissionFile, $this->getRequest());
$output .= $html;
......@@ -174,12 +174,60 @@ class XML2HTMLPlugin extends GenericPlugin
}
/**
* @throws Exception
*/
function uploadHandler($hookName, $params)
{
/**@var $submissionFile SubmissionFile* */
$submissionFile = $params[0];
if($submissionFile->getAssocType() === ASSOC_TYPE_SUBMISSION_FILE) {
XML2HTMLPlugin::unzipSubmissionUpload($submissionFile);
// $path = $submissionFile->getData('path');
// $fileManager = new FileManager();
// $submissionFileExtension = $fileManager->parseFileExtension($path);
// if ($submissionFileExtension == 'zip') {
// $fileMgr = new PrivateFileManager();
// $filesDir = $fileMgr->getBasePath() . DIRECTORY_SEPARATOR;
// $zip = new ZipArchive;
// $zipPath = $filesDir . $path;
// if ($zip->open($zipPath) === TRUE) {
// $zipPathParts = pathinfo($zipPath);
// $archiveFolderName = NULL;
// if ($zip->numFiles > 0) {//gets zip top folder name
// $archiveFolderName = $zip->getNameIndex(0);
// } else {
// throw new \Exception("Bad zip Submission file.");
// }
// $zip->extractTo($zipPathParts['dirname']);
// rename(
// $zipPathParts['dirname'] . DIRECTORY_SEPARATOR . $archiveFolderName,
// $zipPathParts['dirname'] . DIRECTORY_SEPARATOR . $zipPathParts['filename']);
// $zip->close();
//
// $files = scandir($zipPathParts['dirname'] . DIRECTORY_SEPARATOR . $zipPathParts['filename']);
// foreach ($files as $file) {
// $extension = $fileManager->parseFileExtension($file);
// if ($extension == 'xml') {
// $basePath = $zipPathParts['dirname'] . DIRECTORY_SEPARATOR . $zipPathParts['filename'] . '/';
// rename(
// $basePath . $file,
// $basePath . $zipPathParts['filename'] . '.xml'
// );
// }
// }
//
// } else {
// echo 'échec';
// }
// } else
// throw new \Exception('Submission file must be a zip one.');
}
}
static function unzipSubmissionUpload(SubmissionFile $submissionFile){
$path = $submissionFile->getData('path');
$fileManager = new FileManager();
$submissionFileExtension = $fileManager->parseFileExtension($path);
......@@ -188,8 +236,11 @@ class XML2HTMLPlugin extends GenericPlugin
$filesDir = $fileMgr->getBasePath() . DIRECTORY_SEPARATOR;
$zip = new ZipArchive;
$zipPath = $filesDir . $path;
if ($zip->open($zipPath) === TRUE) {
$zipPathParts = pathinfo($zipPath);
if(file_exists($zipPathParts['dirname'] . DIRECTORY_SEPARATOR . $zipPathParts['filename']))
return;
if ($zip->open($zipPath) === TRUE) {
$archiveFolderName = NULL;
if ($zip->numFiles > 0) {//gets zip top folder name
$archiveFolderName = $zip->getNameIndex(0);
......@@ -217,9 +268,7 @@ class XML2HTMLPlugin extends GenericPlugin
} else {
echo 'échec';
}
} else
throw new \Exception('Submission file must be a zip one.');
}
} else return false;
}
......@@ -234,8 +283,12 @@ class XML2HTMLPlugin extends GenericPlugin
$op = $args[1];
if ($page == 'article' && ($op == 'image' || $op == 'zimage')) {
define('HANDLER_CLASS', 'ImageDataHandler');
import('plugins.generic.xml2html.ImageDataHandler');
define('HANDLER_CLASS', 'ArticleImageDataHandler');
import('plugins.generic.xml2html.ArticleImageDataHandler');
}
else if (($page == 'catalog') && ($op == 'image' || $op == 'zimage')) {
define('HANDLER_CLASS', 'BookImageDataHandler');
import('plugins.generic.xml2html.BookImageDataHandler');
}
}
......@@ -289,18 +342,24 @@ class XML2HTMLPlugin extends GenericPlugin
}
function resolveZipImagePaths(string $htmlString, int $submissionId, string $xmlFilePath)
static function resolveZipImagePaths(
string $htmlString,
int $submissionId,
string $xmlFilePath,
Request $request,
string $op='article')
{
$pathInfo = pathinfo($xmlFilePath);
$extractedZipPath = $pathInfo['dirname'];
$files = scandir($extractedZipPath);
foreach ($files as $file) {
$info = pathinfo($file);
if ($info["extension"] == 'jpg' || $info["extension"] == 'png') {
$request = $this->getRequest();
$request = $request;
$filePath = $request->url(
null, 'article',
null, $op,
'zimage',
array(
$submissionId,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment