Skip to content
Snippets Groups Projects
Commit 6479e874 authored by Erick Hitter's avatar Erick Hitter
Browse files

v0.5 - admin warnings and translation support

parents 9747cac4 0e0c3262
No related branches found
No related tags found
No related merge requests found
...@@ -4,8 +4,10 @@ Plugin Name: ETH Simple Shortlinks ...@@ -4,8 +4,10 @@ Plugin Name: ETH Simple Shortlinks
Plugin URI: https://ethitter.com/plugins/ Plugin URI: https://ethitter.com/plugins/
Description: Simple non-GET shortlinks using post IDs Description: Simple non-GET shortlinks using post IDs
Author: Erick Hitter Author: Erick Hitter
Version: 0.4 Version: 0.5
Author URI: https://ethitter.com/ Author URI: https://ethitter.com/
Text Domain: eth_simple_shortlinks
Domain Path: /languages/
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -46,41 +48,107 @@ class ETH_Simple_Shortlinks { ...@@ -46,41 +48,107 @@ class ETH_Simple_Shortlinks {
/** /**
* Dummy magic methods * Dummy magic methods
*/ */
public function __clone() { _doing_it_wrong( __FUNCTION__, 'Cheatin’ huh?', '0.1' ); } public function __clone() { _doing_it_wrong( __FUNCTION__, __( 'Cheatin’ uh?' ), '0.1' ); }
public function __wakeup() { _doing_it_wrong( __FUNCTION__, 'Cheatin’ huh?', '0.1' ); } public function __wakeup() { _doing_it_wrong( __FUNCTION__, __( 'Cheatin’ uh?' ), '0.1' ); }
public function __call( $name = '', $args = array() ) { unset( $name, $args ); return null; } public function __call( $name = '', $args = array() ) { unset( $name, $args ); return null; }
/** /**
* Class properties * Class properties
*/ */
private $slug = 'p'; private $name = 'ETH Simple Shortlinks';
private $qv = 'eth-shortlink'; private $slug = 'p';
private $rewrite_rule = null;
private $rewrite_match = null;
private $qv = 'eth-shortlink';
private $plugin_supported = false;
private $supported_post_types = array(); private $supported_post_types = array();
private $supported_post_statuses = array(); private $supported_post_statuses = array();
/** /**
* Register actions and filters * Register plugin's setup action
*/ */
private function __construct() { private function __construct() {
// Request // Build rewrite parts using other class properties
add_action( 'init', array( $this, 'add_rewrite_rule' ) ); $this->rewrite_rule = '^' . $this->slug . '/([\d]+)/?$';
add_action( 'wp_loaded', array( $this, 'filter_support' ) ); $this->rewrite_match = 'index.php?p=$matches[1]&' . $this->qv . '=1';
add_filter( 'query_vars', array( $this, 'filter_query_vars' ) );
add_action( 'parse_request', array( $this, 'action_parse_request' ) ); // Basic plugin actions
add_action( 'plugins_loaded', array( $this, 'action_plugins_loaded' ) );
// Shortlink add_action( 'init', array( $this, 'action_init' ) );
add_filter( 'get_shortlink', array( $this, 'filter_get_shortlink' ), 10, 2 ); }
add_action( 'admin_head-edit.php', array( $this, 'add_admin_header_assets' ) );
add_filter( 'post_row_actions', array( $this, 'filter_row_actions' ), 10, 2 ); /**
add_filter( 'page_row_actions', array( $this, 'filter_row_actions' ), 10, 2 ); * Load plugin translations
*/
public function action_plugins_loaded() {
load_plugin_textdomain( 'eth_simple_shortlinks', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
} }
/** /**
* Register rewrite rule * Verify plugin is supported, then register its functionality
*/ */
public function add_rewrite_rule() { public function action_init() {
add_rewrite_rule( '^' . $this->slug . '/([\d]+)/?$', 'index.php?p=$matches[1]&' . $this->qv . '=1', 'top' ); global $wp_rewrite;
// Plugin won't work if site doesn't use pretty permalinks
if ( empty( $wp_rewrite->permalink_structure ) ) {
add_action( 'admin_notices', array( $this, 'action_add_admin_notices' ) );
} else {
$this->plugin_supported = true;
// Admin notices
add_action( 'admin_notices', array( $this, 'action_add_admin_notices' ) );
// Register rewrite rule
add_rewrite_rule( $this->rewrite_rule, $this->rewrite_match, 'top' );
// Request handling
add_action( 'wp_loaded', array( $this, 'filter_support' ) );
add_filter( 'query_vars', array( $this, 'filter_query_vars' ) );
add_action( 'parse_request', array( $this, 'action_parse_request' ) );
// Shortlink overrides
add_filter( 'get_shortlink', array( $this, 'filter_get_shortlink' ), 10, 2 );
add_action( 'admin_head-edit.php', array( $this, 'add_admin_header_assets' ) );
add_filter( 'post_row_actions', array( $this, 'filter_row_actions' ), 10, 2 );
add_filter( 'page_row_actions', array( $this, 'filter_row_actions' ), 10, 2 );
}
}
/**
* Display admin notices if plugin's requirements aren't met
*/
public function action_add_admin_notices() {
// Notices are only relevant if current user can get to the Permalinks and Plugins options screens
if ( ! current_user_can( 'manage_options') || ! current_user_can( 'activate_plugins' ) ) {
return;
}
// Build notices
$message = '';
if ( $this->plugin_supported ) {
// Check option for the plugin's rule
// The `$wp_rewrite` global will include it in `extra_rules_top` even though it hasn't been saved to the DB, and therefore isn't really active.
$rewrites = get_option( 'rewrite_rules' );
if ( is_array( $rewrites ) && ! array_key_exists( $this->rewrite_rule, $rewrites ) ) {
$message = sprintf( __( 'Please visit the <a href="%1$s">Permalinks</a> settings page to refresh your permalinks. Doing so will add the rules this plugin requires.', 'eth_simple_shortlinks' ), admin_url( 'options-permalink.php' ) );
}
} else {
$message = sprintf( __( 'Please enable <a href="%1$s">pretty permalinks</a>, otherwise disable this plugin as it is not compatible with "Plain" permalinks.', 'eth_simple_shortlinks' ), admin_url( 'options-permalink.php' ) );
}
// Display a notice if one exists
if ( ! empty( $message ) ) {
$message = sprintf( __( '<strong>%1$s</strong>: %2$s', 'eth_simple_shortlinks' ), $this->name, $message );
?><div class="error">
<p><?php echo $message; ?></p>
</div><?php
}
} }
/** /**
...@@ -176,7 +244,7 @@ class ETH_Simple_Shortlinks { ...@@ -176,7 +244,7 @@ class ETH_Simple_Shortlinks {
return $actions; return $actions;
} }
$actions['shortlink'] = '<a href="' . esc_js( $this->get_shortlink( $post->ID ) ) . '">Shortlink</a>'; $actions['shortlink'] = '<a href="' . esc_js( $this->get_shortlink( $post->ID ) ) . '">' . __( 'Shortlink' ) . '</a>';
return $actions; return $actions;
} }
...@@ -199,6 +267,11 @@ class ETH_Simple_Shortlinks { ...@@ -199,6 +267,11 @@ class ETH_Simple_Shortlinks {
* Utility method for building permlink * Utility method for building permlink
*/ */
public function get_shortlink( $post_id ) { public function get_shortlink( $post_id ) {
// Use Core's default when this plugin can't build a link
if ( ! $this->plugin_supported ) {
return wp_get_shortlink( $post_id );
}
return user_trailingslashit( home_url( sprintf( '%s/%d', $this->slug, $post_id ) ) ); return user_trailingslashit( home_url( sprintf( '%s/%d', $this->slug, $post_id ) ) );
} }
} }
...@@ -210,7 +283,7 @@ ETH_Simple_Shortlinks::get_instance(); ...@@ -210,7 +283,7 @@ ETH_Simple_Shortlinks::get_instance();
*/ */
function eth_simple_shortlinks_get( $post_id ) { function eth_simple_shortlinks_get( $post_id ) {
if ( ! did_action( 'wp_loaded' ) ) { if ( ! did_action( 'wp_loaded' ) ) {
_doing_it_wrong( __FUNCTION__, 'Shortlinks cannot be generated until after <code>wp_loaded</code>; this ensures that all post types are registered.', '0.3' ); _doing_it_wrong( __FUNCTION__, __( 'Shortlinks cannot be generated until after <code>wp_loaded</code>; this ensures that all post types are registered.', 'eth_simple_shortlinks' ), '0.3' );
return false; return false;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment