$v) { $params[$k] = isset($params[$k]) ? $params[$k] : $default[$k]; } return $params; } } if (!function_exists('waicImportClass')) { function waicImportClass( $class, $path = '' ) { if ( ! is_string( $class ) || ! preg_match( '/^[A-Za-z_][A-Za-z0-9_\\\\]*$/', $class ) ) { return false; } if (!class_exists($class)) { if (!$path) { $classFile = lcfirst($class); if (strpos(strtolower($classFile), WAIC_CODE) !== false) { $classFile = preg_replace('/' . WAIC_CODE . '/i', '', $classFile); } $path = WAIC_CLASSES_DIR . lcfirst($classFile) . '.php'; } return waicImport($path); } return false; } } /** * Check if class name exist with prefix or not * * @param strin $class preferred class name * @return string existing class name */ if (!function_exists('waicToeGetClassName')) { function waicToeGetClassName( $class ) { $className = ''; if (class_exists(waicStrFirstUp(WAIC_CODE) . $class)) { $className = waicStrFirstUp(WAIC_CODE) . $class; } else if (class_exists(WAIC_CLASS_PREFIX . $class)) { $className = WAIC_CLASS_PREFIX . $class; } else { $className = $class; } return $className; } } /** * Create object of specified class * * @param string $class class that you want to create * @param array $params array of arguments for class __construct function * @return object new object of specified class */ if (!function_exists('waicToeCreateObj')) { function waicToeCreateObj( $class, $params ) { $className = waicToeGetClassName($class); $obj = null; if (class_exists('ReflectionClass')) { $reflection = new ReflectionClass($className); try { $obj = $reflection->newInstanceArgs($params); } catch (ReflectionException $e) { // If class have no constructor $obj = $reflection->newInstanceArgs(); } } else { $obj = new $className(); call_user_func_array(array($obj, '__construct'), $params); } return $obj; } } /** * Redirect user to specified location. Be advised that it should redirect even if headers alredy sent. * * @param string $url where page must be redirected */ if (!function_exists('waicRedirect')) { function waicRedirect( $url ) { if (headers_sent()) { if ( class_exists('WaicFrame') ) { WaicFrame::_()->printInlineJs('document.location.href="' . esc_url($url) . '";'); } } else { header('Location: ' . $url); } exit(); } } if (!function_exists('waicJsonEncodeUTFnormal')) { function waicJsonEncodeUTFnormal( $value, $ent = false ) { if (is_int($value)) { return (string) $value; } elseif (is_string($value)) { if ($ent) { $value = stripslashes($value); } $value = str_replace(array('\\', '/', '"', "\r", "\n", "\b", "\f", "\t"), $ent ? array('\\\\', '\/', '\"', '\\\\r', '\\\\n', '\\\\b', '\\\\f', '\\\\t') : array('\\\\', '\/', '\"', '\r', '\n', '\b', '\f', '\t'), $value); $convmap = array(0x80, 0xFFFF, 0, 0xFFFF); $result = ''; for ($i = strlen($value) - 1; $i >= 0; $i--) { $mb_char = substr($value, $i, 1); $result = $mb_char . $result; } return '"' . ( $ent ? htmlspecialchars($result, ENT_QUOTES) : $result ) . '"'; } elseif (is_float($value)) { return str_replace(',', '.', $value); } elseif (is_null($value)) { return 'null'; } elseif (is_bool($value)) { return $value ? 'true' : 'false'; } elseif (is_array($value)) { $with_keys = false; $n = count($value); for ($i = 0, reset($value); $i < $n; $i++, next($value)) { if (key($value) !== $i) { $with_keys = true; break; } } } elseif (is_object($value)) { $with_keys = true; } else { return ''; } $result = array(); if ($with_keys) { foreach ($value as $key => $v) { $result[] = waicJsonEncodeUTFnormal((string) $key, $ent) . ':' . waicJsonEncodeUTFnormal($v, $ent); } return '{' . implode(',', $result) . '}'; } else { foreach ($value as $key => $v) { $result[] = waicJsonEncodeUTFnormal($v, $ent); } return '[' . implode(',', $result) . ']'; } } } /** * Prepares the params values to store into db * * @param array $d $_POST array * @return array */ if (!function_exists('waicPrepareParams')) { function waicPrepareParams( &$d = array(), &$options = array() ) { if (!empty($d['params'])) { if (isset($d['params']['options'])) { $options = $d['params']['options']; } if (is_array($d['params'])) { $params = WaicUtils::jsonEncode($d['params']); $params = str_replace(array('\n\r', "\n\r", '\n', "\r", '\r', "\r"), '
', $params); $params = str_replace(array('

', '


'), '
', $params); $d['params'] = $params; } } elseif (isset($d['params'])) { $d['params']['attr']['class'] = ''; $d['params']['attr']['id'] = ''; $params = WaicUtils::jsonEncode($d['params']); $d['params'] = $params; } if (empty($options)) { $options = array('value' => array('EMPTY'), 'data' => array()); } if (isset($d['code'])) { if ('' == $d['code']) { $d['code'] = waicPrepareFieldCode($d['label']) . '_' . wp_rand(0, 9999999); } } return $d; } } if (!function_exists('waicPrepareFieldCode')) { function waicPrepareFieldCode( $string ) { $string = preg_replace('/[^a-zA-Z0-9\s]/', ' ', $string); $string = preg_replace('/\s+/', ' ', $string); $string = preg_replace('/ /', '', $string); $code = substr($string, 0, 8); $code = strtolower($code); if ('' == $code) { $code = 'field_' . gmdate('dhis'); } return $code; } } /** * Recursive implode of array * * @param string $glue imploder * @param array $array array to implode * @return string imploded array in string */ if (!function_exists('waicRecImplode')) { function waicRecImplode( $glue, $array ) { $res = ''; $i = 0; $count = count($array); foreach ($array as $el) { $str = ''; if (is_array($el)) { $str = waicRecImplode('', $el); } else { $str = $el; } $res .= $str; if ($i < ( $count-1 )) { $res .= $glue; } $i++; } return $res; } } if (!function_exists('aiwuSimpleTextQuery')) { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound function aiwuSimpleTextQuery( $prompt, $options = false ) { if (empty($prompt) || !class_exists('WaicFrame')) { return false; } $frame = WaicFrame::_(); $apiOptions = $frame->getModule('options')->getModel()->getDefaults('api'); if (!empty($options) && is_array($options)) { $apiOptions = array_merge($apiOptions, $options); } $aiProvider = $frame->getModule('workspace')->getModel('aiprovider')->getInstance($apiOptions); if (!$aiProvider) { return false; } $aiProvider->init(); $aiProvider->setSaveError(false); $aiProvider->setSessionId('api-' . substr(md5($prompt), 0, 16)); if ($aiProvider->setApiOptions($apiOptions)) { $opts = array('prompt' => $prompt); $result = $aiProvider->getText($opts); } else { $result = array( 'error' => 1, 'msg' => $frame->getLastError(), ); } return $result; } } if (!function_exists('aiwuAskChatbot')) { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound function aiwuAskChatbot( $botId, $message, $options = false ) { $botId = (int) $botId; if (empty($botId) || empty($message) || !class_exists('WaicFrame')) { return false; } if (isset($options['user_id'])) { $options['user_id'] = (int) $options['user_id']; } unset($options['ip']); if (isset($options['uniq'])) { $options['ip'] = substr(str_replace(array("'", '"'), array('', ''), $options['uniq']), 0, 20); $options['user_id'] = 0; } $options['use_log'] = isset($options['user_id']) || isset($options['ip']); $mode = 0; if (!$options['use_log']) { $mode = 2; $options['user_id'] = 0; $options['ip'] = ''; } $result = WaicFrame::_()->getModule('chatbots')->getModel()->sendMessage($message, $botId, (int) $mode, '', false, $options); return $result; } } add_action('rest_api_init', function() { register_rest_route( 'aiwu/v1', '/simple-text-query/', array( 'methods' => 'POST', 'callback' => 'aiwuSimpleTextQueryRest', 'permission_callback' => function( $request ) { return aiwuAllowPublicApi('simple-text-query', $request ); }, )); }); if (!function_exists('aiwuSimpleTextQueryRest')) { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound function aiwuSimpleTextQueryRest( $request ) { try { $params = $request->get_params(); $prompt = isset( $params['prompt'] ) ? $params['prompt'] : ''; if (empty($prompt)) { throw new Exception( 'The promp is required.' ); } $options = isset( $params['options'] ) ? $params['options'] : []; $result = aiwuSimpleTextQuery($prompt, $options); return new WP_REST_Response(array('success' => true, 'data' => $result), 200); } catch (Exception $e) { return new WP_REST_Response(array('success' => false, 'message' => $e->getMessage()), 500 ); } } } add_action('rest_api_init', function() { register_rest_route( 'aiwu/v1', '/ask-chatbot/', array( 'methods' => 'POST', 'callback' => 'aiwuAskChatbotRest', 'permission_callback' => function( $request ) { return aiwuAllowPublicApi('ask-chatbot', $request ); }, )); }); if (!function_exists('aiwuAskChatbotRest')) { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound function aiwuAskChatbotRest( $request ) { try { $params = $request->get_params(); $message = isset( $params['message'] ) ? $params['message'] : ''; if (empty($message)) { throw new Exception( 'The message is required.' ); } $botId = isset( $params['bot_id'] ) ? $params['bot_id'] : ''; if (empty($botId)) { throw new Exception( 'The bot_id is required.' ); } $options = isset( $params['options'] ) ? $params['options'] : []; $result = aiwuAskChatbot($botId, $message, $options); return new WP_REST_Response(array('success' => true, 'data' => $result), 200); } catch (Exception $e) { return new WP_REST_Response(array('success' => false, 'message' => $e->getMessage()), 500 ); } } } if (!function_exists('aiwuAllowPublicApi')) { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound function aiwuAllowPublicApi($feature, $extra) { $isAdmin = current_user_can('manage_options'); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound return apply_filters('aiwu_allow_public_api', $isAdmin, $feature, $extra); } }