| Drupal | PHP Cross Reference | Content Management Systems |
1 #!/usr/bin/env php 2 <?php 3 4 /** 5 * @file 6 * Generates content for a Drupal 7 database to test the upgrade process. 7 * 8 * Run this script at the root of an existing Drupal 6 installation. 9 * Steps to use this generation script: 10 * - Install drupal 7. 11 * - Run this script from your Drupal ROOT directory. 12 * - Use the dump-database-d7.sh to generate the D7 file 13 * modules/simpletest/tests/upgrade/database.filled.php 14 */ 15 16 // Define settings. 17 $cmd = 'index.php'; 18 define('DRUPAL_ROOT', getcwd()); 19 $_SERVER['HTTP_HOST'] = 'default'; 20 $_SERVER['PHP_SELF'] = '/index.php'; 21 $_SERVER['REMOTE_ADDR'] = '127.0.0.1'; 22 $_SERVER['SERVER_SOFTWARE'] = NULL; 23 $_SERVER['REQUEST_METHOD'] = 'GET'; 24 $_SERVER['QUERY_STRING'] = ''; 25 $_SERVER['PHP_SELF'] = $_SERVER['REQUEST_URI'] = '/'; 26 $_SERVER['HTTP_USER_AGENT'] = 'console'; 27 $modules_to_enable = array('path', 'poll', 'taxonomy'); 28 29 // Bootstrap Drupal. 30 include_once './includes/bootstrap.inc'; 31 drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); 32 33 // Enable requested modules. 34 require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc'); 35 include_once './modules/system/system.admin.inc'; 36 $form = system_modules(); 37 foreach ($modules_to_enable as $module) { 38 $form_state['values']['status'][$module] = TRUE; 39 } 40 $form_state['values']['disabled_modules'] = $form['disabled_modules']; 41 system_modules_submit(NULL, $form_state); 42 unset($form_state); 43 44 // Run cron after installing. 45 drupal_cron_run(); 46 47 // Create six users. 48 $query = db_insert('users')->fields(array('uid', 'name', 'pass', 'mail', 'status', 'created', 'access')); 49 for ($i = 0; $i < 6; $i++) { 50 $name = "test user $i"; 51 $pass = md5("test PassW0rd $i !(.)"); 52 $mail = "test$i@example.com"; 53 $now = mktime(0, 0, 0, 1, $i + 1, 2010); 54 $query->values(array(db_next_id(), $name, user_hash_password($pass), $mail, 1, $now, $now)); 55 } 56 $query->execute(); 57 58 // Create vocabularies and terms. 59 60 if (module_exists('taxonomy')) { 61 $terms = array(); 62 63 // All possible combinations of these vocabulary properties. 64 $hierarchy = array(0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2); 65 $multiple = array(0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1); 66 $required = array(0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1); 67 68 $voc_id = 0; 69 $term_id = 0; 70 for ($i = 0; $i < 24; $i++) { 71 $vocabulary = new stdClass; 72 ++$voc_id; 73 $vocabulary->name = "vocabulary $voc_id (i=$i)"; 74 $vocabulary->machine_name = 'vocabulary_' . $voc_id . '_' . $i; 75 $vocabulary->description = "description of ". $vocabulary->name; 76 $vocabulary->multiple = $multiple[$i % 12]; 77 $vocabulary->required = $required[$i % 12]; 78 $vocabulary->relations = 1; 79 $vocabulary->hierarchy = $hierarchy[$i % 12]; 80 $vocabulary->weight = $i; 81 taxonomy_vocabulary_save($vocabulary); 82 $field = array( 83 'field_name' => 'taxonomy_'. $vocabulary->machine_name, 84 'module' => 'taxonomy', 85 'type' => 'taxonomy_term_reference', 86 'cardinality' => $vocabulary->multiple || $vocabulary->tags ? FIELD_CARDINALITY_UNLIMITED : 1, 87 'settings' => array( 88 'required' => $vocabulary->required ? TRUE : FALSE, 89 'allowed_values' => array( 90 array( 91 'vocabulary' => $vocabulary->machine_name, 92 'parent' => 0, 93 ), 94 ), 95 ), 96 ); 97 field_create_field($field); 98 $node_types = $i > 11 ? array('page') : array_keys(node_type_get_types()); 99 foreach ($node_types as $bundle) { 100 $instance = array( 101 'label' => $vocabulary->name, 102 'field_name' => $field['field_name'], 103 'bundle' => $bundle, 104 'entity_type' => 'node', 105 'settings' => array(), 106 'description' => $vocabulary->help, 107 'required' => $vocabulary->required, 108 'widget' => array(), 109 'display' => array( 110 'default' => array( 111 'type' => 'taxonomy_term_reference_link', 112 'weight' => 10, 113 ), 114 'teaser' => array( 115 'type' => 'taxonomy_term_reference_link', 116 'weight' => 10, 117 ), 118 ), 119 ); 120 if ($vocabulary->tags) { 121 $instance['widget'] = array( 122 'type' => 'taxonomy_autocomplete', 123 'module' => 'taxonomy', 124 'settings' => array( 125 'size' => 60, 126 'autocomplete_path' => 'taxonomy/autocomplete', 127 ), 128 ); 129 } 130 else { 131 $instance['widget'] = array( 132 'type' => 'options_select', 133 'settings' => array(), 134 ); 135 } 136 field_create_instance($instance); 137 } 138 $parents = array(); 139 // Vocabularies without hierarchy get one term; single parent vocabularies 140 // get one parent and one child term. Multiple parent vocabularies get 141 // three terms: t0, t1, t2 where t0 is a parent of both t1 and t2. 142 for ($j = 0; $j < $vocabulary->hierarchy + 1; $j++) { 143 $term = new stdClass; 144 $term->vocabulary_machine_name = $vocabulary->machine_name; 145 // For multiple parent vocabularies, omit the t0-t1 relation, otherwise 146 // every parent in the vocabulary is a parent. 147 $term->parent = $vocabulary->hierarchy == 2 && i == 1 ? array() : $parents; 148 ++$term_id; 149 $term->name = "term $term_id of vocabulary $voc_id (j=$j)"; 150 $term->description = 'description of ' . $term->name; 151 $term->format = 'filtered_html'; 152 $term->weight = $i * 3 + $j; 153 taxonomy_term_save($term); 154 $terms[] = $term->tid; 155 $term_vocabs[$term->tid] = 'taxonomy_' . $vocabulary->machine_name; 156 $parents[] = $term->tid; 157 } 158 } 159 } 160 161 $node_id = 0; 162 $revision_id = 0; 163 module_load_include('inc', 'node', 'node.pages'); 164 for ($i = 0; $i < 24; $i++) { 165 $uid = intval($i / 8) + 3; 166 $user = user_load($uid); 167 $node = new stdClass(); 168 $node->uid = $uid; 169 $node->type = $i < 12 ? 'page' : 'story'; 170 $node->sticky = 0; 171 ++$node_id; 172 ++$revision_id; 173 $node->title = "node title $node_id rev $revision_id (i=$i)"; 174 $node->language = LANGUAGE_NONE; 175 $body_text = str_repeat("node body ($node->type) - $i", 100); 176 $node->body[$node->language][0]['value'] = $body_text; 177 $node->body[$node->language][0]['summary'] = text_summary($body_text); 178 $node->body[$node->language][0]['format'] = 'filtered_html'; 179 $node->status = intval($i / 4) % 2; 180 $node->revision = $i < 12; 181 $node->promote = $i % 2; 182 $node->created = $now + $i * 86400; 183 $node->log = "added $i node"; 184 // Make every term association different a little. For nodes with revisions, 185 // make the initial revision have a different set of terms than the 186 // newest revision. 187 $items = array(); 188 if (module_exists('taxonomy')) { 189 if ($node->revision) { 190 $node_terms = array($terms[$i], $terms[47-$i]); 191 } 192 else { 193 $node_terms = $terms; 194 unset($node_terms[$i], $node_terms[47 - $i]); 195 } 196 foreach ($node_terms as $tid) { 197 $field_name = $term_vocabs[$tid]; 198 $node->{$field_name}[LANGUAGE_NONE][] = array('tid' => $tid); 199 } 200 } 201 $node->path = array('alias' => "content/$node->created"); 202 node_save($node); 203 if ($node->revision) { 204 $user = user_load($uid + 3); 205 ++$revision_id; 206 $node->title .= " rev2 $revision_id"; 207 $body_text = str_repeat("node revision body ($node->type) - $i", 100); 208 $node->body[$node->language][0]['value'] = $body_text; 209 $node->body[$node->language][0]['summary'] = text_summary($body_text); 210 $node->body[$node->language][0]['format'] = 'filtered_html'; 211 $node->log = "added $i revision"; 212 $node_terms = $terms; 213 unset($node_terms[$i], $node_terms[47 - $i]); 214 foreach ($node_terms as $tid) { 215 $field_name = $term_vocabs[$tid]; 216 $node->{$field_name}[LANGUAGE_NONE][] = array('tid' => $tid); 217 } 218 node_save($node); 219 } 220 } 221 222 if (module_exists('poll')) { 223 // Create poll content. 224 for ($i = 0; $i < 12; $i++) { 225 $uid = intval($i / 4) + 3; 226 $user = user_load($uid); 227 $node = new stdClass(); 228 $node->uid = $uid; 229 $node->type = 'poll'; 230 $node->sticky = 0; 231 $node->title = "poll title $i"; 232 $node->language = LANGUAGE_NONE; 233 $node->status = intval($i / 2) % 2; 234 $node->revision = 1; 235 $node->promote = $i % 2; 236 $node->created = REQUEST_TIME + $i * 43200; 237 $node->runtime = 0; 238 $node->active = 1; 239 $node->log = "added $i poll"; 240 $node->path = array('alias' => "content/poll/$i"); 241 242 $nbchoices = ($i % 4) + 2; 243 for ($c = 0; $c < $nbchoices; $c++) { 244 $node->choice[] = array('chtext' => "Choice $c for poll $i", 'chvotes' => 0, 'weight' => 0); 245 } 246 node_save($node); 247 $path = array( 248 'alias' => "content/poll/$i/results", 249 'source' => "node/$node->nid/results", 250 ); 251 path_save($path); 252 253 // Add some votes. 254 $node = node_load($node->nid); 255 $choices = array_keys($node->choice); 256 $original_user = $GLOBALS['user']; 257 for ($v = 0; $v < ($i % 4); $v++) { 258 drupal_static_reset('ip_address'); 259 $_SERVER['REMOTE_ADDR'] = "127.0.$v.1"; 260 $GLOBALS['user'] = drupal_anonymous_user();// We should have already allowed anon to vote. 261 $c = $v % $nbchoices; 262 $form_state = array(); 263 $form_state['values']['choice'] = $choices[$c]; 264 $form_state['values']['op'] = t('Vote'); 265 drupal_form_submit('poll_view_voting', $form_state, $node); 266 } 267 } 268 } 269 270 // Test that upgrade works even on a bundle whose parent module was disabled. 271 // This is simulated by creating an existing content type and changing the 272 // bundle to another type through direct database update queries. 273 $node_type = 'broken'; 274 $uid = 6; 275 $user = user_load($uid); 276 $node = new stdClass(); 277 $node->uid = $uid; 278 $node->type = 'article'; 279 $body_text = str_repeat("node body ($node_type) - 37", 100); 280 $node->sticky = 0; 281 $node->title = "node title 24"; 282 $node->language = LANGUAGE_NONE; 283 $node->body[$node->language][0]['value'] = $body_text; 284 $node->body[$node->language][0]['summary'] = text_summary($body_text); 285 $node->body[$node->language][0]['format'] = 'filtered_html'; 286 $node->status = 1; 287 $node->revision = 0; 288 $node->promote = 0; 289 $node->created = 1263769200; 290 $node->log = "added a broken node"; 291 $node->path = array('alias' => "content/1263769200"); 292 node_save($node); 293 db_update('node') 294 ->fields(array( 295 'type' => $node_type, 296 )) 297 ->condition('nid', $node->nid) 298 ->execute(); 299 if (db_table_exists('field_data_body')) { 300 db_update('field_data_body') 301 ->fields(array( 302 'bundle' => $node_type, 303 )) 304 ->condition('entity_id', $node->nid) 305 ->condition('entity_type', 'node') 306 ->execute(); 307 db_update('field_revision_body') 308 ->fields(array( 309 'bundle' => $node_type, 310 )) 311 ->condition('entity_id', $node->nid) 312 ->condition('entity_type', 'node') 313 ->execute(); 314 } 315 db_update('field_config_instance') 316 ->fields(array( 317 'bundle' => $node_type, 318 )) 319 ->condition('bundle', 'article') 320 ->execute();
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
title