Массовая привязка материалов группам в Organic Groups при помощи php-скрипта

Главные вкладки

Аватар пользователя keereel@drupal.org keereel@drupal.org 13 февраля 2014 в 20:32

Столкнулся с ситуацией: есть ноды, которые должны принадлежать группам в OG, но, в процессе переезда с 6 на 7 была утеряна информация о том, какая нода какой группе принадлежит. В базе нашёл таблицу d6_og_ancestry, оставшуюся после неудачного переезда с необходимой информацией. Дальше помог следующий скрипт:

<?php
  
// PHP Script to generate a set of SQL statements that assign a set of posts
  // to a group in Drupal 7.

  // Node ID of the group to assign the nodes below to.
  

$group_id "33";
  echo 
'Group N '.$group_id;

  

// Node IDs of the nodes to assign to group with node ID $group_id.
  // (One mode to get the right set relatively fast is by copying the "System" column
  // from the "URL aliases" Drupal view at http://example.com/admin/config/search/path .)
  
$node_ids = array(2178221222312288233823502355); //

$link mysql_connect('localhost''sql-user''sql-user-pass');
if (!
$link) {
    die(
'Error: ' mysql_error());
}

// выбираем базу данных
$db_selected mysql_select_db('base-name'$link);
if (!
$db_selected) {
    die (
'Cant select base: ' mysql_error());
}
  
  foreach (
$node_ids as $node_id) {
    
$query sprintf("INSERT
      INTO og_membership (type, etid, entity_type, gid, group_type, state, created, field_name, language)
      VALUES ('og_membership_type_default', 
$node_id, 'node', $group_id, 'node', 1, 1359419168, 'og_group_ref', 'ru');\n\n"
    
);
$result mysql_query($query);
if (!
$result) {
    
$message  'Wrong query: ' mysql_error() . "\n";
    
$message .= 'Full query: ' $query;
    die(
$message);
}
  }
  
mysql_close($link);

?>

Насколько понимаю, для пользователей подойдёт этот же скрипт, только в $node_ids надо занести uid пользователей.

Комментарии

Аватар пользователя keereel@drupal.org keereel@drupal.org 13 февраля 2014 в 21:47

Для пользователей:

<?php
  
// PHP Script to generate a set of SQL statements that assign a set of posts
  // to a group in Drupal 7.

  // Node ID of the group to assign the nodes below to.
  

$group_id "1";
  echo 
"Group N " $group_id "\n";

  

// Node IDs of the nodes to assign to group with node ID $group_id.
  // (One mode to get the right set relatively fast is by copying the "System" column
  // from the "URL aliases" Drupal view at http://example.com/admin/config/search/path .)
  
$node_ids = array(1487126105110541056); //

$link mysql_connect('localhost''sql-user''sql-user-pass');
if (!
$link) {
    die(
'Error: ' mysql_error());
}
echo 
'Connected to SQL...' "\n";

// выбираем текущей базы данных
$db_selected mysql_select_db('sql-base-name'$link);
if (!
$db_selected) {
    die (
'Cant select base: ' mysql_error());
}
  
  foreach (
$node_ids as $node_id) {
    
$query sprintf("INSERT
      INTO og_membership (type, etid, entity_type, gid, group_type, state, created, field_name, language)
      VALUES ('og_membership_type_default', 
$node_id, 'user', $group_id, 'node', 1, 1359419168, 'og_user_node', 'ru');\n\n"
    
);
    
$result mysql_query($query);
    if (!
$result) {
    
$message  'Wrong query: ' mysql_error() . "\n";
    
$message .= 'The query: ' $query;
    die(
$message);
}
  }
  
mysql_close($link);

?>