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);
 }