function getTranslations($themeDir) { $includes = $themeDir . '/includes'; $translations = array(); foreach (FilesHelper::enumerateFiles($includes, false) as $file) { $info = pathinfo($file['name']); $filename = $info['filename']; $fileExt = isset($info['extension']) && $info['extension'] ? $info['extension'] : ''; if ($fileExt !== 'lang') { continue; } $content = json_decode($file['content'], true); if (!is_array($content)) { $translations[$filename] = '[DELETED]'; continue; } foreach ($content as $source => $langs) { $key = $filename . '_' . md5($source); foreach ($langs as $lang => $translate) { if (!array_key_exists($key, $translations)) { $translations[$key] = array(); } $translations[$key][$lang] = $translate; } } } return $translations; }
function add_version_folders(&$archive, $base_upload_dir, $user_template_dir, $preview_template_folder, $userThemeName, $includeThemler) { $preview_files = array(); foreach (get_support_versions() as $version) { $preview_files[$version] = FilesHelper::enumerateFiles($preview_template_folder . '/' . $version); } $preview_name = $userThemeName . _PREVIEW_SUFFIX_; $version_folders = get_support_versions_folder($user_template_dir); $cms_version = get_cms_version(); $dirs = array('themes', 'modules'); $modules = array('designerpreview', 'blocktopmenu_mod'); if ($includeThemler) { $modules[] = 'designer'; } foreach ($version_folders as $version => $folder) { $root = $base_upload_dir . (strpos($cms_version, $version) !== false ? '' : '/' . $version); foreach ($dirs as $name) { $dir = $root . '/' . $name; $arch_dirs[$name] = $dir; FilesHelper::createDir($dir); } FilesHelper::copyRecursive($user_template_dir, $arch_dirs['themes'] . '/' . $userThemeName); foreach ($modules as $module) { FilesHelper::copyRecursive(_PS_MODULE_DIR_ . $module, $arch_dirs['modules'] . '/' . $module); } // current version files in preview folder doesn't need to be copied if (strpos($cms_version, $version) !== false) { continue; } $files = $preview_files[$version]; $pattern = '/(.*?\\/themes\\/' . $preview_name . '\\/' . $version . '\\/)(.*?)/si'; foreach ($files as $file) { $path = $file['path']; $isThemler = strpos($path, 'designer/'); if ($isThemler && !$includeThemler) { continue; } $isModule = $isThemler || strpos($path, 'designerpreview/') || strpos($path, 'blocktopmenu_mod/'); $to_replace = ($isModule ? $arch_dirs['modules'] : $arch_dirs['themes'] . '/' . $userThemeName) . '/$2'; $r_path = preg_replace($pattern, $to_replace, $path); $r_path = FilesHelper::normalizePath($r_path); FilesHelper::writeFile($r_path, $file['content']); } // add version folder as root folder to archive file addToArchive($archive, $root, $base_upload_dir); FilesHelper::removeDir($root, true); } if ($includeThemler) { $inner_preview_dir = $base_upload_dir . '/themes/' . $userThemeName . '/' . $userThemeName . _PREVIEW_SUFFIX_; FilesHelper::copyRecursive($preview_template_folder, $inner_preview_dir); } foreach ($dirs as $dir) { addToArchive($archive, $base_upload_dir . '/' . $dir, $base_upload_dir); } clearDirs($base_upload_dir, $dirs); return; }
public static function emptyDirRecursive($dir, $recursive = true) { foreach (FilesHelper::enumerateFiles($dir, $recursive) as $file) { FilesHelper::deleteFile($file['path']); } }
private function _fixPreviewImagePaths() { $fixStr = "{assign var=theme_name value=\$tpl_dir|regex_replace:'/(.*)([\\/\\\\\\]themes[\\/\\\\\\])(.*)(_preview[\\/\\\\\\]\$)/':'\$3'}"; $fixStr1 = "{if \$isBdPreview && !file_exists(\"\$tpl_dir/img/"; $dirs = array($this->_previewThemeDir, $this->_themeDir); foreach ($dirs as $dir) { foreach (FilesHelper::enumerateFiles($dir) as $file) { $info = pathinfo($file['name']); $name = $info['filename']; $fileExt = isset($info['extension']) && $info['extension'] ? $info['extension'] : ''; if (!in_array($fileExt, array('tpl'))) { continue; } $content = $file['content']; $content = str_replace('"' . $fixStr1, '"' . $fixStr . $fixStr1, $content, $count); $content = preg_replace('/({assign var=p value="{\\$img_dir}..\\/..\\/)(.*?)(\\/)/', '$1{\\$theme_name}$3', $content); if ($count > 0) { FilesHelper::writeFile($file['path'], $content); } } } FilesHelper::emptyDirRecursive($this->_previewThemeDir . '/img', false); }