function _podcastUpdate() { global $objDatabase, $_ARRAYLANG, $objUpdate, $_CONFIG; //move podcast images directory $path = ASCMS_DOCUMENT_ROOT . '/images'; $oldImagesPath = '/content/podcast'; $newImagesPath = '/podcast'; if ($objUpdate->_isNewerVersion($_CONFIG['coreCmsVersion'], '1.2.1')) { if (!file_exists($path . $newImagesPath) && file_exists($path . $oldImagesPath)) { \Cx\Lib\FileSystem\FileSystem::makeWritable($path . $oldImagesPath); if (!\Cx\Lib\FileSystem\FileSystem::copy_folder($path . $oldImagesPath, $path . $newImagesPath)) { setUpdateMsg(sprintf($_ARRAYLANG['TXT_UNABLE_TO_MOVE_DIRECTORY'], $path . $oldImagesPath, $path . $newImagesPath)); return false; } } \Cx\Lib\FileSystem\FileSystem::makeWritable($path . $newImagesPath); \Cx\Lib\FileSystem\FileSystem::makeWritable($path . $newImagesPath . '/youtube_thumbnails'); //change thumbnail paths $query = "UPDATE `" . DBPREFIX . "module_podcast_medium` SET `thumbnail` = REPLACE(`thumbnail`, '/images/content/podcast/', '/images/podcast/')"; if ($objDatabase->Execute($query) === false) { return _databaseError($query, $objDatabase->ErrorMsg()); } } //set new default settings $query = "UPDATE `" . DBPREFIX . "module_podcast_settings` SET `setvalue` = '50' WHERE `setname` = 'thumb_max_size' AND `setvalue` = ''"; if ($objDatabase->Execute($query) === false) { return _databaseError($query, $objDatabase->ErrorMsg()); } $query = "UPDATE `" . DBPREFIX . "module_podcast_settings` SET `setvalue` = '85' WHERE `setname` = 'thumb_max_size_homecontent' AND `setvalue` = ''"; if ($objDatabase->Execute($query) === false) { return _databaseError($query, $objDatabase->ErrorMsg()); } // only update if installed version is at least a version 2.0.0 // older versions < 2.0 have a complete other structure of the content page and must therefore completely be reinstalled if (!$objUpdate->_isNewerVersion($_CONFIG['coreCmsVersion'], '2.0.0')) { try { // migrate content page to version 3.0.1 $search = array('/(.*)/ms'); $callback = function ($matches) { $content = $matches[1]; if (empty($content)) { return $content; } // add missing placeholder {PODCAST_JAVASCRIPT} if (strpos($content, '{PODCAST_JAVASCRIPT}') === false) { $content .= "\n{PODCAST_JAVASCRIPT}"; } // add missing placeholder {PODCAST_PAGING} if (strpos($content, '{PODCAST_PAGING}') === false) { $content = preg_replace('/(\\s+)(<!--\\s+END\\s+podcast_media\\s+-->)/ms', '$1$2$1<div class="noMedium">$1 {PODCAST_PAGING}$1</div>', $content); } return $content; }; \Cx\Lib\UpdateUtil::migrateContentPageUsingRegexCallback(array('module' => 'podcast'), $search, $callback, array('content'), '3.0.1'); } catch (\Cx\Lib\UpdateException $e) { return \Cx\Lib\UpdateUtil::DefaultActionHandler($e); } } return true; }
/** * Moves or copies the filesystem part of this component to another location * @param string $destination Destination path * @param boolean $copy (optional) Copy or move? True means copy, default is move * @return null */ protected function internalFsRelocate($destination, $copy = false) { if ($destination == $this->getDirectory()) { // nothing to do return; } $status = false; if ($copy) { $status = \Cx\Lib\FileSystem\FileSystem::copy_folder($this->getDirectory(), $destination); } else { $status = \Cx\Lib\FileSystem\FileSystem::move($this->getDirectory(), $destination); } return $status; }
/** * create skin folder * @access public */ private function createdir() { global $_ARRAYLANG; \Permission::checkAccess(47, 'static'); $themeName = !empty($_POST['dbName']) && !stristr($_POST['dbName'], '..') ? contrexx_input2raw($_POST['dbName']) : null; $copyFromTheme = !empty($_POST['fromTheme']) && !stristr($_POST['fromTheme'], '..') ? contrexx_input2raw($_POST['fromTheme']) : null; $createFromDatabase = !empty($_POST['fromDB']) && !stristr($_POST['fromDB'], '..') ? contrexx_input2raw($_POST['fromDB']) : null; $dirName = !empty($_POST['dirName']) && !stristr($_POST['dirName'], '..') ? contrexx_input2raw($_POST['dirName']) : null; $dirName = \Cx\Lib\FileSystem\FileSystem::replaceCharacters($dirName); if (!$themeName) { $this->strErrMessage = $_ARRAYLANG['TXT_STATUS_CHECK_INPUTS']; $this->newdir(); return; } $this->validateThemeName($themeName); if (!empty($dirName)) { // ensure that we're creating a new directory and not trying to overwrite an existing one $suffix = ''; while (file_exists($this->path . $dirName . $suffix)) { $suffix++; } $dirName .= $suffix; $theme = new \Cx\Core\View\Model\Entity\Theme(); $theme->setThemesname($themeName); $theme->setFoldername($dirName); switch (true) { case empty($copyFromTheme) && empty($createFromDatabase): // Create new empty theme if (\Cx\Lib\FileSystem\FileSystem::make_folder($this->path . $theme->getFoldername())) { if ($this->createDefaultFiles($theme) && $this->insertSkinIntoDb($theme)) { \Message::add(contrexx_raw2xhtml($themeName) . ' ' . $_ARRAYLANG['TXT_STATUS_SUCCESSFULLY_CREATE']); } else { \Message::add($_ARRAYLANG['TXT_MSG_ERROR_NEW_DIR'], \Message::CLASS_ERROR); $this->newdir(); return; } } break; case !empty($copyFromTheme) && empty($createFromDatabase): //check Whether the folder exists in both codebase if ($this->codeBaseThemesPath != $this->websiteThemesPath && file_exists($this->codeBaseThemesPath . $copyFromTheme)) { if (!\Cx\Lib\FileSystem\FileSystem::copy_folder($this->codeBaseThemesPath . $copyFromTheme, $this->websiteThemesPath . $dirName, true)) { \Message::add($_ARRAYLANG['TXT_MSG_ERROR_NEW_DIR'], \Message::CLASS_ERROR); $this->newdir(); return; } } //check Whether the folder exists in website data repository if (file_exists($this->websiteThemesPath . $copyFromTheme)) { if (!\Cx\Lib\FileSystem\FileSystem::copy_folder($this->websiteThemesPath . $copyFromTheme, $this->websiteThemesPath . $dirName, true)) { \Message::add($_ARRAYLANG['TXT_MSG_ERROR_NEW_DIR'], \Message::CLASS_ERROR); $this->newdir(); return; } } $this->replaceThemeName($copyFromTheme, $dirName, $this->websiteThemesPath . $dirName); //convert theme to component try { $this->themeRepository->loadComponentData($theme); if (!$theme->isComponent()) { // create a new one if no component.yml exists try { $this->themeRepository->convertThemeToComponent($theme); } catch (\Exception $ex) { \DBG::log($ex->getMessage()); \DBG::log($theme->getThemesname() . ' : Unable to convert theme to component'); } $this->themeRepository->loadComponentData($theme); } // change the theme name in component data $themeInformation = $theme->getComponentData(); if ($themeInformation) { $themeInformation['name'] = $theme->getThemesname(); $theme->setComponentData($themeInformation); $this->themeRepository->saveComponentData($theme); } } catch (\Cx\Lib\FileSystem\FileSystemException $e) { \Message::add('Error in coverting component file', \Message::CLASS_ERROR); } if ($this->insertSkinIntoDb($theme)) { \Message::add(contrexx_raw2xhtml($themeName) . ' ' . $_ARRAYLANG['TXT_STATUS_SUCCESSFULLY_CREATE']); } break; case empty($copyFromTheme) && !empty($createFromDatabase): // TODO: remove this function -> migrate all pending themes in the update process // Create new theme from database (migrate existing theme from database to filesystem) if (\Cx\Lib\FileSystem\FileSystem::make_folder($this->path . $dirName)) { $this->insertIntoDb($theme, $createFromDatabase); $this->createFilesFromDB($dirName, intval($createFromDatabase)); } break; default: break; } // Theme build successfully \Cx\Core\Csrf\Controller\Csrf::redirect('index.php?cmd=ViewManager&act=templates&themes=' . $theme->getFoldername()); } else { $this->strErrMessage = $_ARRAYLANG['TXT_STATUS_CHECK_INPUTS']; $this->newdir(); } }