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

Ticket #4770 - Usage of assistant in Studio Help.

AntonLV 2 лет назад
Родитель
Сommit
0abcdf57f2

+ 42 - 0
inc/classes/BxDolAIAssistant.php

@@ -95,6 +95,48 @@ class BxDolAIAssistant extends BxDol
             'onclick' => "javascrip:bx_agents_action(this, 'asst', 'ask', {id: " . $this->_iId . ", text: '" . $sText . "'})"
         ]);
     }
+    
+    public function getAskChat($sName = '', $sText = '', $oTemplate = false)
+    {
+        if(!$oTemplate)
+            $oTemplate = BxDolTemplate::getInstance();
+
+        $bName = !empty($sName);
+        $bText = !empty($sText);
+
+        $iChatId = 0;
+        if($bName) {
+            $aChat = $this->_oDb->getChatsBy(['sample' => 'name', 'name' => $sName]);
+            if(!empty($aChat) && is_array($aChat))
+                $iChatId = (int)$aChat['id'];
+        }
+
+        if(empty($iChatId)) {
+            if(!$bName)
+                $sName = self::getChatName($bText ? strmaxtextlen($sText, 8) : genRndPwd());
+
+            $iChatId = $this->_oDb->insertChat([
+                'name' => $sName,
+                'type' => BX_DOL_AI_ASST_TYPE_TRANSIENT,
+                'assistant_id' => $this->_iId, 
+                'added' => time(),
+            ]);
+        }
+
+        $sResult = '';
+        if($iChatId !== false && ($oCmts = BxDolAI::getInstance()->getAssistantChatCmtsObject($iChatId, $oTemplate)) !== false) {
+            if(!empty($sText))
+                $oCmts->add([
+                    'cmt_author_id' => bx_get_logged_profile_id(),
+                    'cmt_parent_id' => 0,
+                    'cmt_text' => $sText
+                ]);
+
+            $sResult = $oCmts->getCommentsBlock();
+        }
+
+        return $sResult;
+    }
 
     public function deleteChat($mixedChat)
     {

+ 2 - 1
install/sql/system.sql

@@ -842,7 +842,8 @@ SET @iCategoryId = LAST_INSERT_ID();
 
 INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `extra`, `check`, `check_error`, `order`) VALUES
 (@iCategoryId, 'sys_agents_asst_chats_trans_del', '_adm_stg_cpt_option_sys_agents_asst_chats_trans_del', 'on', 'checkbox', '', '', '', 1),
-(@iCategoryId, 'sys_agents_live_search_assistant', '_adm_stg_cpt_option_sys_agents_lsa', '', 'select', 'a:3:{s:6:"module";s:6:"system";s:6:"method";s:33:"get_options_live_search_assistant";s:5:"class";s:13:"TemplServices";}', '', '', 10);
+(@iCategoryId, 'sys_agents_studio_assistant', '_adm_stg_cpt_option_sys_agents_sa', '', 'select', 'a:3:{s:6:"module";s:6:"system";s:6:"method";s:28:"get_options_studio_assistant";s:5:"class";s:13:"TemplServices";}', '', '', 10),
+(@iCategoryId, 'sys_agents_live_search_assistant', '_adm_stg_cpt_option_sys_agents_lsa', '', 'select', 'a:3:{s:6:"module";s:6:"system";s:6:"method";s:33:"get_options_live_search_assistant";s:5:"class";s:13:"TemplServices";}', '', '', 15);
 
 --
 -- Table structure for table `sys_options_mixes`

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

@@ -1771,6 +1771,7 @@
     <string name="_adm_stg_cpt_option_sys_agents_model"><![CDATA[Default model]]></string>
     <string name="_adm_stg_cpt_option_sys_agents_profile"><![CDATA[Profile]]></string>
     <string name="_adm_stg_cpt_option_sys_agents_asst_chats_trans_del"><![CDATA[Auto delete transient chats everyday]]></string>
+    <string name="_adm_stg_cpt_option_sys_agents_sa"><![CDATA[Assistant for Studio]]></string>
     <string name="_adm_stg_cpt_option_sys_agents_lsa"><![CDATA[Assistant for Live search]]></string>
     <string name="_adm_stg_cpt_option_sys_viewport_meta_tag"><![CDATA[Viewport meta tag]]></string>
 
@@ -1893,11 +1894,13 @@
 	<string name="_adm_strg_txt_height"><![CDATA[Height]]></string>
 	<string name="_adm_strg_err_height"><![CDATA[Height is essential. Please, fill in this field.]]></string>
         <string name="_adm_tmi_cpt_account"><![CDATA[Menu]]></string>
+        <string name="_adm_tmi_cpt_assistant"><![CDATA[Assistant]]></string>
 	<string name="_adm_tmi_cpt_site"><![CDATA[Go To Site]]></string>
         <string name="_adm_tmi_cpt_search"><![CDATA[Search...]]></string>
 	<string name="_adm_tmi_cpt_tour"><![CDATA[Tour]]></string>
 	<string name="_adm_tmi_cpt_launcher"><![CDATA[Launcher]]></string>
         <string name="_adm_txt_active_api"><![CDATA[Available in App]]></string>
+        <string name="_adm_txt_assistant_popup_title"><![CDATA[How can I help?]]></string>
 	<string name="_adm_txt_confirm_cancel"><![CDATA[Cancel]]></string>
 	<string name="_adm_txt_confirm_ok"><![CDATA[OK]]></string>
 	<string name="_adm_txt_forgot_password"><![CDATA[Forgot password?]]></string>

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

@@ -1747,6 +1747,7 @@
     <string name="_adm_stg_cpt_option_sys_agents_model"><![CDATA[Модель по умолчанию]]></string>
     <string name="_adm_stg_cpt_option_sys_agents_profile"><![CDATA[Профиль]]></string>
     <string name="_adm_stg_cpt_option_sys_agents_asst_chats_trans_del"><![CDATA[Автоматическое удаление временных чатов каждый день]]></string>
+    <string name="_adm_stg_cpt_option_sys_agents_sa"><![CDATA[Помощник по студии]]></string>
     <string name="_adm_stg_cpt_option_sys_agents_lsa"><![CDATA[Помощник для интерактивного поиска]]></string>
     <string name="_adm_stg_cpt_option_sys_viewport_meta_tag"><![CDATA[Метатег области просмотра]]></string>
 
@@ -1869,11 +1870,13 @@
 	<string name="_adm_strg_txt_height"><![CDATA[Высота]]></string>
 	<string name="_adm_strg_err_height"><![CDATA[Нужно указать высоту. Пожалуйста, заполните это поле.]]></string>
         <string name="_adm_tmi_cpt_account"><![CDATA[Меню]]></string>
+        <string name="_adm_tmi_cpt_assistant"><![CDATA[Ассистент]]></string>
 	<string name="_adm_tmi_cpt_site"><![CDATA[Перейти на сайт]]></string>
         <string name="_adm_tmi_cpt_search"><![CDATA[Искать...]]></string>
 	<string name="_adm_tmi_cpt_tour"><![CDATA[Инструкции]]></string>
 	<string name="_adm_tmi_cpt_launcher"><![CDATA[Загрузчик]]></string>
         <string name="_adm_txt_active_api"><![CDATA[Доступно в приложении]]></string>
+        <string name="_adm_txt_assistant_popup_title"><![CDATA[Как я могу помочь?]]></string>
 	<string name="_adm_txt_confirm_cancel"><![CDATA[Отменить]]></string>
 	<string name="_adm_txt_confirm_ok"><![CDATA[OK]]></string>
 	<string name="_adm_txt_forgot_password"><![CDATA[Забыли пароль?]]></string>

+ 1 - 0
plugins_public/tailwind/css/tailwind.css

@@ -1245,6 +1245,7 @@
     }
 
     .bx-std #bx-std-pcap-menu-popup-help .bx-popup,
+    .bx-std #bx-std-pcap-menu-popup-assistant .bx-popup,
     .bx-std #bx-std-pcap-menu-popup-actions .bx-popup,
     .bx-std #bx-std-pcap-menu-popup-account .bx-popup,
     .bx-std .bx-std-mod-popup-settings-wrapper.bx-popup-applied:not(.bx-popup-chain) .bx-popup {

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
plugins_public/tailwind/css/tailwind.min.css


+ 8 - 0
studio/classes/BxDolStudioPage.php

@@ -27,6 +27,9 @@ class BxDolStudioPage extends BxDol
     protected $iPageRssHelpLength;
     protected $sPageRssHelpId;
 
+    protected $iPageAssistantId;
+    protected $iPageAssistantChatName;
+
     protected $_sTypesPreList;
 
     protected $aMarkers;
@@ -35,6 +38,7 @@ class BxDolStudioPage extends BxDol
     
     protected $_bShowHeaderRightSearch;
     protected $_bShowHeaderRightSite;
+    protected $_bShowHeaderRightAssistant;
 
     function __construct($mixedPageName)
     {
@@ -50,6 +54,9 @@ class BxDolStudioPage extends BxDol
         $this->sPageRssHelpUrl = 'http://feed.una.io/?section={page_name}';
         $this->iPageRssHelpLength = 5;
 
+        $this->iPageAssistantId = (int)getParam('sys_agents_studio_assistant');
+        $this->iPageAssistantChatName = 'sys_studio_page_assistant';
+
         $this->_sTypesPreList = 'sys_studio_widget_types';
 
         $this->aMarkers = array(
@@ -61,6 +68,7 @@ class BxDolStudioPage extends BxDol
 
         $this->_bShowHeaderRightSearch = getParam('sys_std_show_header_right_search') == 'on';
         $this->_bShowHeaderRightSite = getParam('sys_std_show_header_right_site') == 'on';
+        $this->_bShowHeaderRightAssistant = $this->iPageAssistantId != 0;
 
         if(is_string($mixedPageName)) {
             $this->aPage = $this->oDb->getPages(array('type' => 'by_page_name_full', 'value' => $mixedPageName));

+ 3 - 0
studio/js/page.js

@@ -53,6 +53,9 @@ BxDolStudioPage.prototype.togglePopup = function(sName, oLink) {
     };
 
     switch(sName) {
+        case 'assistant':
+            break;
+
         case 'help':
             oPopupOptions = $.extend({}, oPopupOptions, {
                 onBeforeShow: function() {

+ 21 - 0
studio/template/css/menu_top.css

@@ -313,18 +313,22 @@ div.bx-std-menu-top-right li.bx-menu-tab-active i.sys-icon {
 /*--- Account, Actions, Help and Settings popups ---*/
 body > .bx-popup-wrapper.bx-std-mod-popup-settings-wrapper,
 #bx-std-pcap-menu-popup-help,
+#bx-std-pcap-menu-popup-assistant,
 #bx-std-pcap-menu-popup-actions,
 #bx-std-pcap-menu-popup-account {
     overflow: visible;
 }
 .bx-std-mod-popup-settings-wrapper .bx-popup-gap,
 #bx-std-pcap-menu-popup-help .bx-popup-gap,
+#bx-std-pcap-menu-popup-assistant .bx-popup-gap,
 #bx-std-pcap-menu-popup-actions .bx-popup-gap,
 #bx-std-pcap-menu-popup-account .bx-popup-gap {
     margin-left: 0;
     margin-right: 0;
 }
 #bx-std-pcap-menu-popup-help .bx-popup,
+#bx-std-pcap-menu-popup-assistant .bx-popup,
+#bx-std-pcap-menu-popup-assistant .bx-popup .bx-popup-header-color-bg,
 #bx-std-pcap-menu-popup-actions .bx-popup,
 #bx-std-pcap-menu-popup-account .bx-popup,
 .bx-std-mod-popup-settings-wrapper.bx-popup-applied:not(.bx-popup-chain) .bx-popup {
@@ -364,6 +368,10 @@ body > .bx-popup-wrapper.bx-std-mod-popup-settings-wrapper,
 #bx-std-pcap-menu-popup-help .bx-popup,
 #bx-std-pcap-menu-popup-help .bx-popup a,
 #bx-std-pcap-menu-popup-help .bx-popup .sys-icon,
+#bx-std-pcap-menu-popup-assistant .bx-popup,
+#bx-std-pcap-menu-popup-assistant .bx-popup .bx-popup-header h2,
+#bx-std-pcap-menu-popup-assistant .bx-popup a,
+#bx-std-pcap-menu-popup-assistant .bx-popup .sys-icon,
 #bx-std-pcap-menu-popup-actions .bx-popup,
 #bx-std-pcap-menu-popup-account .bx-popup li a,
 #bx-std-pcap-menu-popup-account .bx-popup li .sys-icon {
@@ -373,6 +381,7 @@ body > .bx-popup-wrapper.bx-std-mod-popup-settings-wrapper,
     opacity: 0.7;
 }
 #bx-std-pcap-menu-popup-help .bx-popup a:hover,
+#bx-std-pcap-menu-popup-assistant .bx-popup a:hover,
 #bx-std-pcap-menu-popup-account .bx-popup li:hover a,
 #bx-std-pcap-menu-popup-account .bx-popup li:hover a .sys-icon {
     color: rgba(255, 255, 255, 0.85);
@@ -389,4 +398,16 @@ body > .bx-popup-wrapper.bx-std-mod-popup-settings-wrapper,
 .bx-std-mod-popup-settings-wrapper .bx-form-input-select {
     border-color: rgb(55, 65, 81, 1.0);
     background-color: rgb(17, 24, 39, 1.0);
+}
+
+/*--- Assistant ---*/
+#bx-std-pcap-menu-popup-assistant .bx-popup .bx-popup-header {
+    border-bottom: 1px solid rgb(75 85 99);
+}
+.bx-std-pcap-assistant .cmt-reply.cmt-reply-bottom {
+    margin-bottom: 0;
+}
+.bx-std-pcap-assistant .bx-form-value .bx-form-input-textarea {
+    height: 5.0rem;
+    background-color: rgb(31 41 55);
 }

+ 3 - 0
studio/template/images/icons/tmi-assistant.svg

@@ -0,0 +1,3 @@
+<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M23.9748 12.5259L17.7403 10.2597L15.4741 4.02521C15.3624 3.7243 15.1613 3.46477 14.8978 3.2815C14.6343 3.09823 14.321 3 14 3C13.679 3 13.3657 3.09823 13.1022 3.2815C12.8387 3.46477 12.6376 3.7243 12.5259 4.02521L10.2597 10.2597L4.02521 12.5259C3.7243 12.6376 3.46477 12.8387 3.2815 13.1022C3.09823 13.3657 3 13.679 3 14C3 14.321 3.09823 14.6343 3.2815 14.8978C3.46477 15.1613 3.7243 15.3624 4.02521 15.4741L10.2597 17.7413L12.5259 23.9748C12.6376 24.2757 12.8387 24.5352 13.1022 24.7185C13.3657 24.9018 13.679 25 14 25C14.321 25 14.6343 24.9018 14.8978 24.7185C15.1613 24.5352 15.3624 24.2757 15.4741 23.9748L17.7413 17.7403L23.9748 15.4741C24.2757 15.3624 24.5352 15.1613 24.7185 14.8978C24.9018 14.6343 25 14.321 25 14C25 13.679 24.9018 13.3657 24.7185 13.1022C24.5352 12.8387 24.2757 12.6376 23.9748 12.5259ZM16.8578 16.3881C16.75 16.4273 16.652 16.4897 16.5709 16.5709C16.4897 16.652 16.4273 16.75 16.3881 16.8578L14 23.4245L11.6119 16.8578C11.5727 16.75 11.5103 16.652 11.4291 16.5709C11.348 16.4897 11.25 16.4273 11.1422 16.3881L4.57555 14L11.1422 11.6119C11.25 11.5727 11.348 11.5103 11.4291 11.4291C11.5103 11.348 11.5727 11.25 11.6119 11.1422L14 4.57555L16.3881 11.1422C16.4273 11.25 16.4897 11.348 16.5709 11.4291C16.652 11.5103 16.75 11.5727 16.8578 11.6119L23.4245 14L16.8578 16.3881Z" fill="#D1D5DB"/>
+</svg>

+ 3 - 0
studio/template/page_caption_assistant.html

@@ -0,0 +1,3 @@
+<div class="bx-std-pcap-assistant">
+    <div class="bx-std-pcap-assistant-cnt">__content__</div>
+</div>

+ 26 - 0
studio/template/scripts/BxBaseStudioPage.php

@@ -155,6 +155,12 @@ class BxBaseStudioPage extends BxDolStudioPage
 
     public function getPageCaption()
     {
+        if(($sAssistant = $this->getPageCaptionAssistant()) != '') {
+            $sAssistant = BxTemplStudioFunctions::getInstance()->popupBox('bx-std-pcap-menu-popup-assistant', _t('_adm_txt_assistant_popup_title'), $sAssistant, true);
+
+            BxDolStudioTemplate::getInstance()->addInjection('injection_header', 'text', $sAssistant);
+        }
+
         return '';
     }
 
@@ -197,6 +203,26 @@ class BxBaseStudioPage extends BxDolStudioPage
             'content' => $sContent
         ));
     }
+    
+    protected function getPageCaptionAssistant()
+    {
+        if(!$this->_bShowHeaderRightAssistant)
+            return '';
+
+        $oAssistant = BxDolAIAssistant::getObjectInstance($this->iPageAssistantId);
+        if(!$oAssistant)
+            return '';
+
+        $oTemplate = BxDolStudioTemplate::getInstance();
+
+        $sContent = $oAssistant->getAskChat($this->iPageAssistantChatName, '', $oTemplate);
+        if(!$sContent)
+            return '';
+
+        return $oTemplate->parseHtmlByName('page_caption_assistant.html', [
+            'content' => $sContent
+        ]);
+    }
 
     protected function getJsResult($sMessage, $bTranslate = true, $bRedirect = false, $sRedirect = '', $sOnResult = '')
     {

+ 18 - 7
studio/template/scripts/BxBaseStudioWidget.php

@@ -38,6 +38,8 @@ class BxBaseStudioWidget extends BxDolStudioWidget
         if(empty($this->aPage) || !is_array($this->aPage))
             return '';
 
+        $sResult = parent::getPageCaption();
+
         $this->updateHistory();
 
         $oTemplate = BxDolStudioTemplate::getInstance();
@@ -59,20 +61,29 @@ class BxBaseStudioWidget extends BxDolStudioWidget
         $aItemsRight = [];
 
         if($bHelp)
-            $aItemsRight['help'] = array(
+            $aItemsRight['help'] = [
                 'name' => 'help',
                 'icon' => 'tmi-help.svg',
                 'onclick' => BX_DOL_STUDIO_PAGE_JS_OBJECT . ".togglePopup('help', this)",
                 'title' => '_adm_txt_show_help'
-            );
+            ];
+        
+        if($this->_bShowHeaderRightAssistant)
+            $aItemsRight['assistant'] = [
+                'name' => 'assistant',
+                'icon' => 'tmi-assistant.svg',
+                'link' => 'javascript:void(0);',
+                'onclick' => BX_DOL_STUDIO_PAGE_JS_OBJECT . ".togglePopup('assistant', this)",
+                'title' => '_adm_tmi_cpt_assistant'
+            ];
 
         if($bActions)
-            $aItemsRight['actions'] = array(
+            $aItemsRight['actions'] = [
                 'name' => 'actions',
                 'icon' => 'tmi-actions.svg',
                 'onclick' => BX_DOL_STUDIO_PAGE_JS_OBJECT . ".togglePopup('actions', this)",
                 'title' => '_adm_txt_show_actions'
-            );
+            ];
 
         if($this->_bShowHeaderRightSite)
             $aItemsRight['site'] = [
@@ -82,13 +93,13 @@ class BxBaseStudioWidget extends BxDolStudioWidget
                 'title' => '_adm_tmi_cpt_site'
             ];
 
-        $aItemsRight['account'] = array(
+        $aItemsRight['account'] = [
             'name' => 'account',
             'icon' => 'tmi-account.svg',
             'link' => 'javascript:void(0);',
             'onclick' => 'bx_menu_popup_inline(\'#bx-std-pcap-menu-popup-account\', this);',
             'title' => '_adm_tmi_cpt_account'
-        );
+        ];
 
         $oTopMenu = BxTemplStudioMenuTop::getInstance();
         $oTopMenu->setPageName($this->aPage['name']);
@@ -99,7 +110,7 @@ class BxBaseStudioWidget extends BxDolStudioWidget
             'menu_items' => $aItemsRight
         ));
 
-        return '';
+        return $sResult;
     }
 
     public function getPageCode($sPage = '', $bWrap = true)

+ 13 - 1
studio/template/scripts/BxBaseStudioWidgets.php

@@ -69,6 +69,8 @@ class BxBaseStudioWidgets extends BxDolStudioWidgets
         if(empty($this->aPage) || !is_array($this->aPage))
             return '';
 
+        $sResult = parent::getPageCaption();
+
         //--- Menu Right ---//
         $aItemsRight = array(
             'template' => 'menu_top_toolbar.html',
@@ -80,6 +82,13 @@ class BxBaseStudioWidgets extends BxDolStudioWidgets
                     'onclick' => 'glTour.start()',
                     'title' => '_adm_tmi_cpt_tour'
                 ),
+                'assistant' => array(
+                    'name' => 'assistant',
+                    'icon' => 'tmi-assistant.svg',
+                    'link' => 'javascript:void(0);',
+                    'onclick' => BX_DOL_STUDIO_PAGE_JS_OBJECT . ".togglePopup('assistant', this)",
+                    'title' => '_adm_tmi_cpt_assistant'
+                ),
                 'site' => array(
                     'name' => 'site',
                     'icon' => 'tmi-site.svg',
@@ -98,6 +107,9 @@ class BxBaseStudioWidgets extends BxDolStudioWidgets
 
         if(!$this->_bShowHeaderRightSite)
             unset($aItemsRight['menu_items']['site']);
+        
+        if(!$this->_bShowHeaderRightAssistant)
+            unset($aItemsRight['menu_items']['assistant']);
 
         if($this->_sType != BX_DOL_STUDIO_WTYPE_DEFAULT || getParam('site_tour_studio') != 'on')
             unset($aItemsRight['menu_items']['tour']);
@@ -107,7 +119,7 @@ class BxBaseStudioWidgets extends BxDolStudioWidgets
         $oTopMenu->setContent(BX_DOL_STUDIO_MT_LEFT, $this->getPageBreadcrumb());
         $oTopMenu->setContent(BX_DOL_STUDIO_MT_RIGHT, $aItemsRight);
 
-        return '';
+        return $sResult;
     }
 
     protected function wrapWidgets($sName, $sContent, $bHidden = false)

+ 1 - 3
template/css/default.less

@@ -412,10 +412,8 @@
 
 .bx-def-font-inputs {
     font-family:@bx-font-family;
-    font-weight:400; /* 27.13.13: prev val 300 */
+    font-weight:400;
     .font-size(@bx-font-size-default);
-    /* TODO: Remove 'color' instruction later. It affects the font color in Buttons which is usually differs from text color in inputs. */
-    /*color:@bx-font-color-default; */ 
 }
 
 .bx-def-font-color,

+ 5 - 0
template/scripts/BxBaseServices.php

@@ -1321,6 +1321,11 @@ class BxBaseServices extends BxDol implements iBxDolProfileService
         return $aResult;
     }
 
+    public function serviceGetOptionsStudioAssistant()
+    {
+        return ['' => _t('_Select_one')] + BxDolAI::getInstance()->getAssistants();
+    }
+
     public function serviceGetOptionsLiveSearchAssistant()
     {
         return ['' => _t('_Select_one')] + BxDolAI::getInstance()->getAssistants();

Некоторые файлы не были показаны из-за большого количества измененных файлов