has common filename pattern and better generated from posts
This commit is contained in:
parent
4831a731d1
commit
88e26c8f7d
|
@ -84,6 +84,7 @@ class ComicPressBackendFilesystem extends ComicPressBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
function find_matching_files($patterns) {
|
function find_matching_files($patterns) {
|
||||||
|
$matches = array();
|
||||||
foreach ($patterns as $pattern) {
|
foreach ($patterns as $pattern) {
|
||||||
$dir = dirname($pattern);
|
$dir = dirname($pattern);
|
||||||
if (is_dir($dir)) {
|
if (is_dir($dir)) {
|
||||||
|
@ -93,7 +94,7 @@ class ComicPressBackendFilesystem extends ComicPressBackend {
|
||||||
$target = $dir . '/' . $file;
|
$target = $dir . '/' . $file;
|
||||||
if (is_file($target) || is_link($target)) {
|
if (is_file($target) || is_link($target)) {
|
||||||
if (preg_match('#' . $pattern. '#', $file) > 0) {
|
if (preg_match('#' . $pattern. '#', $file) > 0) {
|
||||||
return $target;
|
$matches[] = $target;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,7 +102,7 @@ class ComicPressBackendFilesystem extends ComicPressBackend {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return $matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
function generate_from_post($post) {
|
function generate_from_post($post) {
|
||||||
|
@ -118,6 +119,7 @@ class ComicPressBackendFilesystem extends ComicPressBackend {
|
||||||
|
|
||||||
if (isset($comicpress->comicpress_options['image_types'])) {
|
if (isset($comicpress->comicpress_options['image_types'])) {
|
||||||
$files = array();
|
$files = array();
|
||||||
|
$all_patterns = array();
|
||||||
foreach (array_keys($comicpress->comicpress_options['image_types']) as $type) {
|
foreach (array_keys($comicpress->comicpress_options['image_types']) as $type) {
|
||||||
$patterns = $this->process_search_string($post, $type);
|
$patterns = $this->process_search_string($post, $type);
|
||||||
if (!empty($patterns)) {
|
if (!empty($patterns)) {
|
||||||
|
@ -126,18 +128,28 @@ class ComicPressBackendFilesystem extends ComicPressBackend {
|
||||||
$files[$type] = $result;
|
$files[$type] = $result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$all_patterns = array_merge($all_patterns, $patterns);
|
||||||
}
|
}
|
||||||
if (!empty($files)) {
|
if (($filename_pattern = $this->has_common_filename_pattern($all_patterns)) !== false) {
|
||||||
$fs = new ComicPressBackendFilesystem();
|
if (!empty($files)) {
|
||||||
$fs->id = 'filesystem-' . $post->ID;
|
foreach ($this->group_by_root($filename_pattern, $files) as $root => $files_for_root) {
|
||||||
$fs->files_by_type = $files;
|
$fs = new ComicPressBackendFilesystem();
|
||||||
$return[] = $fs;
|
$fs->id = 'filesystem-' . $post->ID . '-' . $root;
|
||||||
|
$fs->files_by_type = $files_for_root;
|
||||||
|
$return[] = $fs;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function has_common_filename_pattern($patterns) {
|
||||||
|
$filename_patterns = array_unique(array_map('basename', $patterns));
|
||||||
|
return (count($filename_patterns) == 1) ? reset($filename_patterns) : false;
|
||||||
|
}
|
||||||
|
|
||||||
function group_by_root($filename_pattern, $all_files) {
|
function group_by_root($filename_pattern, $all_files) {
|
||||||
$roots = array();
|
$roots = array();
|
||||||
$filename_pattern = str_replace('*', '(.*)', basename($filename_pattern));
|
$filename_pattern = str_replace('*', '(.*)', basename($filename_pattern));
|
||||||
|
|
|
@ -66,12 +66,27 @@ class ComicPressBackendFilesystemTest extends PHPUnit_Framework_TestCase {
|
||||||
$this->assertEquals($expected_searches, $fs->process_search_string($posts[$post_id_to_use], 'comic'));
|
$this->assertEquals($expected_searches, $fs->process_search_string($posts[$post_id_to_use], 'comic'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function providerTestHasCommonFilenamePattern() {
|
||||||
|
return array(
|
||||||
|
array(array('/test/*.jpg', '/test2/*.jpg'), '*.jpg'),
|
||||||
|
array(array('/test/*.jpg', '/test2/*.gif'), false)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider providerTestHasCommonFilenamePattern
|
||||||
|
*/
|
||||||
|
function testHasCommonFilenamePattern($patterns, $expected_result) {
|
||||||
|
$this->assertTrue($expected_result === $this->fs->has_common_filename_pattern($patterns));
|
||||||
|
}
|
||||||
|
|
||||||
function providerTestFindMatchingFiles() {
|
function providerTestFindMatchingFiles() {
|
||||||
return array(
|
return array(
|
||||||
array(array('/blah'), false),
|
array(array('/blah'), array()),
|
||||||
array(array('/comic/2008-01-01.jpg'), false),
|
array(array('/comic/2008-01-01.jpg'), array()),
|
||||||
array(array('/comic/2009-01-01.jpg'), vfsStream::url('root/comic/2009-01-01.jpg')),
|
array(array('/comic/2009-01-01.jpg'), array(vfsStream::url('root/comic/2009-01-01.jpg'))),
|
||||||
array(array('/comic/2009-01-01-test.jpg'), vfsStream::url('root/comic/2009-01-01-test.jpg')),
|
array(array('/comic/2009-01-01-test.jpg'), array(vfsStream::url('root/comic/2009-01-01-test.jpg'))),
|
||||||
|
array(array('/comic/2009-01-01.jpg', '/comic/2009-01-02.jpg'), array(vfsStream::url('root/comic/2009-01-01.jpg'))),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,20 +116,30 @@ class ComicPressBackendFilesystemTest extends PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
$comicpress->comicpress_options['backend_options']['filesystem']['search_pattern'] = 'test';
|
$comicpress->comicpress_options['backend_options']['filesystem']['search_pattern'] = 'test';
|
||||||
|
|
||||||
$fs = $this->getMock('ComicPressBackendFilesystem', array('process_search_string', 'find_matching_files'));
|
$fs = $this->getMock('ComicPressBackendFilesystem', array('process_search_string', 'find_matching_files', 'group_by_root', 'has_common_filename_pattern'));
|
||||||
|
|
||||||
$fs->expects($this->at(0))->method('process_search_string')->with($post, 'comic')->will($this->returnValue(array('comic')));
|
$fs->expects($this->at(0))->method('process_search_string')->with($post, 'comic')->will($this->returnValue(array('comic')));
|
||||||
$fs->expects($this->at(1))->method('find_matching_files')->with(array('comic'))->will($this->returnValue('comic'));
|
$fs->expects($this->at(1))->method('find_matching_files')->with(array('comic'))->will($this->returnValue(array('comic')));
|
||||||
$fs->expects($this->at(2))->method('process_search_string')->with($post, 'rss')->will($this->returnValue(array('rss')));
|
$fs->expects($this->at(2))->method('process_search_string')->with($post, 'rss')->will($this->returnValue(array('rss')));
|
||||||
$fs->expects($this->at(3))->method('find_matching_files')->with(array('rss'))->will($this->returnValue('rss'));
|
$fs->expects($this->at(3))->method('find_matching_files')->with(array('rss'))->will($this->returnValue(array('rss')));
|
||||||
|
$fs->expects($this->at(4))->method('has_common_filename_pattern')->with(array('comic', 'rss'))->will($this->returnValue('test'));
|
||||||
|
$fs->expects($this->at(5))->method('group_by_root')->with('test', array(
|
||||||
|
'comic' => array('comic'),
|
||||||
|
'rss' => array('rss')
|
||||||
|
))->will($this->returnValue(array(
|
||||||
|
'root' => array(
|
||||||
|
'comic' => array('comic'),
|
||||||
|
'rss' => array('rss'),
|
||||||
|
)
|
||||||
|
)));
|
||||||
|
|
||||||
$return = $fs->generate_from_post($post);
|
$return = $fs->generate_from_post($post);
|
||||||
|
|
||||||
$this->assertEquals(1, count($return));
|
$this->assertEquals(1, count($return));
|
||||||
$this->assertEquals('filesystem-1', $return[0]->id);
|
$this->assertEquals('filesystem-1-root', $return[0]->id);
|
||||||
$this->assertEquals(array(
|
$this->assertEquals(array(
|
||||||
'comic' => 'comic',
|
'comic' => array('comic'),
|
||||||
'rss' => 'rss'
|
'rss' => array('rss')
|
||||||
), $return[0]->files_by_type);
|
), $return[0]->files_by_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue