2009-06-13 12:10:16 +00:00
< ? php
require_once ( 'ComicPressGDProcessing.php' );
require_once ( 'ComicPressImageMagickProcessing.php' );
require_once ( 'ComicPressFileOperations.php' );
define ( " CPM_OPTION_PREFIX " , " comicpress-manager " );
class ComicPressManager {
var $properties = array (
// Leave these alone! These values should be read from your comicpress-config.php file.
// If your values from comicpress-config.php are not being read, then something is wrong in your config.
'comic_folder' => 'comics' ,
'comiccat' => '1' ,
'blogcat' => '2' ,
'rss_comic_folder' => 'comics' ,
'archive_comic_folder' => 'comics' ,
'archive_comic_width' => '380' ,
'rss_comic_width' => '380' ,
'blog_postcount' => '10'
);
var $warnings , $messages , $errors , $detailed_warnings , $show_config_editor ;
var $config_method , $config_filepath , $path , $plugin_path ;
var $comic_files ;
var $scale_method , $identify_method_cache , $can_write_config ;
var $need_calendars = false ;
var $is_wp_options = false ;
var $import_safe_exit = null ;
var $did_first_run ;
var $is_cpm_managing_posts , $is_cpm_modifying_categories ;
var $wpmu_disk_space_message ;
var $separate_thumbs_folder_defined = array ( 'rss' => null , 'archive' => null );
var $thumbs_folder_writable = array ( 'rss' => null , 'archive' => null );
var $allowed_extensions = array ( " gif " , " jpg " , " jpeg " , " png " );
var $category_info = array ( 'comiccat' => null , 'blogcat' => null );
var $_f ;
var $folders = array (
array ( 'comic folder' , 'comic_folder' , true , " " ),
array ( 'RSS feed folder' , 'rss_comic_folder' , false , 'rss' ),
array ( 'archive folder' , 'archive_comic_folder' , false , 'archive' ));
var $error_types = array (
'NOT_A_FOLDER' => 'not a folder' ,
'NOT_WRITABLE' => 'not writable' ,
'NOT_STATABLE' => 'not statable' ,
'INVALID_CATEGORY' => 'invalid category' ,
'CATEGORY_DOES_NOT_EXIST' => 'category does not exist'
);
function ComicPressManager () {
$this -> _f = new ComicPressFileOperations ();
$this -> scale_method = false ;
$this -> gd_processor = false ;
if ( extension_loaded ( " gd " )) {
$this -> scale_method = new ComicPressGDProcessing ();
$this -> gd_processor = new ComicPressGDProcessing ();
}
$result = @ shell_exec ( " which convert " ) . @ shell_exec ( " which identify " );
if ( ! empty ( $result )) {
$this -> scale_method = new ComicPressImageMagickProcessing ();
}
if ( function_exists ( 'cpm_wpmu_config_setup' )) { cpm_wpmu_config_setup ( $this ); }
if ( ! defined ( 'CPM_DOCUMENT_ROOT' )) {
define ( 'CPM_DOCUMENT_ROOT' , $this -> calculate_document_root ());
}
if ( ! defined ( " CPM_STRLEN_REALPATH_DOCUMENT_ROOT " )) {
define ( " CPM_STRLEN_REALPATH_DOCUMENT_ROOT " , strlen ( realpath ( CPM_DOCUMENT_ROOT )));
}
}
/**
* Get the option name for a ComicPress Manager option .
* CPM options are prefixed with " comicpress-manager- " .
* @ param string $option_name The CPM key name .
* @ return string The full WP options key name .
*/
function get_cpm_option_key ( $option_name ) {
return CPM_OPTION_PREFIX . '-' . $option_name ;
}
/**
* Retrieve a ComicPress Manager option .
* @ param string $option_name The CPM key name .
* @ return string The value of the option .
*/
function get_cpm_option ( $option_name ) { return get_option ( $this -> get_cpm_option_key ( $option_name )); }
/**
* Set a ComicPress Manager option .
* @ param string $option_name The CPM key name .
* @ param string $value The value to set .
*/
function set_cpm_option ( $option_name , $value ) { update_option ( $this -> get_cpm_option_key ( $option_name ), $value ); }
/**
* Calculate the document root where comics are stored .
* @ param array $override_server_info If set , override $_SERVER with these values .
* @ return string | boolean The document root , or false if there was an error .
*/
function calculate_document_root ( $override_server_info = null ) {
2009-06-23 10:50:24 +00:00
global $cpm_attempted_document_roots , $wpmu_version ;
2009-06-13 12:10:16 +00:00
$cpm_attempted_document_roots = array ();
$server_info = ! is_null ( $override_server_info ) ? $override_server_info : $_SERVER ;
// we need something to work with
$any_possible_data = false ;
foreach ( array ( 'SCRIPT_FILENAME' , 'DOCUMENT_ROOT' ) as $field ) {
if ( isset ( $server_info [ $field ])) {
$any_possible_data = true ; break ;
}
}
if ( ! $any_possible_data ) { return false ; }
$document_root = null ;
// first try getting path info straight from server info
$translated_script_filename = str_replace ( '\\' , '/' , $server_info [ 'SCRIPT_FILENAME' ]);
foreach ( array ( 'SCRIPT_NAME' , 'SCRIPT_URL' ) as $var_to_try ) {
if ( isset ( $server_info [ $var_to_try ])) {
$root_to_try = substr ( $translated_script_filename , 0 , - strlen ( $server_info [ $var_to_try ]));
$cpm_attempted_document_roots [] = $root_to_try ;
if ( $this -> _f -> file_exists ( $root_to_try . '/index.php' )) {
$document_root = $root_to_try ;
break ;
}
}
}
// then use the URL if necessary
if ( is_null ( $document_root ) && isset ( $server_info [ 'DOCUMENT_ROOT' ])) {
$parsed_url = @ parse_url ( get_option ( 'home' ));
if ( $parsed_url === false ) { return false ; }
$document_root = untrailingslashit ( $server_info [ 'DOCUMENT_ROOT' ]) . $parsed_url [ 'path' ];
}
// still nothing found?
if ( is_null ( $document_root )) { return false ; }
// WPMU
2009-06-23 10:50:24 +00:00
if ( ! empty ( $wpmu_version ) && function_exists ( 'cpm_wpmu_modify_path' )) {
2009-06-13 12:10:16 +00:00
$document_root = cpm_wpmu_modify_path ( $document_root );
}
return untrailingslashit ( $document_root );
}
/**
* Transform a date () - compatible string into a human - parseable string .
* Useful for generating examples of date () usage .
*/
function transform_date_string ( $string , $replacements ) {
if ( ! is_array ( $replacements )) { return false ; }
if ( ! is_string ( $string )) { return false ; }
$transformed_string = $string ;
foreach ( array ( " Y " , " m " , " d " ) as $required_key ) {
if ( ! isset ( $replacements [ $required_key ])) { return false ; }
$transformed_string = preg_replace ( '#(?<![\\\])' . $required_key . '#' , $replacements [ $required_key ], $transformed_string );
}
$transformed_string = str_replace ( '\\' , '' , $transformed_string );
return $transformed_string ;
}
/**
* Generate an example date string .
* @ param string $example_date The example date format .
* @ return string The formatted string .
*/
function generate_example_date ( $example_date ) {
return $this -> transform_date_string ( $example_date , array ( 'Y' => " YYYY " , 'm' => " MM " , 'd' => " DD " ));
}
/**
* Build the URI to a comic file .
*/
function build_comic_uri ( $filename , $base_dir = null ) {
if ( ! is_null ( $base_dir )) {
if ( strlen ( $filename ) < strlen ( $base_dir )) { return false ; }
}
if (( $realpath_result = realpath ( $filename )) !== false ) {
$filename = $realpath_result ;
}
if ( ! is_null ( $base_dir )) {
$filename = substr ( $filename , strlen ( $base_dir ));
}
$parts = explode ( '/' , str_replace ( '\\' , '/' , $filename ));
if ( count ( $parts ) < 2 ) { return false ; }
$parsed_url = parse_url ( get_option ( 'home' ));
$path = $parsed_url [ 'path' ];
if ( function_exists ( 'get_site_option' )) { $path = cpm_wpmu_fix_admin_uri ( $path ); }
$count = 2 ;
if (( $dirname = $this -> get_subcomic_directory ()) !== false ) {
$count = 3 ;
if ( $parts [ count ( $parts ) - 2 ] != $dirname ) { return false ; }
}
return $path . '/' . implode ( '/' , array_slice ( $parts , - $count , $count ));
}
function get_subcomic_directory () {
$result = get_option ( 'comicpress-manager-manage-subcomic' );
if ( ! empty ( $result )) {
if ( $result != $this -> properties [ 'comiccat' ]) {
if (( $category = get_category ( $result )) !== false ) {
return $category -> slug ;
}
}
}
return false ;
}
/**
* Breakdown the name of a comic file into a date and proper title .
*/
function breakdown_comic_filename ( $filename , $allow_override = false , $override_value = null ) {
$pattern = CPM_DATE_FORMAT ;
if ( $allow_override ) {
if ( isset ( $_POST [ 'upload-date-format' ]) && ! empty ( $_POST [ 'upload-date-format' ])) { $pattern = $_POST [ 'upload-date-format' ]; }
if ( ! is_null ( $override_value )) { $pattern = $override_value ; }
}
$pattern = $this -> transform_date_string ( $pattern , array ( " Y " => '[0-9]{4,4}' ,
" m " => '[0-9]{2,2}' ,
" d " => '[0-9]{2,2}' ));
if ( preg_match ( " /^( ${ pattern } )(.*) \ .[^ \ .]+ $ / " , $filename , $matches ) > 0 ) {
list ( $all , $date , $title ) = $matches ;
if ( strtotime ( $date ) === false ) { return false ; }
$converted_title = ucwords ( trim ( preg_replace ( '/[\-\_]/' , ' ' , $title )));
return compact ( 'date' , 'title' , 'converted_title' );
} else {
return false ;
}
}
function build_query_posts_string () {
$query_posts_string = " posts_per_page=999999&post_status=draft,pending,future,inherit,publish&cat= " ;
$comic_categories = array ();
$this -> get_all_comic_categories ();
if ( is_array ( $this -> category_tree )) {
foreach ( $this -> category_tree as $node ) {
$comic_categories [] = end ( explode ( " / " , $node ));
}
}
$query_posts_string .= implode ( " , " , $comic_categories );
return $query_posts_string ;
}
/**
* Retrieve posts from the WordPress database .
*/
function query_posts () {
$result = query_posts ( $this -> build_query_posts_string ());
if ( empty ( $result )) { $result = array (); }
return $result ;
}
/**
* Get a tree of the categories that are children of the comic category .
*/
function get_all_comic_categories () {
$max_id = 0 ;
$category_tree = array ();
foreach ( get_all_category_ids () as $category_id ) {
$category = get_category ( $category_id );
$ok = true ;
if ( $category -> parent == 0 ) { $ok = ( $category_id == $this -> properties [ 'comiccat' ]); }
if ( $ok ) {
$category_tree [] = $category -> parent . '/' . $category_id ;
$max_id = max ( $max_id , $category_id );
}
}
// flatten parents and children
do {
$all_ok = true ; $any_changes = false ;
for ( $i = 0 ; $i < count ( $category_tree ); ++ $i ) {
$current_parts = explode ( " / " , $category_tree [ $i ]);
if ( reset ( $current_parts ) != 0 ) {
$all_ok = false ; $any_changes = false ;
for ( $j = 0 ; $j < count ( $category_tree ); ++ $j ) {
$j_parts = explode ( " / " , $category_tree [ $j ]);
if ( end ( $j_parts ) == reset ( $current_parts )) {
$category_tree [ $i ] = implode ( " / " , array_merge ( $j_parts , array_slice ( $current_parts , 1 )));
$any_changes = true ;
break ;
}
}
$all_ok = ! $any_changes ;
}
}
} while ( ! $all_ok );
$this -> category_tree = $category_tree ;
$this -> max_id = $max_id ;
// DEPRECATED: should be getting direct from object
return array ( 'category_tree' => $this -> category_tree ,
'max_id' => $this -> max_id );
}
/**
* Generate a hash for passing to wp_insert_post ()
* @ param string $filename_date The post date .
* @ param string $filename_converted_title The title of the comic .
* @ return array The post information or false if the date is invalid .
*/
function generate_post_hash ( $filename_date = null , $filename_converted_title = null , $override_post = null ) {
$post_data = ( ! is_null ( $override_post )) ? $override_post : $_POST ;
if ( is_null ( $filename_date )) { return false ; }
if ( is_null ( $filename_converted_title )) { return false ; }
if ( isset ( $post_data [ 'time' ]) && ! empty ( $post_data [ 'time' ])) {
if ( strtolower ( $post_data [ 'time' ]) == " now " ) {
$filename_date .= " " . strftime ( " %H:%M:%S " );
} else {
$filename_date .= " " . $post_data [ 'time' ];
}
}
if (( $timestamp = strtotime ( $filename_date )) !== false ) {
if ( $filename_converted_title == " " ) {
$filename_converted_title = strftime ( " %m/%d/%Y " , $timestamp );
}
$this -> normalize_storyline_structure ();
$selected_categories = array ();
if ( isset ( $post_data [ 'in-comic-category' ])) {
if ( is_array ( $post_data [ 'in-comic-category' ])) {
foreach ( $this -> category_tree as $node ) {
$category_id = end ( explode ( " / " , $node ));
if ( in_array ( $category_id , $post_data [ 'in-comic-category' ])) {
$selected_categories [ $category_id ] = get_cat_name ( $category_id );
}
}
}
}
$all_category_ids = get_all_category_ids ();
if ( isset ( $post_data [ 'additional-categories' ])) {
if ( is_array ( $post_data [ 'additional-categories' ])) {
foreach ( $post_data [ 'additional-categories' ] as $category_id ) {
if ( in_array ( $category_id , $all_category_ids )) {
$selected_categories [ $category_id ] = get_cat_name ( $category_id );
}
}
}
}
if ( empty ( $selected_categories )) { return false ; }
$post_category = array_keys ( $selected_categories );
$category_name = implode ( " , " , array_values ( $selected_categories ));
$override_title = $post_data [ 'override-title-to-use' ];
$tags = $post_data [ 'tags' ];
if ( get_magic_quotes_gpc ()) {
$override_title = stripslashes ( $override_title );
$tags = stripslashes ( $tags );
}
$post_title = ! empty ( $override_title ) ? $override_title : $filename_converted_title ;
$post_content = " " ;
if ( isset ( $post_data [ 'content' ]) && ! empty ( $post_data [ 'content' ])) {
$post_content = str_replace (
array ( '{date}' , '{title}' , '{category}' ),
array (
date ( 'F j, Y' , $timestamp ),
$post_title ,
$category_name
),
$post_data [ 'content' ]
);
}
$post_date = date ( 'Y-m-d H:i:s' , $timestamp );
$post_date_gmt = get_gmt_from_date ( $post_date );
$publish_mode = ( $timestamp > time ()) ? " future " : " publish " ;
$post_status = isset ( $post_data [ 'publish' ]) ? $publish_mode : " draft " ;
$tags_input = $tags ;
return compact ( 'post_content' , 'post_title' , 'post_date' , 'post_date_gmt' , 'post_category' , 'post_status' , 'tags_input' );
}
return false ;
}
/**
* Normalize a storyline structure , merging it with category changes as necessary .
* @ return array A compact () ed array with the $max_id found and the $category_tree .
*/
function normalize_storyline_structure () {
$this -> get_all_comic_categories ();
do {
$did_normalize = false ;
// sort it by this order as best as possible
if ( $result = get_option ( " comicpress-storyline-category-order " )) {
$sorted_tree = explode ( " , " , $result );
$new_sorted_tree = array ();
foreach ( $sorted_tree as $node ) {
if ( in_array ( $node , $this -> category_tree )) {
$new_sorted_tree [] = $node ;
} else {
$did_normalize = true ;
}
}
$sorted_tree = $new_sorted_tree ;
foreach ( $this -> category_tree as $node ) {
if ( ! in_array ( $node , $sorted_tree )) {
// try to find the nearest sibling
$parts = explode ( " / " , $node );
while ( count ( $parts ) > 0 ) {
array_pop ( $parts );
$node_snippit = implode ( " / " , $parts );
$last_sibling = null ;
for ( $i = 0 ; $i < count ( $sorted_tree ); ++ $i ) {
if ( strpos ( $sorted_tree [ $i ], $node_snippit ) === 0 ) {
$last_sibling = $i ;
}
}
if ( ! is_null ( $last_sibling )) {
$did_normalize = true ;
array_splice ( $sorted_tree , $last_sibling + 1 , 0 , $node );
break ;
}
}
}
}
$this -> category_tree = $sorted_tree ;
} else {
sort ( $this -> category_tree );
}
if ( $did_normalize || empty ( $result )) {
update_option ( " comicpress-storyline-category-order " , implode ( " , " , $this -> category_tree ));
}
} while ( $did_normalize );
return array ( 'category_tree' => $this -> category_tree ,
'max_id' => $this -> max_id );
}
function convert_short_size_string_to_bytes ( $string ) {
$max_bytes = trim ( $string );
$last = strtolower ( substr ( $max_bytes , - 1 , 1 ));
switch ( $last ) {
case 'g' : $max_bytes *= 1024 ;
case 'm' : $max_bytes *= 1024 ;
case 'k' : $max_bytes *= 1024 ;
}
return $max_bytes ;
}
/**
* Find all the valid comics in the comics folder .
* If CPM_SKIP_CHECKS is enabled , comic file validity is not checked , improving speed .
* @ param array $provided_files If given , use the provided list of files rather than glob () bing the comic folder path .
* @ return array The list of valid comic files in the comic folder .
*/
function read_comics_folder ( $provided_files = null ) {
$glob_results = ( is_array ( $provided_files ) ? $provided_files : glob ( $this -> get_comic_folder_path () . " /* " ));
if ( $glob_results === false ) {
//$comicpress_manager->messages[] = "FYI: glob({$comicpress_manager->path}/*) returned false. This can happen on some PHP installations if you have no files in your comic directory. This message will disappear once you upload a comic to your site.";
return array ();
}
$filtered_glob_results = array ();
foreach ( $glob_results as $result ) {
if ( in_array ( strtolower ( pathinfo ( $result , PATHINFO_EXTENSION )), $this -> allowed_extensions )) {
$filtered_glob_results [] = $result ;
}
}
if ( $this -> get_cpm_option ( " cpm-skip-checks " ) == 1 ) {
return $filtered_glob_results ;
} else {
$files = array ();
foreach ( $filtered_glob_results as $file ) {
if ( $this -> breakdown_comic_filename ( pathinfo ( $file , PATHINFO_BASENAME )) !== false ) {
$files [] = $file ;
}
}
return $files ;
}
}
/**
* Get the absolute filepath to the comic folder .
*/
function get_comic_folder_path () {
$output = CPM_DOCUMENT_ROOT . '/' . $this -> properties [ 'comic_folder' ];
if (( $subdir = $this -> get_subcomic_directory ()) !== false ) {
$output .= '/' . $subdir ;
}
$this -> path = $output ;
return $output ;
}
/**
* Get the list of thumbnails to generate .
*/
function get_thumbnails_to_generate () {
$thumbnails_to_generate = array ();
if ( $this -> scale_method !== false ) {
foreach ( $this -> thumbs_folder_writable as $type => $value ) {
if ( $value ) {
if ( $this -> separate_thumbs_folder_defined [ $type ] !== false ) {
if ( $this -> get_cpm_option ( " cpm- ${ type } -generate-thumbnails " ) == 1 ) {
$thumbnails_to_generate [] = $type ;
}
}
}
}
}
return $thumbnails_to_generate ;
}
/**
* Read the ComicPress config .
*/
function read_comicpress_config ( $override_config = null ) {
2009-06-23 10:50:24 +00:00
global $wpmu_version ;
$method = null ;
2009-06-13 12:10:16 +00:00
if ( is_array ( $override_config )) {
$method = __ ( " Unit Testing " , 'comicpress-manager' );
$this -> properties = array_merge ( $this -> properties , $override_config );
} else {
2009-06-23 10:50:24 +00:00
if ( ! empty ( $wpmu_version ) && function_exists ( 'cpm_wpmu_load_options' )) {
2009-06-13 12:10:16 +00:00
cpm_wpmu_load_options ();
$method = __ ( " WordPress Options " , 'comicpress-manager' );
} else {
$current_theme_info = get_theme ( get_current_theme ());
if ( isset ( $current_theme_info [ 'Template Dir' ])) {
foreach ( array ( " comicpress-config.php " , " functions.php " ) as $possible_file ) {
$filepath = WP_CONTENT_DIR . $current_theme_info [ 'Template Dir' ] . '/' . $possible_file ;
if ( $this -> _f -> file_exists ( $filepath )) {
$this -> config_filepath = $filepath ;
$file = $this -> _f -> file_get_contents ( $filepath );
$variable_values = array ();
foreach ( array_keys ( $this -> properties ) as $variable ) {
if ( preg_match ( " # \\ $ ${ variable } \ * \ = \ *([^ \ ;]*) \ ;# " , $file , $matches ) > 0 ) {
$variable_values [ $variable ] = preg_replace ( '#"#' , '' , $matches [ 1 ]);
}
}
$this -> properties = array_merge ( $this -> properties , $variable_values );
$method = basename ( $filepath );
$this -> can_write_config = false ;
$perm_check_filename = $filepath . '-' . md5 ( rand ());
if ( @ touch ( $perm_check_filename ) === true ) {
$move_check_filename = $perm_check_filename . '-' . md5 ( rand ());
if ( @ rename ( $perm_check_filename , $move_check_filename )) {
@ unlink ( $move_check_filename );
$this -> can_write_config = true ;
} else {
@ unlink ( $perm_check_filename );
}
}
break ;
}
}
}
}
}
$this -> config_method = $method ;
}
function _check_separate_thumbnail_folders () {
foreach ( array_keys ( $this -> separate_thumbs_folder_defined ) as $type ) {
$this -> separate_thumbs_folder_defined [ $type ] = ( $this -> properties [ 'comic_folder' ] != $this -> properties [ $type . '_comic_folder' ]);
}
}
function _test_image_folder_writable ( $path , $thumb_type ) {
if ( ! is_dir ( $path )) {
return $this -> error_types [ 'NOT_A_FOLDER' ];
}
do {
$tmp_filename = " test- " . md5 ( rand ());
} while ( $this -> _f -> file_exists ( $path . '/' . $tmp_filename ));
$ok_to_warn = true ;
if ( $thumb_type != " " ) {
$ok_to_warn = ( $this -> get_cpm_option ( " cpm- ${ thumb_type } -generate-thumbnails " ) == 1 );
}
$return_value = " " ;
if ( !@ touch ( $path . '/' . $tmp_filename )) {
if ( $ok_to_warn ) {
$return_value = $this -> error_types [ 'NOT_WRITABLE' ];
}
} else {
if ( @ stat ( $path . '/' . $tmp_filename ) === false ) {
if ( $ok_to_warn ) {
$return_value = $this -> error_types [ 'NOT_STATABLE' ];
}
}
}
if (( $return_value !== " " ) || ! $ok_to_warn ) {
if ( $thumb_type != " " ) {
$this -> thumbs_folder_writable [ $thumb_type ] = false ;
}
}
if ( is_null ( $this -> thumbs_folder_writable [ $thumb_type ])) {
if ( $this -> _f -> file_exists ( $path . '/' . $tmp_filename )) {
@ unlink ( $path . '/' . $tmp_filename );
}
if ( $thumb_type != " " ) {
$this -> thumbs_folder_writable [ $thumb_type ] = true ;
}
}
return $return_value ;
}
function _check_category ( $type ) {
if ( ! is_numeric ( $this -> properties [ $type ])) {
// the property is non-numeric
return $this -> error_types [ 'INVALID_CATEGORY' ];
} else {
// one comic category is specified
$result = get_category ( $this -> properties [ $type ]);
if ( empty ( $result )) {
return $this -> error_types [ 'CATEGORY_DOES_NOT_EXIST' ];
} else {
$this -> category_info [ $type ] = get_object_vars ( $result );
}
}
return " " ;
}
/**
* Read information about the current installation .
*/
function read_information_and_check_config () {
global $cpm_attempted_document_roots , $blog_id ;
$this -> read_comicpress_config ();
$this -> get_comic_folder_path ();
$this -> plugin_path = PLUGINDIR . '/' . plugin_basename ( __FILE__ );
$this -> _check_separate_thumbnail_folders ();
$this -> errors = array ();
$this -> warnings = array ();
$this -> detailed_warnings = array ();
$this -> messages = array ();
$this -> show_config_editor = true ;
if ( $this -> get_cpm_option ( " cpm-skip-checks " ) == 1 ) {
// if the user knows what they're doing, disabling all of the checks improves performance
foreach ( $this -> folders as $folder_info ) {
list ( $name , $property , $is_fatal , $thumb_type ) = $folder_info ;
if ( $thumb_type != " " ) {
$this -> thumbs_folder_writable [ $thumb_type ] = true ;
}
}
$this -> category_info [ 'comiccat' ] = get_object_vars ( get_category ( $this -> properties [ 'comiccat' ]));
$this -> blog_category_info = get_object_vars ( get_category ( $this -> properties [ 'blogcat' ]));
$this -> comic_files = $this -> read_comics_folder ();
} else {
foreach ( $this -> folders as $folder_info ) {
list ( $name , $property , $is_fatal , $thumb_type ) = $folder_info ;
if ( $thumb_type != " " ) {
$this -> thumbs_folder_writable [ $thumb_type ] = null ;
}
}
// quick check to see if the theme is ComicPress.
// this needs to be made more robust.
if ( preg_match ( '/ComicPress/' , get_current_theme ()) == 0 ) {
$this -> detailed_warnings [] = __ ( " The current theme isn't the ComicPress theme. If you've renamed the theme, ignore this warning. " , 'comicpress-manager' );
}
$any_cpm_document_root_failures = false ;
if ( ! function_exists ( 'get_site_option' )) {
// is the site root configured properly?
if ( ! $this -> _f -> file_exists ( CPM_DOCUMENT_ROOT )) {
$this -> errors [] = sprintf ( __ ( 'The comics site root <strong>%s</strong> does not exist. Check your <a href="options-general.php">WordPress address and address settings</a>.' , 'comicpress-manager' ), CPM_DOCUMENT_ROOT );
$any_cpm_document_root_failures = true ;
}
if ( ! $this -> _f -> file_exists ( CPM_DOCUMENT_ROOT . '/index.php' )) {
$this -> errors [] = sprintf ( __ ( 'The comics site root <strong>%s</strong> does not contain a WordPress index.php file. Check your <a href="options-general.php">WordPress address and address settings</a>.' , 'comicpress-manager' ), CPM_DOCUMENT_ROOT );
$any_cpm_document_root_failures = true ;
}
}
if ( $any_cpm_document_root_failures ) {
$this -> errors [] = print_r ( $cpm_attempted_document_roots , true );
}
// folders that are the same as the comics folder won't be written to
$all_the_same = array ();
foreach ( $this -> separate_thumbs_folder_defined as $type => $value ) {
if ( ! $value ) { $all_the_same [] = $type ; }
}
if ( count ( $all_the_same ) > 0 ) {
$this -> detailed_warnings [] = sprintf ( __ ( " The <strong>%s</strong> folders and the comics folder are the same. You won't be able to generate thumbnails until you change these folders. " , 'comicpress-manager' ), implode ( " , " , $all_the_same ));
}
if ( $this -> get_cpm_option ( 'cpm-did-first-run' ) == 1 ) {
// check the existence and writability of all image folders
foreach ( $this -> folders as $folder_info ) {
list ( $name , $property , $is_fatal , $thumb_type ) = $folder_info ;
if (( $thumb_type == " " ) || ( $this -> separate_thumbs_folder_defined [ $thumb_type ] == true )) {
$path = CPM_DOCUMENT_ROOT . '/' . $this -> properties [ $property ];
$result = $this -> _test_image_folder_writable ( $path , $thumb_type );
switch ( $result ) {
case $this -> error_types [ 'NOT_A_FOLDER' ] :
$this -> errors [] = sprintf ( __ ( 'The %1$s <strong>%2$s</strong> does not exist. Did you create it within the <strong>%3$s</strong> folder?' , 'comicpress-manager' ), $name , $this -> properties [ $property ], CPM_DOCUMENT_ROOT );
break ;
case $this -> error_types [ 'NOT_WRITABLE' ] :
$message = sprintf ( __ ( 'The %1$s <strong>%2$s</strong> is not writable by the Webserver.' , 'comicpress-manager' ), $name , $this -> properties [ $property ]);
if ( $is_fatal ) {
$this -> errors [] = $message ;
} else {
$this -> warnings [] = $message ;
}
break ;
case $this -> error_types [ 'NOT_STATABLE' ] :
$this -> errors [] = __ ( '<strong>Files written to the %s directory by the Webserver cannot be read again!</strong> Are you using IIS7 with FastCGI?' , $this -> properties [ $property ]);
break ;
}
}
}
}
// to generate thumbnails, a supported image processor is needed
if ( $this -> scale_method == false ) {
$this -> detailed_warnings [] = __ ( " No image resize methods are installed (GD or ImageMagick). You are unable to generate thumbnails automatically. " , 'comicpress-manager' );
}
// are there enough categories created?
if ( count ( get_all_category_ids ()) < 2 ) {
$this -> errors [] = __ ( " You need to define at least two categories, a blog category and a comics category, to use ComicPress. Visit <a href= \" categories.php \" >Manage -> Categories</a> and create at least two categories, then return here to continue your configuration. " , 'comicpress-manager' );
$this -> show_config_editor = false ;
} else {
foreach ( $this -> category_info as $type => $value ) {
$result = $this -> _check_category ( $type );
switch ( $result ) {
case $this -> error_types [ 'INVALID_CATEGORY' ] :
$this -> errors [] = sprintf ( __ ( " %s needs to be defined as a number, not an alphanumeric string. " , 'comicpress-manager' ), $type );
break ;
case $this -> error_types [ 'CATEGORY_DOES_NOT_EXIST' ];
$this -> errors [] = sprintf ( __ ( " The requested category ID for %s, <strong>%s</strong>, doesn't exist! " , 'comicpress-manager' ), $type , $this -> properties [ $type ]);
break ;
}
}
if ( $this -> properties [ 'blogcat' ] == $this -> properties [ 'comiccat' ]) {
$this -> warnings [] = __ ( " Your comic and blog categories are the same. This will cause browsing problems for visitors to your site. " , 'comicpress-manager' );
}
}
// a quick note if you have no comics uploaded.
// could be a sign of something more serious.
if ( count ( $this -> comic_files = $this -> read_comics_folder ()) == 0 ) {
$this -> detailed_warnings [] = __ ( " Your comics folder is empty! " , 'comicpress-manager' );
}
}
}
}
?>