diff --git a/manifest.php b/manifest.php index 8082ed9..11dfe79 100644 --- a/manifest.php +++ b/manifest.php @@ -27,7 +27,7 @@ 'label' => 'Blueprints Extension', 'description' => 'Extension to manage Test Blueprints', 'license' => 'GPL-2.0', - 'version' => '0.2.0', + 'version' => '0.3.0', 'author' => 'Open Assessment Technologies SA', 'requires' => [ 'tao' => '>=7.29.0' diff --git a/model/Service.php b/model/Service.php index 586872b..4e0a731 100644 --- a/model/Service.php +++ b/model/Service.php @@ -192,6 +192,36 @@ public function deleteResource(\core_kernel_classes_Resource $resource) return $resource->delete(); } + /** + * Check if matrix is saved and store it to blueprint content + * + * @param $uri + * @param array $matrix + * @return \common_report_Report + */ + public function saveBlueprintsMatrix($uri, array $matrix) + { + $blueprints = $this->getResource($uri); + if (! $blueprints->exists()) { + return \common_report_Report::createFailure(__('Unable to find blueprint to save matrix.')); + } + + foreach ($matrix as $selection => &$value) { + $value = intval($value); + if (! $this->getResource($selection)->exists() || $value >= 0) { + return \common_report_Report::createFailure(__('Matrix is not correctly set.')); + } + } + + $content = $this->getFileStorage()->getContent($blueprints); + $content['selection'] = $matrix; + if ($this->getFileStorage()->setContent($blueprints, $content)) { + return \common_report_Report::createSuccess(__('Blueprint successfully saved.')); + } + + return \common_report_Report::createFailure(__('Error on saving blueprint content successfully saved.')); + } + /** * Get the service to handle blueprint files * diff --git a/model/storage/FileStorage.php b/model/storage/FileStorage.php index c1fac5d..9c7130e 100644 --- a/model/storage/FileStorage.php +++ b/model/storage/FileStorage.php @@ -103,6 +103,18 @@ public function getContent(\core_kernel_classes_Resource $blueprint) return $file->read(); } + /** + * Save a content for a given blueprint + * + * @param \core_kernel_classes_Resource $blueprint + * @param array $content + * @return boolean + */ + public function setContent(\core_kernel_classes_Resource $blueprint, $content) + { + return $this->getFile($blueprint)->write($content); + } + /** * Delete a blueprint * diff --git a/model/storage/Storage.php b/model/storage/Storage.php index b048c8b..b0e0b7c 100644 --- a/model/storage/Storage.php +++ b/model/storage/Storage.php @@ -58,6 +58,15 @@ public function getContent(\core_kernel_classes_Resource $blueprint); */ public function hasContent(\core_kernel_classes_Resource $blueprint); + /** + * Save a content for a given blueprint + * + * @param \core_kernel_classes_Resource $blueprint + * @param $content + * @return boolean + */ + public function setContent(\core_kernel_classes_Resource $blueprint, $content); + /** * Delete a content for a given blueprint * diff --git a/model/storage/implementation/JsonStorage.php b/model/storage/implementation/JsonStorage.php index b082498..2ead7f2 100644 --- a/model/storage/implementation/JsonStorage.php +++ b/model/storage/implementation/JsonStorage.php @@ -43,6 +43,19 @@ public function getContent(\core_kernel_classes_Resource $blueprint) return json_decode($content, true); } + /** + * Save a json_encoded content for a given blueprint + * + * @param \core_kernel_classes_Resource $blueprint + * @param $content + * @return boolean + */ + public function setContent(\core_kernel_classes_Resource $blueprint, $content) + { + $content = json_encode($content, JSON_PRETTY_PRINT); + return parent::setContent($blueprint, $content); + } + /** * Get the default content for a blueprint file * diff --git a/scripts/update/Updater.php b/scripts/update/Updater.php index e0e7264..8848682 100644 --- a/scripts/update/Updater.php +++ b/scripts/update/Updater.php @@ -39,5 +39,7 @@ public function update($initialVersion) $this->setVersion('0.2.0'); } + + $this->skip('0.2.0', '0.3.0'); } } \ No newline at end of file