Example #1
0
/**
 * Fix WP's multiarray parsing.
 * 
 * @param type $arg
 * @param type $defaults
 * @return type 
 */
function wpv_parse_args_recursive($arg, $defaults)
{
    $temp = false;
    if (isset($arg[0])) {
        $temp = $arg[0];
    } else {
        if (isset($defaults[0])) {
            $temp = $defaults[0];
        }
    }
    $arg = wp_parse_args($arg, $defaults);
    if ($temp) {
        $arg[0] = $temp;
    }
    foreach ($defaults as $default_setting_parent => $default_setting) {
        if (!is_array($default_setting)) {
            if (!isset($arg[$default_setting_parent])) {
                $arg[$default_setting_parent] = $default_setting;
            }
            continue;
        }
        if (!isset($arg[$default_setting_parent])) {
            $arg[$default_setting_parent] = $defaults[$default_setting_parent];
        }
        $arg[$default_setting_parent] = wpv_parse_args_recursive($arg[$default_setting_parent], $defaults[$default_setting_parent]);
    }
    return $arg;
}
function wpv_post_types_defaults_save($view_settings)
{
    // we need to set 0 for the checkboxes that aren't checked and are missing for the $_POST.
    $defaults = array('post_type_dont_include_current_page' => 0);
    $view_settings = wpv_parse_args_recursive($view_settings, $defaults);
    return $view_settings;
}
function wpv_pager_defaults_save($view_settings)
{
    // we need to set 0 for the checkboxes that aren't checked and are missing for the $_POST.
    $defaults = array('pagination' => array('preload_images' => 0, 'cache_pages' => 0, 'preload_pages' => 0), 'rollover' => array('preload_images' => 0));
    $view_settings = wpv_parse_args_recursive($view_settings, $defaults);
    return $view_settings;
}
function wpv_taxonomy_defaults_save($view_settings)
{
    global $taxonomy_checkboxes_defaults;
    // we need to set 0 for the checkboxes that aren't checked and are missing for the $_POST.
    $defaults = array();
    foreach ($taxonomy_checkboxes_defaults as $key => $value) {
        $defaults[$key] = 0;
    }
    $view_settings = wpv_parse_args_recursive($view_settings, $defaults);
    return $view_settings;
}
 /**
  * get the view settings for the current view
  * 
  * @param integer $view_id View post ID
  * @param $settings Additional forced settings
  */
 function get_view_settings($view_id = null, $settings = array())
 {
     static $view_settings = array();
     if (is_null($view_id)) {
         $view_id = $this->get_current_view();
     }
     if (!isset($view_settings[$view_id])) {
         $view_settings[$view_id] = apply_filters('wpv_view_settings', (array) get_post_meta($view_id, '_wpv_settings', true), $view_id);
         if (!empty($settings) && is_array($settings)) {
             $view_settings[$view_id] = wpv_parse_args_recursive($settings, $view_settings[$view_id]);
         }
         // PATCH - v1.1 - add the default view mode to normal (not archive)
         if (!isset($view_settings[$view_id]['view-query-mode'])) {
             $view_settings[$view_id]['view-query-mode'] = 'normal';
         }
     }
     return $view_settings[$view_id];
 }
function wpv_update_pagination_callback()
{
    $nonce = $_POST["wpnonce"];
    if (!wp_verify_nonce($nonce, 'wpv_view_pagination_nonce')) {
        die("Security check");
    }
    $changed = false;
    parse_str($_POST['settings'], $settings);
    $defaults = array('pagination' => array('preload_images' => 0, 'cache_pages' => 0, 'preload_pages' => 0), 'rollover' => array('preload_images' => 0));
    $settings = wpv_parse_args_recursive($settings, $defaults);
    $view_array = get_post_meta($_POST["id"], '_wpv_settings', true);
    if ($view_array['posts_per_page'] != $settings['posts_per_page']) {
        $view_array['posts_per_page'] = $settings['posts_per_page'];
        $changed = true;
    }
    if ($view_array['pagination'] != $settings['pagination']) {
        $view_array['pagination'] = $settings['pagination'];
        $changed = true;
    }
    if ($view_array['ajax_pagination'] != $settings['ajax_pagination']) {
        $view_array['ajax_pagination'] = $settings['ajax_pagination'];
        $changed = true;
    }
    if ($view_array['rollover'] != $settings['rollover']) {
        $view_array['rollover'] = $settings['rollover'];
        $changed = true;
    }
    if ($changed) {
        $result = update_post_meta($_POST["id"], '_wpv_settings', $view_array);
        echo $result ? $_POST["id"] : false;
    } else {
        echo $_POST["id"];
    }
    die;
}
function wpv_update_pagination_callback() {
	if ( ! current_user_can( 'manage_options' ) ) {
		$data = array(
			'type' => 'capability',
			'message' => __( 'You do not have permissions for that.', 'wpv-views' )
		);
		wp_send_json_error( $data );
	}
	if ( 
		! isset( $_POST["wpnonce"] )
		|| ! wp_verify_nonce( $_POST["wpnonce"], 'wpv_view_pagination_nonce' ) 
	) {
		$data = array(
			'type' => 'nonce',
			'message' => __( 'Your security credentials have expired. Please reload the page to get new ones.', 'wpv-views' )
		);
		wp_send_json_error( $data );
	}
	if (
		! isset( $_POST["id"] )
		|| ! is_numeric( $_POST["id"] )
		|| intval( $_POST['id'] ) < 1 
	) {
		$data = array(
			'type' => 'id',
			'message' => __( 'Wrong or missing ID.', 'wpv-views' )
		);
		wp_send_json_error( $data );
	}
	$changed = false;
	parse_str( $_POST['settings'], $settings );
	$defaults = array(
		'pagination' => array(
			'preload_images' => 0,
			'cache_pages' => 0,
			'preload_pages' => 0,
		),
		'rollover' => array(
			'preload_images' => 0,
		),
	);
	$settings = wpv_parse_args_recursive( $settings, $defaults );
	$view_array = get_post_meta( $_POST["id"], '_wpv_settings', true );
	if ( $view_array['posts_per_page'] != $settings['posts_per_page'] ) {
		$view_array['posts_per_page'] = $settings['posts_per_page'];
		$changed = true;
	}
	if ( $view_array['pagination'] != $settings['pagination'] ) {
		$view_array['pagination'] = $settings['pagination'];
		$changed = true;
	}
	if ( $view_array['ajax_pagination'] != $settings['ajax_pagination'] ) {
		$view_array['ajax_pagination'] = $settings['ajax_pagination'];
		$changed = true;
	}
	if ( $view_array['rollover'] != $settings['rollover'] ) {
		$view_array['rollover'] = $settings['rollover'];
		$changed = true;
	}
	if ( $changed ) {
		update_post_meta( $_POST["id"], '_wpv_settings', $view_array );
		do_action( 'wpv_action_wpv_save_item', $_POST["id"] );
	}
	$data = array(
		'id' => $_POST["id"],
		'message' => __( 'Pagination saved', 'wpv-views' )
	);
	wp_send_json_success( $data );
}