Skip to content

Commit 1653d29

Browse files
committed
Split the CourseIntegrityCheck.pm module into two parts.
The first is CourseDBIntegrityCheck.pm that checks the database integrity and handles a database upgrade. The second is the CourseDirectoryIntegrityCheck that checks the directory structure and handles fixing that if not correct. The database and directory integrity checks do completely separate things, and directory integrity check methods should not be part of the object that is used for the database integrity check. When that object is constructed it obtains a separate database connection that is unused for the directory check and should not be obtained if that is what is being done. So now the directory check and upgrade methods are simply methods exported from the `WeBWorK::Utils::CourseDirectoryIntegrityCheck` module. The unused `lib/WeBWorK/Utils/DBUpgrade.pm` file was deleted.
1 parent fe3e59f commit 1653d29

File tree

10 files changed

+560
-1341
lines changed

10 files changed

+560
-1341
lines changed

bin/update-OPL-statistics.pl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ BEGIN
3030
use String::ShellQuote;
3131

3232
use DBI;
33-
use WeBWorK::Utils::CourseIntegrityCheck;
3433
use WeBWorK::Utils::CourseManagement qw/listCourses/;
3534

3635
my $time = time();

bin/upgrade_admin_db.pl

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,40 +24,31 @@ BEGIN
2424
use lib "$ENV{WEBWORK_ROOT}/lib";
2525

2626
use WeBWorK::CourseEnvironment;
27-
2827
use WeBWorK::DB;
29-
use WeBWorK::Utils::CourseIntegrityCheck;
28+
use WeBWorK::Utils::CourseDBIntegrityCheck;
3029

31-
##########################
32-
# update admin course
33-
##########################
30+
# Update admin course
3431
my $ce = WeBWorK::CourseEnvironment->new({ webwork_dir => $ENV{WEBWORK_ROOT} });
3532
my $upgrade_courseID = $ce->{admin_course_id};
3633
$ce = WeBWorK::CourseEnvironment->new({
3734
webwork_dir => $ENV{WEBWORK_ROOT},
3835
courseName => $upgrade_courseID,
3936
});
40-
#warn "do_upgrade_course: updating |$upgrade_courseID| from" , join("|",@upgrade_courseIDs);
41-
#############################################################################
42-
# Create integrity checker
43-
#############################################################################
4437

38+
# Create integrity checker
4539
my @update_report;
46-
my $CIchecker = new WeBWorK::Utils::CourseIntegrityCheck(ce => $ce);
40+
my $CIchecker = new WeBWorK::Utils::CourseDBIntegrityCheck($ce);
4741

48-
#############################################################################
4942
# Add missing tables and missing fields to existing tables
50-
#############################################################################
51-
5243
my ($tables_ok, $dbStatus) = $CIchecker->checkCourseTables($upgrade_courseID);
5344
my @schema_table_names = keys %$dbStatus; # update tables missing from database;
5445
my @tables_to_create =
55-
grep { $dbStatus->{$_}->[0] == WeBWorK::Utils::CourseIntegrityCheck::ONLY_IN_A() } @schema_table_names;
46+
grep { $dbStatus->{$_}->[0] == WeBWorK::Utils::CourseDBIntegrityCheck::ONLY_IN_A() } @schema_table_names;
5647
my @tables_to_alter =
57-
grep { $dbStatus->{$_}->[0] == WeBWorK::Utils::CourseIntegrityCheck::DIFFER_IN_A_AND_B() } @schema_table_names;
48+
grep { $dbStatus->{$_}->[0] == WeBWorK::Utils::CourseDBIntegrityCheck::DIFFER_IN_A_AND_B() } @schema_table_names;
5849
push(@update_report, $CIchecker->updateCourseTables($upgrade_courseID, [@tables_to_create]));
59-
foreach my $table_name (@tables_to_alter)
60-
{ #warn "do_upgrade_course: adding new fields to table $table_name in course $upgrade_courseID";
50+
51+
for my $table_name (@tables_to_alter) {
6152
push(@update_report, $CIchecker->updateTableFields($upgrade_courseID, $table_name));
6253
}
6354

lib/WeBWorK/ContentGenerator/CourseAdmin.pm

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,12 @@ use Time::localtime;
3030

3131
use WeBWorK::CourseEnvironment;
3232
use WeBWorK::Debug;
33-
use WeBWorK::Utils qw(cryptPassword trim_spaces);
34-
use WeBWorK::Utils::CourseIntegrityCheck;
33+
use WeBWorK::Utils qw(cryptPassword trim_spaces);
3534
use WeBWorK::Utils::CourseManagement qw(addCourse renameCourse retitleCourse deleteCourse listCourses archiveCourse
3635
unarchiveCourse initNonNativeTables);
3736
use WeBWorK::Utils::Logs qw(writeLog);
37+
use WeBWorK::Utils::CourseDBIntegrityCheck;
38+
use WeBWorK::Utils::CourseDirectoryIntegrityCheck qw(checkCourseDirectories updateCourseDirectories);
3839
use WeBWorK::DB;
3940

4041
sub pre_header_initialize ($c) {
@@ -513,7 +514,7 @@ sub rename_course_confirm ($c) {
513514
) unless $c->param('rename_newCourseID_checkbox');
514515

515516
if ($ce2->{dbLayoutName}) {
516-
my $CIchecker = WeBWorK::Utils::CourseIntegrityCheck->new(ce => $ce2);
517+
my $CIchecker = WeBWorK::Utils::CourseDBIntegrityCheck->new($ce2);
517518

518519
# Check database
519520
my ($tables_ok, $dbStatus) = $CIchecker->checkCourseTables($rename_oldCourseID);
@@ -523,9 +524,9 @@ sub rename_course_confirm ($c) {
523524
if ($c->param('upgrade_course_tables')) {
524525
my @schema_table_names = keys %$dbStatus;
525526
my @tables_to_create =
526-
grep { $dbStatus->{$_}->[0] == WeBWorK::Utils::CourseIntegrityCheck::ONLY_IN_A } @schema_table_names;
527+
grep { $dbStatus->{$_}->[0] == WeBWorK::Utils::CourseDBIntegrityCheck::ONLY_IN_A } @schema_table_names;
527528
my @tables_to_alter =
528-
grep { $dbStatus->{$_}->[0] == WeBWorK::Utils::CourseIntegrityCheck::DIFFER_IN_A_AND_B }
529+
grep { $dbStatus->{$_}->[0] == WeBWorK::Utils::CourseDBIntegrityCheck::DIFFER_IN_A_AND_B }
529530
@schema_table_names;
530531
push(@upgrade_report, $CIchecker->updateCourseTables($rename_oldCourseID, [@tables_to_create]));
531532
for my $table_name (@tables_to_alter) {
@@ -536,7 +537,7 @@ sub rename_course_confirm ($c) {
536537
}
537538

538539
# Check directories
539-
my ($directories_ok, $directory_report) = $CIchecker->checkCourseDirectories($ce2);
540+
my ($directories_ok, $directory_report) = checkCourseDirectories($ce2);
540541

541542
return $c->include(
542543
'ContentGenerator/CourseAdmin/rename_course_confirm',
@@ -980,7 +981,7 @@ sub archive_course_confirm ($c) {
980981
my $ce2 = WeBWorK::CourseEnvironment->new({ courseName => $archive_courseID });
981982

982983
if ($ce2->{dbLayoutName}) {
983-
my $CIchecker = WeBWorK::Utils::CourseIntegrityCheck->new(ce => $ce2);
984+
my $CIchecker = WeBWorK::Utils::CourseDBIntegrityCheck->new($ce2);
984985

985986
# Check database
986987
my ($tables_ok, $dbStatus) = $CIchecker->checkCourseTables($archive_courseID);
@@ -990,9 +991,9 @@ sub archive_course_confirm ($c) {
990991
if ($c->param('upgrade_course_tables')) {
991992
my @schema_table_names = keys %$dbStatus;
992993
my @tables_to_create =
993-
grep { $dbStatus->{$_}->[0] == WeBWorK::Utils::CourseIntegrityCheck::ONLY_IN_A } @schema_table_names;
994+
grep { $dbStatus->{$_}->[0] == WeBWorK::Utils::CourseDBIntegrityCheck::ONLY_IN_A } @schema_table_names;
994995
my @tables_to_alter =
995-
grep { $dbStatus->{$_}->[0] == WeBWorK::Utils::CourseIntegrityCheck::DIFFER_IN_A_AND_B }
996+
grep { $dbStatus->{$_}->[0] == WeBWorK::Utils::CourseDBIntegrityCheck::DIFFER_IN_A_AND_B }
996997
@schema_table_names;
997998
push(@upgrade_report, $CIchecker->updateCourseTables($archive_courseID, [@tables_to_create]));
998999
for my $table_name (@tables_to_alter) {
@@ -1003,8 +1004,8 @@ sub archive_course_confirm ($c) {
10031004
}
10041005

10051006
# Update and check directories.
1006-
my $dir_update_messages = $c->param('upgrade_course_tables') ? $CIchecker->updateCourseDirectories : [];
1007-
my ($directories_ok, $directory_report) = $CIchecker->checkCourseDirectories($ce2);
1007+
my $dir_update_messages = $c->param('upgrade_course_tables') ? updateCourseDirectories($ce2) : [];
1008+
my ($directories_ok, $directory_report) = checkCourseDirectories($ce2);
10081009

10091010
return $c->include(
10101011
'ContentGenerator/CourseAdmin/archive_course_confirm',
@@ -1349,7 +1350,7 @@ sub upgrade_course_confirm ($c) {
13491350
my $ce2 = WeBWorK::CourseEnvironment->new({ courseName => $upgrade_courseID });
13501351

13511352
# Create integrity checker
1352-
my $CIchecker = WeBWorK::Utils::CourseIntegrityCheck->new(ce => $ce2);
1353+
my $CIchecker = WeBWorK::Utils::CourseDBIntegrityCheck->new($ce2);
13531354

13541355
# Report on database status
13551356
my ($tables_ok, $dbStatus) = $CIchecker->checkCourseTables($upgrade_courseID);
@@ -1428,7 +1429,7 @@ sub upgrade_course_confirm ($c) {
14281429
}
14291430

14301431
# Report on directory status
1431-
my ($directories_ok, $directory_report) = $CIchecker->checkCourseDirectories;
1432+
my ($directories_ok, $directory_report) = checkCourseDirectories($ce2);
14321433
push(@$course_output, $c->tag('div', class => 'mb-2', $c->maketext('Directory structure:')));
14331434
push(
14341435
@$course_output,
@@ -1480,15 +1481,16 @@ sub do_upgrade_course ($c) {
14801481
my $ce2 = WeBWorK::CourseEnvironment->new({ courseName => $upgrade_courseID });
14811482

14821483
# Create integrity checker
1483-
my $CIchecker = WeBWorK::Utils::CourseIntegrityCheck->new(ce => $ce2);
1484+
my $CIchecker = WeBWorK::Utils::CourseDBIntegrityCheck->new($ce2);
14841485

14851486
# Add missing tables and missing fields to existing tables
14861487
my ($tables_ok, $dbStatus) = $CIchecker->checkCourseTables($upgrade_courseID);
14871488
my @schema_table_names = keys %$dbStatus;
14881489
my @tables_to_create =
1489-
grep { $dbStatus->{$_}[0] == WeBWorK::Utils::CourseIntegrityCheck::ONLY_IN_A } @schema_table_names;
1490+
grep { $dbStatus->{$_}[0] == WeBWorK::Utils::CourseDBIntegrityCheck::ONLY_IN_A } @schema_table_names;
14901491
my @tables_to_alter =
1491-
grep { $dbStatus->{$_}[0] == WeBWorK::Utils::CourseIntegrityCheck::DIFFER_IN_A_AND_B } @schema_table_names;
1492+
grep { $dbStatus->{$_}[0] == WeBWorK::Utils::CourseDBIntegrityCheck::DIFFER_IN_A_AND_B }
1493+
@schema_table_names;
14921494

14931495
my @upgrade_report;
14941496
push(
@@ -1540,8 +1542,8 @@ sub do_upgrade_course ($c) {
15401542
}
15411543

15421544
# Add missing directories and prepare report on directory status
1543-
my $dir_update_messages = $CIchecker->updateCourseDirectories; # Needs more error messages
1544-
my ($directories_ok, $directory_report) = $CIchecker->checkCourseDirectories;
1545+
my $dir_update_messages = updateCourseDirectories($ce2); # Needs more error messages
1546+
my ($directories_ok, $directory_report) = checkCourseDirectories($ce2);
15451547

15461548
# Show status
15471549
my $course_report = $c->c;
@@ -2650,32 +2652,32 @@ sub do_registration ($c) {
26502652
# Format a list of tables and fields in the database, and the status of each.
26512653
sub formatReportOnDatabaseTables ($c, $dbStatus, $courseID = undef) {
26522654
my %table_status_message = (
2653-
WeBWorK::Utils::CourseIntegrityCheck::SAME_IN_A_AND_B =>
2655+
WeBWorK::Utils::CourseDBIntegrityCheck::SAME_IN_A_AND_B =>
26542656
$c->tag('span', class => 'text-success me-2', $c->maketext('Table is ok')),
2655-
WeBWorK::Utils::CourseIntegrityCheck::ONLY_IN_A => $c->tag(
2657+
WeBWorK::Utils::CourseDBIntegrityCheck::ONLY_IN_A => $c->tag(
26562658
'span',
26572659
class => 'text-danger me-2',
26582660
$c->maketext('Table defined in schema but missing in database')
26592661
),
2660-
WeBWorK::Utils::CourseIntegrityCheck::ONLY_IN_B => $c->tag(
2662+
WeBWorK::Utils::CourseDBIntegrityCheck::ONLY_IN_B => $c->tag(
26612663
'span',
26622664
class => 'text-danger me-2',
26632665
$c->maketext('Table defined in database but missing in schema')
26642666
),
2665-
WeBWorK::Utils::CourseIntegrityCheck::DIFFER_IN_A_AND_B => $c->tag(
2667+
WeBWorK::Utils::CourseDBIntegrityCheck::DIFFER_IN_A_AND_B => $c->tag(
26662668
'span',
26672669
class => 'text-danger me-2',
26682670
$c->maketext('Schema and database table definitions do not agree')
26692671
)
26702672
);
26712673
my %field_status_message = (
2672-
WeBWorK::Utils::CourseIntegrityCheck::SAME_IN_A_AND_B =>
2674+
WeBWorK::Utils::CourseDBIntegrityCheck::SAME_IN_A_AND_B =>
26732675
$c->tag('span', class => 'text-success me-2', $c->maketext('Field is ok')),
2674-
WeBWorK::Utils::CourseIntegrityCheck::ONLY_IN_A =>
2676+
WeBWorK::Utils::CourseDBIntegrityCheck::ONLY_IN_A =>
26752677
$c->tag('span', class => 'text-danger me-2', $c->maketext('Field missing in database')),
2676-
WeBWorK::Utils::CourseIntegrityCheck::ONLY_IN_B =>
2678+
WeBWorK::Utils::CourseDBIntegrityCheck::ONLY_IN_B =>
26772679
$c->tag('span', class => 'text-danger me-2', $c->maketext('Field missing in schema')),
2678-
WeBWorK::Utils::CourseIntegrityCheck::DIFFER_IN_A_AND_B => $c->tag(
2680+
WeBWorK::Utils::CourseDBIntegrityCheck::DIFFER_IN_A_AND_B => $c->tag(
26792681
'span',
26802682
class => 'text-danger me-2',
26812683
$c->maketext('Schema and database field definitions do not agree')
@@ -2695,9 +2697,9 @@ sub formatReportOnDatabaseTables ($c, $dbStatus, $courseID = undef) {
26952697
my $table_status = $dbStatus->{$table}[0];
26962698
push(@$table_report, $table . ': ', $table_status_message{$table_status});
26972699

2698-
if ($table_status == WeBWorK::Utils::CourseIntegrityCheck::ONLY_IN_A) {
2700+
if ($table_status == WeBWorK::Utils::CourseDBIntegrityCheck::ONLY_IN_A) {
26992701
$all_tables_ok = 0;
2700-
} elsif ($table_status == WeBWorK::Utils::CourseIntegrityCheck::ONLY_IN_B) {
2702+
} elsif ($table_status == WeBWorK::Utils::CourseDBIntegrityCheck::ONLY_IN_B) {
27012703
$extra_database_tables = 1;
27022704
push(
27032705
@$table_report,
@@ -2712,45 +2714,43 @@ sub formatReportOnDatabaseTables ($c, $dbStatus, $courseID = undef) {
27122714
)
27132715
)
27142716
) if defined $courseID;
2715-
} elsif ($table_status == WeBWorK::Utils::CourseIntegrityCheck::DIFFER_IN_A_AND_B) {
2717+
} elsif ($table_status == WeBWorK::Utils::CourseDBIntegrityCheck::DIFFER_IN_A_AND_B) {
27162718
my %fieldInfo = %{ $dbStatus->{$table}[1] };
27172719
my $fields_report = $c->c;
27182720

27192721
for my $key (keys %fieldInfo) {
27202722
my $field_status = $fieldInfo{$key}[0];
27212723
my $field_report = $c->c("$key: $field_status_message{$field_status}");
27222724

2723-
if ($field_status == WeBWorK::Utils::CourseIntegrityCheck::ONLY_IN_B) {
2725+
if ($field_status == WeBWorK::Utils::CourseDBIntegrityCheck::ONLY_IN_B) {
27242726
if ($fieldInfo{$key}[1]) {
27252727
$rebuild_table_indexes = 1;
27262728
} else {
27272729
$extra_database_fields = 1;
27282730
}
2729-
if (defined $courseID) {
2730-
if ($fieldInfo{$key}[1]) {
2731-
push(@$field_report, $c->hidden_field("$courseID.$table.delete_fieldIDs" => $key));
2732-
} else {
2733-
push(
2734-
@$field_report,
2731+
if ($fieldInfo{$key}[1]) {
2732+
push(@$field_report, $c->hidden_field("$courseID.$table.delete_fieldIDs" => $key));
2733+
} else {
2734+
push(
2735+
@$field_report,
2736+
$c->tag(
2737+
'span',
2738+
class => 'form-check d-inline-block',
27352739
$c->tag(
2736-
'span',
2737-
class => 'form-check d-inline-block',
2738-
$c->tag(
2739-
'label',
2740-
class => 'form-check-label',
2741-
$c->c(
2742-
$c->check_box(
2743-
"$courseID.$table.delete_fieldIDs" => $key,
2744-
class => 'form-check-input'
2745-
),
2746-
$c->maketext('Delete field when upgrading')
2747-
)->join('')
2748-
)
2740+
'label',
2741+
class => 'form-check-label',
2742+
$c->c(
2743+
$c->check_box(
2744+
"$courseID.$table.delete_fieldIDs" => $key,
2745+
class => 'form-check-input'
2746+
),
2747+
$c->maketext('Delete field when upgrading')
2748+
)->join('')
27492749
)
2750-
);
2751-
}
2750+
)
2751+
);
27522752
}
2753-
} elsif ($field_status == WeBWorK::Utils::CourseIntegrityCheck::ONLY_IN_A) {
2753+
} elsif ($field_status == WeBWorK::Utils::CourseDBIntegrityCheck::ONLY_IN_A) {
27542754
$all_tables_ok = 0;
27552755
}
27562756
push(@$fields_report, $c->tag('li', $field_report->join('')));

lib/WeBWorK/DB/Record/Depths.pm

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,11 @@ WeBWorK::DB::Record::Depths - represent a record from the depths table.
2525
use strict;
2626
use warnings;
2727

28-
#use WeBWorK::Utils::DBUpgrade;
29-
3028
BEGIN {
3129
__PACKAGE__->_fields(
3230
md5 => { type => "CHAR(33) NOT NULL", key => 1 },
3331
depth => { type => "SMALLINT" },
3432
);
35-
3633
}
3734

3835
1;
39-

lib/WeBWorK/DB/Record/Setting.pm

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ WeBWorK::DB::Record::Setting - represent a record from the setting table.
2525
use strict;
2626
use warnings;
2727

28-
use WeBWorK::Utils::DBUpgrade;
29-
3028
BEGIN {
3129
__PACKAGE__->_fields(
3230
name => { type => "VARCHAR(240) NOT NULL", key => 1 },
@@ -35,10 +33,9 @@ BEGIN {
3533
__PACKAGE__->_initial_records(
3634
{
3735
name => "db_version",
38-
value => 3.1415926 # $WeBWorK::Utils::DBUpgrade::THIS_DB_VERSION
36+
value => 3.1415926
3937
},
4038
);
4139
}
4240

4341
1;
44-

0 commit comments

Comments
 (0)