2009-12-02 02:07:10 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
class ComicPressMediaHandling {
|
2009-12-02 02:37:28 +00:00
|
|
|
var $root_filter = '%wordpress%/%type-folder%/';
|
2009-12-02 02:14:54 +00:00
|
|
|
var $default_filter = '%wordpress%/%type-folder%/%date-Y-m-d%*.*';
|
|
|
|
|
2009-12-02 02:07:10 +00:00
|
|
|
function _bundle_global_variables() {
|
|
|
|
global $comic_folder, $archive_comic_folder, $rss_comic_folder, $mini_comic_folder;
|
|
|
|
|
|
|
|
$bundle = array();
|
|
|
|
foreach (array('comic', 'archive', 'rss', 'mini') as $which) {
|
|
|
|
switch ($which) {
|
|
|
|
case 'comic':
|
|
|
|
$bundle['comic'] = $comic_folder;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
$bundle[$which] = ${"${which}_comic_folder"};
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $bundle;
|
|
|
|
}
|
2009-12-02 02:14:54 +00:00
|
|
|
|
|
|
|
function _get_filter($filter_to_use = null) {
|
|
|
|
global $comic_filename_filters;
|
|
|
|
|
|
|
|
if (!is_null($filter_to_use)) {
|
|
|
|
if (is_string($filter_to_use)) {
|
|
|
|
if (isset($comic_filename_filters[$filter_to_use])) {
|
2009-12-02 02:37:28 +00:00
|
|
|
return $this->_convert_to_percent_filter($comic_filename_filters[$filter_to_use]);
|
2009-12-02 02:14:54 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this->default_filter;
|
|
|
|
}
|
|
|
|
|
2009-12-02 02:37:28 +00:00
|
|
|
function _convert_to_percent_filter($old) {
|
|
|
|
if (strpos(strtolower($old), '%wordpress%') !== 0) {
|
|
|
|
$old = str_replace('{date}', '%date-Y-m-d%', $old);
|
|
|
|
return $this->root_filter . $old;
|
|
|
|
}
|
|
|
|
return $old;
|
|
|
|
}
|
|
|
|
|
2009-12-02 02:53:46 +00:00
|
|
|
function _expand_filter($filter, $type_folder, $override_post = null) {
|
2009-12-02 02:37:28 +00:00
|
|
|
global $post;
|
|
|
|
$this->post_to_use = !is_null($override_post) ? $override_post : $post;
|
2009-12-02 02:53:46 +00:00
|
|
|
$this->type_folder = $type_folder;
|
2009-12-02 02:37:28 +00:00
|
|
|
|
|
|
|
$result = preg_replace_callback('#%([a-z0-9-]+)%#i', array(&$this, '_expand_filter_callback'), $filter);
|
|
|
|
$result = str_replace('.', '\.', $result);
|
|
|
|
$result = str_replace('*', '.*', $result);
|
|
|
|
|
|
|
|
unset($this->post_to_use);
|
2009-12-02 02:53:46 +00:00
|
|
|
unset($this->type_folder);
|
2009-12-02 02:37:28 +00:00
|
|
|
|
|
|
|
return $result;
|
|
|
|
}
|
|
|
|
|
2009-12-02 03:13:21 +00:00
|
|
|
// @codeCoverageIgnoreStart
|
2009-12-02 02:40:40 +00:00
|
|
|
function _abspath() {
|
2009-12-02 03:27:54 +00:00
|
|
|
return realpath(ABSPATH);
|
2009-12-02 02:40:40 +00:00
|
|
|
}
|
2009-12-02 03:13:21 +00:00
|
|
|
// @codeCoverageIgnoreEnd
|
2009-12-02 02:37:28 +00:00
|
|
|
|
|
|
|
function _expand_filter_callback($matches) {
|
|
|
|
$value = '';
|
|
|
|
switch (strtolower($matches[1])) {
|
|
|
|
case 'wordpress':
|
2009-12-02 03:13:21 +00:00
|
|
|
$value = $this->_abspath();
|
2009-12-02 02:37:28 +00:00
|
|
|
break;
|
|
|
|
case 'type-folder':
|
2009-12-02 02:53:46 +00:00
|
|
|
$value = $this->type_folder;
|
2009-12-02 02:37:28 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
if (preg_match('#^date-(.*)$#', $matches[1], $date_matches) > 0) {
|
|
|
|
$value = date($date_matches[1], strtotime($this->post_to_use->post_date));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
$value = $matches[0];
|
|
|
|
break;
|
|
|
|
}
|
2009-12-02 02:53:46 +00:00
|
|
|
return apply_filters('comicpress_expand_filter_callback', $value, $matches);
|
|
|
|
}
|
|
|
|
|
|
|
|
function _read_directory($pattern) {
|
|
|
|
$dirname = dirname($pattern);
|
|
|
|
$results = false;
|
|
|
|
if (is_dir($dirname)) {
|
|
|
|
$results = array();
|
|
|
|
if (($dh = opendir($dirname)) !== false) {
|
|
|
|
$filename_pattern = str_replace('#', '\#', basename($pattern));
|
|
|
|
while (($file = readdir($dh)) !== false) {
|
|
|
|
$target = $dirname . '/' . $file;
|
|
|
|
if (is_file($target)) {
|
2009-12-02 03:27:54 +00:00
|
|
|
if (preg_match("#^${filename_pattern}$#", $file) > 0) {
|
2009-12-02 02:53:46 +00:00
|
|
|
$results[] = $target;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2009-12-02 03:27:54 +00:00
|
|
|
closedir($dh);
|
2009-12-02 02:53:46 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return $results;
|
2009-12-02 02:37:28 +00:00
|
|
|
}
|
2009-12-02 02:14:54 +00:00
|
|
|
|
2009-12-02 03:27:54 +00:00
|
|
|
/**
|
|
|
|
* Get the comic path.
|
|
|
|
* @param string $type The type to retrieve.
|
|
|
|
* @param object $override_post The post to use in place of the Loop post.
|
|
|
|
* @param string $filter The filter to use.
|
|
|
|
* @param boolean $multi If true, return all matching files.
|
|
|
|
* @return string|array|boolean A single comic URI relative to the WordPress base, multiple comic URIs, or false if an error occurred.
|
|
|
|
*/
|
2009-12-02 02:37:28 +00:00
|
|
|
function get_comic_path($type = 'comic', $override_post = null, $filter = 'default', $multi = false) {
|
2009-12-02 02:53:46 +00:00
|
|
|
global $post;
|
|
|
|
$post_to_use = !is_null($override_post) ? $override_post : $post;
|
|
|
|
|
2009-12-02 03:27:54 +00:00
|
|
|
$filter = $this->_get_filter($filter);
|
2009-12-02 02:53:46 +00:00
|
|
|
$globals = $this->_bundle_global_variables();
|
|
|
|
|
|
|
|
if (isset($globals[$type])) {
|
|
|
|
$filter = $this->_expand_filter($filter, $globals[$type], $post_to_use);
|
2009-12-02 03:13:21 +00:00
|
|
|
|
|
|
|
if (is_array($results = $this->_read_directory($filter))) {
|
|
|
|
if (($pre_handle = apply_filters('comicpress_pre_handle_comic_path_results', false, $results, $type, $post_to_use)) !== false) {
|
|
|
|
return $pre_handle;
|
|
|
|
}
|
2009-12-02 03:27:54 +00:00
|
|
|
|
|
|
|
$new_results = array();
|
|
|
|
foreach ($results as $result) {
|
|
|
|
$new_results[] = str_replace($this->_abspath(), '', $result);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($multi) {
|
|
|
|
return $new_results;
|
|
|
|
} else {
|
|
|
|
return reset($new_results);
|
|
|
|
}
|
2009-12-02 03:13:21 +00:00
|
|
|
}
|
2009-12-02 02:53:46 +00:00
|
|
|
}
|
2009-12-02 03:27:54 +00:00
|
|
|
return false;
|
2009-12-02 02:14:54 +00:00
|
|
|
}
|
2009-12-02 02:07:10 +00:00
|
|
|
}
|