Content van een user toekennen aan een andere

In onze serie 'knoei met de databank tot je met de kop tegen de muur loopt', aflevering 2.

Deze keer iets dat je zeker via de officiële drupal API kunt oplossen, maar nu dus nog via quick-and-dirty SQL 'om het af te leren'.

Soms heb je mensen die verschillende accounts aanmaken (paswoord vergeten, account vergeten, ...).
Altijd lastig om op te ruimen want vaak hebben ze dan al gepost onder twee verschillende accounts.

Om niet telkens manuele SQL queries te doen gebruik ik de volgende PHP code.
De SQL queries zijn configureerbaar (en uitbreidbaar) via $queries, en om welke user id's het gaat staat in $user_id_map.

Alle content behorend aan een user wordt op deze manier toegekend aan de *andere* account.

Nadat dit script gerund heeft, check ik de oude user ID (heeft die nog ergens content staan?) en verwijder ik hem.

<h2>Update aanmeldingsdatum</h2> <p>(PHP code wordt uitgevoerd...)</p>    <?php

// key is old no-longer-used user ID, value is the ID of the user account that is still being used
$user_id_map = array(46 => 55, 63 => 8);
$queries = array('nodes'=>"UPDATE {node} set uid = %d WHERE uid = %d;", 'node revisions'=>"UPDATE {node_revisions} set uid = %d WHERE uid = %d;", 'comments'=>"UPDATE {comments} set uid = %d WHERE uid = %d;");

while (list (
$old_user_id, $new_user_id) = each ($user_id_map))
{
  echo
"Content of user #$old_user_id will belong to #$new_user_id<br />\n";

  while(list(
$content_type, $query) = each($queries))
  {
    
db_query($query, $new_user_id, $old_user_id);
     echo
'Number of ' . $content_type . ' moved: ' . db_affected_rows() . '<br />';
  }

 
reset($queries);
}

?>