Автоматический перенос элементов из одной информационной системы в другую

#
Автоматический перенос элементов из одной информационной системы в другую
Добрый день. Есть ли возможность автоматического переноса элементов из одной ИС в другую?
Пример: есть ИС1 и ИС2. Структура групп одинакова, т.е. в ИС1 и в ИС2 существует, например Группа1, Группа2 с идентичными именами.
Все что нужно сделать - перекинуть элементы из ИС2->Группа1 в ИС1->Группа1 и т.д.
#
Re: Автоматический перенос элементов из одной информационной системы в другую
1) сделайте бэкап БД
2) выполните SQL запрос (через phpMyAdmin или в Обслуживание->SQL-запросы):

UPDATE informationsystem_items SET
  informationsystem_id = NEW-infosys-id,
  informationsystem_group_id = NEW-group-id
WHERE
  informationsystem_group_id = OLD-group-id;


ARTatom
#
Re: Автоматический перенос элементов из одной информационной системы в другую
artatom,
а картинки кто будет переносить?
HostDev.pw - модули для HostCMS, Telegram: @hostdev
#
Re: Автоматический перенос элементов из одной информационной системы в другую
Цитата:

а картинки кто будет переносить?

Тут начальных условий не хватает:

  • пуста ли 2-я инфосистема ?
  • нужно переносить эл-ты из всех групп, или только из некоторых
  • есть ли вообще картинки у инфоэлементов?

Ответ на поставленный вопрос при нач.условиях (да, да, нет) тривиален.
Для нач. условий (да, да,, да) - перемещаем все подкаталоги из /upload/information_system_OLD/ в /upload/information_system_NEW/ - тоже тривиально.
Самое сложное для начальных условий (нет, *,  *) - в этом случае без кода не обойтись:

<?php
  $newInformationsystemId = 2;

  $groupsFromTo = array(
    array(1, 2, 3),
    // из групп с ID в верхней строке будем копировать ИЭ
    // в соответствующие группы в нижней строке
    array(10, 20, 30)
  );

  // Хук, подключаемый к событию Core_Entity.onBeforeCopy для замены в
  // клонированном элементе ID инфосистемы и ID группы на новые
  function hook($object, $args)
  {
    global $newInformationsystemId, $groupsFromTo;
    $oItemOld = $args[0];
    $oItemNew = $object;
    // Можем копировать ИЭ как в ту-же самую ИС, так и в другую
    if (!is_null($newInformationsystemId))
    {
      $oItemNew->informationsystem_id = $newInformationsystemId;
    }
    // Ищем по таблице ID новой группы
    $oldGroupId = $oItemOld->informationsystem_group_id;
    $newGroupId = $groupsFromTo[1][array_search($oldGroupId, $groupsFromTo[0])];
    $oItemNew->informationsystem_group_id = $newGroupId;
  }

  $oItems = Core_Entity::factory('Informationsystem_Item');
  $oItems->QueryBuilder()->where('informationsystem_group_id', 'IN', $groupsFromTo[0]);
  $aItems = $oItems->findAll();

  Core_Event::attach('Core_Entity.onBeforeCopy', 'hook');

  foreach ($aItems as $oItem)
  {
    // При копировании явно запрещаем изменение имени ИЭ
    $oItem->changeCopiedName(FALSE)->copy();
  }

  Core_Event::detach('Core_Entity.onBeforeCopy', 'hook');

Наскоро набросал, не проверял, возможно требуется отладка
ARTatom
Авторизация