Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tag: 1.3
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 103 lines (73 sloc) 2.798 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
<?php
/*
Plugin Name: Test Plugin Update
Plugin URI: http://clark-technet.com
Description: Test plugin updates
Version: 0.9
Author: Jeremy Clark
Author URI: http://clark-technet.com
*/


/*
// TEMP: Enable update check on every request. Normally you don't need this! This is for testing only!
set_site_transient('update_plugins', null);

// TEMP: Show which variables are being requested when query plugin API
add_filter('plugins_api_result', 'aaa_result', 10, 3);
function aaa_result($res, $action, $args) {
print_r($res);
return $res;
}
*/


$api_url = 'http://api.damb.is/';
$plugin_slug = basename(dirname(__FILE__));


// Take over the update check
add_filter('pre_set_site_transient_update_plugins', 'check_for_plugin_update');

function check_for_plugin_update($checked_data) {
global $api_url, $plugin_slug;

if (empty($checked_data->checked))
return $checked_data;

$request_args = array(
'slug' => $plugin_slug,
'version' => $checked_data->checked[$plugin_slug .'/'. $plugin_slug .'.php'],
);

$request_string = prepare_request('basic_check', $request_args);

// Start checking for an update
$raw_response = wp_remote_post($api_url, $request_string);

if (!is_wp_error($raw_response) && ($raw_response['response']['code'] == 200))
$response = unserialize($raw_response['body']);

if (is_object($response) && !empty($response)) // Feed the update data into WP updater
$checked_data->response[$plugin_slug .'/'. $plugin_slug .'.php'] = $response;

return $checked_data;
}


// Take over the Plugin info screen
add_filter('plugins_api', 'my_plugin_api_call', 10, 3);

function my_plugin_api_call($def, $action, $args) {
global $plugin_slug, $api_url;

if ($args->slug != $plugin_slug)
return false;

// Get the current version
$plugin_info = get_site_transient('update_plugins');
$current_version = $plugin_info->checked[$plugin_slug .'/'. $plugin_slug .'.php'];
$args->version = $current_version;

$request_string = prepare_request($action, $args);

$request = wp_remote_post($api_url, $request_string);

if (is_wp_error($request)) {
$res = new WP_Error('plugins_api_failed', __('An Unexpected HTTP Error occurred during the API request.</p> <p><a href="?" onclick="document.location.reload(); return false;">Try again</a>'), $request->get_error_message());
} else {
$res = unserialize($request['body']);

if ($res === false)
$res = new WP_Error('plugins_api_failed', __('An unknown error occurred'), $request['body']);
}

return $res;
}


function prepare_request($action, $args) {
global $wp_version;

return array(
'body' => array(
'action' => $action,
'request' => serialize($args),
'api-key' => md5(get_bloginfo('url'))
),
'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo('url')
);
}

?>
Something went wrong with that request. Please try again.