. Anthologize includes TCPDF, which is released under the LGPL Use and modifications of TDPDF must comply with its license. */ session_start(); if ( ! defined( 'ANTHOLOGIZE_VERSION' ) ) define( 'ANTHOLOGIZE_VERSION', '0.7.1' ); if ( ! class_exists( 'Anthologize' ) ) : class Anthologize { /** * Bootstrap for the Anthologize singleton * * @since 0.7 * @return obj Anthologize instance */ public static function init() { static $instance; if ( empty( $instance ) ) { $instance = new Anthologize(); } return $instance; } /** * Constructor for the Anthologize class * * This constructor does the following: * - Checks minimum PHP and WP version, and bails if they're not met * - Includes Anthologize's main files * - Sets up the basic hooks that initialize Anthologize's post types and UI * * @since 0.7 */ public function __construct() { // Bail if PHP version is not at least 5.0 if ( ! self::check_minimum_php() ) { add_action( 'admin_notices', array( 'Anthologize', 'phpversion_nag' ) ); return; } // Bail if WP version is not at least 3.3 if ( ! self::check_minimum_wp() ) { add_action( 'admin_notices', array( 'Anthologize', 'wpversion_nag' ) ); } // If we've made it this far, start initializing Anthologize register_activation_hook( __FILE__, array( $this, 'activation' ) ); register_deactivation_hook( __FILE__, array( $this, 'deactivation' ) ); // @todo WP's functions plugin_basename() etc don't work // correctly on symlinked setups, so I'm implementing my own $this->basename = array_pop( explode( DIRECTORY_SEPARATOR, dirname( __FILE__ ) ) ); $this->plugin_dir = plugin_dir_path( __FILE__ ); $this->plugin_url = plugin_dir_url( __FILE__ ); $this->includes_dir = trailingslashit( $this->plugin_dir . 'includes' ); $upload_dir = wp_upload_dir(); $this->cache_dir = trailingslashit( $upload_dir['basedir'] . '/anthologize-cache' ); $this->cache_url = trailingslashit( $upload_dir['baseurl'] . '/anthologize-cache' ); $this->setup_constants(); $this->includes(); $this->setup_hooks(); } /** * Check to see whether the PHP version is at least 5.0 * * @return bool * @since 0.7 */ public static function check_minimum_php() { return version_compare( phpversion(), '5', '>=' ); } /** * Check to see whether the PHP version is at least 5.0 * * @return bool * @since 0.7 */ public static function check_minimum_wp() { return version_compare( get_bloginfo( 'version' ), '3.3', '>=' ); } /** * Echoes the admin notice shown when the PHP requirements are not met * * @since 0.7 */ public static function phpversion_nag() { echo '
'; echo '

'; echo sprintf( __( "Anthologize will not work with your version of PHP. You are currently running PHP v%s, and Anthologize requires version 5.0 or greater. Please contact your host if you would like to use Anthologize. ", 'anthologize' ), phpversion() ); echo '

'; echo '
'; } /** * Echoes the admin notice shown when the minimum WP version is not met * * @since 0.7 */ public static function wpversion_nag() { echo '
'; echo '

'; echo sprintf( __( "Anthologize will not work with your version of WordPress. You are currently running WordPress v%s, and Anthologize requires version 3.3 or greater. Please upgrade WordPress if you would like to use Anthologize. ", 'anthologize' ), get_bloginfo( 'version' ) ); echo '

'; echo '
'; } /** * Set up constants needed throughout the plugin * * @since 0.7 */ public function setup_constants() { if ( ! defined( 'ANTHOLOGIZE_INSTALL_PATH' ) ) { define( 'ANTHOLOGIZE_INSTALL_PATH', $this->plugin_dir ); } if ( ! defined( 'ANTHOLOGIZE_INCLUDES_PATH' ) ) { define( 'ANTHOLOGIZE_INCLUDES_PATH', $this->includes_dir ); } if ( ! defined( 'ANTHOLOGIZE_TEIDOM_PATH' ) ) { define( 'ANTHOLOGIZE_TEIDOM_PATH', $this->includes_dir . 'class-tei-dom.php' ); } if ( ! defined( 'ANTHOLOGIZE_TEIDOMAPI_PATH' ) ) { define( 'ANTHOLOGIZE_TEIDOMAPI_PATH', $this->includes_dir . 'class-tei-api.php' ); } if ( ! defined( 'ANTHOLOGIZE_CREATORS_ALL' ) ) { define( 'ANTHOLOGIZE_CREATORS_ALL', 1 ); } if ( ! defined( 'ANTHOLOGIZE_CREATORS_ASSERTED' ) ) { define( 'ANTHOLOGIZE_CREATORS_ASSERTED', 2 ); } } /** * Include required files * * @since 0.7 */ public function includes() { require( $this->includes_dir . 'class-format-api.php' ); require( $this->includes_dir . 'functions.php' ); if ( is_admin() ) { require( $this->includes_dir . 'class-admin-main.php' ); $this->admin = new Anthologize_Admin_Main(); } } public function setup_hooks() { add_action( 'init', array( $this, 'anthologize_init' ) ); add_action( 'anthologize_init', array( $this, 'register_post_types' ) ); add_action( 'anthologize_init', array( $this, 'textdomain' ) ); } public static function anthologize_init() { do_action( 'anthologize_init' ); } function activation() { require_once( dirname( __FILE__ ) . '/includes/class-activation.php' ); $activation = new Anthologize_Activation(); } function deactivation() {} /** * Register our custom post types * * Oh, Oh, Oh, It's Magic * * We register four types: * - anth_project is the top-level CPT (Projects) * - anth_part corresponds to book chapters (Parts) * - anth_library_item corresponds to individual project posts (Items) * - anth_imported_item is an item pulled from an RSS feed, but not yet * incorporated into a Project/Port */ public function register_post_types() { register_post_type( 'anth_project', array( 'label' => __( 'Projects', 'anthologize' ), 'exclude_from_search' => true, 'publicly_queryable' => false, 'show_ui' => false, 'capability_type' => 'page', 'hierarchical' => false, 'supports' => array('title', 'editor', 'revisions'), ) ); register_post_type( 'anth_part', array( 'label' => __( 'Parts', 'anthologize' ), 'exclude_from_search' => true, 'publicly_queryable' => false, 'show_ui' => true, // todo: hide 'show_in_nav_menus' => false, 'show_in_menu' => false, 'show_in_admin_bar' => false, 'capability_type' => 'page', 'hierarchical' => true, 'supports' => array('title'), ) ); register_post_type( 'anth_library_item', array( 'label' => __('Library Items', 'anthologize' ), 'exclude_from_search' => true, 'publicly_queryable' => false, 'show_ui' => true, 'show_in_nav_menus' => false, 'show_in_menu' => false, 'show_in_admin_bar' => false, 'capability_type' => 'page', 'hierarchical' => true, 'supports' => array( 'title', 'editor', 'revisions', 'comments' ), ) ); register_post_type( 'anth_imported_item', array( 'label' => __('Imported Items', 'anthologize' ), 'exclude_from_search' => true, 'publicly_queryable' => false, 'show_ui' => true, 'show_in_nav_menus' => false, 'show_in_menu' => false, 'show_in_admin_bar' => false, 'capability_type' => 'page', 'hierarchical' => true, 'supports' => array( 'title', 'editor', 'revisions' ), ) ); } // Allow this plugin to be translated by specifying text domain // Todo: Make the logic a bit more complex to allow for custom text within a given language function textdomain() { $locale = get_locale(); // First look in wp-content/anthologize-files/languages, where custom language files will not be overwritten by Anthologize upgrades. Then check the packaged language file directory. $mofile_custom = WP_CONTENT_DIR . "/anthologize-files/languages/anthologize-$locale.mo"; $mofile_packaged = WP_PLUGIN_DIR . "/anthologize/languages/anthologize-$locale.mo"; if ( file_exists( $mofile_custom ) ) { load_textdomain( 'anthologize', $mofile_custom ); return; } else if ( file_exists( $mofile_packaged ) ) { load_textdomain( 'anthologize', $mofile_packaged ); return; } } } endif; /** * A wrapper function that allows access to the Anthologize singleton * * We also use this function to bootstrap the plugin. * * @since 0.7 */ function anthologize() { return Anthologize::init(); } $_GLOBALS['anthologize'] = anthologize();