XF 2.2 Копирование префиксов

Версия XenForo
2.2

susl16c

Проверенные
Сообщения
84
Реакции
12
Баллы
1,710
Подскажите есть такой код:
PHP:
public function actionCopy(ParameterBag $params)
{
    $prefix = $this->assertPrefixExists($params->prefix_id);

    $newPrefix = $this->em()->create('XFRM:ResourcePrefix');
    $newPrefixId = $newPrefix->prefix_id;

    // Копирование данных с существующего префикса в новый префикс
    $newPrefix->bulkSet([
        'prefix_group_id' => $prefix->prefix_group_id,
        'display_order' => $prefix->display_order,
        'css_class' => $prefix->css_class,
        'allowed_user_group_ids' => $prefix->allowed_user_group_ids,
        'title' => $this->copyPhrase('resource_prefix.' . $prefix->prefix_id, $newPrefix),
        'description' => $this->copyPhrase('resource_prefix_desc.' . $prefix->prefix_id, $newPrefix),
        'usage_help' => $this->copyPhrase('resource_prefix_help.' . $prefix->prefix_id, $newPrefix),
    ]);

    if ($newPrefix->save()) {
        // Копирование применимых категорий
        $categoryPrefixes = $this->finder('XFRM:CategoryPrefix')
            ->where('prefix_id', $prefix->prefix_id)
            ->fetch();

        foreach ($categoryPrefixes as $categoryPrefix) {
            $newCategoryPrefix = $this->em()->create('XFRM:CategoryPrefix');
            $newCategoryPrefix->bulkSet([
                'resource_category_id' => $categoryPrefix->resource_category_id,
                'prefix_id' => $newPrefix->prefix_id,
            ]);
            $newCategoryPrefix->save();
        }

        return $this->redirect($this->buildLink('resource-manager/prefixes') . $this->buildLinkHash($newPrefix->prefix_id));
    } else {
        return $this->error('Произошла ошибка при копировании префикса.');
    }
}

protected function copyPhrase($title)
{
    $oldPhrase = $this->finder('XF:Phrase')
        ->where('title', $title)
        ->fetchOne();

    if ($oldPhrase) {
        $languageId = $oldPhrase->language_id;

        // Формируем новый заголовок в соответствии с требованием
        $newTitle = $title;
//        $newTitle = $title . '_';
        $newPhraseText = $oldPhrase->phrase_text . ' (копия)';

        $newPhrase = \XF::em()->create('XF:Phrase');
        $newPhrase->language_id = $languageId;
        $newPhrase->title = $newTitle;
        $newPhrase->phrase_text = $newPhraseText;

        if ($newPhrase->save()) {
            return $newPhrase;
        }
    }

    return null;
}
При попытки его выполнить сообщение:
Название фразы должно быть уникальным в пределах языка. Это название уже используется.
т.е в таблицу xf_phrase копируются данные которые там уже есть а именно resource_prefix.17, resource_prefix_desc.17, resource_prefix_help.17 что соответствует название описание и справка остальные поля без проблем можно скопировать а ээти не получается туда не подтягивается id нового префикса за это отвечают эти проблемные поля
PHP:
        'title' => $this->copyPhrase('resource_prefix.' . $prefix->prefix_id, $newPrefix),
        'description' => $this->copyPhrase('resource_prefix_desc.' . $prefix->prefix_id, $newPrefix),
        'usage_help' => $this->copyPhrase('resource_prefix_help.' . $prefix->prefix_id, $newPrefix),
Как можно исправить код может подход чтобы он работал.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу