function create_layout() { $layout_ids = $_POST['data']; $stylesheet = $_POST['stylesheet']; $layout_slug = !empty($_POST['layout_slug']) ? $_POST['layout_slug'] : false; $load_dev = $_POST['load_dev'] == 1 ? true : false; $post_type = isset($_POST['new_post']) ? $_POST['new_post'] : false; $parsed = false; if (empty($layout_ids)) { $this->_out(new Upfront_JsonResponse_Error("No such layout")); } upfront_switch_stylesheet($stylesheet); if (is_string($layout_ids)) { $layout_ids = Upfront_EntityResolver::ids_from_url($layout_ids); $parsed = true; } // Start by nulling out the layout $layout = false; // Check if we're to inherit a layout from a page template if (!empty($_POST['use_existing'])) { // Resolve existing page template to a layout $tpl = preg_replace('/page_tpl-(.*)\\.php/', '\\1', $_POST['use_existing']); $theme = Upfront_ChildTheme::get_instance(); $settings = $theme->get_theme_settings(); if (!empty($tpl) && !empty($settings)) { $required_pages = $settings->get('required_pages'); if (!empty($required_pages)) { $required_pages = json_decode($required_pages, true); } $specificity = !empty($required_pages[$tpl]['layout']) ? $required_pages[$tpl]['layout'] : false; if (!empty($specificity)) { $template_layout = Upfront_Layout::from_entity_ids(array('specificity' => $specificity)); if (!empty($template_layout) && !$template_layout->is_empty()) { $layout = $template_layout; $layout->set('layout', $layout_ids); $layout->set('current_layout', $layout_ids['specificity']); } } } } // If we still don't have a template set, make one up if (empty($layout)) { $layout = Upfront_Layout::create_layout($layout_ids, $layout_slug); } global $post, $upfront_ajax_query; if (!$upfront_ajax_query) { $upfront_ajax_query = false; } if ($post_type) { $post = Upfront_PostModel::create($post_type); // set new layout IDS based on the created post ID $cascade = array('type' => 'single', 'item' => $post_type, 'specificity' => $post->ID); $layout_ids = Upfront_EntityResolver::get_entity_ids($cascade); } else { $post = $post; if ($post && is_singular()) { $layout_ids = Upfront_EntityResolver::get_entity_ids(); } else { if ($_POST['post_id']) { $posts = get_posts(array('include' => $_POST['post_id'], 'suppress_filters' => false)); if (sizeof($posts)) { $post = $posts[0]; } } } } $response = array('post' => $post, 'layout' => $layout->to_php(), 'cascade' => $layout_ids, 'query' => $upfront_ajax_query); $this->_out(new Upfront_JsonResponse_Success($response)); }
public static function list_saved_layout($storage_key = '') { global $wpdb; self::set_storage_key($storage_key); $storage_key = self::get_storage_key(); $layouts = $wpdb->get_results("SELECT * FROM {$wpdb->options} WHERE ( `option_name` LIKE '{$storage_key}-single%' OR `option_name` LIKE '{$storage_key}-archive%' )"); $return = array(); foreach ($layouts as $layout) { if (preg_match("/^{$storage_key}-([^-]+)(-([^-]+)|)(-([^-]+)|)\$/", $layout->option_name, $match)) { $ids = array(); if (!empty($match[3]) && !empty($match[5])) { $ids['specificity'] = $match[1] . '-' . $match[3] . '-' . $match[5]; } if ($match[3]) { $ids['item'] = $match[1] . '-' . $match[3]; } $ids['type'] = $match[1]; $layout_id = !empty($ids['specificity']) ? $ids['specificity'] : ($ids['item'] ? $ids['item'] : $ids['type']); $return[$layout_id] = array('layout' => $ids, 'label' => Upfront_EntityResolver::layout_to_name($ids)); if ($ids['type'] == 'single') { $query = new WP_Query(array('post_type' => $post_type->name, 'post_status' => 'publish')); $query->parse_query(); $post = $query->next_post(); $return[$layout_id]['latest_post'] = $post->ID; } } } return $return; }
/** * Get AJAX URL with layout entity id added to arguments */ function upfront_ajax_url($action, $args = '') { $args = wp_parse_args($args); $args['action'] = $action; $args['layout'] = Upfront_EntityResolver::get_entity_ids(); if (current_user_can('switch_themes') && !empty($_GET['dev'])) { $args['load_dev'] = 1; } return admin_url('admin-ajax.php?' . http_build_query($args)); }
<?php the_post(); $layout = Upfront_Output::get_layout(Upfront_EntityResolver::get_entity_ids()); get_header(); echo $layout->apply_layout(); get_footer();
public function get_entity_ids_value() { $entities = array(); $entities = Upfront_Layout::get_parsed_cascade(); if (empty($entities)) { $entities = Upfront_EntityResolver::get_entity_ids(); } $entities['storage_key'] = Upfront_Model::get_storage_key(); return base64_encode(json_encode($entities)); }
function inject_upfront_dependencies() { if (!Upfront_Permissions::current(Upfront_Permissions::BOOT)) { return false; } // Do not inject for users that can't use this $url = self::get_root_url(); //Boot Edit Mode if the querystring contains the editmode param if (isset($_GET['editmode'])) { echo upfront_boot_editor_trigger(); } $storage_key = apply_filters('upfront-data-storage-key', Upfront_Layout::STORAGE_KEY); $save_storage_key = $storage_key; $is_ssl = is_ssl() ? '&ssl=1' : ''; if (isset($_GET['dev']) && current_user_can('switch_themes') && apply_filters('upfront-enable-dev-saving', true)) { $save_storage_key .= '_dev'; } $script_urls = array("{$url}/scripts/require.js", admin_url('admin-ajax.php?action=upfront_load_main' . $is_ssl), "{$url}/scripts/main.js"); $deps = Upfront_CoreDependencies_Registry::get_instance(); foreach ($script_urls as $url) { $deps->add_script($url); } echo '<script type="text/javascript"> var _upfront_post_data=' . json_encode(array('layout' => Upfront_EntityResolver::get_entity_ids(), 'post_id' => is_singular() ? apply_filters('upfront-data-post_id', get_the_ID()) : false)) . '; var _upfront_storage_key = "' . $storage_key . '"; var _upfront_save_storage_key = "' . $save_storage_key . '"; var _upfront_stylesheet = "' . get_stylesheet() . '"; var _upfront_debug_mode = ' . (int) isset($_GET['debug']) . '; var _upfront_please_hold_on = ' . json_encode(__('Please, hold on for just a little bit more', 'upfront')) . '; </script>'; echo <<<EOAdditivemarkup \t<div id="sidebar-ui" class="upfront-ui"></div> \t<div id="settings" style="display:none"></div> \t<div id="contextmenu" style="display:none"></div> EOAdditivemarkup; do_action('upfront-core-inject_dependencies'); }