Merge branch 'master' of ssh://claritycomic.com/home/john/repositories/comicpress-core

This commit is contained in:
John Bintz 2009-12-31 19:25:33 -05:00
commit da2072e718
13 changed files with 238 additions and 96 deletions

View File

@ -237,12 +237,14 @@ class ComicPress {
if (isset($this->comicpress_options['image_types'])) { if (isset($this->comicpress_options['image_types'])) {
if (is_array($this->comicpress_options['image_types'])) { if (is_array($this->comicpress_options['image_types'])) {
foreach ($this->comicpress_options['image_types'] as $type => $properties) { foreach ($this->comicpress_options['image_types'] as $type => $properties) {
if (isset($properties['default'])) {
if ($properties['default'] === true) { if ($properties['default'] === true) {
return $type; return $type;
} }
} }
} }
} }
}
return false; return false;
} }
} }

View File

@ -18,6 +18,7 @@ class ComicPressAdmin {
} }
add_action('edit_form_advanced', array(&$this, 'edit_form_advanced')); add_action('edit_form_advanced', array(&$this, 'edit_form_advanced'));
add_action('save_post', array(&$this, 'save_post'), 10, 1);
add_filter('comicpress_core_version', array(&$this, 'comicpress_core_version')); add_filter('comicpress_core_version', array(&$this, 'comicpress_core_version'));
@ -418,10 +419,9 @@ class ComicPressAdmin {
} }
} }
function handle_update_comic_ordering() { function save_post($post_id) {
if (isset($_POST['post_ID'])) { if (ComicPressAdmin::verify_nonces() === 'handle_update_edit_form_advanced') {
if (is_numeric($_POST['post_ID'])) { if ($post = get_post($psot_id)) {
if ($post = get_post($_POST['post_ID'])) {
$comic_post = new ComicPressComicPost($post); $comic_post = new ComicPressComicPost($post);
$data = $this->_json_decode(stripslashes($_POST['cp']['comic_order'])); $data = $this->_json_decode(stripslashes($_POST['cp']['comic_order']));
if (!empty($data)) { if (!empty($data)) {
@ -432,7 +432,6 @@ class ComicPressAdmin {
} }
} }
} }
}
function handle_update_get_new_image_type_editor($info) { function handle_update_get_new_image_type_editor($info) {
$type = substr(md5(rand()), 0, 6); $type = substr(md5(rand()), 0, 6);
@ -477,27 +476,17 @@ class ComicPressAdmin {
* Handle an update. * Handle an update.
*/ */
function handle_update() { function handle_update() {
if (isset($_REQUEST['cp'])) { if ($method = ComicPressAdmin::verify_nonces()) {
if (is_array($_REQUEST['cp'])) { switch ($method) {
if (isset($_REQUEST['cp']['_nonce'])) { case 'attachments':
if (wp_verify_nonce($_REQUEST['cp']['_nonce'], 'comicpress')) {
if (isset($_POST['attachments'])) {
//coming from media editor
$this->handle_update_attachments(); $this->handle_update_attachments();
} else if (isset($_REQUEST['cp']['action'])) { break;
$action = $_REQUEST['cp']['action']; default:
if (isset($_REQUEST['cp']['_action_nonce'])) {
if (wp_verify_nonce($_REQUEST['cp']['_action_nonce'], "comicpress-${action}")) {
$method = 'handle_update_' . strtolower(str_replace('-', '_', $action));
if (method_exists($this, $method)) { if (method_exists($this, $method)) {
$this->{$method}($_REQUEST['cp']); $this->{$method}($_REQUEST['cp']);
} }
do_action("comicpress-${method}", $_REQUEST['cp']); do_action("comicpress-${method}", $_REQUEST['cp']);
} break;
}
}
}
}
} }
} }
} }
@ -525,4 +514,28 @@ class ComicPressAdmin {
} }
} }
// @codeCoverageIgnoreEnd // @codeCoverageIgnoreEnd
function verify_nonces() {
if (isset($_REQUEST['cp'])) {
if (is_array($_REQUEST['cp'])) {
if (isset($_REQUEST['cp']['_nonce'])) {
if (wp_verify_nonce($_REQUEST['cp']['_nonce'], 'comicpress')) {
if (isset($_POST['attachments'])) {
//coming from media editor
return 'attachments';
} else if (isset($_REQUEST['cp']['action'])) {
$action = $_REQUEST['cp']['action'];
if (isset($_REQUEST['cp']['_action_nonce'])) {
if (wp_verify_nonce($_REQUEST['cp']['_action_nonce'], "comicpress-${action}")) {
$method = 'handle_update_' . strtolower(str_replace('-', '_', $action));
return $method;
}
}
}
}
}
}
}
return false;
}
} }

View File

@ -2,6 +2,7 @@
class ComicPressBackend { class ComicPressBackend {
function _embed_image($size) { function _embed_image($size) {
$size = $this->ensure_type($size);
$extras = array(); $extras = array();
$dims = $this->dims($size); $dims = $this->dims($size);
if (!empty($dims)) { if (!empty($dims)) {
@ -17,7 +18,7 @@ class ComicPressBackend {
unset($extras[$field]); unset($extras[$field]);
} }
$output = sprintf('<img src="%s" alt="%s" title="%s" %s/>', $this->url(), $this->alt(), $this->title(), implode("", $extras)); $output = sprintf('<img src="%s" alt="%s" title="%s" %s/>', $this->url($size), $this->alt(), $this->title(), implode("", $extras));
return apply_filters('comicpress_embed_image', $output, $this); return apply_filters('comicpress_embed_image', $output, $this);
} }
@ -31,4 +32,32 @@ class ComicPressBackend {
} }
return false; return false;
} }
function ensure_type($type) {
if (is_null($type)) {
$comicpress = ComicPress::get_instance();
if (is_null($type)) {
$type = $comicpress->get_default_image_type();
}
}
return $type;
}
function embed($type = null) { return $this->_embed_image($this->ensure_type($type)); }
function get_info($size = null) {
$size = $this->ensure_type($size);
$info = array();
foreach (array('dims', 'url', 'file') as $field) {
$result = $this->{$field}($size);
if (is_array($result)) {
$info = array_merge($info, $result);
} else {
$info[$field] = $result;
}
}
return $info;
}
} }

View File

@ -12,17 +12,12 @@ class ComicPressBackendAttachment extends ComicPressBackend {
$this->type = get_post_meta($this->attachment->ID, 'comic_image_type', true); $this->type = get_post_meta($this->attachment->ID, 'comic_image_type', true);
} }
function dims($size = 'comic') { function dims($size = null) {
$size = $this->ensure_type($size);
$comicpress = ComicPress::get_instance(); $comicpress = ComicPress::get_instance();
$dims = array(); $dims = array();
if (isset($comicpress->comicpress_options['image_types'])) { if (isset($comicpress->comicpress_options['image_types'])) {
if ($size == 'default') {
foreach ($comicpress->comicpress_options['image_types'] as $type => $info) {
if ($info['default']) { $size = $type; break; }
}
}
if (isset($comicpress->comicpress_options['image_types'][$size])) { if (isset($comicpress->comicpress_options['image_types'][$size])) {
if (isset($comicpress->comicpress_options['image_types'][$size]['dimensions'])) { if (isset($comicpress->comicpress_options['image_types'][$size]['dimensions'])) {
$dims = array_combine(array('width', 'height'), explode("x", $comicpress->comicpress_options['image_types'][$size]['dimensions'])); $dims = array_combine(array('width', 'height'), explode("x", $comicpress->comicpress_options['image_types'][$size]['dimensions']));
@ -44,24 +39,10 @@ class ComicPressBackendAttachment extends ComicPressBackend {
} }
// @codeCoverageIgnoreStart // @codeCoverageIgnoreStart
function embed($size = 'comic') { return $this->_embed_image($size); } function file($size = null) { return $this->attachment->guid; }
function file($size = 'comic') { return $this->attachment->guid; }
function alt() { return $this->attachment->post_title; } function alt() { return $this->attachment->post_title; }
function title() { return $this->attachment->post_excerpt; } function title() { return $this->attachment->post_excerpt; }
// @codeCoverageIgnoreEnd // @codeCoverageIgnoreEnd
function get_info($size = 'comic') {
$info = array();
foreach (array('dims', 'url', 'file') as $field) {
$result = $this->{$field}($size);
if (is_array($result)) {
$info = array_merge($info, $result);
} else {
$info[$field] = $result;
}
}
return $info;
}
} }
class ComicPressBackendAttachmentFactory { class ComicPressBackendAttachmentFactory {

View File

@ -21,6 +21,10 @@ class ComicPressBackendURL extends ComicPressBackend {
$valid_urls[$type] = $url; $valid_urls[$type] = $url;
if ($type == $default_type) { $key = substr(md5($url), 0, 10); } if ($type == $default_type) { $key = substr(md5($url), 0, 10); }
} }
} else {
if (strpos($type, '__') === 0) {
$valid_urls[$type] = $url;
}
} }
} }
} }
@ -30,6 +34,7 @@ class ComicPressBackendURL extends ComicPressBackend {
} }
} }
} }
update_post_meta($post->ID, 'backend_url_image_urls', $valid_url_groups); update_post_meta($post->ID, 'backend_url_image_urls', $valid_url_groups);
} }
} }
@ -44,6 +49,8 @@ class ComicPressBackendURL extends ComicPressBackend {
return false; return false;
} }
function dims($size = null) { return false; }
} }
class ComicPressBackendURLFactory { class ComicPressBackendURLFactory {
@ -57,7 +64,14 @@ class ComicPressBackendURLFactory {
if (isset($meta[$key])) { if (isset($meta[$key])) {
$backend = new ComicPressBackendURL(); $backend = new ComicPressBackendURL();
$backend->id = $id; $backend->id = $id;
$backend->urls_by_type = $meta[$key]; $backend->urls_by_type = array();
foreach ($meta[$key] as $k => $v) {
if (strpos($k, '__') === 0) {
$backend->{substr($k, 2)} = $v;
} else {
$backend->urls_by_type[$k] = $v;
}
}
return $backend; return $backend;
} }
} }
@ -119,7 +133,16 @@ class ComicPressBackendURLAdmin {
include('partials/backend-url/_editor.inc'); include('partials/backend-url/_editor.inc');
exit(0); exit(0);
} }
function save_post($post_id) {
if (ComicPressAdmin::verify_nonces() === 'handle_update_edit_form_advanced') {
if ($post = get_post($post_id)) {
ComicPressBackendURL::update_post_urls($post_id, $_REQUEST['cp']['url']);
}
}
}
} }
add_action('admin_menu', array('ComicPressBackendURLAdmin', 'admin_menu')); add_action('admin_menu', array('ComicPressBackendURLAdmin', 'admin_menu'));
add_action('comicpress-handle_update_backend_url_new_editor', array('ComicPressBackendURLAdmin', 'handle_update_backend_url_new_editor')); add_action('comicpress-handle_update_backend_url_new_editor', array('ComicPressBackendURLAdmin', 'handle_update_backend_url_new_editor'));
add_action('save_post', array('ComicPressBackendURLAdmin', 'save_post'), 10, 1);

View File

@ -1,14 +1,37 @@
<div class="comicpress-url-backend-holder"> <div class="comicpress-backend-url-holder">
<table class="widefat"> <table class="widefat">
<tr>
<td align="right" colspan="2">
<a class="comicpress-backend-url-deleter" href="#">X</a>
</td>
</tr>
<?php <?php
foreach ($comicpress->comicpress_options['image_types'] as $type => $info) { foreach ($comicpress->comicpress_options['image_types'] as $type => $info) {
$url = isset($backend->urls_by_type[$type]) ? $backend->urls_by_type[$type] : ''; ?> $url = isset($backend->urls_by_type[$type]) ? $backend->urls_by_type[$type] : ''; ?>
<tr> <tr>
<th scope="row"><?php echo esc_html($info['name']) ?></th> <th scope="row">
<?php echo esc_html($info['name']) ?>
<?php if (isset($info['default'])) { ?>
<?php if ($info['default']) { ?>
<em><?php _e('(required)', 'comicpress') ?></em>
<?php } ?>
<?php } ?>
</th>
<td><input type="text" style="width: 100%" name="cp[url][<?php echo esc_attr($backend->id) ?>][<?php echo esc_attr($type) ?>]" value="<?php echo esc_attr($url) ?>" /> <td><input type="text" style="width: 100%" name="cp[url][<?php echo esc_attr($backend->id) ?>][<?php echo esc_attr($type) ?>]" value="<?php echo esc_attr($url) ?>" />
</tr> </tr>
<?php <?php
} }
foreach (array(
'alt_text' => __('Image alt text', 'comicpress'),
'hover_text' => __('Hover/title text', 'comicpress')
) as $type => $label) {
$value = isset($backend->{$type}) ? $backend->{$type} : ''; ?>
<tr>
<th scope="row"><?php echo $label ?></th>
<td><input type="text" style="width: 100%" name="cp[url][<?php echo esc_attr($backend->id) ?>][__<?php echo $type ?>]" value="<?php echo esc_attr($value) ?>" />
</tr>
<?php }
?> ?>
</table> </table>
</div> </div>

View File

@ -7,6 +7,22 @@
</div> </div>
<a href="#" id="comicpress-backend-url-add-new">Add a new image</a> <a href="#" id="comicpress-backend-url-add-new">Add a new image</a>
<script type="text/javascript"> <script type="text/javascript">
(function() {
var set_up_deleters = function() {
$$('.comicpress-backend-url-holder').each(function(d) {
var deleter = d.select('.comicpress-backend-url-deleter').pop();
if (deleter) {
deleter.stopObserving();
deleter.observe('click', function(e) {
Event.stop(e);
if (confirm('Delete this image?')) {
d.remove();
}
});
}
});
};
$('comicpress-backend-url-add-new').observe('click', function(e) { $('comicpress-backend-url-add-new').observe('click', function(e) {
Event.stop(e); Event.stop(e);
new Ajax.Updater( new Ajax.Updater(
@ -17,8 +33,12 @@
'cp[_nonce]': ComicPressAdmin.nonce, 'cp[_nonce]': ComicPressAdmin.nonce,
'cp[action]': 'backend-url-new-editor', 'cp[action]': 'backend-url-new-editor',
'cp[_action_nonce]': '<?php echo esc_js(wp_create_nonce('comicpress-backend-url-new-editor')) ?>' 'cp[_action_nonce]': '<?php echo esc_js(wp_create_nonce('comicpress-backend-url-new-editor')) ?>'
} },
onComplete: set_up_deleters
} }
); );
}); });
set_up_deleters();
}());
</script> </script>

View File

@ -36,7 +36,7 @@ class ComicPressBackendTest extends PHPUnit_Framework_TestCase {
$backend = $this->getMock('ComicPressBackend', array('dims', 'url', 'alt', 'title')); $backend = $this->getMock('ComicPressBackend', array('dims', 'url', 'alt', 'title'));
$backend->expects($this->once())->method('dims')->with('comic')->will($this->returnValue($dims_result)); $backend->expects($this->once())->method('dims')->with('comic')->will($this->returnValue($dims_result));
$backend->expects($this->once())->method('url')->will($this->returnValue('http://comic')); $backend->expects($this->once())->method('url')->with('comic')->will($this->returnValue('http://comic'));
$backend->expects($this->once())->method('alt')->will($this->returnValue('alt')); $backend->expects($this->once())->method('alt')->will($this->returnValue('alt'));
$backend->expects($this->once())->method('title')->will($this->returnValue('title')); $backend->expects($this->once())->method('title')->will($this->returnValue('title'));
@ -67,4 +67,51 @@ class ComicPressBackendTest extends PHPUnit_Framework_TestCase {
$this->assertEquals($expected_result, ComicPressBackend::generate_from_id($id)); $this->assertEquals($expected_result, ComicPressBackend::generate_from_id($id));
} }
function providerTestEnsureType() {
return array(
array(null, 'comic'),
array('comic', 'comic'),
array('rss', 'rss')
);
}
/**
* @dataProvider providerTestEnsureType
*/
function testEnsureType($provided, $expected) {
$comicpress = ComicPress::get_instance();
$comicpress->comicpress_options = array(
'image_types' => array(
'comic' => array('default' => true),
'rss' => array('default' => false)
)
);
$this->assertEquals($expected, ComicPressBackend::ensure_type($provided));
}
function testGetEmbed() {
$ba = $this->getMock('ComicPressBackend', array('_embed_image', 'ensure_type'));
$ba->expects($this->once())->method('ensure_type')->with('test')->will($this->returnValue('ensured'));
$ba->expects($this->once())->method('_embed_image')->with('ensured')->will($this->returnValue('embed'));
$this->assertEquals('embed', $ba->embed('test'));
}
function testGetInfo() {
$ba = $this->getMock('ComicPressBackend', array('dims', 'url', 'file'), array(), 'Mock_ComicPressBackend', false);
$ba->expects($this->once())->method('dims')->will($this->returnValue(array('width' => 320, 'height' => 240)));
$ba->expects($this->once())->method('url')->will($this->returnValue('http://blah/file.jpg'));
$ba->expects($this->once())->method('file')->will($this->returnValue('/root/file.jpg'));
$this->assertEquals(array(
'width' => 320,
'height' => 240,
'url' => 'http://blah/file.jpg',
'file' => '/root/file.jpg'
), $ba->get_info());
}
} }

View File

@ -301,6 +301,13 @@ class ComicPressTest extends PHPUnit_Framework_TestCase {
), ),
'comic' 'comic'
), ),
array(
array(
'rss' => array(),
'comic' => array('default' => true),
),
'comic'
),
); );
} }

View File

@ -17,7 +17,7 @@ class ComicPressBackendAttachmentTest extends PHPUnit_Framework_TestCase {
array('comic', true, array()), array('comic', true, array()),
array('comic', array(), array()), array('comic', array(), array()),
array('comic', array('dimensions' => '300x200'), array('width' => 300, 'height' => 200)), array('comic', array('dimensions' => '300x200'), array('width' => 300, 'height' => 200)),
array('default', array('dimensions' => '300x200', 'default' => true), array('width' => 300, 'height' => 200)) array(null, array('default' => true, 'dimensions' => '300x200'), array('width' => 300, 'height' => 200)),
); );
} }
@ -40,30 +40,16 @@ class ComicPressBackendAttachmentTest extends PHPUnit_Framework_TestCase {
array(false, false), array(false, false),
array(true, false), array(true, false),
array(array(), false), array(array(), false),
array(array('url', 300, 200, false), 'url') array(array('url', 300, 200, false), 'url'),
array(array('url', 300, 200, false), 'url', null),
); );
} }
/** /**
* @dataProvider providerTestUrl * @dataProvider providerTestUrl
*/ */
function testUrl($image_downsize_result, $expected_result) { function testUrl($image_downsize_result, $expected_result, $which = 'comic') {
_set_image_downsize_result(1, 'comic', $image_downsize_result); _set_image_downsize_result(1, 'comic', $image_downsize_result);
$this->assertEquals($expected_result, $this->ba->url('comic')); $this->assertEquals($expected_result, $this->ba->url('comic'));
} }
function testGetInfo() {
$ba = $this->getMock('ComicPressBackendAttachment', array('dims', 'url', 'file'), array(), 'Mock_ComicPressBackendAttachment', false);
$ba->expects($this->once())->method('dims')->will($this->returnValue(array('width' => 320, 'height' => 240)));
$ba->expects($this->once())->method('url')->will($this->returnValue('http://blah/file.jpg'));
$ba->expects($this->once())->method('file')->will($this->returnValue('/root/file.jpg'));
$this->assertEquals(array(
'width' => 320,
'height' => 240,
'url' => 'http://blah/file.jpg',
'file' => '/root/file.jpg'
), $ba->get_info());
}
} }

View File

@ -43,6 +43,8 @@ class ComicPressBackendUrlFactoryTest extends PHPUnit_Framework_TestCase {
'comic' => 'comic', 'comic' => 'comic',
'rss' => 'rss' 'rss' => 'rss'
); );
$valid_backend->alt_text = 'alt text';
$valid_backend->hover_text = 'hover text';
return array( return array(
array('', false), array('', false),
@ -60,7 +62,14 @@ class ComicPressBackendUrlFactoryTest extends PHPUnit_Framework_TestCase {
function testGenerateFromID($id, $expected_result) { function testGenerateFromID($id, $expected_result) {
wp_insert_post((object)array('ID' => 1)); wp_insert_post((object)array('ID' => 1));
update_post_meta(1, 'backend_url_image_urls', array('12345' => array('comic' => 'comic', 'rss' => 'rss'))); update_post_meta(1, 'backend_url_image_urls', array(
'12345' => array(
'comic' => 'comic',
'rss' => 'rss',
'__alt_text' => 'alt text',
'__hover_text' => 'hover text'
)
));
$this->assertEquals($expected_result, $this->fa->generate_from_id($id)); $this->assertEquals($expected_result, $this->fa->generate_from_id($id));
} }

View File

@ -21,12 +21,16 @@ class ComicPressBackendUrlTest extends PHPUnit_Framework_TestCase {
'test' => array( 'test' => array(
'comic' => 'http://test/test', 'comic' => 'http://test/test',
'rss' => 'http://test/test2', 'rss' => 'http://test/test2',
'__alt_text' => 'alt text',
'__hover_text' => 'hover text',
) )
), ),
array( array(
$key => array( $key => array(
'comic' => 'http://test/test', 'comic' => 'http://test/test',
'rss' => 'http://test/test2' 'rss' => 'http://test/test2',
'__alt_text' => 'alt text',
'__hover_text' => 'hover text',
) )
), ),
) )

View File

@ -1,5 +1,3 @@
<?php <?php
set_include_path(realpath(dirname(__FILE__) . '/../classes') . PATH_SEPARATOR . get_include_path()); set_include_path(realpath(dirname(__FILE__) . '/../classes') . PATH_SEPARATOR . get_include_path());
?>