pre 2.8 widget work
This commit is contained in:
parent
7c923b958e
commit
8ad3163afc
@ -25,6 +25,8 @@ class PluginWonderful {
|
||||
* Initialize the object if it isn't already.
|
||||
*/
|
||||
function init() {
|
||||
global $wp_version;
|
||||
|
||||
if (empty($this->adboxes_client)) {
|
||||
$this->messages = array();
|
||||
$this->adboxes_client = new PWAdboxesClient();
|
||||
@ -32,6 +34,11 @@ class PluginWonderful {
|
||||
$this->_get_publisher_info();
|
||||
$this->_update_database_version();
|
||||
|
||||
if ($wp_version < 2.8) {
|
||||
register_sidebar_widget(__('Plugin Wonderful', 'plugin-wonderful'), array($this, 'render_pre28_widget'));
|
||||
register_widget_control(__('Plugin Wonderful', 'plugin-wonderful'), array($this, 'render_pre28_widget_control'));
|
||||
}
|
||||
|
||||
if (!empty($_POST)) { $this->handle_action(); }
|
||||
}
|
||||
}
|
||||
@ -120,7 +127,7 @@ class PluginWonderful {
|
||||
}
|
||||
|
||||
function plugin_wonderful_main() {
|
||||
$this->get_view(__FUNCTION__);
|
||||
$this->show_view(new PluginWonderfulViewMain());
|
||||
}
|
||||
|
||||
function show_messages() {
|
||||
@ -131,16 +138,8 @@ class PluginWonderful {
|
||||
}
|
||||
}
|
||||
|
||||
function _create_target($name, $source) {
|
||||
return dirname(__FILE__) . "/../{$source}/{$name}.php";
|
||||
}
|
||||
|
||||
function _include($target) { include($target); }
|
||||
function _file_exists($target) { return @file_exists($target); }
|
||||
|
||||
function get_view($function_name) {
|
||||
$target = $this->_create_target(str_replace('plugin_wonderful_', '', $function_name), "views");
|
||||
if ($this->_file_exists($target)) {
|
||||
function show_view($view) {
|
||||
if (is_object($view) && method_exists($view, 'render')) {
|
||||
$info = get_plugin_data(realpath(__FILE__));
|
||||
|
||||
echo '<div class="wrap">';
|
||||
@ -149,7 +148,7 @@ class PluginWonderful {
|
||||
|
||||
$this->show_messages();
|
||||
|
||||
$this->_include($target);
|
||||
$view->render();
|
||||
|
||||
echo '<div style="margin-top: 20px; border-top: solid #E3E3E3 1px; overflow: hidden">';
|
||||
echo '<form style="float: right; display: inline" action="https://www.paypal.com/cgi-bin/webscr" method="post"><input type="hidden" name="cmd" value="_s-xclick"><input type="hidden" name="hosted_button_id" value="3215507"><input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif" border="0" name="submit" alt=""><img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"></form>';
|
||||
@ -159,14 +158,14 @@ class PluginWonderful {
|
||||
echo '</div>';
|
||||
echo '</div>';
|
||||
} else {
|
||||
echo __("View not found: ", 'plugin-wonderful') . str_replace('plugin_wonderful_', '', $function_name);
|
||||
var_dump($view);
|
||||
}
|
||||
}
|
||||
|
||||
function handle_action() {
|
||||
if (!empty($_POST['_pw_nonce'])) {
|
||||
if (wp_verify_nonce($_POST['_pw_nonce'], 'plugin-wonderful')) {
|
||||
$action = "handle_action_" . str_replace("-", "_", preg_replace('#[^a-z\-]#', '', strtolower($_POST['action'])));
|
||||
$action = "handle_action_" . str_replace("-", "_", preg_replace('#[^a-z\-]#', '', strtolower($_POST['_pw_action'])));
|
||||
if (method_exists($this, $action)) { call_user_func(array($this, $action)); }
|
||||
}
|
||||
}
|
||||
@ -329,6 +328,78 @@ class PluginWonderful {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function _render_adbox_admin($instance, $field_names) {
|
||||
if ($this->publisher_info !== false) {
|
||||
echo '<p>';
|
||||
echo 'Select an adbox:<br />';
|
||||
foreach ($this->publisher_info->adboxes as $box) {
|
||||
echo '<label>';
|
||||
echo '<input type="radio" name="'
|
||||
. $field_names['adboxid']
|
||||
. '" value="'
|
||||
. $box->adboxid
|
||||
. '" '
|
||||
. (($instance['adboxid'] == $box->adboxid) ? 'checked="checked"' : "")
|
||||
. ' />';
|
||||
echo $box->adtype . " " . $box->dimensions . " (" . $box->adboxid . ")";
|
||||
echo "</label>";
|
||||
echo "<br />";
|
||||
}
|
||||
echo '</p>';
|
||||
|
||||
echo '<p>';
|
||||
echo '<label>';
|
||||
echo '<input type="checkbox" value="1" name="' . $field_names['center'] . '" ' . (($instance['center'] == 1) ? 'checked="checked"' : "") . ' /> ';
|
||||
echo 'Wrap ad in <center> tags';
|
||||
echo '</label>';
|
||||
echo '</p>';
|
||||
}
|
||||
}
|
||||
|
||||
function render_pre28_widget() {
|
||||
$data = get_option('plugin-wonderful-pre28-widget-info');
|
||||
if (is_array($data)) {
|
||||
if (count(array_intersect(array_keys($data), array("adboxid", "center"))) == 2) {
|
||||
if ($this->publisher_info !== false) {
|
||||
foreach ($this->publisher_info->adboxes as $adbox) {
|
||||
if ($adbox->adboxid == $data['adboxid']) {
|
||||
$this->_render_adbox($data['adboxid'], !empty($data['center']));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function _normalize_pre28_option() {
|
||||
$instance = array(
|
||||
'adboxid' => false,
|
||||
'center' => 0
|
||||
);
|
||||
|
||||
$data = get_option('plugin-wonderful-pre28-widget-info');
|
||||
if (is_array($data)) {
|
||||
foreach ($data as $field => $value) {
|
||||
if (isset($instance[$field])) {
|
||||
if (is_numeric($value)) {
|
||||
$instance[$field] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
update_option('plugin-wonderful-pre28-widget-info', $instance);
|
||||
return $instance;
|
||||
}
|
||||
|
||||
function render_pre28_widget_control() {
|
||||
$instance = $this->_normalize_pre28_option();
|
||||
|
||||
echo '<input type="hidden" name="_pw_nonce" value="' . wp_create_nonce('plugin-wonderful') . '" />';
|
||||
echo '<input type="hidden" name="_pw_action" value="update-pre28-widget" />';
|
||||
$this->_render_adbox_admin($instance, array('adboxid' => 'pw[adboxid]', 'center' => 'pw[center]'));
|
||||
}
|
||||
}
|
||||
|
||||
function the_project_wonderful_ad($adboxid) {
|
||||
|
@ -22,32 +22,13 @@ if (class_exists('WP_Widget')) {
|
||||
|
||||
function form($instance) {
|
||||
global $plugin_wonderful;
|
||||
|
||||
if ($plugin_wonderful->publisher_info !== false) {
|
||||
echo '<p>';
|
||||
echo 'Select an adbox:<br />';
|
||||
foreach ($plugin_wonderful->publisher_info->adboxes as $box) {
|
||||
echo '<label>';
|
||||
echo '<input type="radio" name="'
|
||||
. $this->get_field_name('adboxid')
|
||||
. '" value="'
|
||||
. $box->adboxid
|
||||
. '" '
|
||||
. (($instance['adboxid'] == $box->adboxid) ? 'checked="checked"' : "")
|
||||
. ' />';
|
||||
echo $box->adtype . " " . $box->dimensions . " (" . $box->adboxid . ")";
|
||||
echo "</label>";
|
||||
echo "<br />";
|
||||
}
|
||||
echo '</p>';
|
||||
|
||||
echo '<p>';
|
||||
echo '<label>';
|
||||
echo '<input type="checkbox" value="1" name="' . $this->get_field_name('center') . '" ' . (($instance['center'] == 1) ? 'checked="checked"' : "") . ' /> ';
|
||||
echo 'Wrap ad in <center> tags';
|
||||
echo '</label>';
|
||||
echo '</p>';
|
||||
}
|
||||
$plugin_wonderful->_render_adbox_admin(
|
||||
$instance,
|
||||
array(
|
||||
'adboxid' => $this->get_field_name('adboxid'),
|
||||
'center' => $this->get_field_name('center')
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
function update($new_instance, $old_instance) {
|
||||
|
@ -26,7 +26,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
foreach (glob(dirname(__FILE__) . '/classes/*.php') as $file) { require_once($file); }
|
||||
// require_once('FirePHPCore/fb.php');
|
||||
foreach (glob(dirname(__FILE__) . '/views/*.php') as $file) { require_once($file); }
|
||||
|
||||
define('PLUGIN_WONDERFUL_XML_URL', 'http://www.projectwonderful.com/xmlpublisherdata.php?publisher=%d');
|
||||
define('PLUGIN_WONDERFUL_UPDATE_TIME', 60 * 60 * 12); // every 12 hours
|
||||
@ -43,7 +43,9 @@ add_action('admin_menu', array($plugin_wonderful, 'set_up_menu'));
|
||||
add_action('init', array($plugin_wonderful, 'init'));
|
||||
add_filter('the_excerpt_rss', array($plugin_wonderful, 'insert_rss_feed_ads'));
|
||||
add_filter('the_content', array($plugin_wonderful, 'inject_ads_into_body_copy'));
|
||||
add_action('widgets_init', '__plugin_wonderful_load_widgets');
|
||||
if ($wp_version >= 2.8) {
|
||||
add_action('widgets_init', '__plugin_wonderful_load_widgets');
|
||||
}
|
||||
|
||||
register_activation_hook(__FILE__, array($plugin_wonderful, 'handle_activation'));
|
||||
|
||||
|
@ -182,17 +182,18 @@ class PluginWonderfulTest extends PHPUnit_Framework_TestCase {
|
||||
$this->assertEquals($expected_body, $this->pw->inject_ads_into_body_copy("body"));
|
||||
}
|
||||
|
||||
function providerTestGetView() {
|
||||
function providerTestShowView() {
|
||||
return array(
|
||||
array("**bad**", false),
|
||||
array("**good**", true),
|
||||
array(null, false),
|
||||
array((object)array(), false),
|
||||
array($this->getMock('Test', array('render')), true)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider providerTestGetView
|
||||
* @dataProvider providerTestShowView
|
||||
*/
|
||||
function testGetView($function_extension, $file_exists) {
|
||||
function testShowView($class, $is_success) {
|
||||
global $wp_test_expectations;
|
||||
$wp_test_expectations['plugin_data'][realpath(dirname(__FILE__) . '/../classes/PluginWonderful.php')] = array(
|
||||
'Title' => '**title**',
|
||||
@ -200,17 +201,11 @@ class PluginWonderfulTest extends PHPUnit_Framework_TestCase {
|
||||
'Author' => '**author**'
|
||||
);
|
||||
|
||||
$pw = $this->getMock('PluginWonderful', array('_create_target', '_include', '_file_exists'));
|
||||
|
||||
$pw->expects($this->once())->method("_file_exists")->will($this->returnValue($file_exists));
|
||||
|
||||
ob_start();
|
||||
$pw->get_view("plugin_wonderful_" . $function_extension);
|
||||
$this->pw->show_view($class);
|
||||
$source = ob_get_clean();
|
||||
|
||||
$this->assertEquals($file_exists, strpos($source, $function_extension) === false);
|
||||
|
||||
if ($file_exists) {
|
||||
if ($is_success) {
|
||||
foreach (array("title", "version", "author") as $name) {
|
||||
$this->assertTrue(strpos($source, "**${name}**") !== false);
|
||||
}
|
||||
@ -233,7 +228,7 @@ class PluginWonderfulTest extends PHPUnit_Framework_TestCase {
|
||||
_set_valid_nonce('plugin-wonderful', $has_verify_nonce ? '12345' : '54321');
|
||||
|
||||
$pw = $this->getMock('PluginWonderful', $method_exists ? array('handle_action_test') : array('handle_action_invalid'));
|
||||
$_POST['action'] = 'test';
|
||||
$_POST['_pw_action'] = 'test';
|
||||
|
||||
if ($method_exists) {
|
||||
$pw->expects($this->once())->method('handle_action_test');
|
||||
@ -459,6 +454,112 @@ class PluginWonderfulTest extends PHPUnit_Framework_TestCase {
|
||||
$this->pw->_render_adbox($requested_adboxid, $center_widget);
|
||||
$this->assertEquals($expected_result, ob_get_clean());
|
||||
}
|
||||
|
||||
function testRenderAdboxAdmin() {
|
||||
$this->pw->publisher_info->adboxes = array(
|
||||
(object)array('adboxid' => '123'),
|
||||
(object)array('adboxid' => '234'),
|
||||
(object)array('adboxid' => '345'),
|
||||
);
|
||||
|
||||
ob_start();
|
||||
$this->pw->_render_adbox_admin(array('adboxid' => '123', 'center' => 1), array('adboxid' => 'adname', 'center' => 'centername'));
|
||||
$source = ob_get_clean();
|
||||
|
||||
$this->assertTrue(($xml = _to_xml($source)) !== false);
|
||||
|
||||
foreach (array(
|
||||
'//input[@type="radio" and @name="adname" and @value="123" and @checked="checked"]' => true,
|
||||
'//input[@type="radio" and @name="adname" and @value="234" and not(@checked="checked")]' => true,
|
||||
'//input[@type="radio" and @name="adname" and @value="345" and not(@checked="checked")]' => true,
|
||||
'//input[@type="checkbox" and @name="centername" and @value="1" and @checked="checked"]' => true
|
||||
) as $xpath => $value) {
|
||||
$this->assertTrue(_xpath_test($xml, $xpath, $value), $xpath);
|
||||
}
|
||||
}
|
||||
|
||||
function providerTestRenderPre28Widget() {
|
||||
return array(
|
||||
array(false, false),
|
||||
array(array('blah' => 'yadda'), false),
|
||||
array(array('adboxid' => '1', 'center' => 1), false),
|
||||
array(array('adboxid' => '123', 'center' => 1), true)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider providerTestRenderPre28Widget
|
||||
*/
|
||||
function testRenderPre28Widget($option_value, $success) {
|
||||
update_option('plugin-wonderful-pre28-widget-info', $option_value);
|
||||
|
||||
$this->pw->publisher_info->adboxes = array(
|
||||
(object)array('adboxid' => '123'),
|
||||
);
|
||||
|
||||
ob_start();
|
||||
$this->pw->render_pre28_widget();
|
||||
$source = ob_get_clean();
|
||||
|
||||
$this->assertEquals($success, !empty($source));
|
||||
}
|
||||
|
||||
function testRenderPre28WidgetControl() {
|
||||
update_option('plugin-wonderful-pre28-widget-info', array('adboxid' => 123, 'center' => 1));
|
||||
|
||||
$this->pw->publisher_info->adboxes = array(
|
||||
(object)array('adboxid' => '123'),
|
||||
);
|
||||
|
||||
ob_start();
|
||||
$this->pw->render_pre28_widget_control();
|
||||
$source = ob_get_clean();
|
||||
|
||||
$this->assertTrue(($xml = _to_xml($source)) !== false);
|
||||
|
||||
foreach (array(
|
||||
'//input[@name="_pw_nonce"]' => true,
|
||||
'//input[@name="pw[adboxid]"]' => true,
|
||||
'//input[@name="pw[center]"]' => true,
|
||||
) as $xpath => $value) {
|
||||
$this->assertTrue(_xpath_test($xml, $xpath, $value), $xpath);
|
||||
}
|
||||
}
|
||||
|
||||
function providerTestNormalizePre28Option() {
|
||||
return array(
|
||||
array(
|
||||
false,
|
||||
array('adboxid' => false, 'center' => 0)
|
||||
),
|
||||
array(
|
||||
array(),
|
||||
array('adboxid' => false, 'center' => 0)
|
||||
),
|
||||
array(
|
||||
array('adboxid' => 'meow'),
|
||||
array('adboxid' => false, 'center' => 0)
|
||||
),
|
||||
array(
|
||||
array('adboxid' => '123'),
|
||||
array('adboxid' => '123', 'center' => 0)
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider providerTestNormalizePre28Option
|
||||
*/
|
||||
function testNormalizePre28Option($option_value, $expected_result) {
|
||||
update_option('plugin-wonderful-pre28-widget-info', $option_value);
|
||||
|
||||
$this->assertEquals($expected_result, $this->pw->_normalize_pre28_option());
|
||||
$this->assertEquals($expected_result, get_option('plugin-wonderful-pre28-widget-info'));
|
||||
}
|
||||
|
||||
function testHandlePre28WidgetUpdate() {
|
||||
$this->markTestIncomplete();
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
@ -27,28 +27,10 @@ class PluginWonderfulWidgetTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
function testRenderWidgetControl() {
|
||||
global $plugin_wonderful;
|
||||
$plugin_wonderful = $this->getMock('PluginWonderful');
|
||||
$plugin_wonderful = $this->getMock('PluginWonderful', array('_render_adbox_admin'));
|
||||
$plugin_wonderful->expects($this->once())->method('_render_adbox_admin');
|
||||
|
||||
$plugin_wonderful->publisher_info->adboxes = array(
|
||||
(object)array('adboxid' => '123'),
|
||||
(object)array('adboxid' => '234'),
|
||||
(object)array('adboxid' => '345'),
|
||||
);
|
||||
|
||||
ob_start();
|
||||
$this->w->form(array('adboxid' => '123', 'center' => 1));
|
||||
$source = ob_get_clean();
|
||||
|
||||
$this->assertTrue(($xml = _to_xml($source)) !== false);
|
||||
|
||||
foreach (array(
|
||||
'//input[@type="radio" and @name="' . $this->w->get_field_name('adboxid') . '" and @value="123" and @checked="checked"]' => true,
|
||||
'//input[@type="radio" and @name="' . $this->w->get_field_name('adboxid') . '" and @value="234" and not(@checked="checked")]' => true,
|
||||
'//input[@type="radio" and @name="' . $this->w->get_field_name('adboxid') . '" and @value="345" and not(@checked="checked")]' => true,
|
||||
'//input[@type="checkbox" and @name="' . $this->w->get_field_name('center') . '" and @value="1" and @checked="checked"]' => true
|
||||
) as $xpath => $value) {
|
||||
$this->assertTrue(_xpath_test($xml, $xpath, $value), $xpath);
|
||||
}
|
||||
$this->w->form(array());
|
||||
}
|
||||
|
||||
function testUpdateWidget() {
|
||||
|
@ -3,7 +3,7 @@
|
||||
<h3><?php _e('Adbox Information', 'plugin-wonderful') ?></h3>
|
||||
<form action="" method="post">
|
||||
<input type="hidden" name="_pw_nonce" value="<?php echo $this->_pw_nonce ?>" />
|
||||
<input type="hidden" name="action" value="change-adbox-settings" />
|
||||
<input type="hidden" name="_pw_action" value="change-adbox-settings" />
|
||||
<table class="widefat post fixed">
|
||||
<tr>
|
||||
<th width="12%" class="manage-column"><?php _e('Site Name', 'plugin-wonderful') ?></th>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php if (is_admin()) { ?>
|
||||
<form id="pw-handler" action="" method="post">
|
||||
<input type="hidden" name="_pw_nonce" value="<?php echo $this->_pw_nonce ?>" />
|
||||
<input type="hidden" name="action" value="change-memberid" />
|
||||
<input type="hidden" name="_pw_action" value="change-memberid" />
|
||||
<table class="form-table">
|
||||
<tr>
|
||||
<th scope="row"><?php _e('Your member number', 'plugin-wonderful') ?></th>
|
||||
|
Loading…
Reference in New Issue
Block a user