Commit 3d123ce1 authored by Abbassy's avatar Abbassy
Browse files

Complete DTA plugin improvements

- Fixed file include path (DtaResult.php -> dta_result.php)
- Replaced magnifying glass with 'More Details' button
- Added colored test result labels (green/yellow/red)
- Improved button styling to match Grade button
- Fixed cmid parameter handling for view.php
- Translated German comments to English
- Hide competencies with 0% values
- Enhanced UI/UX with proper alignment and hover effects
parent 5318a597
...@@ -73,39 +73,62 @@ class dta_view_submission_utils { ...@@ -73,39 +73,62 @@ class dta_view_submission_utils {
$successrate = round(($successcount / $totalcount) * 100, 2); $successrate = round(($successcount / $totalcount) * 100, 2);
} }
// 5) "X/Y (Z%) tests successful" line: // More Details Button - Always show at the top, get cmid from assignment context
// If either compile errors or unknown exist -> show "?", else X/Y (rate%). global $PAGE, $COURSE;
$html .= $successcount . '/';
if ($compilecount === 0 && $unknowncount === 0) { // Try multiple methods to get cmid
$html .= ($totalcount > 0) $cmid = 0;
? ($totalcount . ' (' . $successrate . '%)') if (isset($PAGE->cm) && $PAGE->cm) {
: ('0 (' . $successrate . ')'); $cmid = $PAGE->cm->id;
} else if (isset($_GET['cmid'])) {
$cmid = (int)$_GET['cmid'];
} else if (isset($_POST['cmid'])) {
$cmid = (int)$_POST['cmid'];
} else { } else {
$html .= '?'; // Last resort: try to get from assignment context
$cmid = optional_param('cmid', 0, PARAM_INT);
} }
$html .= get_string('tests_successful', self::ASSIGNSUBMISSION_DTA_COMPONENT_NAME) . "<br />";
// 6) If there are compilation errors, show them. // If still no cmid, try to get it from the assignment
if ($compilecount > 0) { if ($cmid == 0) {
$html .= $compilecount // We'll use a generic approach - the button will work with just the submission ID
. get_string('compilation_errors', self::ASSIGNSUBMISSION_DTA_COMPONENT_NAME) $detailurl = new \moodle_url('/mod/assign/submission/dta/classes/view.php', [
. "<br />"; 'sid' => $submissionid
]);
} else {
$detailurl = new \moodle_url('/mod/assign/submission/dta/classes/view.php', [
'cmid' => $cmid,
'sid' => $submissionid
]);
} }
// 7) If there are unknown results, show them. $html .= '<a href="' . $detailurl->out() . '" class="dtaMoreDetailsButton">More Details</a>';
if ($unknowncount > 0) {
$html .= $unknowncount // 5) Test results with colored labels
. get_string('unknown_state', self::ASSIGNSUBMISSION_DTA_COMPONENT_NAME) $html .= '<div class="dtaTestResults">';
. "<br />";
// Successful tests with green label
if ($successcount > 0) {
$html .= '<span class="dtaTestLabel dtaTestLabelSuccess">' . $successcount . ' ' . get_string('tests_successful', self::ASSIGNSUBMISSION_DTA_COMPONENT_NAME) . '</span>';
} }
// If there are failed tests, show them. // Compilation errors with yellow label
if ($compilecount > 0) {
$html .= '<span class="dtaTestLabel dtaTestLabelError">' . $compilecount . ' ' . get_string('compilation_errors', self::ASSIGNSUBMISSION_DTA_COMPONENT_NAME) . '</span>';
}
// Failed tests with red label
if ($failcount > 0) { if ($failcount > 0) {
$html .= $failcount $html .= '<span class="dtaTestLabel dtaTestLabelFailure">' . $failcount . ' ' . get_string('failures', self::ASSIGNSUBMISSION_DTA_COMPONENT_NAME) . '</span>';
. get_string('failures', self::ASSIGNSUBMISSION_DTA_COMPONENT_NAME) }
. "<br />";
// Unknown results with gray label
if ($unknowncount > 0) {
$html .= '<span class="dtaTestLabel dtaTestLabelError">' . $unknowncount . ' ' . get_string('unknown_state', self::ASSIGNSUBMISSION_DTA_COMPONENT_NAME) . '</span>';
} }
$html .= '</div>';
// 8) Competencies (like your old snippet). // 8) Competencies (like your old snippet).
$showncompetencies = explode(';', $summary->successfultestcompetencies); $showncompetencies = explode(';', $summary->successfultestcompetencies);
$overallcompetencies = explode(';', $summary->overalltestcompetencies); $overallcompetencies = explode(';', $summary->overalltestcompetencies);
...@@ -116,22 +139,22 @@ class dta_view_submission_utils { ...@@ -116,22 +139,22 @@ class dta_view_submission_utils {
$shown = $showncompetencies[$i]; $shown = $showncompetencies[$i];
$comp = $overallcompetencies[$i]; $comp = $overallcompetencies[$i];
// If the competency was actually used (non-zero?), show a row. // Only show competencies that have a non-zero value in overall competencies
if ($shown !== '0') {
$shownval = (float) $shown;
$compval = (float) $comp; $compval = (float) $comp;
// Guard division by zero.
$pct = 0;
if ($compval > 0) { if ($compval > 0) {
$shownval = (float) $shown;
// Calculate percentage
$pct = 100.0 * $shownval / $compval; $pct = 100.0 * $shownval / $compval;
}
// Only show if percentage is greater than 0
if ($pct > 0) {
// "compX XX%<br />" // "compX XX%<br />"
$tmp .= get_string('comp' . $i, self::ASSIGNSUBMISSION_DTA_COMPONENT_NAME) $tmp .= get_string('comp' . $i, self::ASSIGNSUBMISSION_DTA_COMPONENT_NAME)
. ' ' . round($pct, 2) . '%<br />'; . ' ' . round($pct, 2) . '%<br />';
} }
} }
}
$html .= get_string('success_competencies', self::ASSIGNSUBMISSION_DTA_COMPONENT_NAME) $html .= get_string('success_competencies', self::ASSIGNSUBMISSION_DTA_COMPONENT_NAME)
. "<br />" . $tmp . "<br />"; . "<br />" . $tmp . "<br />";
...@@ -460,17 +483,16 @@ class dta_view_submission_utils { ...@@ -460,17 +483,16 @@ class dta_view_submission_utils {
$comp = $overallcompetencies[$index]; $comp = $overallcompetencies[$index];
$shown = $showncompetencies[$index]; $shown = $showncompetencies[$index];
// If the competency was actually assessed, add a row. // Only show competencies that have a non-zero value in overall competencies
if ($comp !== '0') {
$compval = (float) $comp; $compval = (float) $comp;
if ($compval > 0) {
$shownval = (float) $shown; $shownval = (float) $shown;
// Guard division by zero. // Calculate percentage
$pct = 0; $pct = 100.0 * $shownval / $compval;
if ($compval > 0) {
$pct = (100.0 * $shownval / $compval);
}
// Only show if percentage is greater than 0
if ($pct > 0) {
$resultrowattributes = $tablerowattributes; $resultrowattributes = $tablerowattributes;
$tmp = ''; $tmp = '';
$tmp .= \html_writer::tag( $tmp .= \html_writer::tag(
...@@ -491,6 +513,7 @@ class dta_view_submission_utils { ...@@ -491,6 +513,7 @@ class dta_view_submission_utils {
$body .= \html_writer::tag('tr', $tmp, $resultrowattributes); $body .= \html_writer::tag('tr', $tmp, $resultrowattributes);
} }
} }
}
$body = \html_writer::tag('tbody', $body); $body = \html_writer::tag('tbody', $body);
$html .= \html_writer::tag('table', $header . $body, ['class' => 'dtaTable']); $html .= \html_writer::tag('table', $header . $body, ['class' => 'dtaTable']);
......
...@@ -26,36 +26,56 @@ define('NO_OUTPUT_BUFFERING', true); ...@@ -26,36 +26,56 @@ define('NO_OUTPUT_BUFFERING', true);
require(__DIR__.'/../../../../../config.php'); require(__DIR__.'/../../../../../config.php');
require_once($CFG->dirroot.'/mod/assign/locallib.php'); require_once($CFG->dirroot.'/mod/assign/locallib.php');
require_once(__DIR__.'/dta_db_utils.php'); require_once(__DIR__.'/dta_db_utils.php');
require_once(__DIR__.'/models/DtaResult.php'); require_once(__DIR__.'/models/dta_result.php');
use assignsubmission_dta\output\summary_table; use assignsubmission_dta\output\summary_table;
use assignsubmission_dta\output\generic_table; use assignsubmission_dta\output\generic_table;
use assignsubmission_dta\output\sortable_table; use assignsubmission_dta\output\sortable_table;
// --- Parameter & Kontext vorbereiten --- // --- Prepare parameters & context ---
$cmid = required_param('cmid', PARAM_INT); $cmid = optional_param('cmid', 0, PARAM_INT);
$sid = optional_param('sid', 0, PARAM_INT); $sid = optional_param('sid', 0, PARAM_INT);
$userid = optional_param('userid', $USER->id, PARAM_INT); $userid = optional_param('userid', $USER->id, PARAM_INT);
// If cmid is not provided, try to get it from the submission
if ($cmid == 0 && $sid > 0) {
global $DB;
$submission = $DB->get_record('assign_submission', ['id' => $sid]);
if ($submission) {
$assignment = $DB->get_record('assign', ['id' => $submission->assignment]);
if ($assignment) {
$cm = get_coursemodule_from_instance('assign', $assignment->id, $assignment->course);
if ($cm) {
$cmid = $cm->id;
}
}
}
}
// If still no cmid, show error
if ($cmid == 0) {
throw new moodle_exception('missingparam', 'error', '', 'cmid');
}
$cm = get_coursemodule_from_id('assign', $cmid, 0, false, MUST_EXIST); $cm = get_coursemodule_from_id('assign', $cmid, 0, false, MUST_EXIST);
$course = get_course($cm->course); $course = get_course($cm->course);
$context = context_module::instance($cm->id); $context = context_module::instance($cm->id);
// Login früh! // Login early!
require_login($course, false, $cm); require_login($course, false, $cm);
// assign-Instanz und assignmentid (aid) // assign instance and assignmentid (aid)
$assign = new assign($context, $cm, $course); $assign = new assign($context, $cm, $course);
$aid = (int)$assign->get_instance()->id; $aid = (int)$assign->get_instance()->id;
// falls kein sid gegeben: Submission des Users ermitteln // if no sid given: determine user's submission
if (!$sid) { if (!$sid) {
if ($submission = $assign->get_user_submission($userid, true)) { if ($submission = $assign->get_user_submission($userid, true)) {
$sid = (int)$submission->id; $sid = (int)$submission->id;
} }
} }
// --- Summary laden (robust, je nach Utils-Klasse/Funktion) --- // --- Load summary (robust, depending on Utils class/function) ---
if (class_exists('DbUtils')) { if (class_exists('DbUtils')) {
$summary = \DbUtils::getresultsummaryfromdatabase($aid, $sid); $summary = \DbUtils::getresultsummaryfromdatabase($aid, $sid);
} else if (class_exists('assignsubmission_dta\dta_db_utils')) { } else if (class_exists('assignsubmission_dta\dta_db_utils')) {
...@@ -67,13 +87,13 @@ if (class_exists('DbUtils')) { ...@@ -67,13 +87,13 @@ if (class_exists('DbUtils')) {
'No DbUtils class/function found'); 'No DbUtils class/function found');
} }
// --- Recommendations laden --- // --- Load recommendations ---
$recommendations = []; $recommendations = [];
if (class_exists('assignsubmission_dta\dta_db_utils')) { if (class_exists('assignsubmission_dta\dta_db_utils')) {
$recommendations = \assignsubmission_dta\dta_db_utils::assignsubmission_dta_get_recommendations_from_database($aid, $sid); $recommendations = \assignsubmission_dta\dta_db_utils::assignsubmission_dta_get_recommendations_from_database($aid, $sid);
} }
// --- ab hier: $PAGE setzen, Header ausgeben und Renderables rendern --- // --- from here: set $PAGE, output header and render renderables ---
$PAGE->set_context($context); $PAGE->set_context($context);
$PAGE->set_url(new moodle_url('/mod/assign/submission/dta/classes/view.php', ['cmid'=>$cmid, 'sid'=>$sid])); $PAGE->set_url(new moodle_url('/mod/assign/submission/dta/classes/view.php', ['cmid'=>$cmid, 'sid'=>$sid]));
$PAGE->set_pagelayout('report'); $PAGE->set_pagelayout('report');
...@@ -82,13 +102,13 @@ $PAGE->set_heading(format_string($SITE->fullname)); ...@@ -82,13 +102,13 @@ $PAGE->set_heading(format_string($SITE->fullname));
echo $OUTPUT->header(); echo $OUTPUT->header();
// --- Summary und Recommendations in einer Zeile --- // --- Summary and Recommendations in one row ---
echo '<div class="row">'; echo '<div class="row">';
echo '<div class="col-md-6">'; echo '<div class="col-md-6">';
// --- Summary Table (wie in view.php) --- // --- Summary Table (as in view.php) ---
$successrate = "?"; $successrate = "?";
if ($summary->assignsubmission_dta_unknown_count() == 0 && $summary->assignsubmission_dta_compilation_error_count() == 0) { if ($summary->assignsubmission_dta_unknown_count() == 0 && $summary->assignsubmission_dta_compilation_error_count() == 0 && $summary->assignsubmission_dta_result_count() > 0) {
$successrate = round(($summary->assignsubmission_dta_successful_count() / $summary->assignsubmission_dta_result_count()) * 100, 2); $successrate = round(($summary->assignsubmission_dta_successful_count() / $summary->assignsubmission_dta_result_count()) * 100, 2);
} }
...@@ -114,7 +134,7 @@ echo '</div>'; // col-md-6 ...@@ -114,7 +134,7 @@ echo '</div>'; // col-md-6
echo '<div class="col-md-6">'; echo '<div class="col-md-6">';
// --- Recommendations Table (wie in view.php) --- // --- Recommendations Table (as in view.php) ---
if (!empty($recommendations)) { if (!empty($recommendations)) {
$allowedsortfields = ['topic', 'exercise_name', 'difficulty', 'score']; $allowedsortfields = ['topic', 'exercise_name', 'difficulty', 'score'];
$allowedsortdirs = ['asc', 'desc']; $allowedsortdirs = ['asc', 'desc'];
...@@ -182,7 +202,7 @@ echo '</div>'; // row ...@@ -182,7 +202,7 @@ echo '</div>'; // row
// --- Spacer --- // --- Spacer ---
echo html_writer::empty_tag("div", ["class" => "dtaSpacer"]); echo html_writer::empty_tag("div", ["class" => "dtaSpacer"]);
// --- Competencies Table (wie in view.php) --- // --- Competencies Table (as in view.php) ---
$showncompetencies = explode(";", $summary->successfultestcompetencies); $showncompetencies = explode(";", $summary->successfultestcompetencies);
$overallcompetencies = explode(";", $summary->overalltestcompetencies); $overallcompetencies = explode(";", $summary->overalltestcompetencies);
...@@ -190,13 +210,22 @@ $competencyrows = []; ...@@ -190,13 +210,22 @@ $competencyrows = [];
for ($index = 0, $size = count($overallcompetencies); $index < $size; $index++) { for ($index = 0, $size = count($overallcompetencies); $index < $size; $index++) {
$comp = $overallcompetencies[$index]; $comp = $overallcompetencies[$index];
$shown = $showncompetencies[$index]; $shown = $showncompetencies[$index];
if ($comp != "0") { $compval = floatval($comp);
$shownval = floatval($shown);
// Only show competencies that have a non-zero value in overall competencies
if ($compval > 0) {
$pct = 100 * $shownval / $compval;
// Only show if percentage is greater than 0
if ($pct > 0) {
$competencyrows[] = [ $competencyrows[] = [
get_string("comp" . $index, 'assignsubmission_dta'), get_string("comp" . $index, 'assignsubmission_dta'),
100 * floatval($shown) / floatval($comp) . "% (" . $shown . " / " . $comp . ")", round($pct, 2) . "% (" . $shown . " / " . $comp . ")",
get_string("comp_expl" . $index, 'assignsubmission_dta') get_string("comp_expl" . $index, 'assignsubmission_dta')
]; ];
} }
}
} }
$competencyheadings = [ $competencyheadings = [
...@@ -210,7 +239,7 @@ echo $OUTPUT->render(new generic_table($competencyheadings, $competencyrows, get ...@@ -210,7 +239,7 @@ echo $OUTPUT->render(new generic_table($competencyheadings, $competencyrows, get
// --- Spacer --- // --- Spacer ---
echo html_writer::empty_tag("div", ["class" => "dtaSpacer"]); echo html_writer::empty_tag("div", ["class" => "dtaSpacer"]);
// --- Details Table (wie in view.php) --- // --- Details Table (as in view.php) ---
$detailrows = []; $detailrows = [];
foreach ($summary->results as $r) { foreach ($summary->results as $r) {
// Package name row // Package name row
...@@ -241,25 +270,25 @@ foreach ($summary->results as $r) { ...@@ -241,25 +270,25 @@ foreach ($summary->results as $r) {
if ($r->state != 1) { if ($r->state != 1) {
$detailrows[] = [ $detailrows[] = [
get_string('failure_type', 'assignsubmission_dta'), get_string('failure_type', 'assignsubmission_dta'),
$r->failureType $r->failuretype
]; ];
$detailrows[] = [ $detailrows[] = [
get_string('failure_reason', 'assignsubmission_dta'), get_string('failure_reason', 'assignsubmission_dta'),
$r->failureReason $r->failurereason
]; ];
if (!is_null($r->lineNumber) && $r->lineNumber > 0) { if (!is_null($r->linenumber) && $r->linenumber > 0) {
$detailrows[] = [ $detailrows[] = [
get_string('line_no', 'assignsubmission_dta'), get_string('line_no', 'assignsubmission_dta'),
$r->lineNumber $r->linenumber
]; ];
} }
if (!is_null($r->columnNumber) && $r->columnNumber > 0) { if (!is_null($r->columnnumber) && $r->columnnumber > 0) {
$detailrows[] = [ $detailrows[] = [
get_string('col_no', 'assignsubmission_dta'), get_string('col_no', 'assignsubmission_dta'),
$r->columnNumber $r->columnnumber
]; ];
} }
......
...@@ -351,7 +351,7 @@ class assign_submission_dta extends assign_submission_plugin { ...@@ -351,7 +351,7 @@ class assign_submission_dta extends assign_submission_plugin {
* @return string Summary results HTML. * @return string Summary results HTML.
*/ */
public function view_summary(stdClass $submission, &$showviewlink): string { public function view_summary(stdClass $submission, &$showviewlink): string {
$showviewlink = true; $showviewlink = false; // Disable the default magnifying glass icon
return dta_view_submission_utils::assignsubmission_dta_generate_summary_html( return dta_view_submission_utils::assignsubmission_dta_generate_summary_html(
$this->assignment->get_instance()->id, $this->assignment->get_instance()->id,
$submission->id $submission->id
...@@ -365,10 +365,13 @@ class assign_submission_dta extends assign_submission_plugin { ...@@ -365,10 +365,13 @@ class assign_submission_dta extends assign_submission_plugin {
* @return string Detailed results HTML. * @return string Detailed results HTML.
*/ */
public function view(stdClass $submission): string { public function view(stdClass $submission): string {
return dta_view_submission_utils::assignsubmission_dta_generate_detail_html( // Redirect to the new classes/view.php
$this->assignment->get_instance()->id, $cmid = $this->assignment->get_course_module()->id;
$submission->id $url = new moodle_url('/mod/assign/submission/dta/classes/view.php', [
); 'cmid' => $cmid,
'sid' => $submission->id
]);
redirect($url);
} }
/** /**
......
...@@ -31,4 +31,4 @@ $settings->add(new admin_setting_configcheckbox("assignsubmission_dta/default", ...@@ -31,4 +31,4 @@ $settings->add(new admin_setting_configcheckbox("assignsubmission_dta/default",
$settings->add(new admin_setting_configtext("assignsubmission_dta/backendHost", $settings->add(new admin_setting_configtext("assignsubmission_dta/backendHost",
new lang_string("backendHost", "assignsubmission_dta"), new lang_string("backendHost", "assignsubmission_dta"),
new lang_string("backendHost_help", "assignsubmission_dta"), "http://dtabackend:8080")); new lang_string("backendHost_help", "assignsubmission_dta"), "http://backend:8080"));
...@@ -72,3 +72,97 @@ ...@@ -72,3 +72,97 @@
.dtaTableSpacer { .dtaTableSpacer {
border-bottom: 2px solid darkgray; border-bottom: 2px solid darkgray;
} }
/* More Details Button - Match Grade button style */
.dtaMoreDetailsButton {
background-color: #0f6cbf;
color: white;
border: 1px solid #0f6cbf;
padding: 6px 12px;
border-radius: 3px;
cursor: pointer;
font-size: 13px;
font-weight: 500;
text-decoration: none;
display: inline-block;
transition: all 0.2s ease;
margin: 0;
vertical-align: top;
line-height: 1.4;
text-align: center;
min-width: 80px;
}
.dtaMoreDetailsButton:hover {
background-color: #0a5a9c;
border-color: #0a5a9c;
color: white;
text-decoration: none;
}
.dtaMoreDetailsButton:active {
background-color: #084a82;
border-color: #084a82;
}
.dtaMoreDetailsButton:focus {
outline: 2px solid #0f6cbf;
outline-offset: 2px;
}
/* Test Result Labels */
.dtaTestLabel {
display: inline-block;
padding: 4px 8px;
border-radius: 12px;
font-size: 12px;
font-weight: bold;
margin-right: 8px;
margin-bottom: 4px;
}
.dtaTestLabelSuccess {
background-color: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.dtaTestLabelError {
background-color: #fff3cd;
color: #856404;
border: 1px solid #ffeaa7;
}
.dtaTestLabelFailure {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
/* Test Results Container */
.dtaTestResults {
margin-top: 6px;
line-height: 1.4;
display: block;
padding-top: 0;
}
.dtaTestResults br {
margin-bottom: 4px;
}
/* Container for button and labels alignment */
.dtaSubmissionSummary {
white-space: nowrap;
vertical-align: top;
padding-top: 0;
margin-top: 0;
}
.dtaSubmissionSummary .dtaMoreDetailsButton {
margin-bottom: 8px;
margin-top: 0;
display: block;
position: relative;
top: -2px;
}
\ No newline at end of file
#!/bin/bash
# Script zum automatischen Upload der Plugin-Dateien in den Docker-Container
# Verwendung: ./upload_to_docker.sh
set -e # Beende bei Fehlern
# Farben für bessere Ausgabe
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Container-Name (aus vorheriger Analyse)
CONTAINER_NAME="moodle-dta"
MOODLE_PATH="/var/www/html/moodle/mod/assign/submission/dta"
echo -e "${BLUE}=== Moodle Plugin Upload Script ===${NC}"
echo -e "${YELLOW}Container: ${CONTAINER_NAME}${NC}"
echo -e "${YELLOW}Ziel-Pfad: ${MOODLE_PATH}${NC}"
echo ""
# Prüfe ob Container läuft
echo -e "${BLUE}1. Prüfe Docker-Container...${NC}"
if ! docker ps | grep -q "$CONTAINER_NAME"; then
echo -e "${RED}Fehler: Container '$CONTAINER_NAME' läuft nicht!${NC}"
echo "Verfügbare Container:"
docker ps --format "table {{.Names}}\t{{.Status}}"
exit 1
fi
echo -e "${GREEN}✓ Container läuft${NC}"
# Erstelle Backup des aktuellen Zustands
echo -e "${BLUE}2. Erstelle Backup...${NC}"
BACKUP_DIR="/tmp/moodle_backup_$(date +%Y%m%d_%H%M%S)"
docker exec "$CONTAINER_NAME" mkdir -p "$BACKUP_DIR"
docker exec "$CONTAINER_NAME" cp -r "$MOODLE_PATH" "$BACKUP_DIR/"
echo -e "${GREEN}✓ Backup erstellt: $BACKUP_DIR${NC}"
# Upload der Dateien
echo -e "${BLUE}3. Lade Dateien hoch...${NC}"
# Hauptdateien
echo -e "${YELLOW} → view.php${NC}"
docker cp classes/view.php "$CONTAINER_NAME:$MOODLE_PATH/classes/"
echo -e "${YELLOW} → locallib.php${NC}"
docker cp locallib.php "$CONTAINER_NAME:$MOODLE_PATH/"
echo -e "${YELLOW} → settings.php${NC}"
docker cp settings.php "$CONTAINER_NAME:$MOODLE_PATH/"
echo -e "${YELLOW} → lib.php${NC}"
docker cp lib.php "$CONTAINER_NAME:$MOODLE_PATH/"
echo -e "${YELLOW} → version.php${NC}"
docker cp version.php "$CONTAINER_NAME:$MOODLE_PATH/"
# Output-Klassen
echo -e "${YELLOW} → Output-Klassen${NC}"
docker cp classes/output/summary_table.php "$CONTAINER_NAME:$MOODLE_PATH/classes/output/"
docker cp classes/output/generic_table.php "$CONTAINER_NAME:$MOODLE_PATH/classes/output/"
docker cp classes/output/sortable_table.php "$CONTAINER_NAME:$MOODLE_PATH/classes/output/"
# Model-Klassen
echo -e "${YELLOW} → Model-Klassen${NC}"
docker cp classes/models/dta_result.php "$CONTAINER_NAME:$MOODLE_PATH/classes/models/"
# Templates
echo -e "${YELLOW} → Templates${NC}"
docker cp templates/summary_table.mustache "$CONTAINER_NAME:$MOODLE_PATH/templates/"
docker cp templates/generic_table.mustache "$CONTAINER_NAME:$MOODLE_PATH/templates/"
docker cp templates/sortable_table.mustache "$CONTAINER_NAME:$MOODLE_PATH/templates/"
# Sprachdateien
echo -e "${YELLOW} → Sprachdateien${NC}"
docker cp lang/en/assignsubmission_dta.php "$CONTAINER_NAME:$MOODLE_PATH/lang/en/"
# CSS
echo -e "${YELLOW} → CSS${NC}"
docker cp styles.css "$CONTAINER_NAME:$MOODLE_PATH/"
# Weitere Klassen
echo -e "${YELLOW} → Weitere Klassen${NC}"
docker cp classes/backend.php "$CONTAINER_NAME:$MOODLE_PATH/classes/"
docker cp classes/database.php "$CONTAINER_NAME:$MOODLE_PATH/classes/"
docker cp classes/dta_backend_utils.php "$CONTAINER_NAME:$MOODLE_PATH/classes/"
docker cp classes/dta_db_utils.php "$CONTAINER_NAME:$MOODLE_PATH/classes/"
docker cp classes/dta_view_submission_utils.php "$CONTAINER_NAME:$MOODLE_PATH/classes/"
docker cp classes/view.php "$CONTAINER_NAME:$MOODLE_PATH/classes/"
# Weitere Model-Klassen
if [ -f "classes/models/dta_recommendation.php" ]; then
docker cp classes/models/dta_recommendation.php "$CONTAINER_NAME:$MOODLE_PATH/classes/models/"
fi
if [ -f "classes/models/dta_result_summary.php" ]; then
docker cp classes/models/dta_result_summary.php "$CONTAINER_NAME:$MOODLE_PATH/classes/models/"
fi
if [ -f "classes/models/dta_result.php" ]; then
docker cp classes/models/dta_result.php "$CONTAINER_NAME:$MOODLE_PATH/classes/models/"
fi
# Weitere Output-Klassen
if [ -f "classes/output/alt_view.php" ]; then
docker cp classes/output/alt_view.php "$CONTAINER_NAME:$MOODLE_PATH/classes/output/"
fi
# Weitere Dateien
if [ -f "classes/privacy/provider.php" ]; then
docker cp classes/privacy/provider.php "$CONTAINER_NAME:$MOODLE_PATH/classes/privacy/"
fi
echo -e "${GREEN}✓ Alle Dateien hochgeladen${NC}"
# Setze korrekte Berechtigungen
echo -e "${BLUE}4. Setze Berechtigungen...${NC}"
docker exec "$CONTAINER_NAME" chown -R www-data:www-data "$MOODLE_PATH"
docker exec "$CONTAINER_NAME" chmod -R 755 "$MOODLE_PATH"
echo -e "${GREEN}✓ Berechtigungen gesetzt${NC}"
# Leere Caches
echo -e "${BLUE}5. Leere Moodle-Caches...${NC}"
docker exec "$CONTAINER_NAME" php /var/www/html/moodle/admin/cli/purge_caches.php
echo -e "${GREEN}✓ Caches geleert${NC}"
# Optional: Upgrade durchführen
echo -e "${BLUE}6. Führe Plugin-Upgrade durch...${NC}"
docker exec "$CONTAINER_NAME" php /var/www/html/moodle/admin/cli/upgrade.php --non-interactive --allow-unstable
echo -e "${GREEN}✓ Upgrade abgeschlossen${NC}"
echo ""
echo -e "${GREEN}=== Upload erfolgreich abgeschlossen! ===${NC}"
echo -e "${YELLOW}Dein Plugin wurde aktualisiert und ist bereit zur Verwendung.${NC}"
echo ""
echo -e "${BLUE}Verfügbare Aktionen:${NC}"
echo -e " • Backup wiederherstellen: ${YELLOW}docker exec $CONTAINER_NAME cp -r $BACKUP_DIR/dta $MOODLE_PATH${NC}"
echo -e " • Container neu starten: ${YELLOW}docker restart $CONTAINER_NAME${NC}"
echo -e " • Logs anzeigen: ${YELLOW}docker logs $CONTAINER_NAME${NC}"
echo ""
echo -e "${GREEN}Fertig! 🎉${NC}"
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment