2024-01-16 15:52:52 +01:00
< ? php
2024-07-08 22:10:25 +02:00
/* Copyright ( C ) 2004 - 2017 Laurent Destailleur < eldy @ users . sourceforge . net >
* Copyright ( C ) 2022 Alice Adminson < aadminson @ example . com >
2024-03-12 16:16:29 +01:00
* Copyright ( C ) 2024 MDW < mdeweerd @ users . noreply . github . com >
2024-04-06 17:38:39 +02:00
* Copyright ( C ) 2024 Frédéric France < frederic . france @ free . fr >
2024-07-08 22:10:25 +02:00
* Coryright ( C ) 2024 Alexandre Spangaro < alexandre @ inovea - conseil . com >
2024-01-16 15:52:52 +01:00
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < https :// www . gnu . org / licenses />.
*/
/**
2024-04-06 17:38:39 +02:00
* \file htdocs / ai / admin / setup . php
2024-01-16 15:52:52 +01:00
* \ingroup ai
* \brief Ai setup page .
*/
// Load Dolibarr environment
require '../../main.inc.php' ;
require_once DOL_DOCUMENT_ROOT . " /core/lib/admin.lib.php " ;
2025-02-16 19:56:03 +01:00
require_once DOL_DOCUMENT_ROOT . " /core/class/doleditor.class.php " ;
require_once DOL_DOCUMENT_ROOT . " /ai/lib/ai.lib.php " ;
2024-01-16 15:52:52 +01:00
2024-11-04 23:53:20 +01:00
/**
* @ var Conf $conf
* @ var DoliDB $db
* @ var HookManager $hookmanager
* @ var Translate $langs
* @ var User $user
*/
2025-02-16 19:56:03 +01:00
$langs -> loadLangs ( array ( " admin " , " website " , " other " ));
2024-02-14 01:42:38 +01:00
2024-01-16 15:52:52 +01:00
// Parameters
$action = GETPOST ( 'action' , 'aZ09' );
$backtopage = GETPOST ( 'backtopage' , 'alpha' );
$modulepart = GETPOST ( 'modulepart' , 'aZ09' ); // Used by actions_setmoduleoptions.inc.php
2024-02-10 10:38:29 +01:00
if ( empty ( $action )) {
$action = 'edit' ;
}
2025-02-16 19:56:03 +01:00
$content = GETPOST ( 'content' );
2024-01-16 15:52:52 +01:00
$error = 0 ;
$setupnotempty = 0 ;
2024-01-27 02:22:25 +01:00
2024-01-16 15:52:52 +01:00
// Set this to 1 to use the factory to manage constants. Warning, the generated module will be compatible with version v15+ only
$useFormSetup = 1 ;
if ( ! class_exists ( 'FormSetup' )) {
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formsetup.class.php' ;
}
$formSetup = new FormSetup ( $db );
2024-03-06 00:46:04 +01:00
// List all available IA
2025-02-19 14:44:54 +01:00
$arrayofia = getListOfAIServices ();
// List all available features
$arrayofaifeatures = getListOfAIFeatures ();
2024-01-16 15:52:52 +01:00
2024-04-24 13:07:47 +02:00
$item = $formSetup -> newItem ( 'AI_API_SERVICE' ); // Name of constant must end with _KEY so it is encrypted when saved into database.
$item -> setAsSelect ( $arrayofia );
2024-06-05 23:49:09 +02:00
$item -> cssClass = 'minwidth150' ;
2024-04-24 13:07:47 +02:00
2024-04-24 11:26:08 +02:00
foreach ( $arrayofia as $ia => $ialabel ) {
2024-01-27 02:22:25 +01:00
// Setup conf AI_PUBLIC_INTERFACE_TOPIC
2024-03-06 00:46:04 +01:00
/* $item = $formSetup -> newItem ( 'AI_API_' . strtoupper ( $ia ) . '_ENDPOINT' ); // Name of constant must end with _KEY so it is encrypted when saved into database.
2024-01-27 02:22:25 +01:00
$item -> defaultFieldValue = '' ;
2024-03-06 00:46:04 +01:00
$item -> cssClass = 'minwidth500' ; */
2024-01-16 15:52:52 +01:00
2024-06-06 00:32:43 +02:00
$item = $formSetup -> newItem ( 'AI_API_' . strtoupper ( $ia ) . '_KEY' ) -> setAsSecureKey (); // Name of constant must end with _KEY so it is encrypted when saved into database.
2024-04-24 11:26:08 +02:00
$item -> nameText = $langs -> trans ( " AI_API_KEY " ) . ' (' . $ialabel . ')' ;
2024-03-06 00:46:04 +01:00
$item -> defaultFieldValue = '' ;
2024-06-06 00:32:43 +02:00
$item -> fieldParams [ 'hideGenerateButton' ] = 1 ;
2025-02-16 22:47:22 +01:00
$item -> fieldParams [ 'trClass' ] = 'iaservice ' . $ia ;
$item -> cssClass = 'minwidth500 text-security input' . $ia ;
2024-07-16 18:08:26 +02:00
$item = $formSetup -> newItem ( 'AI_API_' . strtoupper ( $ia ) . '_URL' ); // Name of constant must end with _KEY so it is encrypted when saved into database.
$item -> nameText = $langs -> trans ( " AI_API_URL " ) . ' (' . $ialabel . ')' ;
$item -> defaultFieldValue = '' ;
2025-02-16 22:47:22 +01:00
$item -> fieldParams [ 'trClass' ] = 'iaservice ' . $ia ;
$item -> cssClass = 'minwidth500 input' . $ia ;
2024-03-06 00:46:04 +01:00
}
2024-01-16 15:52:52 +01:00
2024-03-12 16:16:29 +01:00
$setupnotempty = + count ( $formSetup -> items );
2024-01-16 15:52:52 +01:00
$dirmodels = array_merge ( array ( '/' ), ( array ) $conf -> modules_parts [ 'models' ]);
2024-07-16 18:08:26 +02:00
// Access control
if ( ! $user -> admin ) {
accessforbidden ();
}
if ( ! isModEnabled ( 'ai' )) {
accessforbidden ( 'Module AI not activated.' );
}
2024-01-16 15:52:52 +01:00
/*
* Actions
*/
include DOL_DOCUMENT_ROOT . '/core/actions_setmoduleoptions.inc.php' ;
2024-02-10 10:38:29 +01:00
$action = 'edit' ;
2024-01-16 15:52:52 +01:00
/*
* View
*/
2024-03-12 16:16:29 +01:00
$form = new Form ( $db );
2024-01-16 15:52:52 +01:00
2024-03-12 16:16:29 +01:00
$help_url = '' ;
$title = " AiSetup " ;
2024-01-16 15:52:52 +01:00
2024-07-08 22:10:25 +02:00
llxHeader ( '' , $langs -> trans ( $title ), $help_url , '' , 0 , 0 , '' , '' , '' , 'mod-ai page-admin' );
2024-01-16 15:52:52 +01:00
2024-03-12 16:16:29 +01:00
// Subheader
$linkback = '<a href="' . ( $backtopage ? $backtopage : DOL_URL_ROOT . '/admin/modules.php?restore_lastsearch_values=1' ) . '">' . $langs -> trans ( " BackToModuleList " ) . '</a>' ;
2024-01-16 15:52:52 +01:00
2024-03-12 16:16:29 +01:00
print load_fiche_titre ( $langs -> trans ( $title ), $linkback , 'title_setup' );
2024-01-16 15:52:52 +01:00
2024-03-12 16:16:29 +01:00
// Configuration header
$head = aiAdminPrepareHead ();
2025-02-16 22:47:22 +01:00
print dol_get_fiche_head ( $head , 'settings' , $langs -> trans ( $title ), - 1 , " ai " );
2024-01-16 15:52:52 +01:00
if ( $action == 'edit' ) {
2024-03-12 16:16:29 +01:00
print $formSetup -> generateOutput ( true );
print '<br>' ;
2024-01-16 15:52:52 +01:00
} elseif ( ! empty ( $formSetup -> items )) {
print $formSetup -> generateOutput ();
print '<div class="tabsAction">' ;
print '<a class="butAction" href="' . $_SERVER [ " PHP_SELF " ] . '?action=edit&token=' . newToken () . '">' . $langs -> trans ( " Modify " ) . '</a>' ;
print '</div>' ;
} else {
2024-03-12 16:16:29 +01:00
print '<br>' . $langs -> trans ( " NothingToSetup " );
2024-01-16 15:52:52 +01:00
}
if ( empty ( $setupnotempty )) {
2024-03-12 16:16:29 +01:00
print '<br>' . $langs -> trans ( " NothingToSetup " );
2024-01-16 15:52:52 +01:00
}
2025-02-16 22:47:22 +01:00
print ' < script type = " text/javascript " >
jQuery ( document ) . ready ( function () {
function showHideAIService ( aiservice ) {
console . log ( " We select the AI service " + aiservice );
jQuery ( " .iaservice " ) . hide ();
if ( aiservice != " -1 " ) {
jQuery ( " .iaservice. " + aiservice ) . show ();
}
}
jQuery ( " #AI_API_SERVICE " ) . change ( function () {
var aiservice = $ ( this ) . val ();
showHideAIService ( aiservice );
});
showHideAIService ( " '.getDolGlobalString( " AI_API_SERVICE " ).' " );
});
</ script > ' ;
2024-03-12 16:16:29 +01:00
// Page end
print dol_get_fiche_end ();
2024-01-16 15:52:52 +01:00
2025-02-16 19:56:03 +01:00
2025-02-16 22:47:22 +01:00
if ( getDolGlobalString ( " AI_API_SERVICE " )) {
// Section to test
print '<form action="' . $_SERVER [ " PHP_SELF " ] . '" method="POST">' ;
print '<input type="hidden" name="token" value="' . newToken () . '">' ;
print '<input type="hidden" name="action" value="add">' ;
print '<input type="hidden" name="backtopage" value="' . $backtopage . '">' ;
2025-02-16 19:56:03 +01:00
2025-02-16 22:47:22 +01:00
$functioncode = GETPOST ( 'functioncode' );
$out = '' ;
2025-02-16 19:56:03 +01:00
2025-02-16 22:47:22 +01:00
if ( $functioncode ) {
$labeloffeature = empty ( $arrayofaifeatures [ GETPOST ( 'functioncode' )][ 'label' ]) ? 'Undefined' : $arrayofaifeatures [ GETPOST ( 'functioncode' )][ 'label' ];
2025-02-16 19:56:03 +01:00
2025-02-16 22:47:22 +01:00
//$out .= $langs->trans("Test").' '.$labeloffeature.'...<br><br>';
2025-02-16 19:56:03 +01:00
2025-02-16 22:47:22 +01:00
if ( GETPOST ( 'functioncode' ) == 'textgenerationemail' ) {
$key = 'textgenerationemail' ; // The HTML ID of field to fill
2025-02-16 19:56:03 +01:00
2025-02-16 22:47:22 +01:00
include_once DOL_DOCUMENT_ROOT . '/core/class/html.formmail.class.php' ;
$showlinktoai = $key ; // 'textgeneration', 'imagegeneration', ...
$showlinktoailabel = $langs -> trans ( " Test " ) . ' ' . $labeloffeature ;
$showlinktolayout = 0 ;
$formmail = new FormMail ( $db );
$htmlname = $key ;
2025-02-16 19:56:03 +01:00
2025-02-16 22:47:22 +01:00
// Fill $out
include DOL_DOCUMENT_ROOT . '/core/tpl/formlayoutai.tpl.php' ;
2025-02-16 19:56:03 +01:00
2025-02-16 22:47:22 +01:00
$out .= '<div id="' . $key . '"></div>' ;
} else {
$out .= $langs -> trans ( " FeatureNotYetAvailable " ) . '<br><br>' ;
$functioncode = '' ;
}
2025-02-16 19:56:03 +01:00
}
2025-02-16 22:47:22 +01:00
if ( ! $functioncode ) {
// Combo list of AI features
$out .= '<select name="functioncode" id="functioncode" class="flat minwidth300" placeholder="Test feature">' ;
$out .= '<option value="-1">' . $langs -> trans ( " SelectFeatureToTest " ) . '</option>' ;
foreach ( $arrayofaifeatures as $key => $val ) {
$labelhtml = $langs -> trans ( $arrayofaifeatures [ $key ][ 'label' ]) . ( $arrayofaifeatures [ $key ][ 'status' ] == 'notused' ? ' <span class="opacitymedium">(' . $langs -> trans ( " NotYetAvailable " ) . ')</span>' : " " );
$labeltext = $langs -> trans ( $arrayofaifeatures [ $key ][ 'label' ]);
$out .= '<option value="' . $key . '" data-html="' . dol_escape_htmltag ( $labelhtml ) . '"' ;
$out .= ( GETPOST ( 'functioncode' ) == $key ? ' selected="selected"' : '' );
$out .= '>' . dol_escape_htmltag ( $labeltext ) . '</option>' ;
}
$out .= '</select>' ;
$out .= ajax_combobox ( " functioncode " );
$out .= '<input class="button small" type="submit" name="testmode" value="' . $langs -> trans ( " Test " ) . '">' ;
2025-02-16 19:56:03 +01:00
}
2025-02-16 22:47:22 +01:00
print $out ;
2025-02-16 19:56:03 +01:00
2025-02-16 22:47:22 +01:00
print '</form>' ;
2025-02-16 19:56:03 +01:00
}
2024-03-12 16:16:29 +01:00
llxFooter ();
$db -> close ();