public function bodyClass($classes) { if (!is_archive()) { $current_post = get_post(FLBuilderModel::get_post_id()); if ($current_post) { $post_has_ct = get_post_meta($current_post->ID, '_views_template', true); if ($post_has_ct) { $ct_has_beaver = get_post_meta($post_has_ct, '_fl_builder_enabled', true); if ($ct_has_beaver) { $classes[] = 'fl-builder'; } } } } return $classes; }
/** * Renders and caches the CSS for a builder layout. * * @since 1.0 * @return void */ public static function render_css() { // Delete the old file. FLBuilderModel::delete_asset_cache('css'); // Get info on the new file. $nodes = FLBuilderModel::get_categorized_nodes(); $global_settings = FLBuilderModel::get_global_settings(); $asset_info = FLBuilderModel::get_asset_info(); $post_id = FLBuilderModel::get_post_id(); $post = get_post($post_id); $compiled = array(); // Global css $css = file_get_contents(FL_BUILDER_DIR . '/css/fl-builder-layout.css'); // Global RTL css if (is_rtl()) { $css .= file_get_contents(FL_BUILDER_DIR . '/css/fl-builder-layout-rtl.css'); } // Responsive css if ($global_settings->responsive_enabled) { $css .= '@media (max-width: ' . $global_settings->medium_breakpoint . 'px) { '; $css .= file_get_contents(FL_BUILDER_DIR . '/css/fl-builder-layout-medium.css'); $css .= ' }'; $css .= '@media (max-width: ' . $global_settings->responsive_breakpoint . 'px) { '; $css .= file_get_contents(FL_BUILDER_DIR . '/css/fl-builder-layout-responsive.css'); if (!isset($global_settings->auto_spacing) || $global_settings->auto_spacing) { $css .= file_get_contents(FL_BUILDER_DIR . '/css/fl-builder-layout-auto-spacing.css'); } $css .= ' }'; } // Global row margins $css .= '.fl-row-content-wrap { margin: ' . $global_settings->row_margins . 'px; }'; // Global row padding $css .= '.fl-row-content-wrap { padding: ' . $global_settings->row_padding . 'px; }'; // Global row width $css .= '.fl-row-fixed-width { max-width: ' . $global_settings->row_width . 'px; }'; // Global module margins $css .= '.fl-module-content { margin: ' . $global_settings->module_margins . 'px; }'; // Loop through rows foreach ($nodes['rows'] as $row) { // Instance row css ob_start(); include FL_BUILDER_DIR . 'includes/row-css.php'; $css .= ob_get_clean(); // Instance row margins $css .= self::render_row_margins($row); // Instance row padding $css .= self::render_row_padding($row); } // Loop through the columns. foreach ($nodes['columns'] as $col) { // Instance column css ob_start(); include FL_BUILDER_DIR . 'includes/column-css.php'; $css .= ob_get_clean(); // Instance column margins $css .= self::render_column_margins($col); // Instance column padding $css .= self::render_column_padding($col); // Get the modules in this column. $modules = FLBuilderModel::get_modules($col); } // Loop through the modules. foreach ($nodes['modules'] as $module) { // Global module css $file = $module->dir . 'css/frontend.css'; $file_responsive = $module->dir . 'css/frontend.responsive.css'; // Only include global module css that hasn't been included yet. if (!in_array($module->settings->type, $compiled)) { // Add to the compiled array so we don't include it again. $compiled[] = $module->settings->type; // Get the standard module css. if (file_exists($file)) { $css .= file_get_contents($file); } // Get the responsive module css. if ($global_settings->responsive_enabled && file_exists($file_responsive)) { $css .= '@media (max-width: ' . $global_settings->responsive_breakpoint . 'px) { '; $css .= file_get_contents($file_responsive); $css .= ' }'; } } // Instance module css $file = $module->dir . 'includes/frontend.css.php'; $settings = $module->settings; $id = $module->node; if (file_exists($file)) { ob_start(); include $file; $css .= ob_get_clean(); } // Instance module margins $css .= self::render_module_margins($module); if (!isset($global_settings->auto_spacing) || $global_settings->auto_spacing) { $css .= self::render_responsive_module_margins($module); } } // Default page heading if ($post && !$global_settings->show_default_heading && ($post->post_type == 'page' || $post->post_type == 'fl-builder-template')) { $css .= $global_settings->default_heading_selector . ' { display:none; }'; } // Save the css if (!empty($css)) { $css = apply_filters('fl_builder_render_css', $css, $nodes, $global_settings); $css = preg_replace('!/\\*[^*]*\\*+([^/][^*]*\\*+)*/!', '', $css); $css = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $css); file_put_contents($asset_info['css'], $css); } }
/** * Runs the current AJAX action. * * @since 1.7 * @access private * @return void */ private static function call_action() { // Only run for logged in users. if (!is_user_logged_in()) { return; } // Get the $_POST data. $post_data = FLBuilderModel::get_post_data(); // Get the post ID. $post_id = FLBuilderModel::get_post_id(); // Make sure the user can edit this post. if ($post_id && !current_user_can('edit_post', $post_id)) { return; } // Get the action. if (!empty($_REQUEST['fl_action'])) { $action = $_REQUEST['fl_action']; } else { if (!empty($post_data['fl_action'])) { $action = $post_data['fl_action']; } else { return; } } // Make sure the action exists. if (!isset(self::$actions[$action])) { return; } // Get the action data. $action = self::$actions[$action]; $args = array(); // Build the args array. foreach ($action['args'] as $arg) { $args[] = isset($post_data[$arg]) ? $post_data[$arg] : null; } // Tell WordPress this is an AJAX request. define('DOING_AJAX', true); // Call the method. $result = call_user_func_array($action['method'], $args); // JSON encode the result. echo json_encode($result); // Complete the request. die; }
/** * Runs the current AJAX action. * * @since 1.7 * @access private * @return void */ private static function call_action() { // Only run for logged in users. if (!is_user_logged_in()) { return; } // Verify the AJAX nonce. if (!self::verify_nonce()) { return; } // Get the $_POST data. $post_data = FLBuilderModel::get_post_data(); // Get the post ID. $post_id = FLBuilderModel::get_post_id(); // Make sure we have a post ID. if (!$post_id) { return; } // Make sure the user can edit this post. if (!current_user_can('edit_post', $post_id)) { return; } // Get the action. if (!empty($_REQUEST['fl_action'])) { $action = $_REQUEST['fl_action']; } else { if (!empty($post_data['fl_action'])) { $action = $post_data['fl_action']; } else { return; } } // Make sure the action exists. if (!isset(self::$actions[$action])) { return; } // Get the action data. $action = self::$actions[$action]; $args = array(); $keys_args = array(); // Build the args array. foreach ($action['args'] as $arg) { $args[] = $keys_args[$arg] = isset($post_data[$arg]) ? $post_data[$arg] : null; } // Tell WordPress this is an AJAX request. define('DOING_AJAX', true); // Allow developers to hook before the action runs. do_action('fl_ajax_before_' . $action['action'], $keys_args); // Call the action and allow developers to filter the result. $result = apply_filters('fl_ajax_' . $action['action'], call_user_func_array($action['method'], $args), $keys_args); // Allow developers to hook after the action runs. do_action('fl_ajax_after_' . $action['action'], $keys_args); // JSON encode the result. echo json_encode($result); // Complete the request. die; }