This commit is contained in:
Markos Gogoulos
2026-03-15 17:08:57 +02:00
parent 10cc4eb069
commit c1ce525f24
13 changed files with 106 additions and 33 deletions

View File

@@ -1,34 +1,26 @@
# MediaCMS for Moodle
**Version:** 1.0.0 | **Release Date:** 2026-02-12 | **Moodle:** 4.5+
Version: 1.0.0, tested on Moodle 5
This package provides complete MediaCMS integration for Moodle, consisting of two plugins that work together with **unified settings**:
This plugin provides complete MediaCMS integration for Moodle, consisting of two plugins that work together with unified settings:
1. **Filter Plugin (filter_mediacms):**
* Handles LTI 1.3 authentication and secure video launches
* Auto-converts MediaCMS URLs to embedded players
* **Provides core settings** (MediaCMS URL, LTI Tool ID) used by both plugins
* **Location:** `filter/mediacms`
* **Location:** Admin, Plugins, Manage filters, MediaCMS
2. **Editor Plugin (tiny_mediacms):**
* Adds MediaCMS button to TinyMCE editor
* Browse authenticated video library via LTI Deep Linking
* Configure embed options (dimensions, display, start time)
* **Reads core settings** from filter plugin
* **Location:** `lib/editor/tiny/plugins/mediacms`
* **Location:** Admin, Plugins, TinyMCE, MediaCMS
## Installation
This package is distributed as a single repository but contains two distinct Moodle plugins that must be installed in their respective directories.
### 1. Copy Files
Copy the directories into your Moodle installation as follows (example assuming Moodle is at `/var/www/moodle/public`):
* Copy `filter/mediacms` to `/var/www/moodle/public/filter/mediacms`.
* Copy `tiny/mediacms` to `/var/www/moodle/public/lib/editor/tiny/plugins/mediacms`.
### 2. Set Permissions
Upload the plugin in Moodle's public directory and unzip
# cd /var/www/moodle/public ; cp /root/mediacms-moodle-v1.0.0.zip . && unzip mediacms-moodle-v1.0.0.zip
Ensure the web server user (typically `www-data`) has ownership of the new directories:
@@ -111,4 +103,8 @@ npx grunt amd
cp files back...
sudo cp -r /home/user/mediacms/moodle/public/lib/editor/tiny/plugins/mediacms /home/user/mediacms/lms-plugins/mediacms-moodle/tiny/
php admin/cli/purge_caches.php after
php admin/cli/purge_caches.php after
### Troubleshooting
Admin, advanced theme settings, add `My Media|/filter/mediacms/my_media.php` in case the position is not workin

View File

@@ -0,0 +1,57 @@
<?php
/**
* Hook callbacks for filter_mediacms.
*
* @package filter_mediacms
* @copyright 2026 MediaCMS
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace filter_mediacms;
defined('MOODLE_INTERNAL') || die();
class hooks {
/**
* Appends the My Media link to the custom menus after configuration is loaded.
*
* @param \core\hook\after_config $hook
*/
public static function append_my_media_link(\core\hook\after_config $hook): void {
global $CFG;
$navposition = get_config('filter_mediacms', 'mymedia_nav_position');
// MEDIACMS_NAV_PLACEMENT_NONE = 2
if ($navposition == 2) {
return;
}
if (!get_string_manager()->string_exists('mymedia', 'filter_mediacms')) {
return;
}
$linktext = get_string('mymedia', 'filter_mediacms');
$linkurl = '/filter/mediacms/my_media.php';
$menuitem = "\n{$linktext}|{$linkurl}";
// MEDIACMS_NAV_PLACEMENT_PROFILE = 1
if ($navposition == 1) {
// Add to User Profile Menu
if (!isset($CFG->customusermenuitems)) {
$CFG->customusermenuitems = '';
}
if (strpos($CFG->customusermenuitems, $linktext) === false) {
$CFG->customusermenuitems .= $menuitem;
}
} else {
// Default to Top Navigation Menu (MEDIACMS_NAV_PLACEMENT_TOP = 0)
if (!isset($CFG->custommenuitems)) {
$CFG->custommenuitems = '';
}
if (strpos($CFG->custommenuitems, $linktext) === false) {
$CFG->custommenuitems .= $menuitem;
}
}
}
}

View File

@@ -1,7 +1,6 @@
<?php
/**
* Hook registrations for filter_mediacms.
* Primary navigation is handled via extend_navigation() in lib.php instead.
*
* @package filter_mediacms
* @copyright 2026 MediaCMS
@@ -10,4 +9,10 @@
defined('MOODLE_INTERNAL') || die();
$callbacks = [];
$callbacks = [
[
'hook' => \core\hook\after_config::class,
'callback' => [\filter_mediacms\hooks::class, 'append_my_media_link'],
'priority' => 100,
],
];

View File

@@ -22,3 +22,9 @@ $string['mymedia'] = 'My Media';
$string['notconfigured'] = 'MediaCMS is not fully configured. Please set the MediaCMS URL and LTI Tool in Site Administration → Plugins → Filters → MediaCMS.';
$string['ltitoolnotfound'] = 'The configured LTI tool could not be found. Please check the MediaCMS filter settings.';
$string['cannotcreatedummyactivity'] = 'Could not create the MediaCMS launcher activity. Please check course permissions.';
$string['mymediaposition'] = 'My Media Link Position';
$string['mymediaposition_desc'] = 'Select where the "My Media" link should appear in the Moodle interface.';
$string['pos_topbar'] = 'Top Navigation Bar';
$string['pos_userdrop'] = 'User Profile Dropdown';
$string['pos_none'] = 'None (Do not display)';

View File

@@ -1,8 +1,7 @@
<?php
/**
* @package filter_mediacms
* @copyright 2026 MediaCMS
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
define('MEDIACMS_NAV_PLACEMENT_TOP', 0);
define('MEDIACMS_NAV_PLACEMENT_PROFILE', 1);
define('MEDIACMS_NAV_PLACEMENT_NONE', 2);

View File

@@ -1,15 +1,27 @@
<?php
defined('MOODLE_INTERNAL') || die;
require_once($CFG->dirroot . '/filter/mediacms/lib.php');
if ($ADMIN->fulltree) {
// Info heading
$settings->add(new admin_setting_heading(
'filter_mediacms/coresettings',
get_string('coresettings', 'filter_mediacms'),
get_string('coresettings_desc', 'filter_mediacms')
));
// MediaCMS URL
$settings->add(new admin_setting_configselect(
'filter_mediacms/mymedia_nav_position',
get_string('mymediaposition', 'filter_mediacms'),
get_string('mymediaposition_desc', 'filter_mediacms'),
MEDIACMS_NAV_PLACEMENT_TOP,
array(
MEDIACMS_NAV_PLACEMENT_TOP => 'Top Navigation Bar',
MEDIACMS_NAV_PLACEMENT_PROFILE => 'User Profile Dropdown',
MEDIACMS_NAV_PLACEMENT_NONE => 'None (Do not display)'
)
));
$settings->add(new admin_setting_configtext(
'filter_mediacms/mediacmsurl',
get_string('mediacmsurl', 'filter_mediacms'),
@@ -18,7 +30,6 @@ if ($ADMIN->fulltree) {
PARAM_URL
));
// LTI Tool Selector
$ltioptions = [0 => get_string('noltitoolsfound', 'filter_mediacms')];
try {
$tools = $DB->get_records('lti_types', null, 'name ASC', 'id, name, baseurl');
@@ -29,7 +40,6 @@ if ($ADMIN->fulltree) {
}
}
} catch (Exception $e) {
// Database might not be ready during install
}
$settings->add(new admin_setting_configselect(

View File

@@ -1,7 +1,7 @@
<?php
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2026021200; // 2026-02-12
$plugin->version = 2026021202; // 2026-02-12
$plugin->requires = 2024100700; // Requires Moodle 4.5+
$plugin->component = 'filter_mediacms';
$plugin->maturity = MATURITY_STABLE;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long