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;
+
+    }
+}