You are here

function nodequeue_update_7201 in Nodequeue 7.3

Same name and namespace in other branches
  1. 7.2 nodequeue.install \nodequeue_update_7201()

Provide machine names and auto-generation of machine names for existing queues.

File

./nodequeue.install, line 353
Install, update and uninstall functions for the nodequeue module.

Code

function nodequeue_update_7201() {

  // Check that the name field hasn't been created by a 6.x-2.x-dev version
  // prior to 6.x-2.10.
  if (!db_field_exists('nodequeue_queue', 'name')) {
    $name_field = array(
      'description' => 'The machine name for the queue.',
      'type' => 'varchar',
      'length' => 128,
    );
    db_add_field('nodequeue_queue', 'name', $name_field);
    db_add_unique_key('nodequeue_queue', 'name', array(
      'name',
    ));

    // Auto-generate machine names for existing queues and subqueues. Existing
    // queues will be given the first 128 characters of the title, with all
    // spaces replaced with underline characters, made lowercase and trimmed
    // of excess whitespace. Nodequeues with empty titles will receive a name
    // like 'queue_$qid'.
    $result = db_query("SELECT qid, title FROM {nodequeue_queue}");
    foreach ($result as $queue) {
      if (!empty($queue->title)) {

        // Basic formatting.
        $new_name = strtolower(trim(substr($queue->title, 0, 128)));

        // Regex to strip out all unwanted characters.
        $new_name = preg_replace('/[^a-z0-9_]+/', '_', $new_name);

        // Check if this queue name already exists.
        if (nodequeue_machine_name_exists($new_name)) {
          $tmp_name = $new_name;
          $i = 0;
          do {

            // Append an incrementing numeric suffix until we find a unique name.
            $unique_suffix = '_' . $i;
            $new_name = truncate_utf8($tmp_name, 128 - drupal_strlen($unique_suffix, TRUE)) . $unique_suffix;
            $i++;
          } while (nodequeue_machine_name_exists($new_name));
        }
      }
      else {

        // Default to a name like 'queue_$qid' for queues that don't have a title.
        $new_name = 'queue_' . $queue->qid;
      }
      db_update('nodequeue_queue')
        ->fields(array(
        'name' => $new_name,
      ))
        ->condition('qid', $queue->qid)
        ->execute();
    }
  }
}