.
Anthologize includes TCPDF, which is released under the LGPL Use and
modifications of TDPDF must comply with its license.
*/
if ( ! defined( 'ANTHOLOGIZE_VERSION' ) )
define( 'ANTHOLOGIZE_VERSION', '0.8.0' );
require dirname( __FILE__ ) . '/vendor/autoload.php';
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
$bn = explode( DIRECTORY_SEPARATOR, dirname( __FILE__ ) );
$this->basename = array_pop( $bn );
$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();
add_action( 'wp_enqueue_scripts', array( $this, 'register_assets' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'register_assets' ) );
}
/**
* 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( 'plugins_loaded', 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' ),
'labels' => array(
'add_new_item' => __( 'Add New Part', '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";
if ( file_exists( $mofile_custom ) ) {
load_textdomain( 'anthologize', $mofile_custom );
} else {
load_plugin_textdomain( 'anthologize', false, basename( dirname( __FILE__ ) ) . '/languages/' );
}
}
/**
* Registers static assets with WordPress.
*
* @since 0.8.0
*/
public function register_assets() {
wp_register_style( 'anthologize-admin', plugins_url() . '/anthologize/css/admin.css' );
wp_register_script( 'blockUI-js', plugins_url() . '/anthologize/js/jquery.blockUI.js' );
wp_register_script( 'jquery-cookie', plugins_url() . '/anthologize/js/jquery-cookie.js' );
wp_register_script(
'anthologize-project-organizer',
plugins_url() . '/anthologize/js/project-organizer.js',
array(
'jquery-ui-sortable',
'jquery-ui-draggable',
'jquery-ui-datepicker',
'blockUI-js',
'jquery-cookie',
)
);
wp_register_script( 'anthologize-sortlist-js', plugins_url() . '/anthologize/js/anthologize-sortlist.js', array( 'anthologize-project-organizer' ) );
wp_localize_script( 'anthologize-sortlist-js', 'anth_strings', array(
'append' => __( 'Append', 'anthologize' ),
'cancel' => __( 'Cancel', 'anthologize' ),
'commenter' => __( 'Commenter', 'anthologize' ),
'comment_content' => __( 'Comment Content', 'anthologize' ),
'comments' => __( 'Comments', 'anthologize' ),
'comments_explain' => __( 'Check the comments from the original post that you would like to include in your project.', 'anthologize' ),
'done' => __( 'Done', 'anthologize' ),
'edit' => __( 'Edit', 'anthologize' ),
'hide_details' => __( 'Hide details', 'anthologize' ),
'less' => __( 'less', 'anthologize' ),
'more' => __( 'more', 'anthologize' ),
'no_comments' => __( 'This post has no comments associated with it.', 'anthologize' ),
'preview' => __( 'Preview', 'anthologize' ),
'posted' => __( 'Posted', 'anthologize' ),
'remove' => __( 'Remove', 'anthologize' ),
'save' => __( 'Save', 'anthologize' ),
'select_all' => __( 'Select all', 'anthologize' ),
'select_none' => __( 'Select none', 'anthologize' ),
'show_details' => __( 'Show details', 'anthologize' ),
) );
}
}
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();