Mercurial
diff .cms/mod/base.mod.php @ 0:78edf6b517a0 draft
24.10
author | Coffee CMS <info@coffee-cms.ru> |
---|---|
date | Fri, 11 Oct 2024 22:40:23 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.cms/mod/base.mod.php Fri Oct 11 22:40:23 2024 +0000 @@ -0,0 +1,200 @@ +<?php + +$cms["modules"]["base.mod.php"] = array( + "name" => "base_module_name", + "description" => "base_module_description", + "files" => array( + ".cms/css/base.css", + ".cms/mod/base.mod.php", + ".cms/lang/ru_RU.UTF-8/base.mod.php", + ".cms/lang/en_US.UTF-8/base.mod.php", + ".cms/lang/uk_UA.UTF-8/base.mod.php", + ), +); + +// Return if module disabled +if ( ! empty( $cms["config"]["base.mod.php"]["disabled"] ) ) { + + return; + +} else { + + // defautl settings + if ( ! isset( $cms["config"]["base.mod.php"]["host"] ) ) + $cms["config"]["base.mod.php"]["host"] = "localhost"; + if ( ! isset( $cms["config"]["base.mod.php"]["port"] ) ) + $cms["config"]["base.mod.php"]["port"] = "3306"; + if ( ! isset( $cms["config"]["base.mod.php"]["user"] ) ) + $cms["config"]["base.mod.php"]["user"] = ""; + if ( ! isset( $cms["config"]["base.mod.php"]["password"] ) ) + $cms["config"]["base.mod.php"]["password"] = ""; + if ( ! isset( $cms["config"]["base.mod.php"]["base"] ) ) + $cms["config"]["base.mod.php"]["base"] = ""; + + // если админ + if ( is_admin() ) { + hook_add_fn( "admin", "cms_base_admin" ); + hook_add_fn( "admin_header", "cms_base_admin_header" ); + hook_add_fn( "api", "cms_base_connect", 5 ); + } + hook_add_fn( "query", "cms_base_connect", 5 ); + +} + +function cms_base_connect() { + global $cms; + + // Это если принудительно вызывают функцию + if ( ! empty( $cms["config"]["base.mod.php"]["disabled"] ) ) { + return false; + } + + if ( ! empty( $cms["config"]["base.mod.php"]["user"] ) ) { + // return false on failure + mysqli_report( MYSQLI_REPORT_OFF ); // PHP >= 8.1 FIX https://php.watch/versions/8.1/mysqli-error-mode + $cms["base"] = mysqli_connect( + $cms["config"]["base.mod.php"]["host"], + $cms["config"]["base.mod.php"]["user"], + $cms["config"]["base.mod.php"]["password"], + $cms["config"]["base.mod.php"]["base"], + $cms["config"]["base.mod.php"]["port"] + ); + // false and null + if ( $cms["base"] == false ) { + return false; + } else { + mysqli_query( $cms["base"], "SET NAMES utf8" ); // PHP-5.2 + mysqli_set_charset( $cms["base"], "utf8mb4" ); + return true; + } + } else { + return false; + } + +} + +function cms_base_admin_header() { + global $cms; + $conf = $cms["config"]["base.mod.php"]["menu"]["base"]; + if ( empty( $conf["hide"] ) && empty( $cms["config"]["admin_sections"][ $conf["section"] ]["hide"] ) ) { + echo "<link rel=stylesheet href='{$cms['base_path']}css/base.css'>"; + } +} + +function cms_base_admin() { + global $cms; + + // Save settings + if ( ! empty( $_POST["save_base_config"] ) ) { + if ( $_POST["save_base_config"] === "create" ) { + mysqli_report( MYSQLI_REPORT_OFF ); // PHP >= 8.1 FIX https://php.watch/versions/8.1/mysqli-error-mode + $base = mysqli_connect( $_POST["host"], $_POST["admin_login"], $_POST["admin_password"], "mysql", $_POST["port"] ); + if ( $base ) { + mysqli_query( $base, "CREATE DATABASE IF NOT EXISTS {$_POST['base']};" ); + mysqli_query( $base, "CREATE USER IF NOT EXISTS '{$_POST['user']}'@'{$_POST['host']}' IDENTIFIED BY '{$_POST['password']}';" ); + mysqli_query( $base, "GRANT ALL PRIVILEGES ON {$_POST['base']}.* TO '{$_POST['user']}'@'localhost';" ); + mysqli_query( $base, "FLUSH PRIVILEGES;" ); + } + } + + $cms["config"]["base.mod.php"]["host"] = $_POST["host"]; + $cms["config"]["base.mod.php"]["port"] = $_POST["port"]; + $cms["config"]["base.mod.php"]["base"] = $_POST["base"]; + $cms["config"]["base.mod.php"]["user"] = $_POST["user"]; + $cms["config"]["base.mod.php"]["password"] = $_POST["password"]; + unset( $cms["config"]["base.mod.php"]["menu"]["base"]["class"] ); + cms_save_config(); + if ( cms_base_connect() ) { + do_hook( "create_tables" ); + + // Выполнить запросы в БД, находящиеся в файле update.sql + $update_sql = "{$cms['cms_dir']}/update.sql"; + $q = ""; + if ( file_exists( $update_sql ) ) { + $q = file_get_contents( $update_sql ); + } + if ( $q ) { + mysqli_multi_query( $cms["base"], $q ); + } + } + $cms["status"] = "302"; + header( "Location: {$cms['base_path']}{$cms['config']['admin.mod.php']['admin_url']}" ); + $cms["hooks"]["admin"]["next"] = ""; // Предотвратить выдачу админки + return; + } + + $conf = $cms["config"]["base.mod.php"]["menu"]["base"]; + if ( empty( $conf["hide"] ) && empty( $cms["config"]["admin_sections"][ $conf["section"] ]["hide"] ) ) { + + $e_host = htmlspecialchars( $cms['config']['base.mod.php']['host'] ); + $e_port = htmlspecialchars( $cms['config']['base.mod.php']['port'] ); + $e_base = htmlspecialchars( $cms['config']['base.mod.php']['base'] ); + $e_user = htmlspecialchars( $cms['config']['base.mod.php']['user'] ); + $e_password = htmlspecialchars( $cms['config']['base.mod.php']['password'] ); + $page = " +<div class=db-settings> + <form method=post> + <div class=basic> + <div> + <div>" . __( "server_address" ) . "</div> + <input name=host type=text value=\"{$e_host}\" placeholder=localhost> + </div> + <div> + <div>" . __( "server_port" ) . "</div> + <input name=port type=text value=\"{$e_port}\" placeholder=3306> + </div> + <div> + <div>" . __( "db_name" ) . "</div> + <input name=base type=text value=\"{$e_base}\"> + </div> + <div> + <div>" . __( "db_user" ) . "</div> + <input name=user type=text value=\"{$e_user}\"> + </div> + <div> + <div>" . __( "db_password" ) . "</div> + <div class=password-widget> + <input name=password type=password value=\"{$e_password}\"> + <div class=password-eye></div> + </div> + </div> + <button name=save_base_config value=save>" . __( "save" ) . "</button> + <div class=pro-btn>PRO</div> + </div> + + <div class=pro> + <div class=create>" . __( "create_db" ) . "</div> + <div> + <div>" . __( "admin_login" ) . "</div> + <input name=admin_login type=text value> + </div> + <div> + <div>" . __( "admin_passwd" ) . "</div> + <div class=password-widget> + <input name=admin_password type=password value> + <div class=password-eye></div> + </div> + </div> + <button name=save_base_config value=create>" . __( "create_btn" ) . "</button> + </div> + </form> +</div>"; + + // Create menu item if not exists + if ( empty( $cms["config"]["base.mod.php"]["menu"]["base"] ) ) { + $cms["config"]["base.mod.php"]["menu"]["base"] = array( + "title" => "base_module_name", + "sort" => 20, + "section" => "settings", + ); + cms_save_config(); + } + + if ( cms_base_connect() === false ) { + $cms["config"]["base.mod.php"]["menu"]["base"]["class"] = "red"; + } + + $cms["admin_pages"]["base"] = $page; + + } +}