/mod/questionnaire/db/upgrade.php

https://github.com/jarednipper/HSU-common-code · PHP · 265 lines · 207 code · 48 blank · 10 comment · 30 complexity · a2c0cb01e55be03b0345ca01d4fa3cab MD5 · raw file

  1. <?php //$Id: upgrade.php,v 1.1.2.16 2009/11/23 20:14:49 mchurch Exp $
  2. function xmldb_questionnaire_upgrade($oldversion=0) {
  3. global $CFG;
  4. $result = true;
  5. if ($oldversion < 2007120101) {
  6. $result &= questionnaire_upgrade_2007120101();
  7. }
  8. if ($oldversion < 2007120102) {
  9. /// Change enum values to lower case for all tables using them.
  10. $enumvals = array('y', 'n');
  11. $table = new XMLDBTable('questionnaire_question');
  12. $field = new XMLDBField('required');
  13. $field->setAttributes(XMLDB_TYPE_CHAR, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, false, null, 'n');
  14. $result &= change_field_enum($table, $field);
  15. set_field('questionnaire_question', 'required', 'y', 'required', 'Y');
  16. set_field('questionnaire_question', 'required', 'n', 'required', 'N');
  17. $field->setAttributes(XMLDB_TYPE_CHAR, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, XMLDB_ENUM, array('y', 'n'), 'n');
  18. $result &= change_field_enum($table, $field);
  19. $result &= change_field_default($table, $field);
  20. unset($field);
  21. $field = new XMLDBField('deleted');
  22. $field->setAttributes(XMLDB_TYPE_CHAR, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, false, null, 'n');
  23. $result &= change_field_enum($table, $field);
  24. set_field('questionnaire_question', 'deleted', 'y', 'deleted', 'Y');
  25. set_field('questionnaire_question', 'deleted', 'n', 'deleted', 'N');
  26. $field->setAttributes(XMLDB_TYPE_CHAR, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, XMLDB_ENUM, array('y', 'n'), 'n');
  27. $result &= change_field_enum($table, $field);
  28. $result &= change_field_default($table, $field);
  29. unset($field);
  30. $field = new XMLDBField('public');
  31. $field->setAttributes(XMLDB_TYPE_CHAR, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, false, null, 'n');
  32. $result &= change_field_enum($table, $field);
  33. set_field('questionnaire_question', 'public', 'y', 'public', 'Y');
  34. set_field('questionnaire_question', 'public', 'n', 'public', 'N');
  35. $field->setAttributes(XMLDB_TYPE_CHAR, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, XMLDB_ENUM, array('y', 'n'), 'y');
  36. $result &= change_field_enum($table, $field);
  37. $result &= change_field_default($table, $field);
  38. unset($field);
  39. unset($table);
  40. $table = new XMLDBTable('questionnaire_question_type');
  41. $field = new XMLDBField('has_choices');
  42. $field->setAttributes(XMLDB_TYPE_CHAR, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, false, null, 'n');
  43. $result &= change_field_enum($table, $field);
  44. set_field('questionnaire_question_type', 'has_choices', 'y', 'has_choices', 'Y');
  45. set_field('questionnaire_question_type', 'has_choices', 'n', 'has_choices', 'N');
  46. $field->setAttributes(XMLDB_TYPE_CHAR, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, XMLDB_ENUM, array('y', 'n'), 'y');
  47. $result &= change_field_enum($table, $field);
  48. $result &= change_field_default($table, $field);
  49. unset($field);
  50. unset($table);
  51. $table = new XMLDBTable('questionnaire_response');
  52. $field = new XMLDBField('complete');
  53. $field->setAttributes(XMLDB_TYPE_CHAR, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, false, null, 'n');
  54. $result &= change_field_enum($table, $field);
  55. set_field('questionnaire_response', 'complete', 'y', 'complete', 'Y');
  56. set_field('questionnaire_response', 'complete', 'n', 'complete', 'N');
  57. $field->setAttributes(XMLDB_TYPE_CHAR, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, XMLDB_ENUM, array('y', 'n'), 'n');
  58. $result &= change_field_enum($table, $field);
  59. $result &= change_field_default($table, $field);
  60. unset($field);
  61. unset($table);
  62. $table = new XMLDBTable('questionnaire_response_bool');
  63. $field = new XMLDBField('choice_id');
  64. $field->setAttributes(XMLDB_TYPE_CHAR, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, false, null, 'n');
  65. $result &= change_field_enum($table, $field);
  66. set_field('questionnaire_response_bool', 'choice_id', 'y', 'choice_id', 'Y');
  67. set_field('questionnaire_response_bool', 'choice_id', 'n', 'choice_id', 'N');
  68. $field->setAttributes(XMLDB_TYPE_CHAR, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, XMLDB_ENUM, array('y', 'n'), 'y');
  69. $result &= change_field_enum($table, $field);
  70. $result &= change_field_default($table, $field);
  71. unset($field);
  72. unset($table);
  73. $table = new XMLDBTable('questionnaire_survey');
  74. $field = new XMLDBField('public');
  75. $field->setAttributes(XMLDB_TYPE_CHAR, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, false, null, 'n');
  76. $result &= change_field_enum($table, $field);
  77. set_field('questionnaire_survey', 'public', 'y', 'public', 'Y');
  78. set_field('questionnaire_survey', 'public', 'n', 'public', 'N');
  79. $field->setAttributes(XMLDB_TYPE_CHAR, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, XMLDB_ENUM, array('y', 'n'), 'y');
  80. $result &= change_field_enum($table, $field);
  81. $result &= change_field_default($table, $field);
  82. unset($field);
  83. /// Upgrade question_type table with corrected 'response_table' fields.
  84. set_field('questionnaire_question_type', 'response_table', 'resp_single', 'response_table', 'response_single');
  85. set_field('questionnaire_question_type', 'response_table', 'resp_multiple', 'response_table', 'response_multiple');
  86. }
  87. if ($oldversion < 2008031902) {
  88. $table = new XMLDBTable('questionnaire');
  89. $field = new XMLDBField('grade');
  90. $field->setAttributes(XMLDB_TYPE_INTEGER, '10', false, true, false, false, null, 0, 'navigate');
  91. $result = $result && add_field($table, $field);
  92. unset($field);
  93. unset($table);
  94. $table = new XMLDBTable('questionnaire_response');
  95. $field = new XMLDBField('grade');
  96. $field->setAttributes(XMLDB_TYPE_INTEGER, '10', false, true, false, false, null, 0, 'complete');
  97. $result = $result && add_field($table, $field);
  98. }
  99. if ($oldversion < 2008031904) {
  100. $sql = "SELECT q.id, q.resp_eligible, q.resp_view, cm.id as cmid
  101. FROM {$CFG->prefix}questionnaire q, {$CFG->prefix}course_modules cm, {$CFG->prefix}modules m
  102. WHERE m.name='questionnaire' AND m.id=cm.module AND cm.instance=q.id";
  103. if ($rs = get_recordset_sql($sql)) {
  104. $studentroleid = get_field('role', 'id', 'shortname', 'student');
  105. $editteacherroleid = get_field('role', 'id', 'shortname', 'editingteacher');
  106. $teacherroleid = get_field('role', 'id', 'shortname', 'teacher');
  107. $capview = 'mod/questionnaire:view';
  108. $capsubmit = 'mod/questionnaire:submit';
  109. while ($questionnaire = rs_fetch_next_record($rs)) {
  110. $context = get_context_instance(CONTEXT_MODULE, $questionnaire->cmid);
  111. /// Convert questionnaires with resp_eligible = 'all' so that students & teachers have view and submit
  112. if ($questionnaire->resp_eligible == 'all') {
  113. assign_capability($capsubmit, CAP_ALLOW, $editteacherroleid, $context->id, true);
  114. assign_capability($capsubmit, CAP_ALLOW, $teacherroleid, $context->id, true);
  115. /// Convert questionnaires with resp_eligible = 'students' so that just students have view and submit
  116. } else if ($questionnaire->resp_eligible == 'students') {
  117. /// This is the default; no changes necessary.
  118. /// Convert questionnaires with resp_eligible = 'teachers' so just teachers have view and submit
  119. } else if ($questionnaire->resp_eligible == 'teachers') {
  120. assign_capability($capsubmit, CAP_ALLOW, $editteacherroleid, $context->id, true);
  121. assign_capability($capsubmit, CAP_ALLOW, $teacherroleid, $context->id, true);
  122. assign_capability($capview, CAP_PREVENT, $studentroleid, $context->id, true);
  123. assign_capability($capsubmit, CAP_PREVENT, $studentroleid, $context->id, true);
  124. }
  125. }
  126. rs_close($rs);
  127. }
  128. }
  129. if ($oldversion < 2008031905) {
  130. $table = new XMLDBTable('questionnaire_survey');
  131. $field = new XMLDBField('changed');
  132. $result = $result && drop_field($table, $field);
  133. }
  134. if ($oldversion < 2008031906) {
  135. $table = new XMLDBTable('questionnaire_response_rank');
  136. $field = new XMLDBField('rank');
  137. $field->setAttributes(XMLDB_TYPE_INTEGER, '11', null, XMLDB_NOTNULL, null, null, null, '0', 'choice_id');
  138. $field->setUnsigned(false);
  139. $result &= change_field_unsigned($table, $field);
  140. }
  141. if ($oldversion < 2008060401) {
  142. $table = new XMLDBTable('questionnaire_question');
  143. $field = new XMLDBField('name');
  144. $field->setAttributes(XMLDB_TYPE_CHAR, '30', null, XMLDB_NOTNULL, null, null, null, null, 'survey_id');
  145. $field->setNotnull(false);
  146. $result &= change_field_notnull($table, $field);
  147. }
  148. if ($oldversion < 2008060402) {
  149. $table = new XMLDBTable('questionnaire_question_type');
  150. $field = new XMLDBField('response_table');
  151. $field->setAttributes(XMLDB_TYPE_CHAR, '32', null, XMLDB_NOTNULL, null, null, null, null, 'has_choices');
  152. $field->setNotnull(false);
  153. $result &= change_field_notnull($table, $field);
  154. }
  155. if ($oldversion < 2008060403) {
  156. $table = new XMLDBTable('questionnaire_resp_multiple');
  157. $index = new XMLDBIndex('response_question');
  158. $index->setAttributes(XMLDB_INDEX_NOTUNIQUE, array('response_id', 'question_id', 'choice_id'));
  159. $result = $result && add_index($table, $index);
  160. }
  161. if ($oldversion < 2008060404) {
  162. $table = new XMLDBTable('questionnaire_survey');
  163. $field = new XMLDBField('email');
  164. $field->setAttributes(XMLDB_TYPE_CHAR, '64', null, XMLDB_NOTNULL, null, null, null, null, 'title');
  165. $field->setLength('255');
  166. $result &= change_field_precision($table, $field);
  167. }
  168. if ($oldversion < 2008060405) {
  169. /// CONTRIB-1153
  170. $table = new XMLDBTable('questionnaire_survey');
  171. $field = new XMLDBField('public');
  172. if (field_exists($table, $field)) {
  173. $result &= drop_field($table, $field);
  174. }
  175. $table = new XMLDBTable('questionnaire_question');
  176. $field = new XMLDBField('public');
  177. if (field_exists($table, $field)) {
  178. $result &= drop_field($table, $field);
  179. }
  180. }
  181. return $result;
  182. }
  183. /// Supporting functions used once.
  184. function questionnaire_upgrade_2007120101() {
  185. $status = true;
  186. /// Shorten table names to bring them in accordance with the XML DB schema.
  187. $q_table = new XMLDBTable('questionnaire_question_choice');
  188. $status &= rename_table($q_table, 'questionnaire_quest_choice', false);
  189. unset($q_table);
  190. $q_table = new XMLDBTable('questionnaire_response_multiple');
  191. $status &= rename_table($q_table, 'questionnaire_resp_multiple', false);
  192. unset($q_table);
  193. $q_table = new XMLDBTable('questionnaire_response_single');
  194. $status &= rename_table($q_table, 'questionnaire_resp_single', false);
  195. unset($q_table);
  196. /// Upgrade the questionnaire_question_type table to use typeid.
  197. unset($table);
  198. unset($field);
  199. $table = new XMLDBTable('questionnaire_question_type');
  200. $field = new XMLDBField('typeid');
  201. $field->setAttributes(XMLDB_TYPE_CHAR, '20', true, true, false, false, null, '0', 'id');
  202. $status &= add_field($table, $field);
  203. if (($numrecs = count_records('questionnaire_question_type')) > 0) {
  204. $recstart = 0;
  205. $recstoget = 100;
  206. while ($recstart < $numrecs) {
  207. if ($records = get_records('questionnaire_question_type', '', '', '', '*', $recstart, $recstoget)) {
  208. foreach ($records as $record) {
  209. $status &= set_field('questionnaire_question_type', 'typeid', $record->id, 'id', $record->id);
  210. }
  211. }
  212. $recstart += $recstoget;
  213. }
  214. }
  215. return $status;
  216. }
  217. ?>