No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PackageValidator.php 3.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace Logipro\Bundle\SCORMBundle\Package;
  3. use Logipro\Bundle\SCORMBundle\LearningModels\DOMSCORM;
  4. use Logipro\Bundle\SCORMBundle\LearningModels\DOMLearningModel;
  5. use Logipro\Bundle\SCORMBundle\Tools\TimeTools;
  6. class PackageValidator
  7. {
  8. /**
  9. * Méthode outil premettant de valider un paquet e-learning
  10. * le standard est défini et la validation adéquat appliquée
  11. *
  12. * @param string $zipPath
  13. *
  14. * @return array
  15. */
  16. public static function validatePackage($zipPath)
  17. {
  18. $response = array(
  19. 'standard' => null,
  20. 'title' => null,
  21. 'duration' => null,
  22. 'validation' => null
  23. );
  24. // Identification du standard
  25. // Accès au contenu du zip
  26. $zip = new \ZipArchive();
  27. $result = $zip->open($zipPath);
  28. if ($result !== true) {
  29. $response['validation'] = array(
  30. 'status' => false,
  31. 'error' => sprintf("L'ouverture du ZIP a échoué avec le code : %d", $result)
  32. );
  33. return $response;
  34. }
  35. // Dans un premier temps on ne considère que SCORM
  36. // On recherche donc un fichier 'imsmanifest.xml'
  37. // Récupération du manifest
  38. $manifest = $zip->getFromName('imsmanifest.xml');
  39. $zip->close();
  40. $zipName = pathinfo($zipPath)['filename'];
  41. if ($manifest !== false) {
  42. // SCORM - Définition du standard et création du parser (objet DOM)
  43. $standard = DOMSCORM::defineStandard($manifest);
  44. $dom = DOMLearningModel::getInstance($zipName, $manifest, $standard);
  45. } else {
  46. // Si pas de imsmanifest.xml --> possible autre standard
  47. $response['validation'] = array(
  48. 'status' => false,
  49. 'error' => 'Standard non géré ou manifest absent'
  50. );
  51. return $response;
  52. }
  53. // Si standard identifié, on peut passé à la validation du xml
  54. if ($dom) {
  55. $response['standard'] = $standard;
  56. $response['title'] = $dom->getTitle();
  57. $response['duration'] = '';
  58. // Récupération de la balise durée (métadonnée)
  59. $typicalLearningTime = $dom->getTypicalLearningTime();
  60. if (!empty($typicalLearningTime)) {
  61. if (array_key_exists('duration', $typicalLearningTime)) {
  62. $isoDuration = $typicalLearningTime['duration'];
  63. $duration = TimeTools::convertIso8601DurationToSeconds($isoDuration);
  64. $response['duration'] = $duration;
  65. }
  66. }
  67. // @TODO Validation XML reportée
  68. // $response['validation'] = $dom->validate();
  69. $response['validation'] = array(
  70. 'status' => true
  71. );
  72. } else {
  73. $response['validation'] = array(
  74. 'status' => false,
  75. 'error' => 'Standard non géré'
  76. );
  77. return $response;
  78. }
  79. return $response;
  80. }
  81. }