panels_node.install 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <?php
  2. /**
  3. * @file
  4. */
  5. /**
  6. * Implementation of hook_schema().
  7. */
  8. function panels_node_schema() {
  9. // This should always point to our 'current' schema. This makes it relatively easy
  10. // to keep a record of schema as we make changes to it.
  11. return panels_node_schema_1();
  12. }
  13. /**
  14. * Schema version 1 for Panels in D6.
  15. */
  16. function panels_node_schema_1() {
  17. $schema = array();
  18. $schema['panels_node'] = array(
  19. 'fields' => array(
  20. 'nid' => array(
  21. 'type' => 'int',
  22. 'not null' => TRUE,
  23. 'default' => 0,
  24. ),
  25. 'css_id' => array(
  26. 'type' => 'varchar',
  27. 'length' => '255',
  28. ),
  29. 'did' => array(
  30. 'type' => 'int',
  31. 'not null' => TRUE,
  32. ),
  33. 'pipeline' => array(
  34. 'type' => 'varchar',
  35. 'length' => '255',
  36. ),
  37. ),
  38. 'primary key' => array('did'),
  39. );
  40. return $schema;
  41. }
  42. /**
  43. * Implementation of hook_install().
  44. */
  45. function panels_node_install() {
  46. db_query("UPDATE {system} SET weight = 11 WHERE name = 'panels_node'");
  47. }
  48. /**
  49. * Implementation of hook_uninstall().
  50. */
  51. function panels_node_uninstall() {
  52. db_query("DELETE FROM {node} WHERE type = 'panel'");
  53. drupal_uninstall_schema('panels_node');
  54. }
  55. /**
  56. * Implements hook_update_dependencies().
  57. */
  58. function panels_node_update_dependencies() {
  59. // Update 7301 requires panels storage support.
  60. $dependencies['panels_node'][7301] = array(
  61. 'panels' => 7305,
  62. );
  63. return $dependencies;
  64. }
  65. /**
  66. * Implementation of hook_update to handle adding a pipeline.
  67. */
  68. function panels_node_update_6001() {
  69. $ret = array();
  70. $field = array(
  71. 'type' => 'varchar',
  72. 'length' => '255',
  73. );
  74. db_add_field('panels_node', 'pipeline', $field);
  75. return $ret;
  76. }
  77. /**
  78. * Migrate legacy Drupal 6 permissions to Drupal 7.
  79. */
  80. function panels_node_update_7301() {
  81. $permissions = array(
  82. 'create panel-nodes' => 'create panel content',
  83. 'edit any panel-nodes' => 'edit any panel content',
  84. 'edit own panel-nodes' => 'edit own panel content',
  85. 'delete any panel-nodes' => 'delete any panel content',
  86. 'delete own panel-nodes' => 'delete own panel content',
  87. );
  88. foreach ($permissions as $legacy_permission => $new_permission) {
  89. $query = db_select('role_permission', 'p')
  90. ->fields('p', array('rid'))
  91. ->condition('permission', $legacy_permission);
  92. $rids = $query->execute()->fetchCol();
  93. foreach ($rids as $rid) {
  94. // Insert the new permission if it doesn't already exist.
  95. db_merge('role_permission')
  96. ->key(array(
  97. 'rid' => $rid,
  98. 'permission' => $new_permission,
  99. ))
  100. ->insertFields(array(
  101. 'rid' => $rid,
  102. 'permission' => $new_permission,
  103. 'module' => 'node',
  104. ))
  105. ->execute();
  106. }
  107. // Delete the legacy permission.
  108. db_delete('role_permission')
  109. ->condition('permission', $legacy_permission)
  110. ->execute();
  111. }
  112. }
  113. /**
  114. * Set the storage type and id on existing panels nodes.
  115. */
  116. function panels_node_update_7302() {
  117. if (!isset($sandbox['progress'])) {
  118. // Initialize batch update information.
  119. $sandbox['progress'] = (float) 0;
  120. $sandbox['current_did'] = -1;
  121. $sandbox['max'] = db_query("SELECT COUNT(pd.did)
  122. FROM {panels_display} pd
  123. JOIN {panels_node} pn ON pn.did = pd.did
  124. WHERE pd.storage_type = ''")->fetchField();
  125. }
  126. // Set a limit of how many rows to process per batch.
  127. $limit = 1000;
  128. // Run the query.
  129. $result = db_query_range("SELECT pd.did, pn.nid
  130. FROM {panels_display} pd
  131. JOIN {panels_node} pn ON pn.did = pd.did
  132. WHERE pd.storage_type = '' AND pd.did > :current_did", 0, $limit, array(':current_did' => $sandbox['current_did']));
  133. foreach ($result as $row) {
  134. db_update('panels_display')
  135. ->fields(array(
  136. 'storage_type' => 'panels_node',
  137. 'storage_id' => $row->nid,
  138. ))
  139. ->condition('did', $row->did)
  140. ->execute();
  141. // Update our progress information.
  142. $sandbox['progress']++;
  143. $sandbox['current_did'] = $row->did;
  144. }
  145. // Set the "finished" status, to tell batch engine whether this function
  146. // needs to run again.
  147. $sandbox['#finished'] = ($sandbox['progress'] >= $sandbox['max']) ? TRUE : ($sandbox['progress'] / $sandbox['max']);
  148. if ($sandbox['#finished']) {
  149. return t('Added the storage type for panels_node to relevant panels displays');
  150. }
  151. }