Fixed Broken Shit
This commit is contained in:
216
includes/Config/Config.php
Normal file
216
includes/Config/Config.php
Normal file
@ -0,0 +1,216 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Define the YOURLS config
|
||||
*/
|
||||
|
||||
namespace YOURLS\Config;
|
||||
|
||||
use YOURLS\Exceptions\ConfigException;
|
||||
|
||||
class Config {
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $root;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $config;
|
||||
|
||||
/**
|
||||
* @since 1.7.3
|
||||
* @param string $config Optional user defined config path
|
||||
*/
|
||||
public function __construct($config = '') {
|
||||
$this->set_root( $this->fix_win32_path( dirname( dirname( __DIR__ ) ) ) );
|
||||
$this->set_config($config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert antislashes to slashes
|
||||
*
|
||||
* @since 1.7.3
|
||||
* @param string $path
|
||||
* @return string path with \ converted to /
|
||||
*/
|
||||
public function fix_win32_path($path) {
|
||||
return str_replace('\\', '/', $path);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.7.3
|
||||
* @param string $config path to config file
|
||||
* @return void
|
||||
*/
|
||||
public function set_config($config) {
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.7.3
|
||||
* @param string $root path to YOURLS root directory
|
||||
* @return void
|
||||
*/
|
||||
public function set_root($root) {
|
||||
$this->root = $root;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find config.php, either user defined or from standard location
|
||||
*
|
||||
* @since 1.7.3
|
||||
* @return string path to found config file
|
||||
* @throws ConfigException
|
||||
*/
|
||||
public function find_config() {
|
||||
|
||||
$config = $this->fix_win32_path($this->config);
|
||||
|
||||
if (!empty($config) && is_readable($config)) {
|
||||
return $config;
|
||||
}
|
||||
|
||||
if (!empty($config) && !is_readable($config)) {
|
||||
throw new ConfigException("User defined config not found at '$config'");
|
||||
}
|
||||
|
||||
// config.php in /user/
|
||||
if (file_exists($this->root . '/user/config.php')) {
|
||||
return $this->root . '/user/config.php';
|
||||
}
|
||||
|
||||
// config.php in /includes/
|
||||
if (file_exists($this->root . '/includes/config.php')) {
|
||||
return $this->root . '/includes/config.php';
|
||||
}
|
||||
|
||||
// config.php not found :(
|
||||
|
||||
throw new ConfigException('Cannot find config.php. Please read the readme.html to learn how to install YOURLS');
|
||||
}
|
||||
|
||||
/**
|
||||
* Define core constants that have not been user defined in config.php
|
||||
*
|
||||
* @since 1.7.3
|
||||
* @return void
|
||||
* @throws ConfigException
|
||||
*/
|
||||
public function define_core_constants() {
|
||||
// Check minimal config job has been properly done
|
||||
$must_haves = array('YOURLS_DB_USER', 'YOURLS_DB_PASS', 'YOURLS_DB_NAME', 'YOURLS_DB_HOST', 'YOURLS_DB_PREFIX', 'YOURLS_SITE');
|
||||
foreach($must_haves as $must_have) {
|
||||
if (!defined($must_have)) {
|
||||
throw new ConfigException('Config is incomplete (missing at least '.$must_have.') Check config-sample.php and edit your config accordingly');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The following has an awful CRAP index and it would be much shorter reduced to something like
|
||||
* defining an array of ('YOURLS_SOMETHING' => 'default value') and then a simple loop over the
|
||||
* array, checking if $current is defined as a constant and otherwise define said constant with
|
||||
* its default value. I did not wrote it that way because that would make it difficult for code
|
||||
* parsers to identify which constants are defined and where. So, here it is, that long list of
|
||||
* if (!defined) define(). Ho and by the way, such beautiful comment, much right aligned, wow !
|
||||
*/
|
||||
|
||||
// physical path of YOURLS root
|
||||
if (!defined( 'YOURLS_ABSPATH' ))
|
||||
define('YOURLS_ABSPATH', $this->root);
|
||||
|
||||
// physical path of includes directory
|
||||
if (!defined( 'YOURLS_INC' ))
|
||||
define('YOURLS_INC', YOURLS_ABSPATH.'/includes');
|
||||
|
||||
// physical path of user directory
|
||||
if (!defined( 'YOURLS_USERDIR' ))
|
||||
define( 'YOURLS_USERDIR', YOURLS_ABSPATH.'/user' );
|
||||
|
||||
// URL of user directory
|
||||
if (!defined( 'YOURLS_USERURL' ))
|
||||
define( 'YOURLS_USERURL', trim(YOURLS_SITE, '/').'/user' );
|
||||
|
||||
// physical path of asset directory
|
||||
if( !defined( 'YOURLS_ASSETDIR' ) )
|
||||
define( 'YOURLS_ASSETDIR', YOURLS_ABSPATH.'/assets' );
|
||||
|
||||
// URL of asset directory
|
||||
if( !defined( 'YOURLS_ASSETURL' ) )
|
||||
define( 'YOURLS_ASSETURL', trim(YOURLS_SITE, '/').'/assets' );
|
||||
|
||||
// physical path of translations directory
|
||||
if (!defined( 'YOURLS_LANG_DIR' ))
|
||||
define( 'YOURLS_LANG_DIR', YOURLS_USERDIR.'/languages' );
|
||||
|
||||
// physical path of plugins directory
|
||||
if (!defined( 'YOURLS_PLUGINDIR' ))
|
||||
define( 'YOURLS_PLUGINDIR', YOURLS_USERDIR.'/plugins' );
|
||||
|
||||
// URL of plugins directory
|
||||
if (!defined( 'YOURLS_PLUGINURL' ))
|
||||
define( 'YOURLS_PLUGINURL', YOURLS_USERURL.'/plugins' );
|
||||
|
||||
// physical path of themes directory
|
||||
if( !defined( 'YOURLS_THEMEDIR' ) )
|
||||
define( 'YOURLS_THEMEDIR', YOURLS_USERDIR.'/themes' );
|
||||
|
||||
// URL of themes directory
|
||||
if( !defined( 'YOURLS_THEMEURL' ) )
|
||||
define( 'YOURLS_THEMEURL', YOURLS_USERURL.'/themes' );
|
||||
|
||||
// physical path of pages directory
|
||||
if (!defined( 'YOURLS_PAGEDIR' ))
|
||||
define('YOURLS_PAGEDIR', YOURLS_USERDIR.'/pages' );
|
||||
|
||||
// table to store URLs
|
||||
if (!defined( 'YOURLS_DB_TABLE_URL' ))
|
||||
define( 'YOURLS_DB_TABLE_URL', YOURLS_DB_PREFIX.'url' );
|
||||
|
||||
// table to store options
|
||||
if (!defined( 'YOURLS_DB_TABLE_OPTIONS' ))
|
||||
define( 'YOURLS_DB_TABLE_OPTIONS', YOURLS_DB_PREFIX.'options' );
|
||||
|
||||
// table to store hits, for stats
|
||||
if (!defined( 'YOURLS_DB_TABLE_LOG' ))
|
||||
define( 'YOURLS_DB_TABLE_LOG', YOURLS_DB_PREFIX.'log' );
|
||||
|
||||
// minimum delay in sec before a same IP can add another URL. Note: logged in users are not throttled down.
|
||||
if (!defined( 'YOURLS_FLOOD_DELAY_SECONDS' ))
|
||||
define( 'YOURLS_FLOOD_DELAY_SECONDS', 15 );
|
||||
|
||||
// comma separated list of IPs that can bypass flood check.
|
||||
if (!defined( 'YOURLS_FLOOD_IP_WHITELIST' ))
|
||||
define( 'YOURLS_FLOOD_IP_WHITELIST', '' );
|
||||
|
||||
// life span of an auth cookie in seconds (60*60*24*7 = 7 days)
|
||||
if (!defined( 'YOURLS_COOKIE_LIFE' ))
|
||||
define( 'YOURLS_COOKIE_LIFE', 60*60*24*7 );
|
||||
|
||||
// life span of a nonce in seconds
|
||||
if (!defined( 'YOURLS_NONCE_LIFE' ))
|
||||
define( 'YOURLS_NONCE_LIFE', 43200 ); // 3600 * 12
|
||||
|
||||
// if set to true, disable stat logging (no use for it, too busy servers, ...)
|
||||
if (!defined( 'YOURLS_NOSTATS' ))
|
||||
define( 'YOURLS_NOSTATS', false );
|
||||
|
||||
// if set to true, force https:// in the admin area
|
||||
if (!defined( 'YOURLS_ADMIN_SSL' ))
|
||||
define( 'YOURLS_ADMIN_SSL', false );
|
||||
|
||||
// if set to true, verbose debug infos. Will break things. Don't enable.
|
||||
if (!defined( 'YOURLS_DEBUG' ))
|
||||
define( 'YOURLS_DEBUG', false );
|
||||
|
||||
// Error reporting
|
||||
if (defined( 'YOURLS_DEBUG' ) && YOURLS_DEBUG == true ) {
|
||||
error_reporting( -1 );
|
||||
} else {
|
||||
error_reporting( E_ERROR | E_PARSE );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
194
includes/Config/Init.php
Normal file
194
includes/Config/Init.php
Normal file
@ -0,0 +1,194 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* YOURLS actions upon instantiating
|
||||
*/
|
||||
|
||||
namespace YOURLS\Config;
|
||||
|
||||
class Init {
|
||||
|
||||
/**
|
||||
* @var InitDefaults
|
||||
*/
|
||||
protected $actions;
|
||||
|
||||
/**
|
||||
* @since 1.7.3
|
||||
*
|
||||
* @param InitDefaults $actions
|
||||
*/
|
||||
public function __construct(InitDefaults $actions) {
|
||||
|
||||
$this->actions = $actions;
|
||||
|
||||
// Include core files
|
||||
if ($actions->include_core_funcs === true) {
|
||||
$this->include_core_functions();
|
||||
}
|
||||
|
||||
// Enforce UTC timezone. Date/time can be adjusted with a plugin.
|
||||
if ($actions->default_timezone === true) {
|
||||
date_default_timezone_set( 'UTC' );
|
||||
}
|
||||
|
||||
// Load locale
|
||||
if ($actions->load_default_textdomain === true) {
|
||||
yourls_load_default_textdomain();
|
||||
}
|
||||
|
||||
// Check if we are in maintenance mode - if yes, it will die here.
|
||||
if ($actions->check_maintenance_mode === true) {
|
||||
yourls_check_maintenance_mode();
|
||||
}
|
||||
|
||||
// Fix REQUEST_URI for IIS
|
||||
if ($actions->fix_request_uri === true) {
|
||||
yourls_fix_request_uri();
|
||||
}
|
||||
|
||||
// If request for an admin page is http:// and SSL is required, redirect
|
||||
if ($actions->redirect_ssl === true) {
|
||||
$this->redirect_ssl_if_needed();
|
||||
}
|
||||
|
||||
// Create the YOURLS object $ydb that will contain everything we globally need
|
||||
if ($actions->include_db === true) {
|
||||
$this->include_db_files();
|
||||
}
|
||||
|
||||
// Allow early inclusion of a cache layer
|
||||
if ($actions->include_cache === true) {
|
||||
$this->include_cache_files();
|
||||
}
|
||||
|
||||
// Abort initialization here if fast init wanted (for tests/debug/do not use)
|
||||
if ($actions->return_if_fast_init === true && defined('YOURLS_FAST_INIT') && YOURLS_FAST_INIT){
|
||||
return;
|
||||
}
|
||||
|
||||
// Read options right from start
|
||||
if ($actions->get_all_options === true) {
|
||||
yourls_get_all_options();
|
||||
}
|
||||
|
||||
// Register shutdown function
|
||||
if ($actions->register_shutdown === true) {
|
||||
register_shutdown_function( 'yourls_shutdown' );
|
||||
}
|
||||
|
||||
// Core now loaded
|
||||
if ($actions->core_loaded === true) {
|
||||
yourls_do_action( 'init' ); // plugins can't see this, not loaded yet
|
||||
}
|
||||
|
||||
// Check if need to redirect to install procedure
|
||||
if ($actions->redirect_to_install === true) {
|
||||
if (!yourls_is_installed() && !yourls_is_installing()) {
|
||||
yourls_no_cache_headers();
|
||||
yourls_redirect( yourls_admin_url('install.php'), 307 );
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
// Check if upgrade is needed (bypassed if upgrading or installing)
|
||||
if ($actions->check_if_upgrade_needed === true) {
|
||||
if (!yourls_is_upgrading() && !yourls_is_installing() && yourls_upgrade_is_needed()) {
|
||||
yourls_no_cache_headers();
|
||||
yourls_redirect( yourls_admin_url('upgrade.php'), 307 );
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
// Load all plugins
|
||||
if ($actions->load_plugins === true) {
|
||||
yourls_load_plugins();
|
||||
}
|
||||
|
||||
// Trigger plugin loaded action
|
||||
if ($actions->plugins_loaded_action === true) {
|
||||
yourls_do_action( 'plugins_loaded' );
|
||||
}
|
||||
|
||||
// Is there a new version of YOURLS ?
|
||||
if ($actions->check_new_version === true) {
|
||||
if (yourls_is_installed() && !yourls_is_upgrading()) {
|
||||
yourls_tell_if_new_version();
|
||||
}
|
||||
}
|
||||
|
||||
if ($actions->init_admin === true) {
|
||||
if (yourls_is_admin()) {
|
||||
yourls_do_action( 'admin_init' );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.7.3
|
||||
* @return void
|
||||
*/
|
||||
public function redirect_ssl_if_needed() {
|
||||
if (yourls_is_admin() && yourls_needs_ssl() && !yourls_is_ssl()) {
|
||||
if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'http' ) ) {
|
||||
yourls_redirect( preg_replace( '|^http://|', 'https://', $_SERVER['REQUEST_URI'] ) );
|
||||
} else {
|
||||
yourls_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
|
||||
}
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.7.3
|
||||
* @return void
|
||||
*/
|
||||
public function include_db_files() {
|
||||
// Allow drop-in replacement for the DB engine
|
||||
if (file_exists(YOURLS_USERDIR.'/db.php')) {
|
||||
require_once YOURLS_USERDIR.'/db.php';
|
||||
} else {
|
||||
require_once YOURLS_INC.'/class-mysql.php';
|
||||
yourls_db_connect();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.7.3
|
||||
* @return void
|
||||
*/
|
||||
public function include_cache_files() {
|
||||
if (file_exists(YOURLS_USERDIR.'/cache.php')) {
|
||||
require_once YOURLS_USERDIR.'/cache.php';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.7.3
|
||||
* @return void
|
||||
*/
|
||||
public function include_core_functions() {
|
||||
require_once YOURLS_INC.'/version.php';
|
||||
require_once YOURLS_INC.'/functions.php';
|
||||
require_once YOURLS_INC.'/functions-geo.php';
|
||||
require_once YOURLS_INC.'/functions-shorturls.php';
|
||||
require_once YOURLS_INC.'/functions-debug.php';
|
||||
require_once YOURLS_INC.'/functions-options.php';
|
||||
require_once YOURLS_INC.'/functions-links.php';
|
||||
require_once YOURLS_INC.'/functions-plugins.php';
|
||||
require_once YOURLS_INC.'/functions-formatting.php';
|
||||
require_once YOURLS_INC.'/functions-api.php';
|
||||
require_once YOURLS_INC.'/functions-kses.php';
|
||||
require_once YOURLS_INC.'/functions-l10n.php';
|
||||
require_once YOURLS_INC.'/functions-compat.php';
|
||||
require_once YOURLS_INC.'/functions-html.php';
|
||||
require_once YOURLS_INC.'/functions-http.php';
|
||||
require_once YOURLS_INC.'/functions-infos.php';
|
||||
require_once YOURLS_INC.'/functions-deprecated.php';
|
||||
require_once YOURLS_INC.'/functions-auth.php';
|
||||
require_once YOURLS_INC.'/functions-upgrade.php';
|
||||
require_once YOURLS_INC.'/functions-install.php';
|
||||
}
|
||||
|
||||
}
|
125
includes/Config/InitDefaults.php
Normal file
125
includes/Config/InitDefaults.php
Normal file
@ -0,0 +1,125 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* YOURLS defaut actions upon instantiating
|
||||
*
|
||||
* This class defines all the default actions to be performed when instantiating YOURLS. The idea
|
||||
* is that this is easily tuneable depending on the scenario, namely when running YOURLS for
|
||||
* unit tests.
|
||||
*
|
||||
* @see \YOURLS\Config\Init
|
||||
*/
|
||||
|
||||
namespace YOURLS\Config;
|
||||
|
||||
class InitDefaults {
|
||||
|
||||
/**
|
||||
* Whether to include core function files
|
||||
* @var bool
|
||||
*/
|
||||
public $include_core_funcs = true;
|
||||
|
||||
/**
|
||||
* Whether to set default time zone
|
||||
* @var bool
|
||||
*/
|
||||
public $default_timezone = true;
|
||||
|
||||
/**
|
||||
* Whether to load default text domain
|
||||
* @var bool
|
||||
*/
|
||||
public $load_default_textdomain = true;
|
||||
|
||||
/**
|
||||
* Whether to check for maintenance mode and maybe die here
|
||||
* @var bool
|
||||
*/
|
||||
public $check_maintenance_mode = true;
|
||||
|
||||
/**
|
||||
* Whether to fix $_REQUEST for IIS
|
||||
* @var bool
|
||||
*/
|
||||
public $fix_request_uri = true;
|
||||
|
||||
/**
|
||||
* Whether to redirect to SSL if needed
|
||||
* @var bool
|
||||
*/
|
||||
public $redirect_ssl = true;
|
||||
|
||||
/**
|
||||
* Whether to include DB engine
|
||||
* @var bool
|
||||
*/
|
||||
public $include_db = true;
|
||||
|
||||
/**
|
||||
* Whether to include cache layer
|
||||
* @var bool
|
||||
*/
|
||||
public $include_cache = true;
|
||||
|
||||
/**
|
||||
* Whether to end instantiating early if YOURLS_FAST_INIT is defined and true
|
||||
* @var bool
|
||||
*/
|
||||
public $return_if_fast_init = true;
|
||||
|
||||
/**
|
||||
* Whether to read all options at once during starting
|
||||
* @var bool
|
||||
*/
|
||||
public $get_all_options = true;
|
||||
|
||||
/**
|
||||
* Whether to register shutdown action
|
||||
* @var bool
|
||||
*/
|
||||
public $register_shutdown = true;
|
||||
|
||||
/**
|
||||
* Whether to trigger action 'init' after core is loaded
|
||||
* @var bool
|
||||
*/
|
||||
public $core_loaded = true;
|
||||
|
||||
/**
|
||||
* Whether to redirect to install procedure if needed
|
||||
* @var bool
|
||||
*/
|
||||
public $redirect_to_install = true;
|
||||
|
||||
/**
|
||||
* Whether to redirect to upgrade procedure if needed
|
||||
* @var bool
|
||||
*/
|
||||
public $check_if_upgrade_needed = true;
|
||||
|
||||
/**
|
||||
* Whether to load all plugins
|
||||
* @var bool
|
||||
*/
|
||||
public $load_plugins = true;
|
||||
|
||||
/**
|
||||
* Whether to trigger the "plugins_loaded" action
|
||||
* @var bool
|
||||
*/
|
||||
public $plugins_loaded_action = true;
|
||||
|
||||
/**
|
||||
* Whether to check if a new version if available
|
||||
* @var bool
|
||||
*/
|
||||
public $check_new_version = true;
|
||||
|
||||
/**
|
||||
* Whether to trigger 'admin_init' if applicable
|
||||
* @var bool
|
||||
*/
|
||||
public $init_admin = true;
|
||||
|
||||
}
|
Reference in New Issue
Block a user