Просмотр исходного кода

#5406 AI Agents revamp: don't allow to use same agent profile in several 'message' triggers

Aleksandr Trofimov 6 месяцев назад
Родитель
Сommit
c95ef468d3

+ 1 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -2256,6 +2256,7 @@
 
     <string name="_sys_agents_form_field_err_enter"><![CDATA[This field is essential. Please enter something here.]]></string>
     <string name="_sys_agents_form_field_err_select"><![CDATA[This field is essential. Please select something here.]]></string>
+    <string name="_sys_agents_form_field_err_profile_has_agent"><![CDATA[This profile is already used in another agent({0}) with the same 'message' trigger.]]></string>
     <string name="_sys_agents_json_field_err"><![CDATA[Invalid JSON format.]]></string>
     <string name="_sys_agents_automators_txt_active"><![CDATA[Active]]></string>
     <string name="_sys_agents_automators_txt_name"><![CDATA[Name]]></string>

+ 1 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -2232,6 +2232,7 @@
 
         <string name="_sys_agents_form_field_err_enter"><![CDATA[Это поле имеет важное значение. Пожалуйста, напишите что-нибудь здесь.]]></string>
         <string name="_sys_agents_form_field_err_select"><![CDATA[Это поле имеет важное значение. Пожалуйста, выберите что-нибудь здесь.]]></string>
+        <string name="_sys_agents_form_field_err_profile_has_agent"><![CDATA[Этот профиль уже используется в другом агенте({0}) с тем же триггером 'сообщение'.]]></string>
         <string name="_sys_agents_json_field_err"><![CDATA[Неверный формат JSON.]]></string>
         <string name="_sys_agents_automators_txt_active"><![CDATA[Активный]]></string>
         <string name="_sys_agents_automators_txt_name"><![CDATA[Название]]></string>

+ 27 - 0
studio/template/scripts/BxBaseStudioAgentsAgents.php

@@ -81,6 +81,14 @@ class BxBaseStudioAgentsAgents extends BxDolStudioAgentsAgents
         $oForm = new BxTemplFormView($aForm);
         $oForm->initChecker();
 
+        if ($oForm->isSubmitted() && $oForm->getCleanValue('trigger') == 'message') {
+            $aAgent = $this->_getAgentWithProfile($oForm->getCleanValue('profile_id'));
+            if ($aAgent) {
+                 $oForm->aInputs['profile_id']['error'] = _t('_sys_agents_form_field_err_profile_has_agent', $aAgent['name']);
+                 $oForm->setValid(false);
+            }
+        }
+
         if($oForm->isSubmittedAndValid()) {
             $aValsToAdd = [
                 'added' => time()
@@ -142,6 +150,14 @@ class BxBaseStudioAgentsAgents extends BxDolStudioAgentsAgents
         $oForm = new BxTemplFormView($aForm);
         $oForm->initChecker();
 
+        if ($oForm->isSubmitted() && $oForm->getCleanValue('trigger') == 'message') {
+            $aAgent = $this->_getAgentWithProfile($oForm->getCleanValue('profile_id'), $iId);
+            if ($aAgent) {
+                 $oForm->aInputs['profile_id']['error'] = _t('_sys_agents_form_field_err_profile_has_agent', $aAgent['name']);
+                 $oForm->setValid(false);
+            }
+        }
+
         if($oForm->isSubmittedAndValid()) {
             $aValsToAdd = [];
 
@@ -608,6 +624,17 @@ class BxBaseStudioAgentsAgents extends BxDolStudioAgentsAgents
             return '';
         return parent::_getActionDefault ($sType, $sKey, $a, $isSmall, $isDisabled, $aRow);
     }
+
+    protected function _getAgentWithProfile($iProfileId, $iExcludeAgentId = 0)
+    {
+        $aAgents = BxDolAi::getInstance()->getAgentsByProfileId($iProfileId);
+        foreach($aAgents as $aAgent) {
+            if($aAgent['id'] != $iExcludeAgentId)
+                return $aAgent;
+        }
+
+        return null;
+    }
 }
 
 /** @} */