AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle 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.//// Moodle 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 Moodle. If not, see <http://www.gnu.org/licenses/>./*** Configure provider instances.** @package core_ai* @copyright 2024 Matt Porritt <matt.porritt@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/require_once('../config.php');require_login();$context = context_system::instance();require_capability('moodle/site:config', $context);$id = optional_param('id', 0, PARAM_INT); // If we have an id we have existing settings.$provider = optional_param('aiprovider', null, PARAM_PLUGIN);$returnurl = optional_param('returnurl', null, PARAM_LOCALURL);$title = get_string('createnewprovider', 'core_ai');$data = [];// Handle return URL.if (empty($returnurl)) {$returnurl = new moodle_url(url: '/admin/settings.php',params: ['section' => 'aiprovider']);} else {$returnurl = new moodle_url($returnurl);}$data['returnurl'] = $returnurl;if ($provider) {$configs = ['aiprovider' => $provider];$data['providerconfigs'] = $configs;}if ($id !== 0) { // If we have an id we are updating an existing provider instance.$manager = \core\di::get(\core_ai\manager::class);$providerrecord = $manager->get_provider_record(['id' => $id], MUST_EXIST);$plugin = explode('\\', $providerrecord->provider);$plugin = $plugin[0];$configs = json_decode($providerrecord->config, true, 512, JSON_THROW_ON_ERROR);$configs['aiprovider'] = $plugin;$configs['id'] = $providerrecord->id;$configs['name'] = $providerrecord->name;$data['providerconfigs'] = $configs;$title = get_string('configureprovider', 'core_ai');}// Initial Page setup.$PAGE->set_context($context);$PAGE->set_url('/ai/configure.php', ['id' => $id]);$PAGE->set_pagelayout('admin');$PAGE->set_title($title);$PAGE->set_heading($title);// Provider instance form processing.$mform = new \core_ai\form\ai_provider_form(customdata: $data);if ($mform->is_cancelled()) {$data = $mform->get_data();if (isset($data->returnurl)) {redirect($data->returnurl);} else {redirect($returnurl);}}if ($data = $mform->get_data()) {$data = (array)$data;$manager = \core\di::get(\core_ai\manager::class);$aiprovider = $data['aiprovider'];$providername = $data['name'];unset($data->aiprovider, $data->name, $data->id, $data->returnurl, $data->updateandreturn);if ($id !== 0) {$providerinstance = $manager->get_provider_instances(['id' => $id]);$providerinstance = reset($providerinstance);$providerinstance->name = $providername;$manager->update_provider_instance(provider:$providerinstance,config: $data);\core\notification::add(get_string('providerinstanceupdated', 'core_ai', $providername),\core\notification::SUCCESS);} else {$classname = $aiprovider . '\\' . 'provider';$manager->create_provider_instance(classname: $classname,name: $providername,config: $data,);\core\notification::add(get_string('providerinstancecreated', 'core_ai', $providername),\core\notification::SUCCESS);}redirect($returnurl);}// Page output.echo $OUTPUT->header();// Add the provider instance form.$mform->display();// Add the per provider action settings only if we have an existing provider.if ($id !== 0) {echo $OUTPUT->render_from_template('core_ai/admin_action_settings', []);$provider = $mform->get_customdata()['aiprovider'];$tableid = $provider . '-' . $id; // This is the table id for the action settings table.$actiontable = new \core_ai\table\aiprovider_action_management_table($tableid);$actiontable->out();}echo $OUTPUT->footer();