<?php /** * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; under version 2 * of the License (non-upgradable). * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * Copyright (c) 2014 (original work) Open Assessment Technologies SA; * */ namespace oat\taoQtiItem\controller; use \core_kernel_classes_Resource; use oat\tao\model\routing\AnnotationReader\security; use oat\taoQtiItem\model\CreatorRegistry; use \tao_actions_CommonModule; use \common_exception_Error; use \tao_helpers_File; use \tao_helpers_Http; abstract class AbstractPortableElementManager extends tao_actions_CommonModule { /** * @var CreatorRegistry */ protected $registry; /** * Instanciate the controller * @security("hide") */ public function __construct() { $this->registry = $this->getCreatorRegistry(); } /** * Return the registry used by this controller * * @return CreatorRegistry */ abstract protected function getCreatorRegistry(); /** * Get a file of a custom interaction */ public function getFile() { if ($this->hasRequestParameter('file')) { $file = urldecode($this->getRequestParameter('file')); $filePathTokens = explode('/', $file); $typeIdentifier = array_shift($filePathTokens); $relPath = implode(DIRECTORY_SEPARATOR, $filePathTokens); $this->renderFile($typeIdentifier, $relPath); } } /** * Get the directory where the implementation sits * * @param string $typeIdentifier * @return string */ protected function getImplementationDirectory($typeIdentifier) { return $this->registry->getDevImplementationDirectory($typeIdentifier); } /** * Render the file to the browser * * @param string $typeIdentifier * @param string $relPath * @throws common_exception_Error */ private function renderFile($typeIdentifier, $relPath) { if (tao_helpers_File::securityCheck($relPath, true)) { $folder = $this->getImplementationDirectory($typeIdentifier); $filename = $folder . $relPath; //@todo : find better way to to this //load amd module if (! file_exists($filename) && file_exists($filename . '.js')) { $filename = $filename . '.js'; } tao_helpers_Http::returnFile($filename); } else { throw new common_exception_Error('invalid item preview file path'); } } }