2009-07-08 23:51:02 +00:00
|
|
|
<?php
|
|
|
|
|
2009-07-13 23:14:17 +00:00
|
|
|
/**
|
|
|
|
* The core functions of ComicPress.
|
|
|
|
*/
|
2009-07-08 23:51:02 +00:00
|
|
|
class ComicPress {
|
|
|
|
var $comicpress_options = array(
|
2009-07-21 17:40:24 +00:00
|
|
|
'comic_category_id' => 1,
|
|
|
|
'comic_dimensions' => '760x',
|
|
|
|
'rss_dimensions' => '350x',
|
|
|
|
'archive_dimensions' => '125x',
|
|
|
|
'mini_dimensions' => '100x',
|
|
|
|
'category_order' => false,
|
|
|
|
'blogpost_count' => 10,
|
|
|
|
'comic_space' => 'comic_only',
|
2009-07-29 02:38:20 +00:00
|
|
|
'category_usage' => 'storyline',
|
2009-07-28 02:09:20 +00:00
|
|
|
'layout' => 'classic.inc',
|
2009-08-06 02:29:54 +00:00
|
|
|
'helpers' => array(),
|
2009-08-23 20:44:54 +00:00
|
|
|
'override_partials' => array(),
|
|
|
|
'addons' => array()
|
2009-07-08 23:51:02 +00:00
|
|
|
);
|
2009-07-09 02:38:43 +00:00
|
|
|
|
2009-07-13 23:14:13 +00:00
|
|
|
var $additional_stylesheets = array();
|
2009-07-15 02:24:31 +00:00
|
|
|
var $additional_javascripts = array();
|
|
|
|
|
2009-07-10 11:48:20 +00:00
|
|
|
var $comic_post_attachments_cache = array();
|
2009-07-09 02:38:43 +00:00
|
|
|
var $category_tree = array();
|
2009-07-16 01:55:28 +00:00
|
|
|
|
|
|
|
var $partial_paths = array();
|
2009-07-23 21:13:53 +00:00
|
|
|
var $layouts = null;
|
2009-07-16 01:55:28 +00:00
|
|
|
|
2009-07-13 23:14:13 +00:00
|
|
|
/**
|
|
|
|
* Load ComicPress options.
|
|
|
|
*/
|
2009-07-08 23:51:02 +00:00
|
|
|
function load() {
|
|
|
|
$result = get_option('comicpress-options');
|
|
|
|
if (is_array($result)) {
|
2009-07-11 19:39:05 +00:00
|
|
|
$this->comicpress_options = array_merge($this->comicpress_options, $result);
|
2009-07-08 23:51:02 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-07-13 23:14:13 +00:00
|
|
|
/**
|
|
|
|
* Save ComicPress options.
|
|
|
|
*/
|
2009-07-08 23:51:02 +00:00
|
|
|
function save() {
|
|
|
|
if (is_array($this->comicpress_options)) {
|
|
|
|
update_option('comicpress-options', $this->comicpress_options);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-07-13 23:14:13 +00:00
|
|
|
/**
|
|
|
|
* Initialize the class.
|
|
|
|
*/
|
2009-07-08 23:51:02 +00:00
|
|
|
function init() {
|
|
|
|
$this->load();
|
2009-07-09 02:38:43 +00:00
|
|
|
$this->get_all_category_objects_by_id();
|
|
|
|
$this->flatten_categories();
|
|
|
|
$this->separate_categories();
|
|
|
|
$this->sort_comic_categories();
|
2009-07-13 23:06:32 +00:00
|
|
|
|
|
|
|
add_action('wp_head', array(&$this, 'wp_head'));
|
2009-07-29 23:13:20 +00:00
|
|
|
add_filter('comicpress_nav', array(&$this, 'comicpress_nav'), 10, 2);
|
|
|
|
add_filter('comicpress_nav_fields', array(&$this, 'comicpress_nav_fields'));
|
2009-07-28 02:09:20 +00:00
|
|
|
|
|
|
|
if (current_user_can('edit_themes')) {
|
|
|
|
if (!empty($this->comicpress_options['helpers'])) {
|
|
|
|
if (isset($this->comicpress_options['helpers']['show_partials_info'])) {
|
|
|
|
add_filter('comicpress_partial', array(&$this, 'comicpress_partial'), 10, 2);
|
|
|
|
add_action('wp_head', array(&$this, 'setup_comicpress_partial'));
|
|
|
|
}
|
|
|
|
|
|
|
|
add_action('wp_footer', array(&$this, 'announce_activated_helpers'));
|
|
|
|
}
|
|
|
|
}
|
2009-08-04 02:47:17 +00:00
|
|
|
|
|
|
|
add_filter('intermediate_image_sizes', array(&$this, 'intermediate_image_sizes'));
|
|
|
|
|
|
|
|
foreach (array('comic', 'rss', 'archive', 'mini') as $size) {
|
|
|
|
list($w, $h) = explode("x", $this->comicpress_options["${size}_dimensions"]);
|
|
|
|
update_option("${size}_size_w", $w);
|
|
|
|
update_option("${size}_size_h", $h);
|
|
|
|
update_option("${size}_crop", 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function intermediate_image_sizes($sizes) {
|
|
|
|
return array_merge($sizes, array('comic', 'rss', 'archive', 'mini'));
|
2009-07-13 23:06:32 +00:00
|
|
|
}
|
|
|
|
|
2009-07-29 02:38:20 +00:00
|
|
|
function needs_storyline_nav() {
|
|
|
|
return (count($this->category_tree) > 1) && ($this->comicpress_options['category_usage'] == "storyline");
|
|
|
|
}
|
|
|
|
|
|
|
|
function is_multicomic() {
|
|
|
|
return $this->comicpress_options['category_usage'] == "multicomic";
|
|
|
|
}
|
2009-07-29 23:13:20 +00:00
|
|
|
|
|
|
|
function comicpress_nav($type, $content) {
|
|
|
|
return $type;
|
|
|
|
}
|
|
|
|
|
|
|
|
function comicpress_nav_fields($nav_fields) {
|
|
|
|
$nav_fields = array(
|
|
|
|
'first' => '‹‹ ' . __('First', 'comicpress'),
|
|
|
|
'previous' => '‹ ' . __('Previous', 'comicpress'),
|
|
|
|
'next' => __('Next', 'comicpress') . ' ›',
|
|
|
|
'last' => __('Last', 'comicpress') . ' ››'
|
|
|
|
);
|
|
|
|
|
|
|
|
if ($this->needs_storyline_nav()) {
|
|
|
|
$nav_fields = array_merge(
|
|
|
|
array('prior' => '‹‹ ' . __('Prior Storyline', 'comicpress')),
|
|
|
|
$nav_fields,
|
|
|
|
array('upcoming' => __('Upcoming Storyline', 'comicpress') . ' ››')
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $nav_fields;
|
|
|
|
}
|
2009-07-29 02:38:20 +00:00
|
|
|
|
2009-07-13 23:06:32 +00:00
|
|
|
function wp_head() {
|
|
|
|
foreach ($this->additional_stylesheets as $uri) { ?>
|
|
|
|
<link rel="stylesheet" href="<?php echo get_template_directory_uri() . $uri ?>" type="text/css" />
|
|
|
|
<?php }
|
2009-07-15 02:24:31 +00:00
|
|
|
foreach ($this->additional_javascripts as $uri) { ?>
|
|
|
|
<script type="text/javascript" src="<?php echo get_template_directory_uri() . $uri ?>"></script>
|
|
|
|
<?php }
|
2009-07-08 23:54:56 +00:00
|
|
|
}
|
2009-07-28 02:09:20 +00:00
|
|
|
|
|
|
|
function announce_activated_helpers() {
|
|
|
|
echo "<center>[ <strong>Activated ComicPress helpers:</strong> " . implode(", ", array_keys($this->comicpress_options['helpers'])) . " ]</center>";
|
|
|
|
}
|
|
|
|
|
|
|
|
function setup_comicpress_partial() { ?>
|
|
|
|
<style type="text/css">
|
|
|
|
.partial-helper {
|
|
|
|
position: absolute;
|
|
|
|
z-index: 100;
|
|
|
|
padding: 4px;
|
|
|
|
border: solid #333 1px;
|
2009-07-28 02:10:40 +00:00
|
|
|
background-color: #99d;
|
|
|
|
opacity: 0.2;
|
|
|
|
-moz-opacity: 0.2;
|
|
|
|
-khtml-opacity: 0.2;
|
2009-07-28 02:09:20 +00:00
|
|
|
zoom: 1;
|
|
|
|
cursor: crosshair
|
|
|
|
}
|
|
|
|
|
|
|
|
.partial-helper:hover {
|
|
|
|
opacity: 1;
|
|
|
|
-moz-opacity: 1;
|
|
|
|
-khtml-opacity: 1;
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
<!--[if IE gte 6]>
|
|
|
|
<style type="text/css">
|
2009-07-28 02:10:40 +00:00
|
|
|
.partial-helper { filter: alpha(opacity=20); }
|
2009-07-28 02:09:20 +00:00
|
|
|
.partial-helper:hover { filter: alpha(opacity=100); }
|
|
|
|
</style>
|
|
|
|
<![endif]-->
|
|
|
|
<?php }
|
|
|
|
|
|
|
|
function comicpress_partial($content, $target) {
|
2009-08-06 02:29:54 +00:00
|
|
|
return '<div class="partial-helper">' . str_replace(get_template_directory() . DIRECTORY_SEPARATOR, '', $target) . '</div>' . $content;
|
2009-07-28 02:09:20 +00:00
|
|
|
}
|
2009-07-11 19:39:05 +00:00
|
|
|
|
2009-07-09 02:38:43 +00:00
|
|
|
/**
|
|
|
|
* Flatten all WP categories into nodes like 0/3/5.
|
2009-07-19 23:08:49 +00:00
|
|
|
* @tested
|
2009-07-09 02:38:43 +00:00
|
|
|
*/
|
|
|
|
function flatten_categories() {
|
|
|
|
$this->category_tree = array();
|
|
|
|
|
|
|
|
foreach (array_keys($this->categories_by_id) as $category_id) {
|
|
|
|
$this->category_tree[] = $this->categories_by_id[$category_id]->parent . '/' . $category_id;
|
|
|
|
}
|
|
|
|
|
|
|
|
do {
|
|
|
|
$all_ok = true;
|
|
|
|
for ($i = 0; $i < count($this->category_tree); ++$i) {
|
|
|
|
$current_parts = explode("/", $this->category_tree[$i]);
|
|
|
|
if (reset($current_parts) != 0) {
|
|
|
|
|
|
|
|
$all_ok = false;
|
|
|
|
for ($j = 0; $j < count($this->category_tree); ++$j) {
|
|
|
|
$j_parts = explode("/", $this->category_tree[$j]);
|
|
|
|
|
|
|
|
if (end($j_parts) == reset($current_parts)) {
|
|
|
|
$this->category_tree[$i] = implode("/", array_merge($j_parts, array_slice($current_parts, 1)));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} while (!$all_ok);
|
|
|
|
|
|
|
|
return $this->category_tree;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Separate categories into comics and non-comics categories.
|
2009-07-19 23:08:49 +00:00
|
|
|
* @tested
|
2009-07-09 02:38:43 +00:00
|
|
|
*/
|
|
|
|
function separate_categories() {
|
|
|
|
$comic_categories = array();
|
|
|
|
$non_comic_categories = array();
|
|
|
|
|
|
|
|
foreach ($this->category_tree as $node) {
|
|
|
|
$parts = split("/", $node);
|
|
|
|
if ($parts[1] == $this->comicpress_options['comic_category_id']) {
|
|
|
|
$comic_categories[] = $node;
|
|
|
|
} else {
|
|
|
|
$non_comic_categories[] = $node;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->category_tree = $comic_categories;
|
|
|
|
$this->non_comic_categories = $non_comic_categories;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sort the category tree, adding in new categories in the order as necessary.
|
2009-07-19 23:08:49 +00:00
|
|
|
* @tested
|
2009-07-09 02:38:43 +00:00
|
|
|
*/
|
|
|
|
function sort_comic_categories() {
|
|
|
|
if (is_array($this->comicpress_options['category_order'])) {
|
|
|
|
$new_order = array();
|
|
|
|
foreach ($this->comicpress_options['category_order'] as $node) {
|
|
|
|
if (in_array($node, $this->category_tree)) {
|
|
|
|
$new_order[] = $node;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($this->category_tree as $node) {
|
|
|
|
if (!in_array($node, $this->comicpress_options['category_order'])) {
|
|
|
|
$new_order[] = $node;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->category_tree = $new_order;;
|
|
|
|
}
|
|
|
|
return $this->category_tree;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Turn the list of categories into a hash table of category objects.
|
|
|
|
*/
|
|
|
|
function get_all_category_objects_by_id() {
|
|
|
|
if (empty($this->categories_by_id)) {
|
|
|
|
$this->categories_by_id = array();
|
|
|
|
foreach (get_categories("hide_empty=0") as $category_object) {
|
|
|
|
$this->categories_by_id[$category_object->term_id] = $category_object;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $this->categories_by_id;
|
|
|
|
}
|
2009-07-09 03:01:11 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Turn the tree of comics categories into a string to be fed into wp_query functions.
|
2009-07-19 23:08:49 +00:00
|
|
|
* @tested
|
2009-07-09 03:01:11 +00:00
|
|
|
*/
|
|
|
|
function get_all_comic_categories_as_cat_string() {
|
|
|
|
if (empty($this->all_comic_categories_as_string)) {
|
|
|
|
$categories = array();
|
|
|
|
foreach ($this->category_tree as $node) {
|
|
|
|
$categories[] = end(explode("/", $node));
|
|
|
|
}
|
|
|
|
$this->all_comic_categories_as_string = implode(",", $categories);
|
|
|
|
}
|
|
|
|
return $this->all_comic_categories_as_string;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Return true if the current post is in the comics category or a child category.
|
2009-07-19 23:08:49 +00:00
|
|
|
* @tested
|
2009-07-09 03:01:11 +00:00
|
|
|
*/
|
2009-07-15 02:24:31 +00:00
|
|
|
function in_comic_category($post_id = null) {
|
|
|
|
global $post;
|
|
|
|
|
|
|
|
$post_id_to_use = !is_null($post_id) ? $post_id : $post->ID;
|
|
|
|
|
|
|
|
$categories = wp_get_post_categories($post_id_to_use);
|
2009-07-09 03:01:11 +00:00
|
|
|
if (is_array($categories)) {
|
|
|
|
foreach ($this->category_tree as $node) {
|
|
|
|
if (in_array(end(explode("/", $node)), $categories)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
2009-07-09 04:53:15 +00:00
|
|
|
|
2009-07-13 23:14:13 +00:00
|
|
|
/**
|
|
|
|
* Get the comics necessary to build the navigation.
|
2009-07-19 23:09:08 +00:00
|
|
|
* @tested
|
2009-07-13 23:14:13 +00:00
|
|
|
*/
|
2009-07-25 17:15:13 +00:00
|
|
|
function get_nav_comics($override_category_id = null) {
|
2009-07-12 23:31:47 +00:00
|
|
|
global $post;
|
|
|
|
|
2009-07-25 17:15:13 +00:00
|
|
|
$category = is_numeric($override_category_id) ? $override_category_id : $this->comicpress_options['comic_category_id'];
|
|
|
|
|
2009-07-11 19:39:05 +00:00
|
|
|
$comic_posts = array();
|
|
|
|
foreach (array('first', 'last', 'previous', 'next') as $which) {
|
2009-07-25 17:15:13 +00:00
|
|
|
$comic_posts[$which] = $this->{"get_${which}_comic"}($category);
|
2009-07-11 19:39:05 +00:00
|
|
|
}
|
|
|
|
|
2009-07-19 23:08:58 +00:00
|
|
|
$comic_posts['show_first'] = (trim($post->ID) != trim($comic_posts['first']->ID));
|
|
|
|
$comic_posts['show_previous'] = (!empty($comic_posts['previous']) && (trim($comic_posts['first']->ID) != trim($comic_posts['previous']->ID)));
|
|
|
|
$comic_posts['show_next'] = (!empty($comic_posts['next']) && (trim($comic_posts['last']->ID) != trim($comic_posts['next']->ID)));
|
2009-07-12 23:31:47 +00:00
|
|
|
$comic_posts['show_last'] = (trim($post->ID) != trim($comic_posts['last']->ID));
|
2009-07-11 19:39:05 +00:00
|
|
|
|
2009-07-29 23:13:20 +00:00
|
|
|
if ($this->needs_storyline_nav()) {
|
|
|
|
$comic_posts = array_merge($comic_posts, $this->get_storyline_nav_comics());
|
|
|
|
}
|
|
|
|
|
|
|
|
return $comic_posts;
|
|
|
|
}
|
|
|
|
|
|
|
|
function get_storyline_nav_comics() {
|
|
|
|
$comic_posts = array('prior' => false, 'upcoming' => false);
|
|
|
|
foreach ($this->get_sorted_post_categories() as $category_id) {
|
|
|
|
$prev_next_categories = $this->get_previous_next_categories($category_id);
|
|
|
|
|
|
|
|
foreach ($prev_next_categories as $master_id => $cat_list) {
|
|
|
|
foreach ($cat_list as $which => $id) {
|
|
|
|
switch ($which) {
|
|
|
|
case "previous":
|
|
|
|
$terminal_post = $this->get_last_comic($id);
|
|
|
|
$which_field = "prior";
|
|
|
|
break;
|
|
|
|
case "next":
|
|
|
|
$terminal_post = $this->get_first_comic($id);
|
|
|
|
$which_field = "upcoming";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (is_object($terminal_post)) {
|
|
|
|
$comic_posts[$which_field] = $terminal_post;
|
|
|
|
$comic_posts["show_${which_field}"] =true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (count($terminal_post) == 2) { break; }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2009-07-11 19:39:05 +00:00
|
|
|
return $comic_posts;
|
2009-07-09 04:57:00 +00:00
|
|
|
}
|
|
|
|
|
2009-07-13 23:14:13 +00:00
|
|
|
/**
|
|
|
|
* Get the comic post adjacent to the current comic.
|
|
|
|
*/
|
2009-07-11 19:39:05 +00:00
|
|
|
function get_adjacent_comic($category, $next = false, $override_post = null) {
|
|
|
|
global $wp_query, $post;
|
|
|
|
$temp = $wp_query->is_single;
|
|
|
|
$wp_query->is_single = true;
|
|
|
|
|
|
|
|
if (!is_null($override_post)) {
|
|
|
|
$temp_post = $post;
|
|
|
|
$post = $override_post;
|
|
|
|
}
|
|
|
|
|
|
|
|
$categories_to_exclude = $this->get_leaves_of_tree($this->non_comic_categories);
|
2009-07-10 11:48:20 +00:00
|
|
|
if (!is_null($category)) {
|
2009-07-11 19:39:05 +00:00
|
|
|
$categories_to_exclude = $this->exclude_all_but_provided_categories($category);
|
2009-07-10 11:48:20 +00:00
|
|
|
}
|
2009-07-11 19:39:05 +00:00
|
|
|
|
|
|
|
$result = get_adjacent_post(false, implode(" and ", $categories_to_exclude), !$next);
|
2009-07-10 11:48:20 +00:00
|
|
|
|
2009-07-11 19:39:05 +00:00
|
|
|
$wp_query->is_single = $temp;
|
|
|
|
|
|
|
|
if (!is_null($override_post)) {
|
|
|
|
$post = $temp_post;
|
|
|
|
}
|
|
|
|
|
|
|
|
return empty($result) ? false : $result;
|
2009-07-09 04:57:00 +00:00
|
|
|
}
|
|
|
|
|
2009-07-10 11:48:20 +00:00
|
|
|
/**
|
|
|
|
* Given a category ID or an array of category IDs, create an exclusion string that will
|
|
|
|
* filter out every category but the provided ones.
|
|
|
|
*/
|
|
|
|
function get_string_to_exclude_all_but_provided_categories($category) {
|
2009-07-13 23:14:13 +00:00
|
|
|
return implode(",", $this->exclude_all_but_provided_categories($category));
|
2009-07-10 11:48:20 +00:00
|
|
|
}
|
2009-07-11 19:39:05 +00:00
|
|
|
|
2009-07-13 23:14:13 +00:00
|
|
|
/**
|
|
|
|
* Exclude every category but the given one.
|
|
|
|
*/
|
2009-07-11 19:39:05 +00:00
|
|
|
function exclude_all_but_provided_categories($category) {
|
|
|
|
$category_ids = array_keys($this->get_all_category_objects_by_id());
|
2009-07-13 23:14:13 +00:00
|
|
|
if (!is_array($category)) { $category = array($category); }
|
|
|
|
return array_diff($category_ids, $category);
|
2009-07-11 19:39:05 +00:00
|
|
|
}
|
|
|
|
|
2009-07-13 23:14:13 +00:00
|
|
|
/**
|
|
|
|
* Gets the leaves of a ComicPress node tree (branches look like "0/4/5").
|
|
|
|
*/
|
2009-07-11 19:39:05 +00:00
|
|
|
function get_leaves_of_tree($tree) {
|
|
|
|
$leaves = array();
|
|
|
|
foreach ($tree as $branch) { $leaves[] = end(explode("/", $branch)); }
|
|
|
|
return $leaves;
|
|
|
|
}
|
2009-07-10 11:48:20 +00:00
|
|
|
|
2009-07-13 23:14:13 +00:00
|
|
|
/**
|
|
|
|
* Get a new WP_Query object.
|
|
|
|
*/
|
2009-07-09 04:53:15 +00:00
|
|
|
function _new_wp_query() {
|
|
|
|
return new WP_Query();
|
|
|
|
}
|
2009-07-10 11:48:20 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the previous comic from the current one.
|
|
|
|
*/
|
2009-07-11 19:39:05 +00:00
|
|
|
function get_previous_comic($category = null, $override_post = null) { return $this->get_adjacent_comic($category, false, $override_post); }
|
2009-07-10 11:48:20 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the next comic from the current one.
|
|
|
|
*/
|
2009-07-11 19:39:05 +00:00
|
|
|
function get_next_comic($category = null, $override_post = null) { return $this->get_adjacent_comic($category, true, $override_post); }
|
2009-07-19 23:08:27 +00:00
|
|
|
|
2009-07-19 23:10:31 +00:00
|
|
|
/**
|
|
|
|
* Get the path to a partial.
|
|
|
|
* @param array $partials The partials to search for in each path.
|
|
|
|
* @return string|boolean The partial path to use, or false if no matches.
|
|
|
|
*/
|
2009-07-19 23:08:27 +00:00
|
|
|
function get_partial_path($partials) {
|
|
|
|
foreach ($partials as $partial) {
|
2009-07-19 23:20:13 +00:00
|
|
|
foreach ($this->partial_paths as $path) {
|
2009-07-19 23:08:27 +00:00
|
|
|
$target = $path . '/' . $partial . '.inc';
|
|
|
|
if (file_exists($target)) {
|
2009-07-19 23:10:31 +00:00
|
|
|
return $target;
|
2009-07-19 23:08:27 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2009-07-19 23:10:31 +00:00
|
|
|
return false;
|
2009-07-19 23:08:27 +00:00
|
|
|
}
|
2009-07-19 23:20:23 +00:00
|
|
|
|
2009-08-06 02:29:54 +00:00
|
|
|
function get_options_partial($partials) {
|
|
|
|
foreach ($partials as $partial) {
|
|
|
|
foreach ($this->partial_paths as $path) {
|
|
|
|
$target = str_replace(get_template_directory() . DIRECTORY_SEPARATOR, '', $path) . DIRECTORY_SEPARATOR . $partial;
|
|
|
|
|
|
|
|
if (isset($this->comicpress_options['override_partials'][$target])) {
|
|
|
|
return array($target, $this->comicpress_options['override_partials'][$target]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2009-07-19 23:20:23 +00:00
|
|
|
/**
|
|
|
|
* Gather blog posts for the given index page.
|
|
|
|
*/
|
2009-07-23 23:33:16 +00:00
|
|
|
function get_index_blog_posts_query() {
|
2009-07-19 23:20:23 +00:00
|
|
|
global $post, $paged;
|
|
|
|
|
|
|
|
$t = $post;
|
|
|
|
|
|
|
|
$wp_query = new WP_Query();
|
|
|
|
$wp_query->query(
|
|
|
|
'showposts=' .
|
|
|
|
(int)$this->comicpress_options['blogpost_count'] .
|
|
|
|
'&cat=-' .
|
|
|
|
$this->comicpress_options['comic_category_id'] .
|
|
|
|
'&paged=' .
|
|
|
|
$paged
|
|
|
|
);
|
|
|
|
|
2009-07-23 23:33:16 +00:00
|
|
|
return $wp_query;
|
2009-07-19 23:20:23 +00:00
|
|
|
}
|
2009-07-23 19:12:13 +00:00
|
|
|
|
|
|
|
function _glob($pattern) { return glob($pattern); }
|
|
|
|
function _file_get_contents($file) { return file_get_contents($file); }
|
|
|
|
|
|
|
|
function get_layout_choices() {
|
2009-07-23 21:13:53 +00:00
|
|
|
if (!is_array($this->layouts)) {
|
|
|
|
$this->layouts = array();
|
|
|
|
foreach ($this->_glob(get_template_directory() . '/layouts/*') as $file) {
|
|
|
|
$content = $this->_file_get_contents($file);
|
|
|
|
$basename = pathinfo($file, PATHINFO_BASENAME);
|
|
|
|
foreach (array(
|
|
|
|
"Layout Name", "Sidebars"
|
|
|
|
) as $field) {
|
|
|
|
if (preg_match('#/\*.*' . $field . ': ([^\n]+).*\*/#s', $content, $matches) > 0) {
|
|
|
|
if (!is_array($this->layouts[$basename])) {
|
|
|
|
$this->layouts[$basename] = array();
|
|
|
|
}
|
|
|
|
$this->layouts[$basename][$field] = $matches[1];
|
|
|
|
}
|
|
|
|
}
|
2009-07-23 19:12:13 +00:00
|
|
|
}
|
|
|
|
}
|
2009-07-23 21:13:53 +00:00
|
|
|
return $this->layouts;
|
2009-07-23 19:12:13 +00:00
|
|
|
}
|
2009-07-25 20:27:12 +00:00
|
|
|
|
|
|
|
function get_previous_next_categories($category_id) {
|
|
|
|
$prev_next_categories = array();
|
2009-07-28 00:16:40 +00:00
|
|
|
|
|
|
|
for ($i = 0, $il = count($this->category_tree); $i < $il; ++$i) {
|
|
|
|
$parts = explode("/", $this->category_tree[$i]);
|
2009-07-25 20:27:12 +00:00
|
|
|
if (count($parts) > 2) {
|
|
|
|
if (end($parts) == $category_id) {
|
2009-07-28 00:16:40 +00:00
|
|
|
while (count($parts) > 2) {
|
|
|
|
foreach (array(
|
|
|
|
'previous' => -1,
|
|
|
|
'next' => 1
|
|
|
|
) as $key => $direction) {
|
|
|
|
$index = $i;
|
|
|
|
while (isset($this->category_tree[$index])) {
|
|
|
|
$index += $direction;
|
|
|
|
if (isset($this->category_tree[$index])) {
|
|
|
|
$compare_parts = explode("/", $this->category_tree[$index]);
|
|
|
|
if (count($compare_parts) == count($parts)) {
|
|
|
|
$target_category = array_pop($compare_parts);
|
|
|
|
$parent_category = array_pop($compare_parts);
|
2009-08-06 02:29:54 +00:00
|
|
|
|
2009-07-28 00:16:40 +00:00
|
|
|
if (!isset($prev_next_categories[$parent_category])) {
|
|
|
|
$prev_next_categories[$parent_category] = array();
|
|
|
|
}
|
|
|
|
$prev_next_categories[$parent_category][$key] = $target_category;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
array_pop($parts);
|
|
|
|
}
|
2009-07-25 20:27:12 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $prev_next_categories;
|
|
|
|
}
|
2009-07-29 02:38:20 +00:00
|
|
|
|
|
|
|
function get_sorted_post_categories($override_post = null) {
|
|
|
|
global $post;
|
|
|
|
$post_to_use = (!empty($override_post)) ? $override_post : $post;
|
|
|
|
|
|
|
|
$categories = wp_get_post_categories($post_to_use->ID);
|
|
|
|
|
|
|
|
$sorted_categories = array();
|
|
|
|
|
|
|
|
foreach ($this->category_tree as $node) {
|
|
|
|
$category_id = end(explode("/", $node));
|
|
|
|
if (in_array($category_id, $categories)) {
|
|
|
|
$sorted_categories[] = $category_id;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $sorted_categories;
|
|
|
|
}
|
2009-07-30 00:07:56 +00:00
|
|
|
|
|
|
|
function _is_dir($dir) { return is_dir($dir); }
|
|
|
|
|
|
|
|
function setup_multicomic_partial_paths($post_id) {
|
|
|
|
$this->partial_paths = array();
|
|
|
|
$category_ids = wp_get_post_categories($post_id);
|
|
|
|
if (is_array($category_ids)) {
|
|
|
|
foreach ($category_ids as $id) {
|
|
|
|
$category = get_category($id);
|
|
|
|
if (!empty($category)) {
|
|
|
|
if ($this->_is_dir($target = get_template_directory() . '/subthemes/' . $category->slug)) {
|
|
|
|
$this->partial_paths[] = $target;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2009-07-08 23:51:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
?>
|