@@ -1029,13 +1029,41 @@ function xmldb_questionnaire_upgrade($oldversion = 0) {
10291029 upgrade_mod_savepoint (true , 2022121601.01 , 'questionnaire ' );
10301030 }
10311031
1032- if ($ oldversion < 2023101500 ) {
1032+ if ($ oldversion < 2025041400.02 ) {
1033+ $ table = new xmldb_table ('questionnaire_question ' );
1034+ $ index = new xmldb_index ('quest_question_sididx ' , XMLDB_INDEX_NOTUNIQUE , ['surveyid ' , 'deleted ' ]);
1035+ if ($ dbman ->index_exists ($ table , $ index )) {
1036+ $ dbman ->drop_index ($ table , $ index );
1037+ }
1038+ $ field = new xmldb_field ('deleted ' , XMLDB_TYPE_CHAR , '10 ' , XMLDB_UNSIGNED , null , null , null , 'required ' );
1039+ if ($ dbman ->field_exists ($ table , $ field )) {
1040+ $ dbman ->change_field_type ($ table , $ field );
1041+ }
1042+ unset($ field );
1043+
1044+ $ field = new xmldb_field ('deleted ' , XMLDB_TYPE_INTEGER , '10 ' , XMLDB_UNSIGNED , null , null , null , 'required ' );
1045+ if ($ dbman ->field_exists ($ table , $ field )) {
1046+ // Instead of updating all 'deleted' = 'y' to a timestamp (which could be slow on large tables),
1047+ // simply delete those records, as they were not restorable before this upgrade.
1048+ $ DB ->delete_records ('questionnaire_question ' , ['deleted ' => 'y ' ]);
1049+ // Optionally, clear 'deleted' = 'n' to null if required by new logic.
1050+ $ DB ->set_field ('questionnaire_question ' , 'deleted ' , null , ['deleted ' => 'n ' ]);
1051+ $ dbman ->change_field_type ($ table , $ field );
1052+ }
1053+ unset($ field );
1054+ // Questionnaire savepoint reached.
1055+ upgrade_mod_savepoint (true , 2025041400.02 , 'questionnaire ' );
1056+ }
1057+
1058+ if ($ oldversion < 2025041400.03 ) {
10331059 $ questiontype = new stdClass ();
10341060 $ questiontype ->typeid = 12 ;
10351061 $ questiontype ->type = 'File ' ;
10361062 $ questiontype ->has_choices = 'n ' ;
10371063 $ questiontype ->response_table = 'response_file ' ;
1038- $ id = $ DB ->insert_record ('questionnaire_question_type ' , $ questiontype );
1064+ if (!$ DB ->record_exists ('questionnaire_question_type ' , ['typeid ' => 12 ])) {
1065+ $ id = $ DB ->insert_record ('questionnaire_question_type ' , $ questiontype );
1066+ }
10391067
10401068 // Define table questionnaire_response_file to be created.
10411069 $ table = new xmldb_table ('questionnaire_response_file ' );
@@ -1059,33 +1087,7 @@ function xmldb_questionnaire_upgrade($oldversion = 0) {
10591087 }
10601088
10611089 // Questionnaire savepoint reached.
1062- upgrade_mod_savepoint (true , 2023101500 , 'questionnaire ' );
1063- }
1064-
1065- if ($ oldversion < 2025041400.02 ) {
1066- $ table = new xmldb_table ('questionnaire_question ' );
1067- $ index = new xmldb_index ('quest_question_sididx ' , XMLDB_INDEX_NOTUNIQUE , ['surveyid ' , 'deleted ' ]);
1068- if ($ dbman ->index_exists ($ table , $ index )) {
1069- $ dbman ->drop_index ($ table , $ index );
1070- }
1071- $ field = new xmldb_field ('deleted ' , XMLDB_TYPE_CHAR , '10 ' , XMLDB_UNSIGNED , null , null , null , 'required ' );
1072- if ($ dbman ->field_exists ($ table , $ field )) {
1073- $ dbman ->change_field_type ($ table , $ field );
1074- }
1075- unset($ field );
1076-
1077- $ field = new xmldb_field ('deleted ' , XMLDB_TYPE_INTEGER , '10 ' , XMLDB_UNSIGNED , null , null , null , 'required ' );
1078- if ($ dbman ->field_exists ($ table , $ field )) {
1079- // Instead of updating all 'deleted' = 'y' to a timestamp (which could be slow on large tables),
1080- // simply delete those records, as they were not restorable before this upgrade.
1081- $ DB ->delete_records ('questionnaire_question ' , ['deleted ' => 'y ' ]);
1082- // Optionally, clear 'deleted' = 'n' to null if required by new logic.
1083- $ DB ->set_field ('questionnaire_question ' , 'deleted ' , null , ['deleted ' => 'n ' ]);
1084- $ dbman ->change_field_type ($ table , $ field );
1085- }
1086- unset($ field );
1087- // Questionnaire savepoint reached.
1088- upgrade_mod_savepoint (true , 2025041400.02 , 'questionnaire ' );
1090+ upgrade_mod_savepoint (true , 2025041400.03 , 'questionnaire ' );
10891091 }
10901092
10911093 return true ;
0 commit comments