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));
 }
 function fetch_post($data)
 {
     if (is_numeric($data['id'])) {
         $post = get_post($data['id']);
     } elseif ($data['id'] === "fake_post") {
         $posts = get_posts(array('orderby' => 'rand', 'posts_per_page' => 1));
         if (!empty($posts[0])) {
             $post = $posts[0];
         } else {
             return $this->_out(new Upfront_JsonResponse_Error('Error'));
         }
     }
     if ($post) {
         if (!empty($data['filterContent'])) {
             $post->post_content = apply_filters('the_content', $post->post_content);
             $post->post_title = apply_filters('the_title', $post->post_title);
             $post->post_excerpt = apply_filters('the_excerpt', $post->post_excerpt);
         }
         if (!empty($data['withAuthor'])) {
             $post->author = $this->remove_private_user_fields(new WP_User($post->post_author));
         }
         if (!empty($data['withMeta'])) {
             $post->meta = $this->parse_single_meta(get_metadata('post', $post->ID));
         }
         $post->permalink = get_permalink($post->ID);
         $post->sticky = is_sticky($post->ID);
         $post->is_new = false;
         $this->_out(new Upfront_JsonResponse_Success($post));
     } else {
         if ($data['id'] === '0') {
             //New post
             $post_type = $data['post_type'] ? $data['post_type'] : 'post';
             $post = Upfront_PostModel::create($post_type, 'Please enter your new ' . $post_type . ' title here', 'Your ' . $post_type . ' content goes here. Have fun writing :)');
             if ($post_type == 'page') {
                 $post->post_content = 'Type your page content here. Feel free to add some elements from the left sidebar.';
             }
             $post->is_new = true;
             $post->sticky = false;
             $this->_out(new Upfront_JsonResponse_Success($post));
         }
     }
     $this->_out(new Upfront_JsonResponse_Error("Post not found."));
 }