From f26eba9620b6b7c1d825b63893533841f5f20bfc Mon Sep 17 00:00:00 2001 From: "vincent@cubedesigners.com" Date: Fri, 17 Jan 2020 10:43:57 +0000 Subject: [PATCH] wait #3335 @0.5 --- inc/commons/class.common.tools.php | 57 +++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/inc/commons/class.common.tools.php b/inc/commons/class.common.tools.php index 4d35851d0..0c28941aa 100644 --- a/inc/commons/class.common.tools.php +++ b/inc/commons/class.common.tools.php @@ -1429,7 +1429,7 @@ class commonTools $res .= ''; $res .= ''; $res .= ''; - $res .= ''; + $res .= ''; $res .= ''; $res .= '
' . __('Update your quiz') . '
Please upload your quiz (ZIP file expected)
' . $core->typo->BoutonOK(__('Proceed to update')) . '
'; $res .= ''; @@ -1439,18 +1439,24 @@ class commonTools return $res; } - public static function updateQuiz() + /** + * @param $tmp_name + * @param $name + * @return false|string + * @throws Exception + */ + protected static function _updateOneQuiz($tmp_name, $name) { - $tidySettings=['input-xml'=> 1, 'indent' => 1, 'wrap' => 0]; + $tidySettings = ['input-xml' => 1, 'indent' => 1, 'wrap' => 0]; $template = ROOT . '/quiz/template.zip'; - $temp = ROOT . '/quiz/quiz-' . md5(rand(0, 10000000)) . '.zip'; + $temp = ROOT . '/quiz/quiz-' . md5(random_int(0, 10000000)) . '.zip'; copy($template, $temp); $assets = ['assets/logo.png', 'assets/banner.jpg']; $uploaded = new ZipArchive(); - $uploaded->open($_FILES['file']['tmp_name']); + $uploaded->open($tmp_name); $template = new ZipArchive(); $template->open($temp); @@ -1472,17 +1478,50 @@ class commonTools $template->addFromString('data.xml', tidy_repair_string($oMX->Get(1), $tidySettings)); // *** IMS Manifest *** $imsmanifest = file_get_contents(ROOT . '/quiz/imsmanifest.xml'); - $imsmanifest = str_replace('$title', $quizTitle, tidy_repair_string($imsmanifest,$tidySettings)); + $imsmanifest = str_replace('$title', $quizTitle, tidy_repair_string($imsmanifest, $tidySettings)); $template->addFromString('imsmanifest.xml', $imsmanifest); // *** Save zip *** $template->close(); + $res = file_get_contents($temp); + unlink($temp); + return $res; + } + + /** + * @throws Exception + */ + public static function updateQuiz() + { + $multiple = count($_FILES['file']['name']) > 1; + if ($multiple) { + $fname = 'updated.zip'; + $zip = new ZipArchive(); + $zipName = ROOT . '/quiz/quiz-' . md5(random_int(0, 10000000)) . '.zip'; + $zip->open($zipName, ZipArchive::CREATE); + } else { + $fname = $_FILES['file']['name'][0]; + } + + foreach ($_FILES['file']['name'] as $i => $name) { + $tmp_name = $_FILES['file']['tmp_name'][$i]; + $res = self::_updateOneQuiz($tmp_name, $name); + if ($multiple) { + $zip->addFromString($name, $res); + } + } + header('Content-Type: application/zip'); - header('Content-Disposition: attachment; filename=' . $_FILES['file']['name']); + header('Content-Disposition: attachment; filename=' . $fname); ob_end_clean(); - echo file_get_contents($temp); - unlink($temp); + if ($multiple) { + $zip->close(); + echo file_get_contents($zipName); + unlink($zipName); + } else { + echo $res; + } exit; } -- 2.39.5