items_cache = [ 'header' => null, 'footer' => null ]; } public function patch_header_value_for($processed_terms) { blocksy_manager()->header_builder->patch_value_for($processed_terms); blocksy_manager()->footer_builder->patch_value_for($processed_terms); } public function translation_keys() { return array_merge( blocksy_manager()->header_builder->translation_keys(), blocksy_manager()->footer_builder->translation_keys() ); } public function typography_keys() { return array_merge( blocksy_manager()->header_builder->typography_keys(), blocksy_manager()->footer_builder->typography_keys() ); } public function dynamic_css($panel_type = 'header', $args = []) { if (! blocksy_dynamic_styles_should_call($args)) { return; } if ($panel_type === 'header') { $panel_logic = blocksy_manager()->header_builder; } else { $panel_logic = blocksy_manager()->footer_builder; } if ($args['context'] === 'inline') { $this->load_dynamic_css_for_section([ 'panel_type' => $panel_type, 'section_id' => $panel_logic->get_current_section_id() ], $args); return; } $sections_to_load_css_for = apply_filters( 'blocksy:' . $panel_type . ':sections-for-dynamic-css', [$panel_logic->get_section_value()['sections'][0]], $panel_logic->get_section_value() ); foreach ($sections_to_load_css_for as $single_section) { $this->load_dynamic_css_for_section([ 'panel_type' => $panel_type, 'section_id' => $single_section['id'] ], $args); } } public function load_dynamic_css_for_section($args = [], $css_args = []) { $args = wp_parse_args($args, [ 'panel_type' => 'header', 'section_id' => null ]); if ($args['panel_type'] === 'header') { $render = new Blocksy_Header_Builder_Render([ 'current_section_id' => $args['section_id'] ]); } else { $render = new Blocksy_Footer_Builder_Render([ 'current_section_id' => $args['section_id'] ]); } $all_items = $this->get_registered_items_by($args['panel_type']); $current_section = $render->get_current_section(); foreach ($current_section['items'] as $item) { if ($render->is_custom_id($item['id'])) { $new_item = []; foreach ($this->get_registered_items_by($args['panel_type']) as $nested_item) { if ($nested_item['id'] === $render->get_original_id($item['id'])) { $new_item = $nested_item; $new_item['id'] = $item['id']; } } $all_items[] = $new_item; } } foreach ($all_items as $item) { if ($item) { if ( ! $render->contains_item($item['id'], $item['is_primary']) && $item['id'] !== 'offcanvas' ) { continue; } if (! file_exists($item['path'] . '/dynamic-styles.php')) { continue; } $css_args['atts'] = $render->get_item_data_for($item['id']); $css_args['item'] = $item; $row_id = null; if (isset($item['is_primary']) && $item['is_primary']) { $row_id = $item['id']; $css_args['primary_item'] = $render->get_primary_item($item['id']); } else { if (isset($current_section['desktop'])) { foreach ($current_section['desktop'] as $row) { foreach ($row['placements'] as $single_placement) { if (in_array($item['id'], $single_placement['items'])) { $row_id = $row['id']; } } } } if (isset($current_section['mobile'])) { foreach ($current_section['mobile'] as $row) { foreach ($row['placements'] as $single_placement) { if (in_array($item['id'], $single_placement['items'])) { $row_id = $row['id']; } } } } } blocksy_theme_get_dynamic_styles(apply_filters( 'blocksy:' . $args['panel_type'] . ':dynamic-styles-args', array_merge([ 'section_id' => $args['section_id'], 'row_id' => $row_id, 'panel_type' => $args['panel_type'], 'path' => $item['path'] . '/dynamic-styles.php', 'root_selector' => $render->get_root_selector($item), 'root_selector_header' => $render->get_root_selector(), 'column_selector' => $render->get_column_selector($item) ], $css_args) )); }; } $path = apply_filters( 'blocksy:' . $args['panel_type'] . ':dynamic-styles-path', get_template_directory() . '/inc/panel-builder/' . $args['panel_type'] . '/dynamic-styles.php' ); $section = $render->get_current_section(); if (! isset($section['settings'])) { $section['settings'] = []; } $css_args['atts'] = $section['settings']; if (file_exists($path)) { blocksy_theme_get_dynamic_styles( apply_filters( 'blocksy:' . $args['panel_type'] . ':dynamic-styles-args', array_merge([ 'section_id' => $args['section_id'], 'path' => $path, 'root_selector' => $render->get_root_selector() ], $css_args) ) ); } } public function get_data_for_customizer() { $result = []; $result['header'] = $this->get_registered_items_by('header', [ 'require_options' => true ]); $result['footer'] = $this->get_registered_items_by('footer', [ 'require_options' => true ]); $result['footer_data'] = [ 'footer_options' => blocksy_get_options( get_template_directory() . '/inc/panel-builder/footer/options.php', [], false ) ]; $result['header_data'] = [ 'header_options' => blocksy_get_options( apply_filters( 'blocksy:header:general-options-path', get_template_directory() . '/inc/panel-builder/header/options.php' ), [], false ) ]; $result['secondary_items'] = [ 'header' => $this->get_registered_items_by('header', [ 'include' => 'secondary' ]), 'footer' => $this->get_registered_items_by('footer', [ 'include' => 'secondary' ]), ]; return $result; } public function get_option_id_for($panel_type = 'header', $item = []) { return $panel_type . '_item_' . str_replace('-', '_', $item['id']); } public function get_registered_items_by($panel_type = 'header', $args = []) { $args = wp_parse_args($args, [ // all | primary | secondary 'include' => 'all', 'require_options' => false ]); $should_do_caching = $args['include'] === 'all' && ! $args['require_options']; if ($should_do_caching) { if ($this->items_cache[$panel_type]) { return $this->items_cache[$panel_type]; } } $paths_to_look_for_items = apply_filters( 'blocksy:' . $panel_type . ':items-paths', [ get_template_directory() . '/inc/panel-builder/' . $panel_type ], $panel_type ); $items = []; $primary_items = [ 'top-row', 'middle-row', 'bottom-row', 'offcanvas' ]; $all_items = []; foreach ($paths_to_look_for_items as $single_path) { $temporary_items = glob($single_path . '/*', GLOB_ONLYDIR); foreach ($temporary_items as $single_item_path) { $all_items[] = $single_item_path; } } foreach (apply_filters( 'blocksy:' . $panel_type . ':items-root-paths', $all_items ) as $single_item) { $id = str_replace('_', '-', basename($single_item)); if (in_array($id, $primary_items)) { if ($args['include'] === 'secondary') { continue; } } else { if ($args['include'] === 'primary') { continue; } } $future_data = [ 'id' => $id, 'path' => $single_item, 'is_primary' => in_array($id, $primary_items) ]; if (is_customize_preview() || is_admin()) { $future_data['config'] = apply_filters( 'blocksy:' . $panel_type . ':items-config', $this->read_config_for($single_item), $id ); } if ($args['require_options']) { $future_data['options'] = $this->get_options_for( $panel_type, $future_data ); } $items[] = $future_data; } if ($should_do_caching) { $this->items_cache[$panel_type] = $items; } return $items; } private function read_config_for($file_path) { $name = explode('-', basename($file_path)); $name = array_map('ucfirst', $name); $name = implode(' ', $name); $_extract_variables = ['config' => []]; if (is_readable($file_path . '/config.php')) { require $file_path . '/config.php'; foreach ($_extract_variables as $variable_name => $default_value) { if (isset($$variable_name)) { $_extract_variables[$variable_name] = $$variable_name; } } } $_extract_variables['config'] = array_merge( [ 'name' => $name, 'description' => '', 'typography_keys' => [], 'translation_keys' => [], 'devices' => ['desktop', 'mobile'], 'selective_refresh' => [], 'allowed_in' => [], 'excluded_from' => [], 'clone' => false, // border | drop 'shortcut_style' => 'drop', 'enabled' => true ], $_extract_variables['config'] ); return $_extract_variables['config']; } public function get_options_for($panel_type = 'header', $item = []) { if (! is_array($item)) { return []; } if (! isset($item['path'])) { return []; } return blocksy_get_options($item['path'] . '/options.php', [ 'panel_type' => $panel_type, 'prefix' => $this->get_option_id_for($panel_type, $item) . '_' ], false); } }