/**
  * Edit a media instance with a new file and/or a new language
  * @param $fileTmp
  * @param $instanceUri
  * @param $language
  * @return bool $instanceUri or false on error
  */
 public function editMediaInstance($fileTmp, $instanceUri, $language)
 {
     $instance = new \core_kernel_classes_Resource($instanceUri);
     $link = $this->getLink($instance);
     $fileManager = FileManager::getFileManagementModel();
     $fileManager->deleteFile($link);
     $link = $fileManager->storeFile($fileTmp, $instance->getLabel());
     if ($link !== false) {
         //get the file MD5
         $md5 = md5_file($fileTmp);
         /** @var $instance  \core_kernel_classes_Resource */
         if (!is_null($instance) && $instance instanceof \core_kernel_classes_Resource) {
             $instance->editPropertyValues(new \core_kernel_classes_Property(MEDIA_LINK), $link);
             $instance->editPropertyValues(new \core_kernel_classes_Property(MEDIA_LANGUAGE), $language);
             $instance->editPropertyValues(new \core_kernel_classes_Property(MEDIA_MD5), $md5);
         }
         if (common_ext_ExtensionsManager::singleton()->isEnabled('taoRevision')) {
             \common_Logger::i('Auto generating revision');
             RevisionService::commit($instance, __('Imported new file'));
         }
     }
     return $link !== false ? true : false;
 }
Пример #2
0
 /**
  *
  * @param string $initialVersion
  * @return string $versionUpdatedTo
  */
 public function update($initialVersion)
 {
     $currentVersion = $initialVersion;
     //migrate from 0.1 to 0.1.1
     if ($currentVersion == '0.1') {
         // mediaSources set in 0.2
         $currentVersion = '0.1.1';
     }
     if ($currentVersion == '0.1.1') {
         FileManager::setFileManagementModel(new SimpleFileManagement());
         // mediaSources unset in 0.2
         $currentVersion = '0.1.2';
     }
     if ($currentVersion == '0.1.2') {
         //add alt text to media manager
         $file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'alt_text.rdf';
         $adapter = new \tao_helpers_data_GenerisAdapterRdf();
         if ($adapter->import($file)) {
             $currentVersion = '0.1.3';
         } else {
             \common_Logger::w('Import failed for ' . $file);
         }
     }
     if ($currentVersion == '0.1.3') {
         OntologyUpdater::correctModelId(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'alt_text.rdf');
         $currentVersion = '0.1.4';
     }
     if ($currentVersion == '0.1.4') {
         //modify config files due to the new interfaces relation
         $tao = \common_ext_ExtensionsManager::singleton()->getExtensionById('tao');
         $tao->unsetConfig('mediaManagementSources');
         $tao->unsetConfig('mediaBrowserSources');
         TaoMediaService::singleton()->addMediaSource(new MediaSource());
         //modify links in item content
         $service = \taoItems_models_classes_ItemsService::singleton();
         $items = $service->getAllByModel('http://www.tao.lu/Ontologies/TAOItem.rdf#QTI');
         foreach ($items as $item) {
             $itemContent = $service->getItemContent($item);
             $itemContent = preg_replace_callback('/src="mediamanager\\/([^"]+)"/', function ($matches) {
                 $mediaClass = MediaService::singleton()->getRootClass();
                 $medias = $mediaClass->searchInstances(array(MEDIA_LINK => $matches[1]), array('recursive' => true));
                 $media = array_pop($medias);
                 $uri = '';
                 if (!is_null($media) && $media->exists()) {
                     $uri = \tao_helpers_Uri::encode($media->getUri());
                 }
                 return 'src="taomedia://mediamanager/' . $uri . '"';
             }, $itemContent);
             $itemContent = preg_replace_callback('/src="local\\/([^"]+)"/', function ($matches) {
                 return 'src="' . $matches[1] . '"';
             }, $itemContent);
             $service->setItemContent($item, $itemContent);
         }
         $currentVersion = '0.2.0';
     }
     if ($currentVersion === '0.2.0') {
         $accessService = \funcAcl_models_classes_AccessService::singleton();
         //revoke access right to back office
         $backOffice = new \core_kernel_classes_Resource('http://www.tao.lu/Ontologies/TAO.rdf#BackOfficeRole');
         $accessService->revokeExtensionAccess($backOffice, 'taoMediaManager');
         //grant access right to media manager
         $mediaManager = new \core_kernel_classes_Resource('http://www.tao.lu/Ontologies/TAOMedia.rdf#MediaManagerRole');
         $accessService->grantExtensionAccess($mediaManager, 'taoMediaManager');
         $currentVersion = '0.2.1';
     }
     if ($currentVersion === '0.2.1') {
         //include mediamanager into globalmanager
         $mediaManager = new \core_kernel_classes_Resource('http://www.tao.lu/Ontologies/TAOMedia.rdf#MediaManagerRole');
         $globalManager = new \core_kernel_Classes_Resource('http://www.tao.lu/Ontologies/TAO.rdf#GlobalManagerRole');
         \tao_models_classes_RoleService::singleton()->includeRole($globalManager, $mediaManager);
         $currentVersion = '0.2.2';
     }
     if ($currentVersion === '0.2.2') {
         //copy file from /media to data/taoMediaManager/media and delete /media
         $dataPath = FILES_PATH . 'taoMediaManager' . DIRECTORY_SEPARATOR . 'media' . DIRECTORY_SEPARATOR;
         $dir = dirname(dirname(__DIR__)) . '/media';
         if (file_exists($dir)) {
             if (\tao_helpers_File::copy($dir, $dataPath)) {
                 $it = new \RecursiveDirectoryIterator($dir, \RecursiveDirectoryIterator::SKIP_DOTS);
                 $files = new \RecursiveIteratorIterator($it, \RecursiveIteratorIterator::CHILD_FIRST);
                 foreach ($files as $file) {
                     if ($file->isDir()) {
                         rmdir($file->getRealPath());
                     } else {
                         unlink($file->getRealPath());
                     }
                 }
                 rmdir($dir);
                 $currentVersion = '0.2.3';
             }
         } else {
             $currentVersion = '0.2.3';
         }
     }
     if ($currentVersion === '0.2.3') {
         $accessService = \funcAcl_models_classes_AccessService::singleton();
         //grant access to item author
         $itemAuthor = new \core_kernel_classes_Resource('http://www.tao.lu/Ontologies/TAOItem.rdf#ItemAuthor');
         $accessService->grantExtensionAccess($itemAuthor, 'taoMediaManager');
         $currentVersion = '0.2.4';
     }
     if ($currentVersion === '0.2.4') {
         $mediaClass = MediaService::singleton()->getRootClass();
         $fileManager = FileManager::getFileManagementModel();
         foreach ($mediaClass->getInstances(true) as $media) {
             $fileLink = $media->getUniquePropertyValue(new \core_kernel_classes_Property(MEDIA_LINK));
             $fileLink = $fileLink instanceof \core_kernel_classes_Resource ? $fileLink->getUri() : (string) $fileLink;
             $filePath = $fileManager->retrieveFile($fileLink);
             $mimeType = \tao_helpers_File::getMimeType($filePath);
             $mimeType = $mimeType === 'application/xhtml+xml' ? 'application/qti+xml' : $mimeType;
             $media->setPropertyValue(new \core_kernel_classes_Property(MEDIA_MIME_TYPE), $mimeType);
         }
         $currentVersion = '0.2.5';
     }
     if ($currentVersion === '0.2.5') {
         $fileManager = FileManager::getFileManagementModel();
         $iterator = new \core_kernel_classes_ResourceIterator(array(MediaService::singleton()->getRootClass()));
         foreach ($iterator as $media) {
             $fileLink = $media->getUniquePropertyValue(new \core_kernel_classes_Property(MEDIA_LINK));
             $fileLink = $fileLink instanceof \core_kernel_classes_Resource ? $fileLink->getUri() : (string) $fileLink;
             $filePath = $fileManager->retrieveFile($fileLink);
             try {
                 SharedStimulusImporter::isValidSharedStimulus($filePath);
                 $media->editPropertyValues(new \core_kernel_classes_Property(MEDIA_MIME_TYPE), 'application/qti+xml');
             } catch (\Exception $e) {
                 $mimeType = \tao_helpers_File::getMimeType($filePath);
                 $media->editPropertyValues(new \core_kernel_classes_Property(MEDIA_MIME_TYPE), $mimeType);
             }
         }
         $currentVersion = '0.3.0';
     }
     $this->skip('0.3.0', '0.5.1');
 }
 private function createZipFile($filename, $exportClasses = array(), $exportFiles = array())
 {
     $zip = new \ZipArchive();
     $baseDir = \tao_helpers_Export::getExportPath();
     $path = $baseDir . '/' . $filename . '.zip';
     if ($zip->open($path, \ZipArchive::CREATE) !== TRUE) {
         throw new \common_Exception('Unable to create zipfile ' . $path);
     }
     if ($zip->numFiles === 0) {
         $nbFiles = 0;
         foreach ($exportFiles as $label => $files) {
             $archivePath = '';
             /** @var $class \core_kernel_classes_Class */
             if (array_key_exists($label, $exportClasses)) {
                 $archivePath = $exportClasses[$label] . '/';
                 $zip->addEmptyDir($archivePath);
                 $nbFiles++;
             }
             $nbFiles += count($files);
             //create the directory
             foreach ($files as $file) {
                 //add each file in the correct directory
                 $link = $file->getUniquePropertyValue(new \core_kernel_classes_Property(MEDIA_LINK));
                 if ($link instanceof \core_kernel_classes_Literal) {
                     $link = $link->literal;
                 }
                 $zip->addFile(FileManager::getFileManagementModel()->retrieveFile($link), $archivePath . $file->getLabel());
             }
         }
         \common_Logger::i("Number of file : " . $zip->numFiles . " / " . $nbFiles);
     }
     $zip->close();
     return $path;
 }
 /**
  * (non-PHPdoc)
  *
  * @see \oat\tao\model\media\MediaBrowser::download
  */
 public function download($link)
 {
     // get the media link from the resource
     $resource = new \core_kernel_classes_Resource(\tao_helpers_Uri::decode($link));
     $fileLink = $resource->getOnePropertyValue(new \core_kernel_classes_Property(MEDIA_LINK));
     if (is_null($fileLink)) {
         throw new \tao_models_classes_FileNotFoundException($link);
     }
     $fileLink = $fileLink instanceof \core_kernel_classes_Resource ? $fileLink->getUri() : (string) $fileLink;
     $fileManagement = FileManager::getFileManagementModel();
     $filePath = $fileManagement->retrieveFile($fileLink);
     return $filePath;
 }
 * 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 (under the project TAO-PRODUCT);
 *
 *
 */
use oat\tao\model\media\MediaService;
use oat\taoMediaManager\model\fileManagement\FileManager;
use oat\taoMediaManager\model\fileManagement\TaoFileManagement;
use oat\taoMediaManager\model\MediaSource;
$dataPath = FILES_PATH . 'taoMediaManager' . DIRECTORY_SEPARATOR . 'media' . DIRECTORY_SEPARATOR;
if (file_exists($dataPath)) {
    helpers_File::emptyDirectory($dataPath);
}
$source = tao_models_classes_FileSourceService::singleton()->addLocalSource('MediaManager', $dataPath);
$config = array('uri' => $source->getUri());
FileManager::setFileManagementModel(new TaoFileManagement($config));
$mediaManager = new MediaSource();
MediaService::singleton()->addMediaSource($mediaManager);
 private function renderFile($item, $path, $lang)
 {
     $folder = taoItems_models_classes_ItemsService::singleton()->getItemFolder($item, $lang);
     if (tao_helpers_File::securityCheck($path, true)) {
         $mediaInfo = MediaRetrieval::getRealPathAndIdentifier($path);
         extract($mediaInfo);
         if ($identifier === '' || $identifier === 'local') {
             $filename = $folder . $relPath;
         } else {
             if ($identifier === 'mediamanager') {
                 $fileManager = FileManager::getFileManagementModel();
                 $filename = $fileManager->retrieveFile($relPath);
             } else {
                 $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');
     }
 }