<?php 
/** 
 * This file is a part of the phpMussel package. 
 * Homepage: https://phpmussel.github.io/ 
 * 
 * PHPMUSSEL COPYRIGHT 2013 AND BEYOND BY THE PHPMUSSEL TEAM. 
 * 
 * Authors: 
 * @see PEOPLE.md 
 * 
 * License: GNU/GPLv2 
 * @see LICENSE.txt 
 * 
 * This file: The loader (last modified: 2019.04.02). 
 */ 
 
/** 
 * phpMussel should only be loaded once per PHP instance. To ensure this, we 
 * check for the existence of a "phpMussel" constant. If it doesn't exist, we 
 * define it and continue loading. If it already exists, we warn the client and 
 * kill the script. 
 */ 
if (defined('phpMussel')) { 
    header('Content-Type: text/plain'); 
    echo '[phpMussel] ' . ( 
        isset($phpMussel['L10N']) ? $phpMussel['L10N']->getString('instance_already_active') : 'Instance already active! Please double-check your hooks.' 
    ); 
    die; 
} 
 
define('phpMussel', true); 
 
if (!version_compare(PHP_VERSION, '5.4.0', '>=')) { 
    header('Content-Type: text/plain'); 
    die('[phpMussel] Not compatible with PHP versions below 5.4.0; Please update PHP in order to use phpMussel.'); 
} 
 
/** Create an array for our working data. */ 
$phpMussel = []; 
 
/** Determine the location of the "vault" directory. */ 
$phpMussel['Vault'] = __DIR__ . '/vault/'; 
 
/** Kill the script if we can't find the vault directory. */ 
if (!is_dir($phpMussel['Vault'])) { 
    header('Content-Type: text/plain'); 
    die('[phpMussel] Vault directory not correctly set: Can\'t continue.'); 
} 
 
/** Define the location of the "cache" directory. */ 
$phpMussel['cachePath'] = $phpMussel['Vault'] . 'cache/'; 
 
/** Define the location of the "lang" directory. */ 
$phpMussel['langPath'] = $phpMussel['Vault'] . 'lang/'; 
 
/** Define the location of the "plugins" directory. */ 
$phpMussel['pluginPath'] = $phpMussel['Vault'] . 'plugins/'; 
 
/** Define the location of the "quarantine" directory. */ 
$phpMussel['qfuPath'] = $phpMussel['Vault'] . 'quarantine/'; 
 
/** Define the location of the "signatures" directory. */ 
$phpMussel['sigPath'] = $phpMussel['Vault'] . 'signatures/'; 
 
/** Checks whether we're calling phpMussel directly or through a hook. */ 
$phpMussel['Direct'] = function () { 
    return ( 
        !isset($_SERVER['SCRIPT_FILENAME']) || 
        str_replace("\\", '/', strtolower(realpath($_SERVER['SCRIPT_FILENAME']))) === str_replace("\\", '/', strtolower(__FILE__)) 
    ); 
}; 
 
/** Checks whether we're calling phpMussel through an alternative pathway (e.g., Cronable). */ 
$phpMussel['Alternate'] = ( 
    class_exists('\Maikuolan\Cronable\Cronable') 
); 
 
/** Kill the script if the functions file doesn't exist. */ 
if (!file_exists($phpMussel['Vault'] . 'functions.php')) { 
    header('Content-Type: text/plain'); 
    die('[phpMussel] Functions file missing! Please reinstall phpMussel.'); 
} 
/** Load the functions file. */ 
require $phpMussel['Vault'] . 'functions.php'; 
 
/** Kill the script if the configuration handler doesn't exist. */ 
if (!file_exists($phpMussel['Vault'] . 'config.php')) { 
    header('Content-Type: text/plain'); 
    die('[phpMussel] Configuration handler missing! Please reinstall phpMussel.'); 
} 
/** Load the configuration handler. */ 
require $phpMussel['Vault'] . 'config.php'; 
 
/** 
 * Check whether the language handler exists; Kill the script if it 
 * doesn't. 
 */ 
if (!file_exists($phpMussel['Vault'] . 'lang.php')) { 
    header('Content-Type: text/plain'); 
    die('[phpMussel] Language handler missing! Please reinstall phpMussel.'); 
} 
/** Load the language handler. */ 
require $phpMussel['Vault'] . 'lang.php'; 
 
/** 
 * Used to determine whether we've reached the end of this file without 
 * exiting cleanly (important for rendering scan results correctly). 
 */ 
$phpMussel['EOF'] = false; 
 
/** A safety feature for logging. */ 
$phpMussel['safety'] = "\x3c\x3fphp die; \x3f\x3e"; 
 
/** 
 * If phpMussel is "disabled" (if the "disable lock" is engaged), nothing 
 * within this block should execute (thus effectively disabling phpMussel). 
 */ 
if (!$phpMussel['disable_lock'] = file_exists($phpMussel['Vault'] . 'disable.lck')) { 
 
    /** Plugins are detected and processed by phpMussel here. */ 
    $phpMussel['MusselPlugins'] = ['hooks' => [], 'closures' => []]; 
    if ($phpMussel['Config']['general']['enable_plugins']) { 
        if (!is_dir($phpMussel['Vault'] . 'plugins')) { 
            header('Content-Type: text/plain'); 
            die('[phpMussel] ' . $phpMussel['L10N']->getString('plugins_directory_nonexistent')); 
        } 
        $phpMussel['MusselPlugins']['tempdata'] = []; 
        if (( 
            $phpMussel['MusselPlugins']['tempdata']['d'] = opendir($phpMussel['Vault'] . 'plugins') 
        ) && is_resource($phpMussel['MusselPlugins']['tempdata']['d'])) { 
            while (true) { 
                $phpMussel['MusselPlugins']['tempdata']['f'] = readdir($phpMussel['MusselPlugins']['tempdata']['d']); 
                if (empty($phpMussel['MusselPlugins']['tempdata']['f'])) { 
                    break; 
                } 
                if ( 
                    $phpMussel['MusselPlugins']['tempdata']['f'] !== '.' && 
                    $phpMussel['MusselPlugins']['tempdata']['f'] !== '..' && 
                    is_dir($phpMussel['pluginPath'] . $phpMussel['MusselPlugins']['tempdata']['f']) && 
                    file_exists($phpMussel['pluginPath'] . $phpMussel['MusselPlugins']['tempdata']['f'] . '/plugin.php') && 
                    !is_link($phpMussel['pluginPath'] . $phpMussel['MusselPlugins']['tempdata']['f'] . '/plugin.php') 
                ) { 
                    require_once $phpMussel['pluginPath'] . $phpMussel['MusselPlugins']['tempdata']['f'] . '/plugin.php'; 
                } 
            } 
            closedir($phpMussel['MusselPlugins']['tempdata']['d']); 
        } 
        unset($phpMussel['MusselPlugins']['tempdata']); 
    } 
 
    /* This code block only executed if we're NOT in CLI mode (or if we're running via Cronable). */ 
    if (!$phpMussel['Mussel_sapi'] || $phpMussel['Alternate']) { 
 
        /** 
         * Check whether the upload handler exists and attempt to load it. 
         */ 
        if (file_exists($phpMussel['Vault'] . 'upload.php') && !$phpMussel['Alternate']) { 
            require $phpMussel['Vault'] . 'upload.php'; 
        } 
 
        /** 
         * Check whether the front-end handler exists and attempt to load 
         * it. Skip this check if front-end access is disabled. 
         */ 
        if ( 
            !$phpMussel['Config']['general']['disable_frontend'] && 
            file_exists($phpMussel['Vault'] . 'frontend.php') && 
            ($phpMussel['Direct']() || $phpMussel['Alternate']) 
        ) { 
            require $phpMussel['Vault'] . 'frontend.php'; 
        } 
 
    } 
 
    /** This code block only executed if we're in CLI mode. */ 
    elseif (file_exists($phpMussel['Vault'] . 'cli.php')) { 
        require $phpMussel['Vault'] . 'cli.php'; 
    } 
 
} 
 
if ($phpMussel['Config']['general']['cleanup']) { 
 
    /** Destroy unrequired plugin closures. */ 
    if (isset($phpMussel['MusselPlugins']['closures'])) { 
        foreach ($phpMussel['MusselPlugins']['closures'] as $x) { 
            if (isset($$x) && is_object($$x)) { 
                unset($$x); 
            } 
        } 
    } 
 
    /** Unset our working data so that we can exit cleanly. */ 
    unset($x, $phpMussel); 
 
} else { 
 
    /** Let the script know that we haven't exited cleanly. */ 
    $phpMussel['EOF'] = true; 
 
} 
 
 |