fix database update errors and add individual widget controls
This commit is contained in:
parent
98c86a9afd
commit
6d1c2d88ee
@ -2,7 +2,7 @@
|
||||
|
||||
require_once('PublisherInfo.php');
|
||||
|
||||
define("PLUGIN_WONDERFUL_DATABASE_VERSION", 3);
|
||||
define("PLUGIN_WONDERFUL_DATABASE_VERSION", 4);
|
||||
|
||||
/**
|
||||
* The interface to the PW database table.
|
||||
@ -29,17 +29,18 @@ class PWAdboxesClient {
|
||||
array('standardcode', 'text', '', 'NOT NULL'),
|
||||
array('advancedcode', 'text', '', 'NOT NULL'),
|
||||
array('template_tag_id', 'char', '30', ''),
|
||||
array('in_rss_feed', 'int', '1', '')
|
||||
array('in_rss_feed', 'int', '1', ''),
|
||||
array('center_widget', 'int', '1', '')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the table if it doesn't exist.
|
||||
*/
|
||||
function initialize() {
|
||||
function initialize($force = false) {
|
||||
global $wpdb;
|
||||
|
||||
if ($wpdb->get_var("SHOW TABLES LIKE {$this->table_name}") != $this->table_name) {
|
||||
if (($wpdb->get_var("SHOW TABLES LIKE '{$this->table_name}'") != $this->table_name) || $force) {
|
||||
$sql = "CREATE TABLE {$this->table_name} (\n";
|
||||
|
||||
$statements = array();
|
||||
@ -56,8 +57,12 @@ class PWAdboxesClient {
|
||||
if (!$wpdb->is_mock) {
|
||||
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
||||
dbDelta($sql);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -81,7 +86,7 @@ class PWAdboxesClient {
|
||||
if ($ads->is_valid) {
|
||||
$mappings = array();
|
||||
|
||||
if (is_array($results = $wpdb->get_results("SELECT adboxid, template_tag_id, in_rss_feed FROM {$this->table_name}"))) {
|
||||
if (is_array($results = $wpdb->get_results("SELECT adboxid, template_tag_id, in_rss_feed, center_widget FROM {$this->table_name}"))) {
|
||||
foreach ($results as $result) {
|
||||
$mappings[$result->adboxid] = $result;
|
||||
}
|
||||
@ -105,6 +110,11 @@ class PWAdboxesClient {
|
||||
$columns[] = $key;
|
||||
$value = $box->{$key};
|
||||
if (!empty($size)) { $value = substr($value, 0, $size); }
|
||||
if (empty($value)) {
|
||||
switch ($column_type) {
|
||||
case "int": $value = 0; break;
|
||||
}
|
||||
}
|
||||
$values[] = '"' . $wpdb->escape($value) . '"';
|
||||
}
|
||||
}
|
||||
@ -203,19 +213,30 @@ class PWAdboxesClient {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable or disable RSS feed usage.
|
||||
*/
|
||||
function set_rss_feed_usage($adboxid, $status = false) {
|
||||
function _handle_toggle($column, $adboxid, $status = false) {
|
||||
global $wpdb;
|
||||
|
||||
$query = "UPDATE {$this->table_name} SET ";
|
||||
$query .= "in_rss_feed = '" . ($status ? 1 : 0) . "'";
|
||||
$query .= "{$column} = '" . ($status ? 1 : 0) . "'";
|
||||
$query .= " WHERE adboxid = '" . $wpdb->escape($adboxid) . "'";
|
||||
|
||||
$result = $wpdb->get_results($query);
|
||||
return count($result) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable or disable RSS feed usage.
|
||||
*/
|
||||
function set_rss_feed_usage($adboxid, $status = false) {
|
||||
return $this->_handle_toggle("in_rss_feed", $adboxid, $status);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable or disable widget centering.
|
||||
*/
|
||||
function set_widget_centering($adboxid, $status = false) {
|
||||
return $this->_handle_toggle("center_widget", $adboxid, $status);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
@ -3,7 +3,7 @@
|
||||
Plugin Name: Plugin Wonderful
|
||||
Plugin URI: http://www.coswellproductions.com/wordpress/wordpress-plugins/
|
||||
Description: Easily embed a Project Wonderful publisher's advertisements.
|
||||
Version: 0.4
|
||||
Version: 0.4.2
|
||||
Author: John Bintz
|
||||
Author URI: http://www.coswellproductions.org/wordpress/
|
||||
|
||||
@ -26,7 +26,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
require_once('classes/PWAdboxesClient.php');
|
||||
//require_once('FirePHPCore/fb.php');
|
||||
require_once('FirePHPCore/fb.php');
|
||||
|
||||
define('PLUGIN_WONDERFUL_XML_URL', 'http://www.projectwonderful.com/xmlpublisherdata.php?publisher=%d');
|
||||
define('PLUGIN_WONDERFUL_UPDATE_TIME', 60 * 60 * 12); // every 12 hours
|
||||
@ -55,8 +55,11 @@ class PluginWonderful {
|
||||
|
||||
$result = get_option('plugin-wonderful-database-version');
|
||||
if (empty($result) || ($result < PLUGIN_WONDERFUL_DATABASE_VERSION)) {
|
||||
$this->adboxes_client->initialize();
|
||||
if ($this->adboxes_client->initialize(true)) {
|
||||
update_option('plugin-wonderful-database-version', PLUGIN_WONDERFUL_DATABASE_VERSION);
|
||||
} else {
|
||||
$this->messages[] = "Unable to update database schema!";
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($_POST)) { $this->handle_action(); }
|
||||
@ -85,10 +88,14 @@ class PluginWonderful {
|
||||
foreach ($this->publisher_info->adboxes as $adbox) {
|
||||
if (($adbox->adboxid == $adboxid) || ($adbox->template_tag_id == $adboxid)) {
|
||||
if (get_option("plugin-wonderful-use-standardcode") == 1) {
|
||||
echo $adbox->standardcode;
|
||||
$output = $adbox->standardcode;
|
||||
} else {
|
||||
echo $adbox->advancedcode;
|
||||
$output = $adbox->advancedcode;
|
||||
}
|
||||
if ($adbox->center_widget == 1) {
|
||||
$output = "<center>{$output}</center>";
|
||||
}
|
||||
echo $output;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -105,11 +112,24 @@ class PluginWonderful {
|
||||
foreach ($widgets as $widget_info) {
|
||||
extract($widget_info);
|
||||
wp_register_sidebar_widget($id, $name, array($this, 'render_widget'), "", $options['adboxid']);
|
||||
register_widget_control($id, array($this, 'render_widget_control'), null, null, $options['adboxid']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function render_widget_control($adboxid) {
|
||||
foreach ($this->publisher_info->adboxes as $box) {
|
||||
if ($box->adboxid == $adboxid) {
|
||||
echo '<label>';
|
||||
echo '<input type="checkbox" name="pw[center][' . $adboxid . ']" ' . (($box->center_widget == 1) ? "checked" : "") . ' /> ';
|
||||
echo 'Wrap ad in <center> tags';
|
||||
echo '</label>';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function handle_activation() {
|
||||
$this->adboxes_client->initialize();
|
||||
}
|
||||
@ -159,11 +179,30 @@ class PluginWonderful {
|
||||
function handle_action() {
|
||||
$action = "handle_action_" . str_replace("-", "_", preg_replace('#[^a-z\-]#', '', strtolower($_POST['action'])));
|
||||
if (method_exists($this, $action)) { call_user_func(array($this, $action)); }
|
||||
|
||||
// handle widget updates
|
||||
if (isset($_POST['save-widgets'])) { $this->handle_action_save_widgets(); }
|
||||
}
|
||||
|
||||
function handle_action_save_widgets() {
|
||||
$new_boxes = array();
|
||||
foreach ($this->publisher_info->adboxes as $box) {
|
||||
if (isset($_POST['pw']['center'][$box->adboxid])) {
|
||||
$this->adboxes_client->set_widget_centering($box->adboxid, true);
|
||||
$box->center_widget = "1";
|
||||
} else {
|
||||
$this->adboxes_client->set_widget_centering($box->adboxid, false);
|
||||
$box->center_widget = "0";
|
||||
}
|
||||
$new_boxes[] = $box;
|
||||
}
|
||||
$this->publisher_info->adboxes = $new_boxes;
|
||||
}
|
||||
|
||||
function handle_action_change_adbox_settings() {
|
||||
if ($member_id = get_option('plugin-wonderful-memberid')) {
|
||||
if (isset($_POST['template_tag_id']) && is_array($_POST['template_tag_id'])) {
|
||||
if (is_array($this->publisher_info->adboxes)) {
|
||||
$new_boxes = array();
|
||||
foreach ($this->publisher_info->adboxes as $box) {
|
||||
if (isset($_POST['template_tag_id'][$box->adboxid])) {
|
||||
@ -187,7 +226,9 @@ class PluginWonderful {
|
||||
}
|
||||
$this->publisher_info->adboxes = $new_boxes;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_array($this->publisher_info->adboxes)) {
|
||||
$new_boxes = array();
|
||||
foreach ($this->publisher_info->adboxes as $box) {
|
||||
if (isset($_POST['in_rss_feed'][$box->adboxid])) {
|
||||
@ -207,6 +248,7 @@ class PluginWonderful {
|
||||
}
|
||||
$this->publisher_info->adboxes = $new_boxes;
|
||||
}
|
||||
}
|
||||
|
||||
if (count($this->messages) == 0) {
|
||||
$this->messages[] = __("No changes to adboxes were made.", 'plugin-wonderful');
|
||||
|
@ -3,7 +3,7 @@ Contributors: johncoswell
|
||||
Tags: ads, sidebar, widget
|
||||
Requires at least: 2.7
|
||||
Tested up to: 2.7.1
|
||||
Stable tag: 0.4
|
||||
Stable tag: 0.4.2
|
||||
Donate link: http://www.coswellproductions.com/wordpress/wordpress-plugins/
|
||||
|
||||
Plugin Wonderful lets Project Wonderful publishers quickly and easily add their adboxes to thier WordPress site.
|
||||
|
@ -14,7 +14,7 @@ class TestPWAdboxesClient extends PHPUnit_Framework_TestCase {
|
||||
'dimensions' => "1x1", 'rating' => "a", 'category' => "a",
|
||||
'description' => "a", 'tags' => 'a', 'standardcode' => 'a',
|
||||
'advancedcode' => 'a', 'adtype' => 'a', 'template_tag_id' => 'a',
|
||||
'in_rss_feed' => 0);
|
||||
'in_rss_feed' => 0, 'center_widget' => 0);
|
||||
}
|
||||
|
||||
function testCreateTables() {
|
||||
@ -23,7 +23,7 @@ class TestPWAdboxesClient extends PHPUnit_Framework_TestCase {
|
||||
$wpdb->prefix = "wp_";
|
||||
$wpdb->is_mock = true;
|
||||
|
||||
$wpdb->expects($this->once())->method('get_var')->with($this->equalTo("SHOW TABLES LIKE {$this->database_client->table_name}"))->will($this->returnValue(array()));
|
||||
$wpdb->expects($this->once())->method('get_var')->with($this->equalTo("SHOW TABLES LIKE '{$this->database_client->table_name}'"))->will($this->returnValue(array()));
|
||||
|
||||
$this->database_client->initialize();
|
||||
}
|
||||
@ -50,9 +50,27 @@ class TestPWAdboxesClient extends PHPUnit_Framework_TestCase {
|
||||
|
||||
$ads->adboxes = array($this->sample_ad);
|
||||
|
||||
$wpdb->expects($this->exactly(13))->method('escape');
|
||||
$wpdb->expects($this->exactly(14))->method('escape');
|
||||
$wpdb->expects($this->exactly(2))->method('query')->will($this->returnCallback(array($this, 'postAdsCallback')));
|
||||
$wpdb->expects($this->exactly(1))->method('get_results')->will($this->returnValue(array()))->with("SELECT adboxid, template_tag_id, in_rss_feed FROM {$this->database_client->table_name}");
|
||||
$wpdb->expects($this->exactly(1))->method('get_results')->will($this->returnValue(array()))->with("SELECT adboxid, template_tag_id, in_rss_feed, center_widget FROM {$this->database_client->table_name}");
|
||||
|
||||
$this->database_client->post_ads($ads, PW_ADBOXES_PROJECT_WONDERFUL);
|
||||
}
|
||||
|
||||
function testPostAdsEmptyColumn() {
|
||||
global $wpdb;
|
||||
$wpdb = $this->getMock('wpdb', array('escape', 'query', 'get_results'));
|
||||
$wpdb->prefix = "wp_";
|
||||
|
||||
$ads = $this->getMock('PublisherInfo', array());
|
||||
$ads->member_id = "1";
|
||||
$ads->is_valid = true;
|
||||
|
||||
$this->sample_ad->in_rss_feed = "";
|
||||
|
||||
$ads->adboxes = array($this->sample_ad);
|
||||
|
||||
$wpdb->expects($this->exactly(2))->method('query')->will($this->returnCallback(array($this, 'postAdsEmptyColumnCallback')));
|
||||
|
||||
$this->database_client->post_ads($ads, PW_ADBOXES_PROJECT_WONDERFUL);
|
||||
}
|
||||
@ -178,13 +196,13 @@ class TestPWAdboxesClient extends PHPUnit_Framework_TestCase {
|
||||
'dimensions', 'rating', 'category',
|
||||
'description', 'tags', 'standardcode',
|
||||
'advancedcode', 'adtype', 'template_tag_id',
|
||||
'in_rss_feed') as $field) {
|
||||
'in_rss_feed', 'center_widget') as $field) {
|
||||
$large_sample_ad[$field] = $field . "-" . str_repeat("x", 300);
|
||||
}
|
||||
|
||||
$ads->adboxes = array((object)$large_sample_ad);
|
||||
|
||||
$wpdb->expects($this->exactly(13))->method('escape')->will($this->returnCallback(array($this, 'postDataTooLargeCallback')));
|
||||
$wpdb->expects($this->exactly(14))->method('escape')->will($this->returnCallback(array($this, 'postDataTooLargeCallback')));
|
||||
$wpdb->expects($this->exactly(2))->method('query');
|
||||
$wpdb->expects($this->exactly(1))->method('get_results');
|
||||
|
||||
@ -200,6 +218,14 @@ class TestPWAdboxesClient extends PHPUnit_Framework_TestCase {
|
||||
}
|
||||
}
|
||||
|
||||
function postAdsEmptyColumnCallback($query) {
|
||||
if (strpos($query, "INSERT") === 0) {
|
||||
return strpos($query, '"0")') !== false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
function postDataTooLargeCallback($query) {
|
||||
$size = $this->database_client->schema_info[$this->escape_count][2];
|
||||
if (!empty($size)) {
|
||||
|
Loading…
Reference in New Issue
Block a user