public function renderForms($themeName)
 {
     $themeDir = FilesHelper::normalizePath(getThemeDir($themeName));
     $form = array();
     $this->_renderTemplatesForm($form, $themeDir, $themeName);
     $this->_renderSlidersForms($form, $themeDir, $themeName);
     return $form;
 }
 public function getThemeTemplates($themeName)
 {
     $path = FilesHelper::normalizePath(getThemeDir($themeName . _PREVIEW_SUFFIX_)) . '/templates/templates.php';
     if (file_exists($path)) {
         // TODO: Maybe we have to store all html and parse them after each update or export operation for backward
         require_once $path;
     } else {
         $templates = getTemplates();
         // backward with old themes which do not have templates.php file but plugin is already updated
     }
     $context = Context::getContext();
     $link = $context->link;
     $controllers = getTemplateControllers();
     $previewParam = 'theme_name=' . $themeName;
     $result = array();
     foreach ($templates as $type => $template) {
         $controller = $controllers[$type];
         $method = 'get' . $controller . 'Link';
         if (method_exists($link, $method)) {
             $lower = strtolower($controller);
             $item = Designer::getFirstItem($lower);
             if ($item > 0) {
                 $baseUrl = $link->{$method}($item);
                 $pos = strpos($baseUrl, '?');
                 if ($pos !== FALSE) {
                     // HACK: preview parameter must be first in URL in Debug mode
                     $mainPart = substr($baseUrl, 0, $pos);
                     $params = substr($baseUrl, $pos + 1);
                     $templateUrl = $mainPart . '?' . $previewParam . '&' . $params;
                 } else {
                     $templateUrl = $baseUrl . '?' . $previewParam;
                 }
             } else {
                 $templateUrl = $link->getPageLink('index') . '?' . $previewParam . '&missingContent=' . $lower;
             }
         } else {
             $templateUrl = $link->getPageLink($controller);
             if (strpos($templateUrl, $previewParam) === FALSE) {
                 // can be set in some case from Dispatcher.php
                 $templateUrl .= (strpos($templateUrl, '?') !== FALSE ? '&' : '?') . $previewParam;
             }
         }
         if (is_array($template)) {
             // updated theme with templates.php file
             foreach ($template as $t) {
                 $result[$t['name']] = $templateUrl . '&template=' . $type . '_' . $t['id'];
                 // format as {templateName_id.tpl}
             }
         } else {
             // backward with old themes which do not have templates.php file but plugin is already updated
             $result[$type] = $templateUrl;
         }
     }
     return $result;
 }
function add_files_to_archive_root(&$archive, $base_upload_dir, $user_template_dir, $base_preview_dir, $user_theme_name)
{
    save_config($base_preview_dir, $base_upload_dir, $user_theme_name);
    $paths = array('Readme.txt' => FilesHelper::normalizePath($user_template_dir . '/Readme.txt'), 'Config.xml' => FilesHelper::normalizePath($base_upload_dir . '/designer/Export/Config.xml'));
    foreach ($paths as $name => $path) {
        if (!file_exists($path)) {
            continue;
        }
        $dir = dirname($path);
        addToArchive($archive, $path, $dir);
    }
}
 private function _getKey($path)
 {
     $file = FilesHelper::normalizePath($path);
     if (substr($file, 0, strlen($this->_themeDir . '_preview')) == $this->_themeDir . '_preview') {
         $file = substr($file, strlen($this->_themeDir . '_preview'));
     }
     if (substr($file, 0, strlen($this->_themeDir)) == $this->_themeDir) {
         $file = substr($file, strlen($this->_themeDir));
     }
     return $file;
 }
function checkThemeName($themeName)
{
    $toCheck = FilesHelper::normalizePath(_PS_ALL_THEMES_DIR_) . '/' . $themeName;
    while (file_exists($toCheck)) {
        preg_match('#(.*?)(\\d*)$#', $themeName, $m);
        $themeName = $m[1];
        $suffix = (int) $m[2];
        $suffix++;
        $themeName .= $suffix;
        $toCheck = FilesHelper::normalizePath(_PS_ALL_THEMES_DIR_) . '/' . $themeName;
    }
    return $themeName;
}
 private function _processFile($root, $inner_folder_path, $file_name, $content, &$changed_files, &$replaceInfo, $hasReplace)
 {
     // correct inner path to folder without version
     $folders = correct_version_path($inner_folder_path);
     foreach ($folders as $folder) {
         $path = FilesHelper::normalizePath($root . '/' . $folder);
         FilesHelper::createDir($path);
         $path .= '/' . $file_name;
         $info = pathinfo($path);
         $fileName = $info['basename'];
         $fileExt = isset($info['extension']) && $info['extension'] ? $info['extension'] : '';
         $isTemplateFile = preg_match('#[\\\\/]' . $this->_previewThemeName . '[\\\\/](.*?)templates[\\\\/]#', $path, $m);
         if ($content === '[DELETED]') {
             FilesHelper::deleteFile($path);
         } elseif (in_array($fileExt, array('js')) && !strpos($path, 'designer/')) {
             $path = strpos($path, '/js/') || strpos($path, 'CloudZoom.js') ? $path : $root . '/js/' . $fileName;
             FilesHelper::writeFile($path, $content);
         } elseif (in_array($fileExt, array('css')) && !strpos($path, 'designer/')) {
             if ($fileName === 'style.css') {
                 $fileName = 'global.css';
             }
             $path = strpos($path, '/css/') ? $path : $root . '/css/' . $fileName;
             if ($hasReplace) {
                 $content = str_replace($replaceInfo['ids'], $replaceInfo['paths'], $content);
             }
             FilesHelper::writeFile($path, $content);
         } elseif (in_array($fileExt, array('tpl'))) {
             $result = $this->_replaceImageIdToUrl($content, $replaceInfo, $hasReplace);
             FilesHelper::writeFile($path, $result);
         } else {
             FilesHelper::writeFile($path, $content);
         }
         $changed_files[] = $path;
         // save changed file - source or modified
     }
 }
 public function __construct()
 {
     ProviderLog::start('Chunk save');
     $this->UPLOAD_PATH = FilesHelper::normalizePath(_PS_UPLOAD_DIR_) . '/chunks/';
     $this->_chunkFolder = $this->UPLOAD_PATH . 'default';
 }
 private function _checkPermissions($themeName)
 {
     $themeDir = FilesHelper::normalizePath(getThemeDir($themeName));
     $previewDir = $themeDir . _PREVIEW_SUFFIX_;
     $dirs = array(_PS_OVERRIDE_DIR_, _PS_DOWNLOAD_DIR_, _PS_MODULE_DIR_, _PS_UPLOAD_DIR_, $themeDir, $previewDir);
     foreach ($dirs as $dir) {
         $rootOnly = strpos($dir, '/themes/') === FALSE;
         // check themes subdirectories only
         $check = FilesHelper::checkFiles($dir, true, true, $rootOnly);
     }
     return true;
 }