1. В админ-панели:
Создай форум для кейсов:
Админка → Forums → Create new forum
Название: "Кейсы формы"
Type: Forum
Настрой права:
Только админы могут создавать темы
Пользователи видят только свои кейсы
2. Модификация формы (через Template modifications)
Добавь в шаблон формы (например, thread_create):
<xf:if is="$formData.case_form">
<xf:checkboxrow name="create_case" label="Создать кейс из этой формы" />
</xf:if>
3. PHP код для автоматического создания кейса
Создай файл src/addons/YourAddon/Listener.php:
<?php
namespace YourAddon\Listener;
use XF\Mvc\Entity\Entity;
class FormListener
{
public static function threadEntityPostSave(\XF\Mvc\Entity\Entity $entity)
{
// Проверяем, что это новая тема и отмечена как кейс
if ($entity->isInsert() && \XF::visitor()->is_admin)
{
$input = \XF::app()->request()->filter('create_case', 'bool');
if ($input)
{
self::createCaseFromThread($entity);
}
}
}
protected static function createCaseFromThread(\XF\Entity\Thread $thread)
{
$forum = \XF::finder('XF:Forum')->where('node_id', 123)->fetchOne(); // ID форума кейсов
$creator = \XF::service('XF:Thread\Creator', $forum);
$creator->setContent(
"Кейс формы #" . time(),
"Создан из формы:\n\n" .
"Автор: " . $thread->User->username . "\n" .
"Тема: " . $thread->title . "\n" .
"Ссылка: " . \XF::app()->router('public')->buildLink('canonical:threads', $thread) . "\n\n" .
"---\n" . $thread->FirstPost->message
);
$creator->setIsAutomated();
$creator->save();
// Добавляем связь между формой и кейсом
$thread->fastUpdate('case_id', $creator->getThread()->thread_id);
}
}
4. Расширение через аддон
Создай полноценный аддон:
addon.json:
{
"title": "Case Manager",
"version_string": "1.0.0",
"dev": "Ваше имя"
}
_output/class_extensions/XF/Entity/Thread.php:
<?php
namespace YourAddon\XF\Entity;
class Thread extends XFCP_Thread
{
public function canCreateCase()
{
return \XF::visitor()->is_admin;
}
}
если помог, ставь лайк и галочку решения)