Skip to content

Create missing symbolic links in a course templates directory when upgrading. #2757

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 43 additions & 37 deletions conf/defaults.config
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,43 @@ $webworkURLs{AuthorHelpURL} ='https://webwork.maa.org/wiki/Category:Au
# <link rel="stylesheet" type="text/css" href="<!--#url type="webwork" name="htdocs"-->/css/math.css"/>

################################################################################
# Defaults for course-specific locations (directories and URLs)
# Problem library options
################################################################################
#
# The problemLibrary configuration data should now be set in localOverrides.conf

# For configuration instructions, see:
# https://webwork.maa.org/wiki/Open_Problem_Library
# The directory containing the open problem library files.
# Set the root to "" if no problem

#RE-CONFIGURE problemLibrary values in localOverrides.conf
# if these defaults are not correct.
#################################################
$problemLibrary{root} = "/opt/webwork/libraries/webwork-open-problem-library/OpenProblemLibrary";
$contribLibrary{root} = "/opt/webwork/libraries/webwork-open-problem-library/Contrib";
$problemLibrary{version} = "2.5";
###########################################################

# Problem Library SQL database connection information
$problemLibrary_db = {
dbsource => $database_dsn,
user => $database_username,
passwd => $database_password,
storage_engine => 'MYISAM',
};

$problemLibrary{tree} = 'library-directory-tree.json';

# These flags control if statistics on opl problems are shown in the library
# browser. If you want to include local statistics you will need to
# run webwork2/bin/update-OPL-statistics on a regular basis.
$problemLibrary{showLibraryLocalStats} = 1;
# This flag controls whether global statistics will be displayed
$problemLibrary{showLibraryGlobalStats} = 1;

################################################################################
# Defaults for course-specific locations (directories, URLs, and links)
################################################################################

# The root directory of the current course. (The ID of the current course is
Expand Down Expand Up @@ -412,6 +448,12 @@ $courseDirs{tmpEditFileDir} = "$courseDirs{templates}/tmpEdit";
# mail merge status directory
$courseDirs{mailmerge} = "$courseDirs{DATA}/mailmerge";

# course links that are regulated by webwork2
$courseLinks{Library} = [ $problemLibrary{root}, "$courseDirs{templates}/Library" ];
$courseLinks{Contrib} = [ $contribLibrary{root}, "$courseDirs{templates}/Contrib" ];
$courseLinks{capaLibrary} = [ "$contribLibrary{root}/CAPA", "$courseDirs{templates}/capaLibrary" ];
$courseLinks{Student_Orientation} = [ "$webworkDirs{assets}/pg/Student_Orientation", "$courseDirs{templates}/Student_Orientation" ];

################################################################################
# System-wide files
################################################################################
Expand Down Expand Up @@ -589,42 +631,6 @@ $default_status = "Enrolled";

$maxCourseIdLength = 40;

################################################################################
# Problem library options
################################################################################
#
# The problemLibrary configuration data should now be set in localOverrides.conf

# For configuration instructions, see:
# https://webwork.maa.org/wiki/Open_Problem_Library
# The directory containing the open problem library files.
# Set the root to "" if no problem

#RE-CONFIGURE problemLibrary values in localOverrides.conf
# if these defaults are not correct.
#################################################
$problemLibrary{root} = "/opt/webwork/libraries/webwork-open-problem-library/OpenProblemLibrary";
$contribLibrary{root} = "/opt/webwork/libraries/webwork-open-problem-library/Contrib";
$problemLibrary{version} = "2.5";
###########################################################

# Problem Library SQL database connection information
$problemLibrary_db = {
dbsource => $database_dsn,
user => $database_username,
passwd => $database_password,
storage_engine => 'MYISAM',
};

$problemLibrary{tree} = 'library-directory-tree.json';

# These flags control if statistics on opl problems are shown in the library
# browser. If you want to include local statistics you will need to
# run webwork2/bin/update-OPL-statistics on a regular basis.
$problemLibrary{showLibraryLocalStats} = 1;
# This flag controls whether global statistics will be displayed
$problemLibrary{showLibraryGlobalStats} = 1;

################################################################################
# Logs
################################################################################
Expand Down
136 changes: 113 additions & 23 deletions lib/WeBWorK/ContentGenerator/CourseAdmin.pm
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,24 @@ use Time::localtime;
use WeBWorK::CourseEnvironment;
use WeBWorK::Debug;
use WeBWorK::Utils qw(cryptPassword trim_spaces);
use WeBWorK::Utils::CourseManagement qw(addCourse renameCourse retitleCourse deleteCourse listCourses archiveCourse
unarchiveCourse initNonNativeTables);
use WeBWorK::Utils::CourseManagement qw(
addCourse
renameCourse
retitleCourse
deleteCourse
listCourses
archiveCourse
unarchiveCourse
initNonNativeTables
);
use WeBWorK::Utils::Logs qw(writeLog);
use WeBWorK::Utils::CourseDBIntegrityCheck;
use WeBWorK::Utils::CourseDirectoryIntegrityCheck qw(checkCourseDirectories updateCourseDirectories);
use WeBWorK::Utils::CourseDirectoryIntegrityCheck qw(
checkCourseDirectories
checkCourseLinks
updateCourseDirectories
updateCourseLinks
);
use WeBWorK::DB;

sub pre_header_initialize ($c) {
Expand Down Expand Up @@ -504,8 +517,9 @@ sub rename_course_confirm ($c) {
($tables_ok, $dbStatus) = $CIchecker->checkCourseTables($rename_oldCourseID);
}

# Check directories
# Check directories and links
my ($directories_ok, $directory_report) = checkCourseDirectories($ce2);
my ($links_ok, $link_report) = checkCourseLinks($ce2);

return $c->include(
'ContentGenerator/CourseAdmin/rename_course_confirm',
Expand All @@ -514,6 +528,8 @@ sub rename_course_confirm ($c) {
dbStatus => $dbStatus,
directory_report => $directory_report,
directories_ok => $directories_ok,
link_report => $link_report,
links_ok => $links_ok,
rename_oldCourseTitle => $rename_oldCourseTitle,
change_course_title_str => $change_course_title_str,
rename_oldCourseInstitution => $rename_oldCourseInstitution,
Expand Down Expand Up @@ -967,21 +983,26 @@ sub archive_course_confirm ($c) {
($tables_ok, $dbStatus) = $CIchecker->checkCourseTables($archive_courseID);
}

# Update and check directories.
my $dir_update_messages = $c->param('upgrade_course_tables') ? updateCourseDirectories($ce2) : [];
# Update and check directories and links.
my $dir_update_messages = $c->param('upgrade_course_tables') ? updateCourseDirectories($ce2) : [];
my $link_update_messages = $c->param('upgrade_course_tables') ? updateCourseLinks($ce2) : [];
my ($directories_ok, $directory_report) = checkCourseDirectories($ce2);
my ($links_ok, $link_report) = checkCourseLinks($ce2);

return $c->include(
'ContentGenerator/CourseAdmin/archive_course_confirm',
ce2 => $ce2,
upgrade_report => \@upgrade_report,
tables_ok => $tables_ok,
dbStatus => $dbStatus,
dir_update_messages => $dir_update_messages,
directory_report => $directory_report,
directories_ok => $directories_ok,
archive_courseID => $archive_courseID,
archive_courseIDs => \@archive_courseIDs
ce2 => $ce2,
upgrade_report => \@upgrade_report,
tables_ok => $tables_ok,
dbStatus => $dbStatus,
dir_update_messages => $dir_update_messages,
directory_report => $directory_report,
directories_ok => $directories_ok,
link_report => $link_report,
links_ok => $links_ok,
link_update_messages => $link_update_messages,
archive_courseID => $archive_courseID,
archive_courseIDs => \@archive_courseIDs
);
}

Expand Down Expand Up @@ -1408,7 +1429,7 @@ sub upgrade_course_confirm ($c) {
);
}

# Report on directory status
# Report on directory and link status
my ($directories_ok, $directory_report) = checkCourseDirectories($ce2);
push(@$course_output, $c->tag('div', class => 'mb-2', $c->maketext('Directory structure:')));
push(
Expand All @@ -1430,15 +1451,42 @@ sub upgrade_course_confirm ($c) {
push(
@$course_output,
$directories_ok
? $c->tag('p', class => 'text-success mb-0', $c->maketext('Directory structure is ok'))
? $c->tag('p', class => 'text-success', $c->maketext('Directory structure is ok'))
: $c->tag(
'p',
class => 'text-danger mb-0',
class => 'text-danger',
$c->maketext(
'Directory structure is missing directories or the webserver lacks sufficient privileges.')
)
);

my ($links_ok, $link_report) = checkCourseLinks($ce2);
push(@$course_output, $c->tag('div', class => 'mb-2', $c->maketext('Link structure:')));
push(
@$course_output,
$c->tag(
'ul',
$c->c(
map {
$c->tag(
'li',
$c->c("$_->[0]: ",
$c->tag('span', class => $_->[3] ? 'text-success' : 'text-danger', $_->[2]))
->join('')
)
} @$link_report
)->join('')
)
);
push(
@$course_output,
$links_ok ? $c->tag('p', class => 'text-success mb-0', $c->maketext('Link structure is ok')) : $c->tag(
'p',
class => 'text-danger mb-0',
$c->maketext('Link structure is missing links, or links point to the wrong place.')
)
);

push(@$status_output, $c->tag('div', class => 'border border-dark rounded p-2 mb-2', $course_output->join('')));
}

Expand Down Expand Up @@ -1539,9 +1587,11 @@ sub do_upgrade_course ($c) {
);
}

# Add missing directories and prepare report on directory status
my $dir_update_messages = updateCourseDirectories($ce2); # Needs more error messages
# Add missing directories/links and prepare report on directory/link status
my $dir_update_messages = updateCourseDirectories($ce2); # Needs more error messages
my $link_update_messages = updateCourseLinks($ce2);
my ($directories_ok, $directory_report) = checkCourseDirectories($ce2);
my ($links_ok, $link_report) = checkCourseLinks($ce2);

# Show status
my $course_report = $c->c;
Expand All @@ -1552,7 +1602,7 @@ sub do_upgrade_course ($c) {

push(@$course_report, @$db_report);

# Show report on directory status
# Show report on directory and link status
push(
@$course_report,
$c->tag('div', class => 'mb-2', $c->maketext('Directory structure:')),
Expand Down Expand Up @@ -1585,14 +1635,54 @@ sub do_upgrade_course ($c) {
)->join('')
),
$directories_ok
? $c->tag('p', class => 'text-success mb-0', $c->maketext('Directory structure is ok'))
? $c->tag('p', class => 'text-success', $c->maketext('Directory structure is ok'))
: $c->tag(
'p',
class => 'text-danger mb-0',
class => 'text-danger',
$c->maketext(
'Directory structure is missing directories or the webserver lacks sufficient privileges.')
)
);
push(
@$course_report,
$c->tag('div', class => 'mb-2', $c->maketext('Link structure:')),
$c->tag(
'ul',
$c->c(
map {
$c->tag(
'li',
$c->c("$_->[0]: ",
$c->tag('span', class => $_->[3] ? 'text-success' : 'text-danger', $_->[2]))
->join('')
)
} @$link_report
)->join('')
),
$c->tag(
'ul',
$c->c(
map {
$c->tag(
'li',
$c->tag(
'span',
class => $_->[1] ? 'text-success' : 'text-danger',
$_->[0]
)
)
} @$link_update_messages
)->join('')
),
$links_ok ? $c->tag('p', class => 'text-success mb-0', $c->maketext('Link structure is ok')) : $c->tag(
'p',
class => 'text-danger mb-0',
$c->maketext(
'Link structure is missing links, or the webserver lacks sufficient privileges, '
. 'or links point to the wrong place.'
)
)
);
push(@$output, $c->tag('div', class => 'border border-dark rounded p-2 mb-2', $course_report->join('')));
}

Expand Down
Loading