bhubbard
10/9/2015 - 10:44 PM

This is a more complete Cloudflare admin bar functionality. Can definitely be more optimized, but it gets the idea across.

This is a more complete Cloudflare admin bar functionality. Can definitely be more optimized, but it gets the idea across.

//Add a link to Cloudflare Options on the Admin Bar and indicate dev_mode
	add_action('admin_bar_menu', 'nebula_admin_bar_cloudflare', 100);
	function nebula_admin_bar_cloudflare($wp_admin_bar){
		$cloudflare_dev_mode_status = get_dev_mode_status(get_option('cloudflare_api_key'), get_option('cloudflare_api_email'), get_option('cloudflare_zone_name'));
		$cloudflare_dev_mode_icon = 'fa-bolt';
		$cloudflare_dev_mode_text = '';
		$cloudflare_dev_mode_title = 'Enable Dev Mode';
		$cloudflare_dev_mode_opposite = 'on';
		if ( $cloudflare_dev_mode_status == 'on' ){
			$cloudflare_dev_mode_icon = 'fa-medkit';
			$cloudflare_dev_mode_text = '(Dev Mode)';
			$cloudflare_dev_mode_title = 'Disable Dev Mode';
			$cloudflare_dev_mode_opposite = 'off';
		}

		$wp_admin_bar->add_node(array(
			'id' => 'nebula-cloudflare',
			'title' => '<i class="devmodeicon fa fa-fw ' . $cloudflare_dev_mode_icon . '" style="font-family: \'FontAwesome\'; color: #a0a5aa; color: rgba(240,245,250,.6); margin-right: 5px;"></i> Cloudflare <span style="font-size: 10px; color: #a0a5aa; color: rgba(240,245,250,.6);">' . $cloudflare_dev_mode_text . '</span>',
			'href' => get_admin_url() . 'options-general.php?page=cloudflare',
			'meta' => array('target' => '_blank')
		));

		$wp_admin_bar->add_node(array(
			'parent' => 'nebula-cloudflare',
			'id' => 'nebula-cloudflare-devmode',
			'title' => $cloudflare_dev_mode_title,
			'href' => get_admin_url() . 'options-general.php?page=cloudflare',
			'meta' => array('onclick' => 'cloudflareDevModeToggle("' . $cloudflare_dev_mode_opposite . '"); return false;')
		));
	}

	add_action('wp_ajax_nebula_cloudflare_dev_mode_toggle', 'nebula_cloudflare_dev_mode_toggle');
	add_action('wp_ajax_nebula_cloudflare_dev_mode_toggle', 'nebula_cloudflare_dev_mode_toggle');
	function nebula_cloudflare_dev_mode_toggle(){
		if ( $_POST['data'] ){
			$action = ( $_POST['data'] == 'off' )? 0 : 1;
		}
		set_dev_mode(get_option('cloudflare_api_key'), get_option('cloudflare_api_email'), get_option('cloudflare_zone_name'), $action);
		exit;
	}
function cloudflareDevModeToggle(toggle){
	if ( !toggle ){
		toggle = 'on';
	}

	jQuery('.devmodeicon').removeClass('fa-bolt fa-medkit').addClass('fa-spin fa-spinner');

	jQuery.ajax({
		type: "POST",
		url: bloginfo["admin_ajax"],
		data: {
			action: 'nebula_cloudflare_dev_mode_toggle',
			data: toggle,
		},
		success: function(response){
			jQuery('.devmodeicon').removeClass('fa-bolt fa-medkit fa-spin fa-spinner').addClass('fa-check-circle');
			window.location.reload();
		},
		error: function(MLHttpRequest, textStatus, errorThrown){
			jQuery('.devmodeicon').removeClass('fa-bolt fa-medkit fa-spin fa-spinner').addClass('fa-times-circle');
			window.open('/wp-admin/options-general.php?page=cloudflare', '_blank');
		},
		timeout: 60000
	});

	return false;
}