/** * Converts URL (http://e.com/a.png) to CSS property ( url("../a.png") ) * @param string $style_id style ID * @param array $style_data style data (fields) * @return array modified style data */ private function urlToCss($style_id, $style_data) { $patterns_url = Patterns::instance($this->params)->getUrl($style_id, true); if (!empty($this->schema['backgrounds']['fields'])) { foreach ($this->schema['backgrounds']['fields'] as $field) { if (!empty($field['properties']['pattern'])) { $var_name = $field['properties']['pattern']; if (!empty($style_data[$var_name]) && strpos($style_data[$var_name], '//') !== false) { $url = preg_replace('/url\\([\'"]?(.*?)[\'"]?\\)/', '$1', $style_data[$var_name]); if (strpos($url, '//') === 0) { $url = 'http:' . $url; } $url = fn_normalize_path($url); if (strpos($url, $patterns_url) !== false) { $url = str_replace($patterns_url, '..', $url); if (strpos($url, '?') !== false) { // URL is parsed by Less::parseUrls method, so remove everything after ? list($url) = explode('?', $url); } } elseif ($style_id) { // external url $tmp_file = fn_create_temp_file(); fn_put_contents($tmp_file, fn_get_contents($url)); $_style = Patterns::instance($this->params)->save($style_id, array('data' => $style_data), array($var_name => array('name' => fn_basename($url), 'path' => $tmp_file))); $style_data = $_style['data']; continue; // assignment done in save method } $style_data[$var_name] = 'url(' . $url . ')'; } } } } return $style_data; }
function fn_theme_editor($params, $lang_code = CART_LANGUAGE) { $view = Tygh::$app['view']; $theme_name = Registry::get('runtime.layout.theme_name'); $layout_id = Registry::get('runtime.layout.layout_id'); if (!Registry::get('runtime.layout.style_id')) { $default_style_id = Styles::factory($theme_name)->getDefault(); db_query('UPDATE ?:bm_layouts SET style_id = ?s WHERE layout_id = ?i', $default_style_id, $layout_id); Registry::set('runtime.layout.style_id', $default_style_id); } $style_id = Registry::get('runtime.layout.style_id'); // Backward presets compatibility Registry::set('runtime.layout.preset_id', $style_id); // get current style $current_style = Styles::factory($theme_name)->get($style_id, array('parse' => true)); // get all styles $styles_list = Styles::factory($theme_name)->getList(); $schema = Styles::factory($theme_name)->getSchema(); $sections = array('te_general' => 'theme_editor.general', 'te_logos' => 'theme_editor.logos', 'te_colors' => 'theme_editor.colors', 'te_fonts' => 'theme_editor.fonts', 'te_backgrounds' => 'theme_editor.backgrounds', 'te_css' => 'theme_editor.css'); foreach ($sections as $section_id => $section) { if ($section_id == 'te_logos') { // Logos is hardcoded section, no need to define it in schema continue; } $section_id = str_replace('te_', '', $section_id); if (!isset($schema[$section_id])) { unset($sections['te_' . $section_id]); } } if (empty($params['selected_section']) || !isset($sections[$params['selected_section']])) { reset($sections); $params['selected_section'] = key($sections); } $theme = Themes::factory($theme_name); $theme_manifest = $theme->getManifest(); if (!empty($theme_manifest['converted_to_css'])) { if (empty($params['selected_css_file'])) { $params['selected_css_file'] = Themes::$compiled_less_filename; } $view->assign('selected_css_file', $params['selected_css_file']); $view->assign('css_files_list', $theme->getCssFilesList()); $view->assign('css_content', $theme->getCssContents($params['selected_css_file'])); } $view->assign('cse_logo_types', fn_get_logo_types()); $view->assign('cse_logos', fn_get_logos(Registry::get('runtime.company_id'))); $view->assign('selected_section', $params['selected_section']); $view->assign('te_sections', $sections); $view->assign('current_style', $current_style); $view->assign('props_schema', $schema); $view->assign('theme_patterns', Patterns::instance()->get($style_id)); $view->assign('styles_list', $styles_list); // FIXME: Backward compatibility $view->assign('presets_list', $styles_list); $view->assign('current_preset', $current_style); $view->assign('manifest', Styles::factory($theme_name)->getManifest()); $view->assign('theme_manifest', $theme_manifest); $view->assign('layouts', Layout::instance()->getList(array('theme_name' => $theme_name))); $view->assign('layout_data', Layout::instance()->get($layout_id)); $view->assign('theme_url', fn_url(empty($params['theme_url']) ? '' : $params['theme_url'])); }