diff --git a/classes/LBRYPress.php b/classes/LBRYPress.php new file mode 100644 index 0000000..2557ff9 --- /dev/null +++ b/classes/LBRYPress.php @@ -0,0 +1,241 @@ + 'Creative Commons Attribution 4.0 International', + 'Creative Commons Attribution-ShareAlike 4.0 International' => 'Creative Commons Attribution-ShareAlike 4.0 International', + 'Creative Commons Attribution-NoDerivatives 4.0 International' => 'Creative Commons Attribution-NoDerivatives 4.0 International', + 'Creative Commons Attribution-NonCommercial 4.0 International' => 'Creative Commons Attribution-NonCommercial 4.0 International', + 'Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International' => 'Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International', + 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International' => 'Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International', + 'Copyrighted' => 'Copyrighted', + 'Public Domain' => 'Public Domain' + ); + + /** + * Main LBRYPress Instance. + * + * Ensures only one instance of LBRYPress is loaded or can be loaded. + */ + public static function instance() + { + if (is_null(self::$_instance)) { + self::$_instance = new self(); + } + return self::$_instance; + } + + + /** + * LBRYPress Constructor + */ + public function __construct() + { + $this->define_constants(); + spl_autoload_register(array($this, 'lbry_autoload_register')); + $this->init(); + $this->init_hooks(); + } + + /** + * Define a constant if its not already set. + * + * @param string $name Constant name. + * @param string|bool $value Constant value. + */ + private function define($name, $value) + { + if (! defined($name)) { + define($name, $value); + } + } + + /** + * Define all LBRYPress constants + */ + private function define_constants() + { + $upload_dir = wp_upload_dir(null, false); + + $this->define('LBRY_ABSPATH', dirname(LBRY_PLUGIN_FILE) . '/'); + $this->define('LBRY_NAME', plugin_basename(LBRY_PLUGIN_FILE)); + $this->define('LBRY_VERSION', $this->version); + + // Library Options Names + $this->define('LBRY_SETTINGS_GROUP', 'lbry_settings_group'); + $this->define('LBRY_SETTINGS', 'lbry_settings'); + $this->define('LBRY_SETTINGS_SECTION_GENERAL', 'lbry_settings_section_general'); + $this->define('LBRY_ADMIN_PAGE', 'lbrypress'); + $this->define('LBRY_WALLET', 'lbry_wallet'); // the wallet address + $this->define('LBRY_SPEECH', 'lbry_speech'); // the spee.ch address + $this->define('LBRY_LICENSE', 'lbry_license'); // the license to publish with to the LBRY network + $this->define('LBRY_LBC_PUBLISH', 'lbry_lbc_publish'); // amount of lbc to use per publish + $this->define('LBRY_WILL_PUBLISH', 'lbry_will_publish'); // The meta key for if to publish to LBRY Network or not + $this->define('LBRY_POST_CHANNEL', 'lbry_channel'); // The meta key for which channel to publish + } + + /** + * Autoloader Registration + */ + private function lbry_autoload_register($class) + { + $file_name = LBRY_ABSPATH . 'classes/' . $class . '.php'; + + if (file_exists($file_name)) { + require $file_name; + return; + } + } + + /** + * Initialize this class itself + */ + private function init() + { + $this->daemon = new LBRY_Daemon(); + $this->speech = new LBRY_Speech(); + + // Admin request + if (is_admin()) { + $this->admin = new LBRY_Admin(); + $this->notice = new LBRY_Admin_Notice(); + $this->network = new LBRY_Network(); + } + } + + /** + * Set up all hooks and actions necessary for the plugin to run + */ + private function init_hooks() + { + register_activation_hook(LBRY_PLUGIN_FILE, array($this, 'activate')); + register_deactivation_hook(LBRY_PLUGIN_FILE, array($this, 'deactivate')); + + // Banner output for published posts + // NOTE: move this to its own class to reduce clutter? + add_action('the_content', array($this, 'published_on_lbry_banner'), 12, 1); + } + + /** + * Run during plugin activation + */ + public function activate() + { + // TODO: Make sure errors are thrown if daemon can't be contacted, stop activation + + // Add options to the options table we need + if (! get_option(LBRY_SETTINGS)) { + + // Default options + $option_defaults = array( + LBRY_SPEECH => null, + LBRY_LICENSE => $this->licenses[0], + LBRY_LBC_PUBLISH => 1 + ); + + add_option(LBRY_SETTINGS, $option_defaults, false); + } + + // COMBAK: decide if we need to check for missing or corrupt settings. May be unecessary. + // Double check we have all settings, if not, update with default + // $current_settings = get_option(LBRY_SETTINGS); + // $new_settings = $current_settings; + // foreach ($option_defaults as $key => $value) { + // if (! array_key_exists($key, $current_settings)) { + // $new_settings[$key] = $value; + // } + // } + // update_option(LBRY_SETTINGS, $new_settings); + } + + /** + * Clean up on deactivation + */ + public function deactivate() + { + // TODO: Stop the daemon + error_log('Deactivated LBRYPress'); + } + + public function published_on_lbry_banner($content) + { + if (!is_single() || !in_the_loop() || !is_main_query()) { + return $content; + } + + global $post; + if ($post->post_type != 'post') { + return $content; + } + + if (!get_post_meta($post->ID, LBRY_WILL_PUBLISH, true)) { + return $content; + } + + ob_start(); + require(LBRY_ABSPATH . 'templates/published_on_lbry_banner.php'); + $banner = ob_get_clean(); + + return $content .= $banner; + } + + /* + * Utility Functions + */ + public static function channel_name_comp($a, $b) + { + if ($a->name === $b->name) { + return 0; + } + + if ($b->name == '(none / unattributed)') { + return -1; + } + return strnatcasecmp($a->name, $b->name); + } +}