Fatal error: Call to a member function css() on a non-object in

  • Unknown's avatar

    please see the line in bold and advise accordingly

    <?php

    /**

    * This class handles all functionality for the page builder

    *

    * @category Pagebuilder

    * @package ZnFramework

    * @author Balasa Sorin Stefan ( Zauan )

    * @copyright Copyright (c) Balasa Sorin Stefan

    * @link http://themeforest.net/user/zauan

    */

    define( ‘PB_PATH’, dirname(__FILE__) );

    class ZnPageBuilder

    {

    /**

    * Contains the editor state ( true – the editor is enabled; false – the editor is disabled )

    *

    * @property $draft_layout_data

    * @type bool

    * @public

    */

    public $is_active_editor = false;

    /**

    * Holds a refference of all smart areas that needs to be rendered in the current page

    * @var array

    */

    public $registered_smart_areas = array();

    /**

    * Contains the pagebuilder state ( true – the pagebuilder is enabled for this page; false – the editor is disabled for this page )

    *

    * @property $draft_layout_data

    * @type bool

    * @public

    */

    public $is_active_pagebuilder = false;

    /**

    * Contains the current page id or the id for the page we are editing

    *

    * @property $post_id

    * @type bool || string

    * @public

    */

    static public $post_id = false;

    /**

    * Contains the current page layout based on the saved values

    *

    * @property $post_id

    * @type bool || string

    * @public

    */

    public $current_page_layout = array();

    /**

    * Contains all available pagebuilder elements

    *

    * @property $all_available_elements

    * @type array

    * @public

    */

    var $all_available_elements = array();

    /**

    * Contains all instantiated elements

    *

    * @property $post_id

    * @type array

    * @public

    */

    var $loaded_modules = array();

    /**

    * Hold information about modules added on the fly

    * @var array

    */

    var $current_modules = array();

    /**

    * Contains all instantiated modules with data

    *

    * @property $loaded_modules

    * @type array()

    * @protected

    */

    public $instantiated_modules = array();

    public $editor;

    /**

    * Constructor

    *

    * @access public

    */

    function __construct()

    {

    // This is the backend templates system

    include( PB_PATH .’/class-templates.php’ );

    $this->scripts_manager = include( PB_PATH .’/scripts-manager.php’ );

    // This is the frontened templates system

    include( PB_PATH .’/class-page-builder-templates.php’ );

    include( PB_PATH .’/class-page-builder-custom-code.php’ );

    include( ‘class-elements-render.php’ );

    include( PB_PATH .’/class-page-builder-ajax.php’ );

    include( FW_PATH .’/pagebuilder/class-page-builder-admin.php’ );

    $this->templates = new ZnTemplateSystem();

    $this->codes = new ZnPbCustomCode();

    if( is_admin() ) {

    new ZnPageBuilderAdmin();

    add_action( ‘activated_plugin’, array(&$this, ‘refresh_pb_data’) );

    add_action( ‘deactivated_plugin’, array(&$this, ‘zn_deactivate_plugin’) );

    add_action( ‘zn_theme_updated’, array(&$this, ‘refresh_pb_data’) );

    add_action( ‘init’, array(&$this, ‘check_plugin_deactivation’) );

    }

    add_action( ‘wp’ , array(&$this, ‘init’) );

    // Add the “Edit with pagebuilder” to the admin bar

    add_action( ‘admin_bar_menu’, array(&$this, ‘zn_add_admin_bar_edit’), 999 );

    // Check if this is a pagebuilder enabled page and load our editor/renderer

    add_action( ‘template_include’ , array(&$this, ‘load_pb_template’), 999 );

    // Only if we have the pagebuilder enabled

    add_action( ‘zn_pb_content’, array(&$this, ‘znpb_content’) );

    add_action( ‘wp_enqueue_scripts’ , array(&$this, ‘zn_load_styles’), 9 );

    /**

    * Extend the search query to include the Page Builder elements

    * @since v3.6.7

    */

    add_filter(‘pre_get_posts’, array(&$this, ‘updateSearchQuery’));

    /**

    * Save the PB data as a post revision

    * @since v4.0.12

    */

    add_action( ‘znpb_save_page’, array(&$this, ‘save_post_revision’) );

    add_action( ‘wp_restore_post_revision’, array(&$this, ‘restore_post_revision’), 10, 2 );

    }

    /**

    * Restorre the PB data as a post revision

    * @since v4.0.12

    */

    function restore_post_revision( $post_id, $revision_id ){

    $post = get_post( $post_id );

    $revision = get_post( $revision_id );

    $pb_data = get_metadata( ‘post’, $revision->ID, ‘zn_page_builder_els’, true );

    if ( false !== $pb_data )

    update_post_meta( $post_id, ‘zn_page_builder_els’, $pb_data );

    else

    delete_post_meta( $post_id, ‘zn_page_builder_els’ );

    }

    /**

    * Save the PB data as a post revision

    * @since v4.0.12

    */

    public function save_post_revision(){

    add_action( ‘save_post’, array(&$this, ‘update_post_revision’), 10, 2 );

    add_action( ‘wp_revisions_to_keep’, array(&$this, ‘wp_revisions_to_keep’), 1, 2 );

    add_filter( ‘wp_save_post_revision_check_for_changes’, array ( &$this, ‘force_save_revision’ ) );

    wp_save_post_revision( zn_get_the_id() );

    }

    /**

    * Limit the post revisions to 5 if they are enabled

    * @since v4.0.12

    */

    public function wp_revisions_to_keep( $num, $post ){

    if( $num === -1 ){

    $num = 5;

    }

    return $num;

    }

    /**

    * Disable the revision change check for PB content page save

    * @since v4.0.12

    */

    public function force_save_revision(){

    return false;

    }

    /**

    * Add the pagebuilder content to a post revision upon saving

    * @since v4.0.12

    */

    public function update_post_revision( $post_id, $post ) {

    $parent_id = wp_is_post_revision( $post_id );

    if ( $parent_id ) {

    $parent = get_post( $parent_id );

    $pb_data = get_post_meta( $parent->ID, ‘zn_page_builder_els’, true );

    if ( false !== $pb_data ){

    add_metadata( ‘post’, $post_id, ‘zn_page_builder_els’, $pb_data );

    }

    }

    }

    /**

    * Updates the search where query to include the meta fields

    *

    * @param $query

    * @return mixed

    */

    public function zn_search_pb_join( $join ) {

    global $wpdb;

    $join .= ” LEFT JOIN $wpdb->postmeta AS pb_meta ON $wpdb->posts.ID = pb_meta.post_id “;

    remove_filter( ‘posts_join’, array(&$this, ‘zn_search_pb_join’), 99 );

    return $join;

    }

    /**

    * Updates the search SQL to include pagebuilder data

    *

    * @param $query

    * @return mixed

    */

    public function zn_search_pb( $search, $query ){

    global $wpdb, $wp;

    $search = preg_replace_callback(

    “/$wpdb->posts.post_title LIKE ‘%(.*?)%’/”,

    array(&$this, ‘zn_search_callback’),

    $search

    );

    remove_filter( ‘posts_search’, array(&$this, ‘zn_search_pb’), 99 );

    return $search;

    }

    public function zn_search_callback( $matches ){

    global $wpdb, $wp;

    return “{$matches[‘0’]}) OR (pb_meta.meta_value LIKE ‘%{$matches[‘1’]}%'”;

    }

    /**

    * Updates the search query to include the Page Builder elements

    *

    * @param $query

    * @return mixed

    */

    public function updateSearchQuery($query){

    $canSearch = ( ! is_admin() && $query->is_main_query() && is_search() && !empty($query));

    if($canSearch){

    add_filter( ‘posts_search’, array(&$this, ‘zn_search_pb’), 99, 2);

    add_filter( ‘posts_join’, array(&$this, ‘zn_search_pb_join’), 99, 1);

    add_filter( ‘posts_distinct_request’, array(&$this, ‘search_distinct’), 99, 1);

    }

    return $query;

    }

    /**

    * Updates the search to return only distinct results

    *

    * @param $query

    * @return mixed

    */

    public function search_distinct( $distinct ) {

    remove_filter( ‘posts_distinct_request’, array(&$this, ‘search_distinct’), 99);

    return “DISTINCT”;

    }

    /**

    * GETS current post id

    * SETS : $is_active_editor , $is_active_pagebuilder , $current_post_id

    *

    * @access private

    */

    public function get_post_id() {

    if( !empty( self::$post_id ) ) { return self::$post_id; }

    global $post;

    if(isset($_POST[‘post_id’])) {

    return self::$post_id = $_POST[‘post_id’];

    }

    elseif( is_singular() && !empty($post) ) {

    return self::$post_id = $post->ID;

    }

    elseif( is_archive() ){

    // Check woocommerce archive

    if( znfw_is_woocommerce_active() ){

    // Woocommerce archive pages

    if( is_post_type_archive( ‘product’ ) || is_page( wc_get_page_id( ‘shop’ ) ) ){

    return wc_get_page_id( ‘shop’ );

    }

    }

    else{

    return false;

    }

    }

    elseif( is_home() ){

    // This is the Blog archive page. We need to check if a custom page is used or not

    return get_option( ‘page_for_posts’ );

    }

    else {

    return false;

    }

    }

    function init() {

    // CHECK IF WE ARE ON EDITOR SCREEN OR NOT

    $this->set_editor_state();

    if ( $this->is_active_pagebuilder ) {

    $this->set_page_layout();

    $this->get_all_modules();

    $this->load_page_modules();

    }

    // LOAD STUFF WHEN WE HAVE THE EDITOR ACTIVE

    if ( $this->is_active_editor ) {

    $this->activate_pagebuilder_editor();

    }

    if ( ZN()->is_debug() ){

    $this->refresh_pb_data();

    }

    do_action( ‘znpb_init’, $this );

    }

    /**

    * Returns the pagebuilder content data as a string

    *

    * @access public

    * @var $content string

    * @return string

    */

    public function get_pb_content_data( $content ){

    $flat = ”;

    $skipped = array(

    ‘object’,

    ‘uid’,

    ‘width’,

    );

    if ( empty( $content ) || ! is_array( $content ) ) {

    return $flat;

    }

    if ( is_array( $content ) ) {

    foreach ( $content as $key => $value ) {

    if( in_array( $key, $skipped, true ) ){

    continue;

    }

    if ( is_array( $value ) ) {

    $flat .= $this->get_pb_content_data( $value );

    }

    else {

    $flat .= ‘ ‘ . $value;

    }

    }

    }

    else {

    return ‘ ‘ . $content;

    }

    return $flat;

    }

    /**

    * Check if the current page has the pageuilder editor enabled

    *

    * @access public

    */

    private function set_editor_state() {

    $post_id = $this->get_post_id();

    // CHECKS IF THE PAGEBUILDER EDITOR IS ACTIVATED

    if ( current_user_can( ‘edit_post’ , $post_id ) && ( isset( $_GET[‘zn_pb_edit’] ) || defined( ‘ZN_PB_AJAX’ ) ) ) {

    if( isset( $_GET[‘zn_pb_edit’] ) ){

    update_post_meta( $post_id, ‘zn_page_builder_status’, ‘enabled’ );

    }

    $this->is_active_editor = true;

    $this->is_active_pagebuilder = true;

    }

    // CHECKS IF THE PAGEBUILDER IS ACTIVE FOR THIS PAGE

    elseif( get_post_meta( $post_id, ‘zn_page_builder_status’, true ) == ‘enabled’ ) {

    $this->is_active_pagebuilder = true;

    }

    }

    public function change_editor_state( $state = true ){

    $this->is_active_editor = $state;

    }

    function activate_pagebuilder_editor(){

    include( ‘class-page-builder-editor.php’ );

    $this->editor = new ZnPageBuilderEditor();

    }

    /**

    * Add the edit with page builder button in the admin bar

    *

    * @param $wp_admin_bar object

    * @access public

    */

    function zn_add_admin_bar_edit( $wp_admin_bar ) {

    $post_id = $this->get_post_id();

    if ( ! empty( $post_id ) ) {

    if( ! current_user_can( ‘edit_post’ , $post_id ) ){

    return;

    }

    if ( $this->is_active_pagebuilder ) {

    if( $this->is_active_editor ){

    $args = array(

    ‘id’ => ‘zn_preview_button’,

    ‘title’ => ‘View page’,

    ‘href’ => esc_url( get_permalink( $post_id ) ),

    ‘meta’ => array( ‘class’ => ‘zn_preview_page_button’ )

    );

    $wp_admin_bar->add_node( $args );

    }

    else{

    $args = array(

    ‘id’ => ‘zn_edit_button’,

    ‘title’ => ‘Edit with page builder’,

    ‘href’ => $this->get_edit_url( $post_id ),

    ‘meta’ => array( ‘class’ => ‘zn_edit_button’ )

    );

    $wp_admin_bar->add_node( $args );

    }

    }

    }

    }

    /**

    * Returns the edit post link

    *

    * @access public

    * @param $post_id string

    * @return string

    */

    function get_edit_url( $post_id = ” ){

    $the_ID = ( strlen( $post_id ) > 0 ? $post_id : get_the_ID() );

    $preview_link = get_permalink( $the_ID );

    $preview_link = apply_filters(‘preview_post_link’, $preview_link);

    // Adds the zn_pb_edit=true to the url

    return esc_url( add_query_arg( ‘zn_pb_edit’, ‘true’, $preview_link ));

    }

    /**

    * Set a transient so we can refresh the PB data on the next page loading

    * When a plugin is deactivated, it’s classes are still availbale

    *

    * @access public

    */

    function zn_deactivate_plugin(){

    set_transient( ‘zn_plugin_deactivated’, true, 12 * HOUR_IN_SECONDS );

    }

    /**

    * Refresh pb data when a plugin is deactivated

    *

    * @access public

    */

    function check_plugin_deactivation(){

    if( get_transient( ‘zn_plugin_deactivated’ ) ){

    $this->refresh_pb_data();

    delete_transient( ‘zn_plugin_deactivated’ );

    }

    }

    /**

    * Refreshes the PB data and combined CSS files

    *

    * @access public

    */

    function refresh_pb_data(){

    $this->get_all_modules(true);

    $this->compile_css(true);

    $this->scripts_manager->delete_all_cache();

    }

    function set_page_layout(){

    $post_id = $this->get_post_id();

    // delete_post_meta( $post_id, ‘zn_page_builder_els’ );

    $layout_data = get_metadata(‘post’, $post_id, ‘zn_page_builder_els’, true);

    $post = get_post($post_id);

    if( ! is_array( $layout_data ) ) {

    if( ! $sections = apply_filters( ‘znpb_empty_page_layout’, $layout_data, $post, $post_id ) ){

    // We will add the new elements here

    $textbox = $this->add_module_to_layout( ‘ZnTextBox’, array( ‘title’ => $post->post_title, ‘desc’ => $post->post_content ) );

    $column = $this->add_module_to_layout( ‘ZnColumn’, array() , array( $textbox ), ‘col-sm-12’ );

    $sections = array( $this->add_module_to_layout( ‘ZnSection’, array() , array( $column ), ‘col-sm-12’ ) );

    }

    $this->current_page_layout = $sections;

    }

    else{

    $this->current_page_layout = $layout_data;

    }

    }

    /**

    * Creates a module array

    *

    * @access public

    * @param $module_object string

    * @param $options array

    * @param $content array

    * @param $width string

    * @return array

    */

    function add_module_to_layout( $module_object = null, $options = array(), $content = array(), $width = null ){

    $module = array();

    $module[‘object’] = $module_object;

    $module[‘options’] = $options;

    $module[‘content’] = $content;

    $module[‘width’] = $width;

    $module[‘uid’] = zn_uid(‘eluid’);

    $this->added_modules[] = $module;

    return $module;

    }

    /**

    * POPULATES THE $current_elements & $elements variables

    *

    * @access public

    * @return void

    */

    function load_page_modules( $layout = false ) {

    $current_layout = $layout ? $layout : $this->current_page_layout;

    // FIRE UP ALL THE ELEMENTS

    if ( is_array( $current_layout ) ) {

    foreach ( $current_layout as $element ) {

    $this->load_element( $element );

    }

    }

    }

    /**

    * LOADS A SINGLE PAGEBUILDER ELEMENT AND SET”S THE DEPENDENCIES

    *

    * @access public

    * @param $element array

    * @return array

    */

    function load_element( $element ) {

    // Check to see if this is a valid module

    if ( ! empty( $element[‘object’] ) && empty( $this->all_available_elements[ $element[‘object’] ] ) ) { return false; }

    // Load the module file

    if ( file_exists( $this->all_available_elements[ $element[‘object’] ][‘file’] ) ) {

    include_once( $this->all_available_elements[ $element[‘object’] ][‘file’] );

    if ( class_exists($element[‘object’]) ) {

    $element_class = new $element[‘object’]();

    $this->loaded_modules[ $element[‘object’] ] = $element_class;

    }

    // ADD THE ELEMENT TO THE $current_elements VARIABLE

    $element_class->data = $element;

    // LOAD THE REQUIRED JS FILES

    if( method_exists( $element_class, ‘scripts’) ) {

    add_action( ‘wp_enqueue_scripts’ , array(&$element_class, ‘scripts’) );

    }

    // LOAD INLINE JS

    if ( $element_class->js() ) {

    ZN()->add_inline_js( $element_class->js() );

    }

    // LOAD INLINE CSS

    $css = $element_class->css();

    if ( $css ){

    ZN()->add_inline_css( $css );

    }

    //@wpk: Fixes Fatal error (Cannot unset string offsets) when $element[‘content’] = ‘false’

    if( !empty( $element[‘content’] ) && (‘false’ != $element[‘content’]) ) {

    if ( !empty( $element[‘content’][‘has_multiple’] ) ) {

    if(isset($element[‘content’][‘has_multiple’])){

    unset( $element[‘content’][‘has_multiple’] );

    }

    foreach ( $element[‘content’] as $actual_content ) {

    if( is_array( $actual_content ) ){

    foreach ( $actual_content as $value) {

    $this->load_element( $value );

    }

    }

    }

    }

    else {

    foreach ($element[‘content’] as $key => $value) {

    $this->load_element( $value );

    }

    }

    }

    // This is just for the Pagebuilder Template element

    if( $element[‘object’] === ‘ZnPbCustomTempalte’ ){

    $template = $element_class->opt( ‘pb_template’ );

    if( ! empty( $template ) ) {

    $pb_data = get_post_meta( $template, ‘zn_page_builder_els’, true );

    if( is_array( $pb_data ) ){

    foreach ( $pb_data as $key => $value ) {

    $this->load_element( $value );

    }

    }

    }

    }

    if ( empty( $element[‘uid’] ) ) { $element[‘uid’] = zn_uid(‘eluid’); }

    $this->instantiated_modules[ $element[‘uid’] ] = $element_class;

    return $element_class;

    }

    else{

    return false;

    }

    }

    /**

    * HOOK INTO THE zn_pb_content ACTION FROM loop-page-builder.php

    *

    * @access public

    * @return void

    */

    function znpb_content() {

    // Render the layout.

    ob_start();

    $this->zn_render_elements( $this->current_page_layout );

    $html = ob_get_clean();

    // Process shortcodes.

    ob_start();

    echo do_shortcode($html);

    $html = ob_get_clean();

    echo ‘

    ‘;

    echo $html;

    echo ‘

    ‘;

    }

    /**

    * CHECKS TO SEE IF WE NEED TO LOAD THE PAGE BUILDER TEMPLATE

    *

    * @access public

    * @return void

    * @param $template string

    */

    function load_pb_template( $template ) {

    // CHECK IF WE HAVE A PAGEBUILDER ENABLED PAGE/POST

    if( $this->is_active_pagebuilder && ! post_password_required() ) {

    if ( ! $template = locate_template( array(‘template_helpers/loop-page_builder.php’ ) ) ) {

    $template = dirname( __FILE__ ) .’/loop-page_builder.php’;

    }

    }

    return $template;

    }

    /* LOADS THE COMPILED CSS */

    function zn_load_styles(){

    if( $this->is_active_editor ){

    $this->compile_css();

    global $wp_upload_dir;

    $zn_uploads_url = trailingslashit( $wp_upload_dir[‘baseurl’] );

    $url = $zn_uploads_url . ‘zn_pb_css.css’;

    $url = set_url_scheme( $url );

    wp_enqueue_style( ‘zn_pb_css’, $url );

    }

    else{

    $this->scripts_manager->enqueue_cached_assets();

    }

    }

    /* COMPILES THE CSS FROM ALL ELEMENTS */

    function compile_css( $recompile = false ) {

    if( false == get_option( ‘zn_css_compiled’ ) || $recompile ) {

    global $wp_upload_dir;

    $zn_uploads_path = trailingslashit( $wp_upload_dir[‘basedir’] );

    $css = false;

    foreach( $this->all_available_elements as $element ) {

    // Check if the style.css file exists

    if ( file_exists( $element[‘path’].’/style.css’) ) {

    $css .= file_get_contents( $element[‘path’].’/style.css’ );

    }

    // Check to see if we have an style.php file

    if( file_exists( $element[‘path’].’/style.php’) ){

    ob_start();

    include( $element[‘path’].’/style.php’ );

    $css .= ob_get_clean();

    }

    }

    $css_code = apply_filters( ‘zn_css’, zn_minimify( $css ) );

    file_put_contents( $zn_uploads_path . ‘zn_pb_css.css’, $css_code);

    add_option(‘zn_css_compiled’,true);

    }

    }

    /**

    * Returns an array containing all pagebuilder elements that are available

    *

    * @access public

    * @param $reload_elements bool

    * @return array

    */

    public function get_all_modules( $reload_elements = false ) {

    // Check if a transient is set

    if ( false === $reload_elements ) {

    // Check to see if the elements were already loaded

    if( ! empty( $this->all_available_elements ) ) {

    return $this->all_available_elements;

    }

    elseif ( ( $elements = get_transient( ‘zn_pb_elements’ ) ) ) {

    return $this->all_available_elements = $elements;

    }

    }

    $dirs = $this->zn_get_elements_dirs();

    $elements = array();

    foreach( $dirs as $entry ) {

    if( ! file_exists( $entry[‘path’] ) ){

    continue;

    }

    $elements_files_obj = new RecursiveIteratorIterator(

    new RecursiveDirectoryIterator( $entry[‘path’],

    RecursiveIteratorIterator::CHILD_FIRST )

    );

    $elements_files_obj->setMaxDepth ( 2 );

    $default_headers = array(

    ‘name’ => ‘Name’,

    ‘description’ => ‘Description’,

    ‘class’ => ‘Class’,

    ‘category’ => ‘Category’, // Full width elements , Content , Media , WooCommerce

    ‘level’ => ‘Level’,

    ‘keywords’ => ‘Keywords’,

    ‘unlimited_styles’ => ‘Styles’,

    ‘flexible’ => ‘Flexible’,

    ‘dependency_class’ => ‘Dependency_class’,

    ‘scripts’ => ‘Scripts’,

    ‘style’ => ‘Style’,

    ‘has_multiple’ => ‘Multiple’,

    ‘legacy’ => ‘Legacy’,

    );

    foreach( $elements_files_obj as $filename => $fileobject ) {

    if ( ‘php’ != pathinfo( $fileobject->getFilename(), PATHINFO_EXTENSION ) )

    continue;

    $headers = get_file_data( $filename, $default_headers );

    if ( !$headers[‘class’] )

    continue;

    // CHECK IF WE HAVE A DEPENDENCY NOT INSTALLED

    if ( !empty( $headers[‘dependency_class’] ) && !class_exists( $headers[‘dependency_class’] ) ) {

    continue;

    }

    $path = $fileobject->getPath();

    $filename = str_replace(‘\’, ‘/’, $filename);

    $url = trailingslashit($entry[‘url’]) .basename($path);

    $elements[ $headers[‘class’] ] = array (

    ‘name’ => $headers[‘name’],

    ‘class’ => $headers[‘class’],

    ‘category’ => $headers[‘category’],

    ‘path’ => $path,

    ‘scripts’ => $headers[‘scripts’],

    ‘style’ => $headers[‘style’],

    ‘url’ => $url,

    ‘file’ => $filename,

    ‘flexible’ => $headers[‘flexible’],

    ‘level’ => $headers[‘level’],

    ‘unlimited_styles’ => $headers[‘unlimited_styles’],

    ‘dependency_class’ => $headers[‘dependency_class’],

    ‘has_multiple’ => $headers[‘has_multiple’],

    ‘legacy’ => $headers[‘legacy’],

    ‘keywords’ => $headers[‘keywords’],

    ‘description’ => $headers[‘description’],

    ‘icon’ => ( is_file ( $path .’/icon.png’ ) ) ? $url.’/icon.png’ : FW_URL .’/pagebuilder/assets/img/default_icon.png’,

    );

    }

    }

    set_transient( ‘zn_pb_elements’, $elements, WEEK_IN_SECONDS );

    return $this->all_available_elements = $elements;

    }

    /**

    * Returns an array containing WordPress widgets data.

    *

    * @since 1.0

    * @return array

    */

    function get_all_widgets(){

    global $wp_widget_factory;

    $widgets = array();

    foreach($wp_widget_factory->widgets as $class => $widget) {

    $widget->class = $class;

    $widgets[$widget->name] = $widget;

    }

    ksort($widgets);

    return $widgets;

    }

    /**

    * Returns a filtered list of pagebuilder element locations

    *

    * Can be filtered by plugins to add new elements

    */

    function zn_get_elements_dirs() {

    $dirs = array();

    //@since 4.0.12: Allow page builder elements to be added from plugins as well

    // theme

    $dirs[] = array(

    ‘url’ => get_template_directory_uri() .’/pagebuilder/elements’,

    ‘path’ => get_template_directory() .’/pagebuilder/elements’,

    );

    // child

    $dirs[] = array(

    ‘url’ => get_stylesheet_directory_uri() .’/pagebuilder/elements’,

    ‘path’ => get_stylesheet_directory() .’/pagebuilder/elements’,

    );

    return apply_filters( ‘zn_pb_dirs’, $dirs );

    }

    function zn_render_content( $elements ){

    if ( !empty( $elements[‘has_multiple’] ) ) {

    unset( $elements[‘has_multiple’] );

    foreach ( $elements as $key => $value ) {

    $this->zn_render_elements( $value );

    }

    }

    else {

    $this->zn_render_elements( $elements );

    }

    }

    /**

    * This function will render the given content without the ability to edit it

    * @return [type] [description]

    */

    function zn_render_uneditable_content( $elements, $area_id = false ){

    $pbstate = $this->is_active_editor;

    $html = ”;

    if( $pbstate ){

    // Set editor to disabled

    $this->is_active_editor = false;

    // Show an ediy smart area link

    if( $area_id ){

    $html .= ‘

    ‘;

    $edit_url = get_permalink( $area_id );

    $edit_url = apply_filters(‘preview_post_link’, $edit_url);

    // Adds the zn_pb_edit=true to the url

    $edit_url = esc_url( add_query_arg( ‘zn_pb_edit’, ‘true’, $edit_url ));

    $html .= ‘‘.__( ‘Edit smart area with pagebuilder’, ‘zn_framework’ ).’‘;

    }

    }

    // Render the layout.

    ob_start();

    $this->zn_render_content( $elements );

    $html .= ob_get_clean();

    if( $pbstate && $area_id ){

    $html .= ‘

    ‘;

    }

    // Process shortcodes.

    echo do_shortcode($html);

    $this->is_active_editor = $pbstate;

    }

    function make_text_editable( $content = ”, $option_id = ” ){

    if( ! $this->is_active_editor ){

    return $content;

    }

    $unique_id = zn_uid( ‘zneda_’ );

    $output = ‘

    ‘;

    // Output the content

    $output .= $content;

    $output .= ‘

    ‘;

    return $output;

    }

    function wraper_end( $tag = ‘div’ ){

    return ‘</’.$tag.’>’;

    }

    /**

    * Render the page builder elements

    *

    * @access public

    * @param $elements array

    * @param $reload bool

    */

    function zn_render_elements( $elements, $reload = false ) {

    if ( !is_array( $elements ) ) { return; }

    global $has_style , $zn_config;

    // CHECK IF THIS IS AN AJAX CALL ( DOING_AJAX )

    $echo = defined( ‘ZN_PB_AJAX’ ) ? true : false;

    foreach ( $elements as $element ) {

    // CHECK TO SEE IF THE ELEMENT WAS ALREADY INSTANTIATED

    if( !empty( $element[‘uid’] ) && !empty( $this->instantiated_modules[ $element[‘uid’] ] ) && !$reload ) {

    $el = $this->instantiated_modules[ $element[‘uid’] ];

    }

    else{

    // LOAD THE ELEMENT IN CASE IT IS NOT ALREADY LOADED

    $el = $this->load_element( $element );

    }

    // If the element was deleted or changed continue

    if ( empty( $this->all_available_elements[ $element[‘object’] ] ) ) { continue; }

    // Don’t run the function multiple times

    $css = $el->css();

    // CHECK IF WE NEED TO RENDER THE EDITOR EXTRA CONTENT OR JUST THE ELEMENT

    if ( $this->is_active_editor ) {

    // Add the element to the elements array

    $this->current_modules[$element[‘uid’]] = $element;

    // Put the element info – only needed in active editor

    $el->info = $this->all_available_elements[ $element[‘object’] ];

    $element_render_type = ‘element’;

    $this->editor->before_element( $el );

    if ( method_exists($el, ‘element_edit’) ) {

    $element_render_type = ‘element_edit’;

    }

    $el->$element_render_type();

    if ( $el->js() && $echo ) {

    if( $el->info[‘scripts’] ){

    $el->scripts();

    }

    ZN()->add_inline_js( $el->js() , $echo );

    }

    // Add inline CSS

    if ( $css && $echo ){

    ZN()->add_inline_css( $css, $echo );

    }

    $this->editor->after_element( $el );

    }

    else {

    // Check if we can display this element

    $display = $el->opt( ‘znpb_hide_visitors’, ‘all’ );

    if ( $display === ‘loggedin’ && ! is_user_logged_in() ){

    continue;

    }

    elseif ( $display === ‘visitor’ && is_user_logged_in() ){

    continue;

    }

    $el->element();

    if ( $el->js() && $echo ) {

    $el->scripts();

    ZN()->add_inline_js( $el->js() , $echo );

    }

    // Add inline CSS

    if ( $css && $echo ){

    ZN()->add_inline_css( $css , $echo );

    }

    }

    } // END FOREACH ELEMENT

    }

    /**

    * Register a smart area id that is loaded on the current page

    *

    * @param int $smart_area_id The smart area id that we need to register

    */

    function register_smart_area( $smart_area_id ){

    $this->registered_smart_areas[$smart_area_id] = $smart_area_id;

    }

    function get_registered_smart_areas(){

    return $this->registered_smart_areas;

    }

    }

  • Unknown's avatar

    Hi there
    Had to slog through a long lump of code to get to where i can give you a short answer! The issue you are experiencing has something to do with a theme produced by someone other than WordPress. The theme info at the very top tells you who wrote it. A good place to start would be https://themeforest.net/user/themefuzz

    Good luck
    dave

  • The topic ‘Fatal error: Call to a member function css() on a non-object in’ is closed to new replies.