_set( 1 ); $widget->is_builder = true; // filters the widget admin form before displaying, return false to stop displaying it $instance = apply_filters( 'widget_form_callback', $instance, $widget ); $form = null; if ( false !== $instance ) { $form = $widget->form( $instance ); // add extra fields in the widget form - be sure to set $form to null if you add any // if the widget has no form the text echoed from the default form method can be hidden using css do_action_ref_array( 'in_widget_form', array( &$widget, &$form, $instance ) ); } $form = ob_get_clean(); $form_html = render_module_popup( $widget, $form, $module_type, $module_id ); $result = true; // Generate json data $json['success'] = ( $result ) ? true : false; $json['message'] = ( $result ) ? esc_html__( 'Returning form', 'spyropress' ) : esc_html__( 'Operation fails', 'spyropress' ); $json['html'] = ( $result ) ? $form_html : esc_html__( 'Oops! something goes wrong while generating module form.', 'spyropress' ); $json['row_id'] = $row_id; $json['col_id'] = $col_id; return $json; } /** * Generate popup html */ function render_module_popup( $widget, $content, $module_type, $module_id ) { // Hidden fields $hidden_fields = ''; $hidden_fields .= ''; $hidden_fields .= ''; $popup = sprintf( '

%1$s

%2$s

%3$s
', esc_html( $widget->name ), esc_html( $widget->widget_options['description'] ), $content, esc_attr( $widget->id_base ), $hidden_fields ); return $popup; } /** * Save Module Options */ function builder_save_module( $args, $builder_data ) { global $spyropress_builder; extract( $args ); $new_instance = $old_instance = array(); // Module $module_type = $form_data['module_type']; $module_id = $form_data['module_id']; $widget = new $module_type(); $widget_id = 'widget-' . $form_data['module_id_base']; if ( isset( $builder_data[$row_id]['columns'][$col_id]['modules'][$module_id] ) ) $old_instance = $builder_data[$row_id]['columns'][$col_id]['modules'][$module_id]['instance']; $new_instance = $form_data[$widget_id]['1']; $widget->_set( 1 ); // Updating $new_instance = stripslashes_deep( $new_instance ); $instance = $widget->update( $new_instance, $old_instance ); // filters the widget's settings before saving, return false to cancel saving (keep the old settings if updating) $instance = apply_filters( 'widget_update_callback', $instance, $new_instance, $old_instance, $widget ); // Saving data $module_data = array( 'module_name' => $widget->name, 'type' => $module_type, 'instance' => $instance ); $builder_data[$row_id]['columns'][$col_id]['modules'][$module_id] = $module_data; $result = $spyropress_builder->save_data( $post_id, $builder_data ); // Generate Column HTML $module_html = builder_render_backend_module( $module_id, $widget->name ); if ( $old_instance == $instance ) $result = true; // Generate json data $json['success'] = ( $result ) ? true : false; $json['message'] = ( $result ) ? esc_html__( 'Module Saved', 'spyropress' ) : esc_html__( 'Operation fails', 'spyropress' ); $json['html'] = ( $result ) ? $module_html : esc_html__( 'Oops! something goes wrong while saving the new module, development team has been notified!', 'spyropress' ); $json['row_id'] = $row_id; $json['col_id'] = $col_id; $json['module_id'] = $module_id; return $json; } /** * Delete Module */ function builder_delete_module( $args, $builder_data ) { global $spyropress_builder; extract( $args ); // Deleting module if exists if ( isset( $builder_data[$row_id]['columns'][$col_id]['modules'][$module_id] ) ) { unset( $builder_data[$row_id]['columns'][$col_id]['modules'][$module_id] ); // Saving data $result = $spyropress_builder->save_data( $post_id, $builder_data ); // Generate json data $json['success'] = ( $result ) ? true : false; $json['message'] = ( $result ) ? esc_html__( 'Module Deleted', 'spyropress' ) : esc_html__( 'Operation fails', 'spyropress' ); $json['html'] = ( $result ) ? esc_html__( 'Module deleted successfully.', 'spyropress') : esc_html__( 'Oops! something goes wrong while deleting the module, development team has been notified!', 'spyropress' ); $json['row_id'] = $row_id; $json['col_id'] = $col_id; $json['module_id'] = $module_id; return $json; } // If module doesn't exists else { // Generate json data $json['success'] = false; $json['message'] = 'Module not exists'; $json['html'] = 'Module: ' . $module_id . ' doesn\'t exists.'; $json['row_id'] = $row_id; $json['col_id'] = $col_id; $json['module_id'] = $module_id; return $json; } } /** * Reorder Modules */ function builder_reorder_modules( $args, $builder_data ) { global $spyropress_builder; extract( $args ); $allmodules = array(); if( !empty( $sender ) ) { $allmodules += $builder_data[ $sender['row_id'] ]['columns'][ $sender['col_id'] ]['modules']; $builder_data[ $sender['row_id'] ]['columns'][ $sender['col_id'] ]['modules'] = array(); } if( !empty( $receiver ) ) { $allmodules += $builder_data[ $receiver['row_id'] ]['columns'][ $receiver['col_id'] ]['modules']; $builder_data[ $receiver['row_id'] ]['columns'][ $receiver['col_id'] ]['modules'] = array(); } if( isset( $sender['modules'] ) ) { foreach( $sender['modules'] as $module_id ) { $builder_data[ $sender['row_id'] ]['columns'][ $sender['col_id'] ]['modules'][$module_id] = $allmodules[$module_id]; unset( $allmodules[$module_id] ); } } if( isset( $receiver['modules'] ) ) { foreach( $receiver['modules'] as $module_id ) { $builder_data[ $receiver['row_id'] ]['columns'][ $receiver['col_id'] ]['modules'][$module_id] = $allmodules[$module_id]; unset( $allmodules[$module_id] ); } } // Saving data $result = $spyropress_builder->save_data( $post_id, $builder_data ); // Generate json data $json['success'] = true; $json['message'] = ( $result ) ? esc_html__( 'Module Order Updated', 'spyropress' ) : esc_html__( 'Operation fails', 'spyropress' ); $json['html'] = ( $result ) ? esc_html__( 'Module Order Updated.', 'spyropress' ) : esc_html__( 'Oops! something goes wrong while updating modules order.', 'spyropress' ); return $json; } /** * Clone Module */ function builder_clone_module( $args, $builder_data ) { global $spyropress_builder; extract( $args ); if ( isset( $builder_data[$row_id]['columns'][$col_id]['modules'][$module_id] ) ) { $new_module_id = generate_module_id(); $new_module = $builder_data[$row_id]['columns'][$col_id]['modules'][$module_id]; $builder_data[$row_id]['columns'][$col_id]['modules'][$new_module_id] = $new_module; // Saving data $result = $spyropress_builder->save_data( $post_id, $builder_data ); // Generate Column HTML $module_html = builder_render_backend_module( $new_module_id, $new_module['module_name'] ); // Generate json data $json['success'] = ( $result ) ? true : false; $json['message'] = ( $result ) ? esc_html__( 'Module Cloned', 'spyropress' ) : esc_html__( 'Operation fails', 'spyropress' ); $json['html'] = ( $result ) ? $module_html : esc_html__( 'Oops! something goes wrong while deleting the module, development team has been notified!', 'spyropress' ); $json['row_id'] = $row_id; $json['col_id'] = $col_id; $json['module_id'] = $new_module_id; return $json; } // If module doesn't exists else { // Generate json data $json['success'] = false; $json['message'] = esc_html__( 'Module not exists', 'spyropress' ); $json['html'] = 'Module: ' . $module_id . ' doesn\'t exists.'; $json['row_id'] = $row_id; $json['col_id'] = $col_id; $json['module_id'] = $module_id; return $json; } } /** Rendering Function *********************************/ /** * Render Modules */ function builder_render_backend_modules( $modules ) { $html = ''; if ( ! empty( $modules ) ) { foreach ( $modules as $module_id => $module ) { $html .= builder_render_backend_module( $module_id, $module['module_name'] ); } } return $html; } /** * Render Module */ function builder_render_backend_module( $module_id, $module_name ) { $module = sprintf( '
%2$s
', esc_attr( $module_id ), esc_html( $module_name ) ); return $module; } /** * Render Modules - Frontend */ function builder_render_frontend_modules( $modules ) { $html = ''; if ( ! empty( $modules ) ) { foreach ( $modules as $module_id => $module ) { $html .= builder_render_frontend_module( $module_id, $module ); } } return $html; } /** * Render Module - Frontend */ function builder_render_frontend_module( $module_id, $module ) { ob_start(); spyropress_the_builder_module( $module_id, $module ); return ob_get_clean(); } /** Helper Function *************************************/ /** * Generate Unique Module ID */ function generate_module_id() { return uniqid( 'builder-module-' ); } ?>