diff --git a/README.md b/README.md index 90eb81a..410a929 100644 --- a/README.md +++ b/README.md @@ -9,15 +9,15 @@ AGPLライセンスです!!! ## 5. サーバーの建て方 -※MySQLの設定結構めんどいです。 まず、Apache2とPHP 8とmysql Ver 15が導入されているサーバーを準備します! +PHP 8では事前にGDを有効化しておいてください!(QRコードの生成に必要です。) 次にSQLを設定します。(InnoDB) -まず、お好きな名前でDBを作成し、その中に、account,emoji,notice,role,ueuse,notificationとテーブルを作成します。 +まず、お好きな名前でDBを作成し、その中に、account,emoji,notice,role,ueuse,notification,ads,reportとテーブルを作成します。 テーブルの中身は以下のとおりです。 照合順序は全て標準でutf8mb4_general_ciです。 -【お知らせ!!!】 -バージョン1.2.15よりSQLの構造ファイルを公開したので今までと比べて大幅に簡単にuwuzuサーバーの構築ができるようになりました!!! -なお、ロールは自動で追加されませんのでuser、officialロールはご自身で追加してください! + +## 簡単に構築できるようSQLの構造ファイルがリリースに添付されています!そちらをインポートしていただけますと大幅に簡単に導入できます! +(userロールとofficialロールとiceロールの設定は別途必要です。お手数ですがそこの設定だけよろしくお願いいたします。) ### account - sysid(INT)(AUTO_INCREMENT ) アカウントが追加されるとカウントされるシステム用ID @@ -88,37 +88,30 @@ AGPLライセンスです!!! - used(varchar(25)) 使用済みかそうでないか - datetime(datetime) 招待コード仕様日時更新用 -すべて作成完了したらGithubよりuwuzuのファイルをDLし、解凍し、それをサーバーの動作ディレクトリに置き、Apacheのhttpd.confからその動作ディレクトリを指定し、あとはApacheとphpとMy SQLを起動するだけ! -起動したらまずDBのroleにphpmyadminから「user」ロールと「official」ロールを追加、権限は「user」と「official」でOK。ロール名はとりあえず「一般ユーザー」ロールの色はHEXコード(#を除く)で000000のように指定。(この2つのロールがないとエラーが発生します。) -そしたら普通にuwuzuにアクセスして自分のアカウントを登録。 -それが終わったら一度サーバーを止め、uwuzuの動作ディレクトリ内のserverフォルダ内のファイルを各自設定 -ファイルの機能は以下の通り! -- admininfo.txt : 管理者名(てすとまる/@sampledayo) -- contact.txt : 管理者への連絡用メアド(sample@test.com) -- info.txt : サーバー登録時に表示されるメッセージ(好きな内容) -- privacypolicy.txt : プライバシーポリシー(サーバーのプライバシーポリシーを記載) -- servername.txt : サーバー名(てすとさば) -- terms.txt : 利用規約(サーバーの利用規約を記載) -- uwuzuabout.txt : このファイル(uwuzuを改造した場合は書き換え) -- uwuzuinfo.txt : uwuzuのバージョン等記載(uwuzuを改造した場合は書き換え) -- uwuzurelease.txt : uwuzuのバージョン等記載(uwuzuを改造した場合は書き換え) -- onlyuser.txt : 招待コード機能をオンにするかどうか、「true」でオン、「false」でオフ。招待コードはDBに直接追加。 +### report +- sysid(INT)(AUTO_INCREMENT) 追加されるとカウントされるシステム用ID +- uniqid(varchar(256)) 通報ID保存用 +- userid(varchar(500)) 通報先ユーザーID保存用 +- report_userid(varchar(500)) 通報元ユーザーID保存用 +- msg(text) サービス管理者宛メッセージ保存用 +- datetime(datetime) 通報日時保存用 +- admin_chk(varchar(25)) 解決済みかどうか確認用 +### ads +- sysid(INT)(AUTO_INCREMENT) 追加されるとカウントされるシステム用ID +- uniqid(varchar(512)) 広告ID保存用 +- url(varchar(512)) 広告のクリック先URL保存用 +- image_url(varchar(512)) 広告に表示する画像URL保存用 +- memo(text) 広告にマウスオーバーしたときに表示されるメッセージ保存用 +- start_date(datetime) 広告配信開始日時保存用 +- limit_date(datetime) 広告配信終了日時保存用 +- datetime(datetime) 広告追加日時保存用 -すべて作成完了したらGithubよりuwuzuのファイルをDLし、解凍し、それをサーバーの動作ディレクトリに置き、Apacheのhttpd.confからその動作ディレクトリを指定し、あとはApacheとphpとMy SQLを起動するだけ! -起動したらまずDBのroleにphpmyadminから「user」ロールを追加権限は「user」でOK。ロール名はとりあえず「一般ユーザー」ロールの色はHEXコード(#を除く)で000000のように指定。 +すべて作成完了したらGithubよりuwuzuのファイルをDLし、解凍し、それをサーバーの動作ディレクトリに置き、Apacheのhttpd.confからその動作ディレクトリを指定し、動作ディレクトリ内のdb.phpにDBのログイン情報を書き込んであとはApacheとphpとMy SQLを起動するだけ! +起動したらまずDBのroleにphpmyadminから「user」ロールと「official」ロールと「ice」ロールを追加、権限は「user」と「official」と「ice」でOK。ロール名はとりあえず「一般ユーザー」とか適当でOK、ロールの色はHEXコード(#を除く)で000000のように指定。(この3つのロールがないとエラーが発生します。) そしたら普通にuwuzuにアクセスして自分のアカウントを登録。 -それが終わったら一度サーバーを止め、uwuzuの動作ディレクトリ内のserverフォルダ内のファイルを各自設定 -ファイルの機能は以下の通り! -- admininfo.txt : 管理者名(てすとまる/@sampledayo) -- contact.txt : 管理者への連絡用メアド(sample @test.com) -- info.txt : サーバー登録時に表示されるメッセージ(好きな内容) -- privacypolicy.txt : プライバシーポリシー(サーバーのプライバシーポリシーを記載) -- servername.txt : サーバー名(てすとさば) -- terms.txt : 利用規約(サーバーの利用規約を記載) -- uwuzuabout.txt : このファイル(uwuzuを改造した場合は書き換え) -- uwuzuinfo.txt : uwuzuのバージョン等記載(uwuzuを改造した場合は書き換え) -- uwuzurelease.txt : uwuzuのバージョン等記載(uwuzuを改造した場合は書き換え) +## 管理者アカウント登録機能が追加されました。【[domain]/admin/】より設定できるのでそちらをご利用ください。 +なお、管理者アカウントを導入後に登録した場合サーバーを止めてuwuzu動作ディレクトリ内のserverフォルダ内のファイルを設定する必要はございません。 ### これでサーバーは完成!!! 脆弱だから自己責任で楽しんでね~() diff --git a/abi/addabi.php b/abi/addabi.php index 22e2d9c..2b73520 100644 --- a/abi/addabi.php +++ b/abi/addabi.php @@ -1,105 +1,142 @@ PDO::ERRMODE_EXCEPTION, - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, - )); + preg_replace_callback($usernamePattern, function($matches) use (&$mentionedUsers) { + $mention_username = $matches[1]; + + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $mention_userQuery = $dbh->prepare("SELECT username, userid FROM account WHERE userid = :userid"); + $mention_userQuery->bindValue(':userid', $mention_username); + $mention_userQuery->execute(); + $mention_userData = $mention_userQuery->fetch(); - $mention_userQuery = $dbh->prepare("SELECT username, userid FROM account WHERE userid = :userid"); - $mention_userQuery->bindValue(':userid', $mention_username); - $mention_userQuery->execute(); - $mention_userData = $mention_userQuery->fetch(); - - if (!empty($mention_userData)) { - $mentionedUsers[] = $mention_username; - } - }, $postText); + if (!empty($mention_userData)) { + $mentionedUsers[] = $mention_username; + } + }, $postText); - return $mentionedUsers; - } + return $mentionedUsers; + } - try { - $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS); + // データベース接続の設定 + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); - $pdo->beginTransaction(); + $query = $dbh->prepare('SELECT * FROM ueuse WHERE uniqid = :uniqid limit 1'); - $stmt = $pdo->prepare("UPDATE ueuse SET abi = :abi, abidate = :abidate WHERE uniqid = :uniqid AND account = :userid"); - $stmt->bindValue(':abi', $abitext, PDO::PARAM_STR); - $stmt->bindValue(':abidate', $abidate, PDO::PARAM_STR); - $stmt->bindValue(':uniqid', $postUniqid, PDO::PARAM_STR); - $stmt->bindValue(':userid', $ses_userid, PDO::PARAM_STR); - - // SQLクエリの実行 - $res = $stmt->execute(); + $query->execute(array(':uniqid' => $postUniqid)); - // コミット - $pdo->commit(); + $result = $query->fetch(); - $mentionedUsers = get_mentions_userid($abitext); + if($result["account"] === $userid){ + // データベース接続の設定 + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $query = $dbh->prepare('SELECT * FROM account WHERE userid = :userid limit 1'); + + $query->execute(array(':userid' => $userid)); + + $result2 = $query->fetch(); + + if($result2["loginid"] === $loginid){ + + try { + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS); - foreach ($mentionedUsers as $mentionedUser) { - $pdo->beginTransaction(); - try { - $touserid = $mentionedUser; - $datetime = date("Y-m-d H:i:s"); - $msg = "" . $abitext . ""; - $title = "" . $username . "さんにメンションされました!"; - $url = "/!" . $uniqid . "~" . $userid . ""; - $userchk = 'none'; + $stmt = $pdo->prepare("UPDATE ueuse SET abi = :abi, abidate = :abidate WHERE uniqid = :uniqid AND account = :userid"); + $stmt->bindValue(':abi', $abitext, PDO::PARAM_STR); + $stmt->bindValue(':abidate', $abidate, PDO::PARAM_STR); + $stmt->bindValue(':uniqid', $postUniqid, PDO::PARAM_STR); - // 通知用SQL作成 - $stmt = $pdo->prepare("INSERT INTO notification (touserid, msg, url, datetime, userchk, title) VALUES (:touserid, :msg, :url, :datetime, :userchk, :title)"); + $stmt->bindValue(':userid', $userid, PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $pdo->commit(); + + $mentionedUsers = get_mentions_userid($abitext); + + foreach ($mentionedUsers as $mentionedUser) { + + $pdo->beginTransaction(); + + try { + $touserid = $mentionedUser; + $datetime = date("Y-m-d H:i:s"); + $msg = "" . $abitext . ""; + $title = "" . $username . "さんにメンションされました!"; + $url = "/!" . $uniqid . "~" . $userid . ""; + $userchk = 'none'; + + // 通知用SQL作成 + $stmt = $pdo->prepare("INSERT INTO notification (touserid, msg, url, datetime, userchk, title) VALUES (:touserid, :msg, :url, :datetime, :userchk, :title)"); - $stmt->bindParam(':touserid', $touserid, PDO::PARAM_STR); - $stmt->bindParam(':msg', $msg, PDO::PARAM_STR); - $stmt->bindParam(':url', $url, PDO::PARAM_STR); - $stmt->bindParam(':userchk', $userchk, PDO::PARAM_STR); - $stmt->bindParam(':title', $title, PDO::PARAM_STR); + $stmt->bindParam(':touserid', $touserid, PDO::PARAM_STR); + $stmt->bindParam(':msg', $msg, PDO::PARAM_STR); + $stmt->bindParam(':url', $url, PDO::PARAM_STR); + $stmt->bindParam(':userchk', $userchk, PDO::PARAM_STR); + $stmt->bindParam(':title', $title, PDO::PARAM_STR); - $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); + $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); - // SQLクエリの実行 - $res2 = $stmt->execute(); + // SQLクエリの実行 + $res2 = $stmt->execute(); - // コミット - $res2 = $pdo->commit(); + // コミット + $res2 = $pdo->commit(); - } catch(Exception $e) { + } catch(Exception $e) { - // エラーが発生した時はロールバック - $pdo->rollBack(); + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + + if ($res2) { + header('Content-Type: application/json'); + echo json_encode(['success' => true]); + exit; + } else { + header('Content-Type: application/json'); + echo json_encode(['success' => false, 'error' => '追加に失敗しました。']); + exit; + } + } - if ($res2) { + if ($res) { header('Content-Type: application/json'); echo json_encode(['success' => true]); exit; @@ -108,22 +145,11 @@ if (htmlentities(isset($_POST['uniqid'])) && htmlentities(isset($_POST['abitext' echo json_encode(['success' => false, 'error' => '追加に失敗しました。']); exit; } - - } - - if ($res) { + } catch(PDOException $e) { header('Content-Type: application/json'); - echo json_encode(['success' => true]); - exit; - } else { - header('Content-Type: application/json'); - echo json_encode(['success' => false, 'error' => '追加に失敗しました。']); + echo json_encode(['success' => false, 'error' => 'データベースエラー:' . $e->getMessage()]); exit; } - } catch(PDOException $e) { - header('Content-Type: application/json'); - echo json_encode(['success' => false, 'error' => 'データベースエラー:' . $e->getMessage()]); - exit; } } } diff --git a/api/bot-api.php b/api/bot-api.php index 0ecc09c..49ed2c4 100644 --- a/api/bot-api.php +++ b/api/bot-api.php @@ -42,6 +42,22 @@ if(isset($_GET['token'])&&isset($_GET['ueuse'])) { $token = htmlentities($_GET['token']); $ueuse = nl2br(htmlentities($_GET['ueuse'])); + if($token === 'ice'){ + $err = "input_error"; + $response = array( + 'error_code' => $err, + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); + }elseif($token === ''){ + $err = "input_error"; + $response = array( + 'error_code' => $err, + ); + + echo json_encode($response, JSON_UNESCAPED_UNICODE); + } + require('../db.php'); $datetime = array(); diff --git a/css/home.css b/css/home.css index 6affa0c..f5dd0f5 100644 --- a/css/home.css +++ b/css/home.css @@ -677,6 +677,7 @@ main h1{ border: none; display: block; width:120px; + height: 24px; padding: 8px auto; margin-left: auto; @@ -754,6 +755,56 @@ main h1{ width:115px; } + +.fzone .follow .report{ + cursor: pointer; + border: none; + display: block; + padding: 6px; + + width:24px; + height: 24px; + + margin-left: auto; + margin-right: 12px; + margin-top: 12px; + margin-bottom: 12px; + + background-color: #FFFAE6; + + border-radius: 50px; + color:#FFC832; + border: 1px solid #FFC832; + font-size: 16px; + font-family: 'Zen Maru Gothic', sans-serif; + font-weight: normal; + text-decoration:none; + text-align: center; + transition: box-shadow 250ms ease-in-out; + transition: width 250ms ease-out; + transition: all 250ms ease-out; +} +.fzone .follow .report:hover{ + background-color: #ffebeb; + color: #ff4848; + border: 1px solid #ff4848; + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); + width:32px; +} +.fzone .follow .report:active{ + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); + width:22px; +} +.fzone .follow .report svg{ + width: 24px; + height: 24px; + margin-left: auto; + margin-right: auto; + margin-top: auto; + margin-bottom: 6px; + fill: currentColor; +} + .fzone .time{ margin-top: auto; margin-bottom: 0px; @@ -763,6 +814,7 @@ main h1{ .fzone .time p{ margin-top: 0px; margin-bottom: 0px; + margin-right: 32px; text-align: left; font-size: 12px; color:#999; @@ -828,7 +880,41 @@ main h1{ border-bottom: 1px solid #FFC832; } - +.ads{ + display: block; + position: relative; + animation: slideInY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards; + margin: 12px; + border-radius: 10px; + padding: 0px; + overflow:hidden; + background-color: #F5F5F5; + border: 1px solid #EEE; + width: auto; +} +@keyframes slideInY { + 0% { + transform: translateY(24px); + opacity: 0; + } + 100% { + transform: translateY(0px); + } + 40%,100% { + opacity: 1; + } +} +.ads a{ + margin: 0px; + padding: 0px; +} +.ads a img{ + object-fit: cover; + margin: 0px; + width: 100%; + height: 10dvh; + vertical-align:top; +} .ueuse{ animation: slideInY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards; margin: 12px; @@ -1413,7 +1499,14 @@ main h1{ transition: width 250ms ease-out; transition: all 250ms ease-out; } - +.ueuse .favbox .addabi svg { + margin-top: -12px; + margin-right: 0px; + width: 24px; + height: 24px; + fill: currentColor; + transition: all 250ms ease-out; +} .ueuse .favbox img{ margin-left: 0px; @@ -1945,6 +2038,7 @@ label>input { font-size: 18px; } .modal-content p{ + line-height: 20px; font-size: 16px; color:#252525; text-decoration: none; @@ -2260,6 +2354,7 @@ label>input { margin-left: 12px; margin-right: 12px; width: 24%; + height: 92.5dvh; background-color: #fff; padding: 12px; box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); @@ -2279,7 +2374,7 @@ label>input { .rightbox .noticearea{ width: auto; - height: 52dvh; + height: 50dvh; overflow: scroll; border-radius: 10px; } @@ -2370,7 +2465,7 @@ label>input { .rightbox .btmbox{ position: absolute; bottom: 12px; /*下に固定*/ - height: 31dvh; + height: 35dvh; width: 90%; } @@ -3026,6 +3121,13 @@ hr{ margin-left: 0px; } + +summary { + font-weight: bold; + margin: -0.5em -0.5em 0; + padding: 0.5em; +} + .server_code{ animation: slideInY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards; margin-top: 12px; @@ -3034,14 +3136,15 @@ hr{ padding-left: 12px; padding-right: 12px; padding-top: 8px; - padding-bottom: 8px; + padding-bottom: 4px; background-color: #F5F5F5; border: 1px solid #EEE; width: auto; } -.server_code h1{ - margin-top: 4px; - margin-bottom: 4px; +.server_code details { + padding: 0px; + margin-top: 0px; + margin-bottom: 0px; text-align: left; color:#252525; font-family: 'BIZ UDGothic', sans-serif; @@ -3050,6 +3153,28 @@ hr{ line-height: 22px; font-weight: bold; } +.server_code summary { + display: block; + list-style: none; +} +.server_code summary::-webkit-details-marker { + display: none; +} +.server_code details[open] p{ + animation: slideInYopen 0.5s cubic-bezier(0.25, 1, 0.5, 1); +} +@keyframes slideInYopen { + 0% { + transform: translateY(-16px); + opacity: 0; + } + 100% { + transform: translateY(0px); + } + 40%,100% { + opacity: 1; + } +} .server_code p{ margin-top: 4px; margin-bottom: 4px; @@ -3061,7 +3186,328 @@ hr{ line-height: 22px; font-weight: bold; } +.delbox { + margin: 0px; + padding: 0px; + display: flex; +} +.delbox p{ + margin-top: auto; + margin-bottom: auto; + text-align: left; + color:#252525; + font-family: 'BIZ UDGothic', sans-serif; + word-wrap: break-word; + font-size: 14px; + line-height: 22px; + font-weight: bold; +} +.delbox .delbtn{ + cursor: pointer; + border: none; + display: block; + width:60px; + padding: 8px auto; + margin-left: auto; + margin-right: 0px; + margin-top: 2px; + margin-bottom: 6px; + padding-top: 2px; + padding-bottom: 2px; + background-color: #F5F5F5; + border-radius: 50px; + color:#FF4848; + font-size: 16px; + font-family: 'Zen Maru Gothic', sans-serif; + font-weight: normal; + text-decoration:none; + text-align: center; + transition: box-shadow 250ms ease-in-out; + transition: width 250ms ease-out; + transition: all 250ms ease-out; +} +.delbox .delbtn:hover{ + background-color: #FF4848; + color: #f5f5f5;; + transition: box-shadow 250ms ease-in-out; + transition: width 250ms ease-out; + transition: all 250ms ease-out; +} + +.admin_settings{ + display: flex; +} +.admin_settings .admin_right{ + margin-right: 0px; + width: 70%; +} +.admin_settings .admin_left{ + position: sticky; + top: 0; + margin-left: 0px; + padding: 12px; + width: 30%; + height: 92.5dvh; + border-right: 1px solid #EEE; +} +.admin_leftbtn{ + cursor: pointer; + border: none; + display: flex; + width:80%; + margin: 8px; + padding: 8px auto; + margin-left: auto; + margin-right: auto; + + padding-left: 12px; + padding-top: 4px; + padding-bottom: 4px; + + + background-color: #FFFFFF; + + border-radius: 50px; + color:#FFC832; + font-size: 18px; + font-family: 'Zen Maru Gothic', sans-serif; + font-weight: normal; + text-decoration:none; + text-align: left; + transition: box-shadow 250ms ease-in-out; + transition: width 250ms ease-out; + transition: all 250ms ease-out; +} +.admin_leftbtn:hover{ + background-color: #FFC832; + color: #FFFAE6; + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); + width:85%; +} +.admin_leftbtn:active{ + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); + width:75%; +} + +.admin_userinfo{ + padding: 12px; +} +.admin_userinfo .icon{ + display: flex; + vertical-align: middle; +} +.admin_userinfo .icon img{ + object-fit: cover; + margin-top: 12px; + text-align: left; + width: 128px; + height:128px; + border-radius: 50%; + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); +} +.admin_userinfo .icon .tatext{ + display: block; + margin-top: auto; + margin-bottom: auto; +} +.admin_userinfo .icon .tatext h2{ + word-wrap: break-word; + margin-left: 12px; + margin-top: 12px; + margin-bottom: auto; + color:#252525; + font-size: 32px; + font-family: 'BIZ UDPGothic', sans-serif; + font-weight: 900; +} +.admin_userinfo .icon .tatext p{ + word-wrap: break-word; + margin-left: 12px; + margin-right: auto; + margin-top: auto; + margin-bottom: 14px; + color: #999; + font-size: 18px; + font-family: 'BIZ UDPGothic', sans-serif; + font-weight: 900; +} + +.admin_userinfo .profile p{ + text-align: left; + margin-top: 12px; + margin-bottom: auto; + margin-left: 0px; + margin-right: 0px; + word-wrap: break-word; + font-size: 18px; + color:#252525; + text-decoration: none; + font-family: 'BIZ UDPGothic', sans-serif; + font-weight: bold; +} +.admin_userinfo .roleboxes{ + margin-top: 12px; + margin-left: 0px; + display: flex; + padding: 0px; + flex-wrap : wrap; +} +.admin_userinfo .rolebox{ + margin-top: 0px; + margin-bottom: 12px; + margin-left: 0px; + margin-right: 12px; + width: auto; + padding-left: auto; + padding-right: auto; + background-color: #fff; + border: 1px solid #FFC832; + border-radius: 25px; + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); +} +.admin_userinfo .rolebox p{ + color:#FFC832; + margin-top: 2px; + margin-bottom: 2px; + margin-left: 10px; + margin-right: 10px; + font-size: 16px; + font-family: 'Zen Maru Gothic', sans-serif; + font-weight: normal; +} +.admin_userinfo .about{ + display: block; +} +.admin_userinfo .p2{ + margin-top: 0px; + margin-bottom: 10px; + word-wrap: break-word; + line-height: 20px; + color: #868686; + font-size: 12px; + font-family: 'BIZ UDPGothic', sans-serif; + font-weight: normal; +} +.admin_userinfo .about p{ + word-wrap: break-word; + margin-left: 0px; + margin-right: auto; + margin-top: auto; + margin-bottom: 14px; + color: #252525; + font-size: 18px; + font-family: 'BIZ UDPGothic', sans-serif; + font-weight: 900; +} +.admin_userinfo .banzone{ + display: flex; +} +.admin_userinfo .banzone .banbtn{ + cursor: pointer; + border: none; + display: block; + width:25%; + margin: 12px; + padding: 8px 5%; + margin-left: auto; + margin-right: auto; + + padding-top: 8px; + padding-bottom: 8px; + + background-color: #ff4848; + + text-align: center; + border-radius: 50px; + color:#fff; + font-size: 22px; + font-family: 'Zen Maru Gothic', sans-serif; + font-weight: normal; + text-decoration:none; + text-align: center; + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + transition: box-shadow 250ms ease-in-out; + transition: width 250ms ease-out; +} +.admin_userinfo .banzone .banbtn:hover{ + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); + width:30%; +} +.admin_userinfo .banzone .banbtn:active{ + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); + width:20%; +} +.admin_userinfo .banzone .waterbtn{ + cursor: pointer; + border: none; + display: block; + width:25%; + margin: 12px; + padding: 8px 5%; + margin-left: auto; + margin-right: auto; + + padding-top: 8px; + padding-bottom: 8px; + + background-color: #FFFAE6; + + text-align: center; + border-radius: 50px; + color:#FFC832; + font-size: 22px; + font-family: 'Zen Maru Gothic', sans-serif; + font-weight: normal; + text-decoration:none; + text-align: center; + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + transition: box-shadow 250ms ease-in-out; + transition: width 250ms ease-out; +} +.admin_userinfo .banzone .waterbtn:hover{ + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); + width:30%; +} +.admin_userinfo .banzone .waterbtn:active{ + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); + width:20%; +} +.admin_userinfo .banzone .icebtn{ + cursor: pointer; + border: none; + display: block; + width:25%; + margin: 12px; + padding: 8px 5%; + margin-left: auto; + margin-right: auto; + + padding-top: 8px; + padding-bottom: 8px; + + background-color: #ffbc0d; + + text-align: center; + border-radius: 50px; + color:#fff; + font-size: 22px; + font-family: 'Zen Maru Gothic', sans-serif; + font-weight: normal; + text-decoration:none; + text-align: center; + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); + transition: box-shadow 250ms ease-in-out; + transition: width 250ms ease-out; +} +.admin_userinfo .banzone .icebtn:hover{ + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); + width:30%; +} +.admin_userinfo .banzone .icebtn:active{ + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); + width:20%; +} /*------------------------------------------------------------------------------------------------------------*/ /*--------------------------------------------------スマホ向け--------------------------------------------------*/ /*--------------------------------------------------ここから--------------------------------------------------*/ @@ -3486,6 +3932,16 @@ hr{ transition: width 250ms ease-out; transition: all 250ms ease-out; } + + .ueuse .favbox .addabi svg { + margin-top: -8px; + margin-right: 0px; + margin-bottom: 2px; + width: 24px; + height: 24px; + fill: currentColor; + transition: all 250ms ease-out; + } .ueuse{ animation: slideInY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards; @@ -4191,6 +4647,59 @@ hr{ text-align: left; } + .admin_settings{ + display: block; + } + .admin_settings .admin_right{ + width: 100%; + } + .admin_settings .admin_left{ + background-color: #fff; + position:relative; + width: 100%; + height: auto; + padding: 0px; + border-right: 1px solid #EEE; + } + .admin_leftbtn{ + cursor: pointer; + border: none; + display: block; + width:80%; + margin: 8px; + padding: 8px auto; + margin-left: auto; + margin-right: auto; + + padding-left: 12px; + padding-top: 4px; + padding-bottom: 4px; + + + background-color: #FFFFFF; + + border-radius: 50px; + color:#FFC832; + font-size: 18px; + font-family: 'Zen Maru Gothic', sans-serif; + font-weight: normal; + text-decoration:none; + text-align: left; + transition: box-shadow 250ms ease-in-out; + transition: width 250ms ease-out; + transition: all 250ms ease-out; + } + .admin_leftbtn:hover{ + background-color: #FFC832; + color: #FFFAE6; + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); + width:85%; + } + .admin_leftbtn:active{ + box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); + width:75%; + } + } /*------------------------------------------------------------------------------------------------------------*/ @@ -4408,6 +4917,18 @@ hr{ color:#FFFAE6; } + .fzone .follow .report{ + background-color: #0c0c0c; + color:#FFC832; + border: 1px solid #FFC832; + } + .fzone .follow .report:hover{ + background-color: #302c2c; + color: #ff4848; + border: 1px solid #ff4848; + } + + .rightbox{ background-color: #0c0c0c; @@ -4580,7 +5101,7 @@ hr{ border: none; width: auto; } - .server_code h1{ + .server_code details{ color: #CCC; } .server_code p{ @@ -4732,4 +5253,49 @@ hr{ color: #FFC832; border-bottom: 1px solid #FFC832; } + + .admin_settings .admin_left{ + background-color: #0c0c0c; + border-right: none; + } + .admin_leftbtn{ + background-color: #0c0c0c; + color:#FFC832; + } + .admin_leftbtn:hover{ + background-color: #FFC832; + color: #0c0c0c; + } + + .admin_userinfo .icon .tatext h2{ + color:#FFF; + } + .admin_userinfo .icon .tatext p{ + color: #CCC; + } + .admin_userinfo .profile p{ + color:#CCC; + } + .admin_userinfo .rolebox{ + background-color: #0c0c0c; + border: 1px solid #FFC832; + } + .admin_userinfo .rolebox p{ + color:#FFC832; + } + .admin_userinfo .p2{ + color: #CCC; + } + .admin_userinfo .about p{ + color: #FFF; + } + .delbox .delbtn{ + background-color: #302c2c; + color:#FF4848; + } + + .delbox .delbtn:hover{ + background-color: #FF4848; + color: #F5F5F5; + } } \ No newline at end of file diff --git a/delete/delete.php b/delete/delete.php index 99982eb..b6ee1f7 100644 --- a/delete/delete.php +++ b/delete/delete.php @@ -1,27 +1,35 @@ PDO::ERRMODE_EXCEPTION, - PDO::MYSQL_ATTR_MULTI_STATEMENTS => false - ); - $pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option); - } catch (PDOException $e) { - // 接続エラーのときエラー内容を取得する - $error_message[] = $e->getMessage(); - } + try { + $option = array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option); + } catch (PDOException $e) { + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); + } + // データベース接続の設定 + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $query = $dbh->prepare('SELECT * FROM ueuse WHERE uniqid = :uniqid limit 1'); + + $query->execute(array(':uniqid' => $postUniqid)); + + $result = $query->fetch(); + + if($result["account"] === $postUserid){ // データベース接続の設定 $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, @@ -29,20 +37,20 @@ if (isset($_POST['uniqid']) && isset($_POST['userid'])){ PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, )); - $query = $dbh->prepare('SELECT * FROM ueuse WHERE uniqid = :uniqid limit 1'); + $query = $dbh->prepare('SELECT * FROM account WHERE userid = :userid limit 1'); - $query->execute(array(':uniqid' => $postUniqid)); - - $result = $query->fetch(); + $query->execute(array(':userid' => $postUserid)); - if($result["account"] === $postUserid){ + $result2 = $query->fetch(); + + if($result2["loginid"] === $loginid){ try { $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS); // 削除クエリを実行 $deleteQuery = $pdo->prepare("DELETE FROM ueuse WHERE uniqid = :uniqid AND account = :userid"); $deleteQuery->bindValue(':uniqid', $postUniqid, PDO::PARAM_STR); - $deleteQuery->bindValue(':userid', $userid, PDO::PARAM_STR); + $deleteQuery->bindValue(':userid', $postUserid, PDO::PARAM_STR); $res = $deleteQuery->execute(); if ($res) { @@ -57,6 +65,12 @@ if (isset($_POST['uniqid']) && isset($_POST['userid'])){ exit; } } + }else{ + echo json_encode(['success' => false, 'error' => '削除に失敗しました。(userid_err)']); + exit; } +}else{ + echo json_encode(['success' => false, 'error' => '削除に失敗しました。(sess_err)']); + exit; } ?> diff --git a/emoji/addemoji.php b/emoji/addemoji.php index 1f6fb75..5664311 100644 --- a/emoji/addemoji.php +++ b/emoji/addemoji.php @@ -57,6 +57,7 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { // セッションに値をセット $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $loginid = $res["loginid"]; $_SESSION['admin_login'] = true; $_SESSION['userid'] = $userid; $_SESSION['username'] = $username; @@ -100,6 +101,7 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { // セッションに値をセット $userid = $_COOKIE['userid']; // クッキーから取得した値をセット $username = $_COOKIE['username']; // クッキーから取得した値をセット + $loginid = $res["loginid"]; $_SESSION['admin_login'] = true; $_SESSION['userid'] = $userid; $_SESSION['username'] = $username; diff --git a/emoji/index.php b/emoji/index.php index 0579f0f..5968bb7 100644 --- a/emoji/index.php +++ b/emoji/index.php @@ -55,6 +55,7 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { // セッションに値をセット $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $loginid = $res["loginid"]; $_SESSION['admin_login'] = true; $_SESSION['userid'] = $userid; $_SESSION['username'] = $username; @@ -98,6 +99,7 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { // セッションに値をセット $userid = $_COOKIE['userid']; // クッキーから取得した値をセット $username = $_COOKIE['username']; // クッキーから取得した値をセット + $loginid = $res["loginid"]; $_SESSION['admin_login'] = true; $_SESSION['userid'] = $userid; $_SESSION['username'] = $username; diff --git a/favorite/favorite.php b/favorite/favorite.php index 9e7aa93..6adb8da 100644 --- a/favorite/favorite.php +++ b/favorite/favorite.php @@ -1,65 +1,85 @@ PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option); + } catch (PDOException $e) { + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); + } - // 投稿のいいね情報を取得 - $stmt = $pdo->prepare("SELECT favorite FROM ueuse WHERE uniqid = :uniqid"); - $stmt->bindValue(':uniqid', $postUniqid, PDO::PARAM_STR); - $stmt->execute(); - $post = $stmt->fetch(PDO::FETCH_ASSOC); + // データベース接続の設定 + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $query = $dbh->prepare('SELECT * FROM account WHERE userid = :userid limit 1'); + + $query->execute(array(':userid' => $userId)); + + $result2 = $query->fetch(); + + if($result2["loginid"] === $loginid){ + + try { + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS); + + // 投稿のいいね情報を取得 + $stmt = $pdo->prepare("SELECT favorite FROM ueuse WHERE uniqid = :uniqid"); + $stmt->bindValue(':uniqid', $postUniqid, PDO::PARAM_STR); + $stmt->execute(); + $post = $stmt->fetch(PDO::FETCH_ASSOC); + + if ($post) { + $favoriteList = explode(',', $post['favorite']); + $index = array_search($userId, $favoriteList); + + if ($index === false) { + // ユーザーIDを追加 + $favoriteList[] = $userId; + } else { + // ユーザーIDを削除 + array_splice($favoriteList, $index, 1); + } + + // 新しいいいね情報を更新 + $newFavorite = implode(',', $favoriteList); + $updateQuery = $pdo->prepare("UPDATE ueuse SET favorite = :favorite WHERE uniqid = :uniqid"); + $updateQuery->bindValue(':favorite', $newFavorite, PDO::PARAM_STR); + $updateQuery->bindValue(':uniqid', $postUniqid, PDO::PARAM_STR); + $res = $updateQuery->execute(); + + if ($res) { + echo json_encode(['success' => true, 'newFavorite' => $newFavorite]); + exit; + } else { + echo json_encode(['success' => false, 'error' => 'いいねの更新に失敗しました。']); + exit; + } - if ($post) { - $favoriteList = explode(',', $post['favorite']); - $index = array_search($userId, $favoriteList); - if ($index === false) { - // ユーザーIDを追加 - $favoriteList[] = $userId; } else { - // ユーザーIDを削除 - array_splice($favoriteList, $index, 1); - } - - // 新しいいいね情報を更新 - $newFavorite = implode(',', $favoriteList); - $updateQuery = $pdo->prepare("UPDATE ueuse SET favorite = :favorite WHERE uniqid = :uniqid"); - $updateQuery->bindValue(':favorite', $newFavorite, PDO::PARAM_STR); - $updateQuery->bindValue(':uniqid', $postUniqid, PDO::PARAM_STR); - $res = $updateQuery->execute(); - - if ($res) { - echo json_encode(['success' => true, 'newFavorite' => $newFavorite]); - exit; - } else { - echo json_encode(['success' => false, 'error' => 'いいねの更新に失敗しました。']); + echo json_encode(['success' => false, 'error' => '投稿が見つかりません。']); exit; } - - - } else { - echo json_encode(['success' => false, 'error' => '投稿が見つかりません。']); + } catch(PDOException $e) { + echo json_encode(['success' => false, 'error' => 'データベースエラー:' . $e->getMessage()]); exit; } - } catch(PDOException $e) { - echo json_encode(['success' => false, 'error' => 'データベースエラー:' . $e->getMessage()]); - exit; } + } else { + echo json_encode(['success' => false, 'error' => '必要なパラメータが提供されていません。']); + exit; } -} else { - echo json_encode(['success' => false, 'error' => '必要なパラメータが提供されていません。']); - exit; -} ?> diff --git a/home/ftl.php b/home/ftl.php index e2651f7..5ec2d23 100644 --- a/home/ftl.php +++ b/home/ftl.php @@ -42,9 +42,10 @@ try { $error_message[] = $e->getMessage(); } + if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { - $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin,role FROM account WHERE userid = :userid"); $passQuery->bindValue(':userid', $_SESSION['userid']); $passQuery->execute(); $res = $passQuery->fetch(); @@ -55,6 +56,8 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { // セッションに値をセット $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $loginid = $res["loginid"]; + $role = $res["role"]; $_SESSION['admin_login'] = true; $_SESSION['userid'] = $userid; $_SESSION['username'] = $username; @@ -87,7 +90,7 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { } elseif (isset($_COOKIE['admin_login']) && $_COOKIE['admin_login'] == true) { - $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin,role FROM account WHERE userid = :userid"); $passQuery->bindValue(':userid', $_COOKIE['userid']); $passQuery->execute(); $res = $passQuery->fetch(); @@ -98,6 +101,8 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { // セッションに値をセット $userid = $_COOKIE['userid']; // クッキーから取得した値をセット $username = $_COOKIE['username']; // クッキーから取得した値をセット + $loginid = $res["loginid"]; + $role = $res["role"]; $_SESSION['admin_login'] = true; $_SESSION['userid'] = $userid; $_SESSION['username'] = $username; @@ -448,28 +453,30 @@ if ("serviceWorker" in navigator) { -
-
- -

画像のEXIF情報(位置情報など)は削除されません。
情報漏洩に気をつけてくださいね…

-
- - - + + +
+ +

画像のEXIF情報(位置情報など)は削除されません。
情報漏洩に気をつけてくださいね…

+
+ + + - + +
-
- + + diff --git a/server/uwuzuabout.txt b/server/uwuzuabout.txt index f20ded2..c7c96b1 100644 --- a/server/uwuzuabout.txt +++ b/server/uwuzuabout.txt @@ -31,12 +31,12 @@ uwuzuはPHPとJS、HTML(プログラミング言語じゃないか)、CSSで作 まず、Apache2とPHP 8とmysql Ver 15が導入されているサーバーを準備します! PHP 8では事前にGDを有効化しておいてください!(QRコードの生成に必要です。) 次にSQLを設定します。(InnoDB) -まず、お好きな名前でDBを作成し、その中に、account,emoji,notice,role,ueuse,notificationとテーブルを作成します。 +まず、お好きな名前でDBを作成し、その中に、account,emoji,notice,role,ueuse,notification,ads,reportとテーブルを作成します。 テーブルの中身は以下のとおりです。 照合順序は全て標準でutf8mb4_general_ciです。 ## 簡単に構築できるようSQLの構造ファイルがリリースに添付されています!そちらをインポートしていただけますと大幅に簡単に導入できます! -(userロールとofficialロールの設定は別途必要です。お手数ですがそこの設定だけよろしくお願いいたします。) +(userロールとofficialロールとiceロールの設定は別途必要です。お手数ですがそこの設定だけよろしくお願いいたします。) ### account - sysid(INT)(AUTO_INCREMENT ) アカウントが追加されるとカウントされるシステム用ID @@ -107,8 +107,27 @@ PHP 8では事前にGDを有効化しておいてください!(QRコードの - used(varchar(25)) 使用済みかそうでないか - datetime(datetime) 招待コード仕様日時更新用 +### report +- sysid(INT)(AUTO_INCREMENT) 追加されるとカウントされるシステム用ID +- uniqid(varchar(256)) 通報ID保存用 +- userid(varchar(500)) 通報先ユーザーID保存用 +- report_userid(varchar(500)) 通報元ユーザーID保存用 +- msg(text) サービス管理者宛メッセージ保存用 +- datetime(datetime) 通報日時保存用 +- admin_chk(varchar(25)) 解決済みかどうか確認用 + +### ads +- sysid(INT)(AUTO_INCREMENT) 追加されるとカウントされるシステム用ID +- uniqid(varchar(512)) 広告ID保存用 +- url(varchar(512)) 広告のクリック先URL保存用 +- image_url(varchar(512)) 広告に表示する画像URL保存用 +- memo(text) 広告にマウスオーバーしたときに表示されるメッセージ保存用 +- start_date(datetime) 広告配信開始日時保存用 +- limit_date(datetime) 広告配信終了日時保存用 +- datetime(datetime) 広告追加日時保存用 + すべて作成完了したらGithubよりuwuzuのファイルをDLし、解凍し、それをサーバーの動作ディレクトリに置き、Apacheのhttpd.confからその動作ディレクトリを指定し、動作ディレクトリ内のdb.phpにDBのログイン情報を書き込んであとはApacheとphpとMy SQLを起動するだけ! -起動したらまずDBのroleにphpmyadminから「user」ロールと「official」ロールを追加、権限は「user」と「official」でOK。ロール名はとりあえず「一般ユーザー」ロールの色はHEXコード(#を除く)で000000のように指定。(この2つのロールがないとエラーが発生します。) +起動したらまずDBのroleにphpmyadminから「user」ロールと「official」ロールと「ice」ロールを追加、権限は「user」と「official」と「ice」でOK。ロール名はとりあえず「一般ユーザー」とか適当でOK、ロールの色はHEXコード(#を除く)で000000のように指定。(この3つのロールがないとエラーが発生します。) そしたら普通にuwuzuにアクセスして自分のアカウントを登録。 ## 管理者アカウント登録機能が追加されました。【[domain]/admin/】より設定できるのでそちらをご利用ください。 なお、管理者アカウントを導入後に登録した場合サーバーを止めてuwuzu動作ディレクトリ内のserverフォルダ内のファイルを設定する必要はございません。 @@ -118,6 +137,8 @@ PHP 8では事前にGDを有効化しておいてください!(QRコードの ## 管理者アカウント作成後にログインし、サーバー設定より以下の項目が簡単に設定できます。 +- 404imagepath.txt : 404ページに表示する画像パス保存用 +- 503imagepath.txt : 503ページに表示する画像パス保存用 - admininfo.txt : 管理者名(てすとまる/@sampledayo) - contact.txt : 管理者への連絡用メアド(sample@test.com) - info.txt : サーバー登録時に表示されるメッセージ(好きな内容) @@ -152,4 +173,4 @@ daichimarukanaと一緒に開発したいよ~って人は私のHPからメー 編集者 : daichimarukana -最終更新日 : 2023/09/05 0:36 \ No newline at end of file +最終更新日 : 2023/09/10 18:15 \ No newline at end of file diff --git a/server/uwuzuinfo.txt b/server/uwuzuinfo.txt index 388cc9f..f191aad 100644 --- a/server/uwuzuinfo.txt +++ b/server/uwuzuinfo.txt @@ -1,4 +1,4 @@ uwuzu -1.2.18 -2023/09/06 +1.2.19 +2023/09/10 daichimarukana,putonfps \ No newline at end of file diff --git a/server/uwuzurelease.txt b/server/uwuzurelease.txt index 2985744..0a605c5 100644 --- a/server/uwuzurelease.txt +++ b/server/uwuzurelease.txt @@ -1,6 +1,29 @@ ## リリースノートだぜぇぇぇぇぇぇい!!!!!!! ここにはuwuzuの更新情報を載せてくぜぇ~!(いやまてテンションおかしいだろ...) +## Version 1.2.19 +リリース日:2023/09/10 +脆弱性修正時に新たなバグが追加されてしまったためそれの修正をしました。 +修正箇所にはまだ脆弱性があるため使用時はご注意ください。 +日時表示で投稿日時が同じ年内の場合は月/日表示にするようにしました。 +追記ボタンをアイコン表示にしました。 +招待コードの表示UIを変更しました。 +招待コードを量産できる機能を実装しました。 +招待コードを簡単に削除できるようにしました。 +通知内で改行できるようにしました。 +アカウントの凍結・BAN機能を実装しました。 +凍結機能実装にあたり「凍結/ice」ロールが必須になりました。 +サーバー構築時は「ユーザー/user・公式/official・凍結/ice」を追加するようにしてください。 +設定画面のUIを変更しました。 +アカウント通報機能を実装しました。 +広告を設置できるようにしました! +広告は各サーバーごとに募集して載せる方式となります。 +また、広告によって収入を得る場合電気通信事業者に該当するため電気通信事業の届出をしてください。 +詳細は電気通信事業参入マニュアル[追補版]をご覧ください。[https://www.soumu.go.jp/main_content/000477428.pdf] +広告はLTL・FTL・返信画面に投稿10件につき1件表示されます。 +広告の優先順位等は設定できません。 +広告はTLの横幅いっぱいに、縦は10dvhで表示されます。 + ## Version 1.2.18 リリース日:2023/09/06 脆弱性を修正しました。 diff --git a/settings/addauthcode.php b/settings/addauthcode.php index 45c27bc..981c1d0 100644 --- a/settings/addauthcode.php +++ b/settings/addauthcode.php @@ -67,6 +67,7 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { // セッションに値をセット $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $loginid = $res["loginid"]; $_SESSION['admin_login'] = true; $_SESSION['userid'] = $userid; $_SESSION['username'] = $username; @@ -110,6 +111,7 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { // セッションに値をセット $userid = $_COOKIE['userid']; // クッキーから取得した値をセット $username = $_COOKIE['username']; // クッキーから取得した値をセット + $loginid = $res["loginid"]; $_SESSION['admin_login'] = true; $_SESSION['userid'] = $userid; $_SESSION['username'] = $username; diff --git a/settings/success.php b/settings/success.php index ea0488d..104ef7b 100644 --- a/settings/success.php +++ b/settings/success.php @@ -54,6 +54,7 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { // セッションに値をセット $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $loginid = $res["loginid"]; $_SESSION['admin_login'] = true; $_SESSION['userid'] = $userid; $_SESSION['username'] = $username; @@ -97,6 +98,7 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { // セッションに値をセット $userid = $_COOKIE['userid']; // クッキーから取得した値をセット $username = $_COOKIE['username']; // クッキーから取得した値をセット + $loginid = $res["loginid"]; $_SESSION['admin_login'] = true; $_SESSION['userid'] = $userid; $_SESSION['username'] = $username; diff --git a/settings_admin/ad_admin.php b/settings_admin/ad_admin.php new file mode 100644 index 0000000..d650378 --- /dev/null +++ b/settings_admin/ad_admin.php @@ -0,0 +1,400 @@ + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + +} catch(PDOException $e) { + + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} +if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_SESSION['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_SESSION['loginid'] === $res["loginid"] && $_SESSION['userid'] === $res["userid"]){ + // セッションに値をセット + $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット + $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $loginid = $res["loginid"]; + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid, [ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('username', $username,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('loginid', $res["loginid"],[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('admin_login', true,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + }else{ + header("Location: ../login.php"); + exit; + } + + +} elseif (isset($_COOKIE['admin_login']) && $_COOKIE['admin_login'] == true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_COOKIE['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_COOKIE['loginid'] === $res["loginid"] && $_COOKIE['userid'] === $res["userid"]){ + // セッションに値をセット + $userid = $_COOKIE['userid']; // クッキーから取得した値をセット + $username = $_COOKIE['username']; // クッキーから取得した値をセット + $loginid = $res["loginid"]; + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('username', $username,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('loginid', $res["loginid"],[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('admin_login', true,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + }else{ + header("Location: ../login.php"); + exit; + } + + +} else { + // ログインが許可されていない場合、ログインページにリダイレクト + header("Location: ../login.php"); + exit; +} +if(empty($userid)){ + header("Location: ../login.php"); + exit; +} +if(empty($username)){ + header("Location: ../login.php"); + exit; +} + +if(!($res["admin"] === "yes")){ + header("Location: ../login.php"); + exit; +} +$notiQuery = $pdo->prepare("SELECT COUNT(*) as notification_count FROM notification WHERE touserid = :userid AND userchk = 'none'"); +$notiQuery->bindValue(':userid', $userid); +$notiQuery->execute(); +$notiData = $notiQuery->fetch(PDO::FETCH_ASSOC); + +$notificationcount = $notiData['notification_count']; + +if( !empty($_POST['ads_btn_submit']) ) { + + $ads_url = htmlentities($_POST['ads_url']); + $ads_img_url = htmlentities($_POST['ads_img_url']); + $ads_start_date = htmlentities(date($_POST['ads_start_date'])); + $ads_limit_date = htmlentities(date($_POST['ads_limit_date'])); + $ads_memo = htmlentities($_POST['ads_memo']); + + if(empty($ads_url)){ + $error_message[] = "URLが入力されていません。"; + } + if(empty($ads_img_url)){ + $error_message[] = "画像のURLが入力されていません。"; + } + if(empty($ads_start_url)){ + $error_message[] = "設置開始日時が入力されていません。"; + } + if(empty($ads_limit_url)){ + $error_message[] = "設置終了日時が入力されていません。"; + } + if(empty($ads_memo_url)){ + $error_message[] = "メモが入力されていません。"; + } + + if (!empty($pdo)) { + // 書き込み日時を取得 + $datetime = date("Y-m-d H:i:s"); + $uniqid = createUniqId(); + + // トランザクション開始 + $pdo->beginTransaction(); + + try { + + // SQL作成 + $stmt = $pdo->prepare("INSERT INTO ads (uniqid, url, image_url, memo, start_date, limit_date, datetime) VALUES (:uniqid, :url, :image_url, :memo, :start_date, :limit_date, :datetime)"); + + $stmt->bindParam(':uniqid', $uniqid, PDO::PARAM_STR); + $stmt->bindParam(':url', $ads_url, PDO::PARAM_STR); + $stmt->bindParam(':image_url', $ads_img_url, PDO::PARAM_STR); + $stmt->bindParam(':memo', $ads_memo, PDO::PARAM_STR); + $stmt->bindParam(':start_date', $ads_start_date, PDO::PARAM_STR); + $stmt->bindParam(':limit_date', $ads_limit_date, PDO::PARAM_STR); + $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $res = $pdo->commit(); + + } catch(Exception $e) { + + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + + if( $res ) { + $url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + header("Location:".$url.""); + exit; + } else { + $error_message[] = $e->getMessage(); + } + + // プリペアドステートメントを削除 + $stmt = null; + + } +} +if( !empty($_POST['ads_del']) ) { + $ads_uniqid = htmlentities($_POST['ads_id']); + try{ + // 通知削除クエリを実行 + $deleteQuery = $pdo->prepare("DELETE FROM ads WHERE uniqid = :uniqid"); + $deleteQuery->bindValue(':uniqid', $ads_uniqid, PDO::PARAM_STR); + $res = $deleteQuery->execute(); + + } catch (Exception $e) { + + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + + if( $res ) { + $url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + header("Location:".$url.""); + exit; + } else { + $error_message[] = $e->getMessage(); + } + + + // プリペアドステートメントを削除 + $stmt = null; +} + +require('../logout/logout.php'); + +if(isset($_GET['q'])){ + $keyword = htmlentities($_GET['q']); +}else{ + $keyword = ""; +} + +if (!empty($pdo)) { + $sql = "SELECT * FROM ads ORDER BY datetime DESC"; + $allads = $pdo->query($sql); + + while ($row = $allads->fetch(PDO::FETCH_ASSOC)) { + + $adss[] = $row; + } +} + +?> + + + + + + + + + +広告 - <?php echo file_get_contents($servernamefile);?> + + + + + +
+ + +
    + +

    + +
+ +
+ + +
+
+

広告追加

+

広告はLTL・FTL・返信画面に表示されます。
また、投稿10件につき一件の広告がランダムに選ばれ表示されます。
表示の優先順位は設定できません。

+
+

クリックした時のリダイレクト先URL

+
広告をクリックするとこのURLに飛びます。
+ +
+
+

画像URL

+
以下のURL先の画像が表示されます。
+ +
+
+

掲載開始日時

+
広告の掲載開始日時です。
+ +
+
+

掲載終了日時

+
広告の掲載終了日時です。
+ +
+
+

広告のメモ

+
ユーザーが広告について確認するときに表示されるメモです。
+ +
+ + +
+
+
+

広告一覧

+ + +
+
+ +
+

設置状況: date("Y-m-d H:i:s")){ + echo "設置中  ✅"; + }else{ + echo "設置解除済⛔"; + }}?>

+

設置期間: +


+

URL:

+

画像URL:

+
+

メモ:

+
+

追加日時:

+
+
+
+

削除ボタンを押すとこの広告は削除されます。

+ " style="display:none;" > + +
+
+
+
+ + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/settings_admin/code_delete.php b/settings_admin/code_delete.php new file mode 100644 index 0000000..459fac5 --- /dev/null +++ b/settings_admin/code_delete.php @@ -0,0 +1,60 @@ + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option); + } catch (PDOException $e) { + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); + } + + // データベース接続の設定 + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $query = $dbh->prepare('SELECT * FROM account WHERE userid = :userid limit 1'); + + $query->execute(array(':userid' => $postUserid)); + + $result2 = $query->fetch(); + + if($result2["loginid"] === $loginid){ + if($result2["admin"] === "yes"){ + try { + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS); + + // 削除クエリを実行 + $deleteQuery = $pdo->prepare("DELETE FROM invitation WHERE code = :code"); + $deleteQuery->bindValue(':code', $postCode, PDO::PARAM_STR); + $res = $deleteQuery->execute(); + + if ($res) { + echo json_encode(['success' => true]); + exit; + } else { + echo json_encode(['success' => false, 'error' => '削除に失敗しました。']); + exit; + } + } catch(PDOException $e) { + echo json_encode(['success' => false, 'error' => 'データベースエラー:' . $e->getMessage()]); + exit; + } + } + } +}else{ + echo json_encode(['success' => false, 'error' => '削除に失敗しました。(sess_err)']); + exit; +} +?> diff --git a/settings_admin/codeadmin.php b/settings_admin/codeadmin.php new file mode 100644 index 0000000..575ecad --- /dev/null +++ b/settings_admin/codeadmin.php @@ -0,0 +1,364 @@ + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=UTF8;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + +} catch(PDOException $e) { + + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} +if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_SESSION['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_SESSION['loginid'] === $res["loginid"] && $_SESSION['userid'] === $res["userid"]){ + // セッションに値をセット + $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット + $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $loginid = $res["loginid"]; + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid, [ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('username', $username,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('loginid', $res["loginid"],[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('admin_login', true,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + }else{ + header("Location: ../login.php"); + exit; + } + + +} elseif (isset($_COOKIE['admin_login']) && $_COOKIE['admin_login'] == true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_COOKIE['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_COOKIE['loginid'] === $res["loginid"] && $_COOKIE['userid'] === $res["userid"]){ + // セッションに値をセット + $userid = $_COOKIE['userid']; // クッキーから取得した値をセット + $username = $_COOKIE['username']; // クッキーから取得した値をセット + $loginid = $res["loginid"]; + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('username', $username,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('loginid', $res["loginid"],[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('admin_login', true,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + }else{ + header("Location: ../login.php"); + exit; + } + + +} else { + // ログインが許可されていない場合、ログインページにリダイレクト + header("Location: ../login.php"); + exit; +} +if(empty($userid)){ + header("Location: ../login.php"); + exit; +} +if(empty($username)){ + header("Location: ../login.php"); + exit; +} + +if(!($res["admin"] === "yes")){ + header("Location: ../login.php"); + exit; +} +$notiQuery = $pdo->prepare("SELECT COUNT(*) as notification_count FROM notification WHERE touserid = :userid AND userchk = 'none'"); +$notiQuery->bindValue(':userid', $userid); +$notiQuery->execute(); +$notiData = $notiQuery->fetch(PDO::FETCH_ASSOC); + +$notificationcount = $notiData['notification_count']; + +if( !empty($pdo) ) { + + // データベース接続の設定 + $dbh = new PDO('mysql:charset=UTF8;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $userQuery = $dbh->prepare("SELECT username, userid, profile, role FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $userid); + $userQuery->execute(); + $userData = $userQuery->fetch(); + + $role = $userData["role"]; + + $dbh = new PDO('mysql:charset=UTF8;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + + $rerole = $dbh->prepare("SELECT username, userid, password, mailadds, profile, iconname, headname, role, datetime FROM account WHERE userid = :userid"); + + $rerole->bindValue(':userid', $userid); + // SQL実行 + $rerole->execute(); + + $userdata = $rerole->fetch(); // ここでデータベースから取得した値を $role に代入する + + +} + +if (!empty($pdo)) { + + $sql = "SELECT code,used,datetime FROM invitation ORDER BY datetime DESC"; + $invcode = $pdo->query($sql); + + while ($row = $invcode->fetch(PDO::FETCH_ASSOC)) { + + $codes[] = $row; + } +} + +if( !empty($_POST['code_btn_submit']) ) { + $make_code = $_POST['make_code']; + $code_num = 0; + while ($code_num < (int)$make_code) { + $code_num++; + $pdo->beginTransaction(); + $datetime = date("Y-m-d H:i:s"); + + try { + + $new_invcode = random_code(); + $used = "none"; + + // SQL作成 + $stmt = $pdo->prepare("INSERT INTO invitation (code, used, datetime) VALUES (:code, :used, :datetime)"); + + $stmt->bindParam(':code', $new_invcode, PDO::PARAM_STR); + $stmt->bindParam(':used', $used, PDO::PARAM_STR); + $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $res = $pdo->commit(); + + } catch (Exception $e) { + + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + } + if ($res) { + $url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + header("Location:".$url.""); + exit; + } else { + $error_message[] = '発行に失敗しました。'; + } + + // プリペアドステートメントを削除 + $stmt = null; +} +require('../logout/logout.php'); +?> + + + + + + + + + +招待コード発行所 - <?php echo file_get_contents($servernamefile);?> + + + + + +
+ + +
    + +

    + +
+ +
+ + +
+
+

招待コード発行所

+ +

下の発行ボタンで新しくコードを発行できます!
なお、コードは一回限り有効です。

+
+

発行数

+ +
+ + +
+
+ コード: +

使用状況:発行日時:".$value["datetime"].""; + }elseif($value["used"] === "true"){ + echo "使用済み
使用日時:".$value["datetime"].""; + }?>

+
+

削除ボタンを押すとこのコードは使用できなくなります。

+ +
+
+
+ + + +

サーバーは招待制にされていないため招待コードは利用できません。

+ + +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/settings_admin/serveradmin.php b/settings_admin/serveradmin.php new file mode 100644 index 0000000..39c3bff --- /dev/null +++ b/settings_admin/serveradmin.php @@ -0,0 +1,447 @@ + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=UTF8;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + +} catch(PDOException $e) { + + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} +if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_SESSION['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_SESSION['loginid'] === $res["loginid"] && $_SESSION['userid'] === $res["userid"]){ + // セッションに値をセット + $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット + $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $loginid = $res["loginid"]; + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid, [ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('username', $username,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('loginid', $res["loginid"],[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('admin_login', true,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + }else{ + header("Location: ../login.php"); + exit; + } + + +} elseif (isset($_COOKIE['admin_login']) && $_COOKIE['admin_login'] == true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_COOKIE['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_COOKIE['loginid'] === $res["loginid"] && $_COOKIE['userid'] === $res["userid"]){ + // セッションに値をセット + $userid = $_COOKIE['userid']; // クッキーから取得した値をセット + $username = $_COOKIE['username']; // クッキーから取得した値をセット + $loginid = $res["loginid"]; + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('username', $username,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('loginid', $res["loginid"],[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('admin_login', true,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + }else{ + header("Location: ../login.php"); + exit; + } + + +} else { + // ログインが許可されていない場合、ログインページにリダイレクト + header("Location: ../login.php"); + exit; +} +if(empty($userid)){ + header("Location: ../login.php"); + exit; +} +if(empty($username)){ + header("Location: ../login.php"); + exit; +} + +if(!($res["admin"] === "yes")){ + header("Location: ../login.php"); + exit; +} +$notiQuery = $pdo->prepare("SELECT COUNT(*) as notification_count FROM notification WHERE touserid = :userid AND userchk = 'none'"); +$notiQuery->bindValue(':userid', $userid); +$notiQuery->execute(); +$notiData = $notiQuery->fetch(PDO::FETCH_ASSOC); + +$notificationcount = $notiData['notification_count']; + +if( !empty($pdo) ) { + + // データベース接続の設定 + $dbh = new PDO('mysql:charset=UTF8;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $userQuery = $dbh->prepare("SELECT username, userid, profile, role FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $userid); + $userQuery->execute(); + $userData = $userQuery->fetch(); + + $role = $userData["role"]; + + $dbh = new PDO('mysql:charset=UTF8;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + + $rerole = $dbh->prepare("SELECT username, userid, password, mailadds, profile, iconname, headname, role, datetime FROM account WHERE userid = :userid"); + + $rerole->bindValue(':userid', $userid); + // SQL実行 + $rerole->execute(); + + $userdata = $rerole->fetch(); // ここでデータベースから取得した値を $role に代入する + + +} + +if (!empty($pdo)) { + + $sql = "SELECT code,used,datetime FROM invitation ORDER BY datetime DESC"; + $invcode = $pdo->query($sql); + + while ($row = $invcode->fetch(PDO::FETCH_ASSOC)) { + + $codes[] = $row; + } +} + +if( !empty($_POST['btn_submit']) ) { + + // 空白除去 + $servername = $_POST['servername']; + + $serverinfo = $_POST['serverinfo']; + + $serveradminname = $_POST['serveradminname']; + + $servermailadds = $_POST['servermailadds']; + + $onlyuser = $_POST['onlyuser']; + + if($onlyuser === "true"){ + $saveonlyuser = "true"; + }else{ + $saveonlyuser = "false"; + } + + $postrobots = $_POST['robots']; + + if($postrobots === "true"){ + //GPTBotによるクロールを拒否 + $file = fopen($robots, 'w'); + $data = "User-agent: GPTBot\nDisallow: /"; + fputs($file, $data); + fclose($file); + }else{ + //GPTBotによるクロールを許可 + $file = fopen($robots, 'w'); + $data = ""; + fputs($file, $data); + fclose($file); + } + + + $serverterms = $_POST['serverterms']; + + $serverprv = $_POST['serverprv']; + + $serverstop = $_POST['serverstop']; + + //鯖名 + $file = fopen($servernamefile, 'w'); + $data = $servername; + fputs($file, $data); + fclose($file); + + //鯖紹介 + $file = fopen($serverinfofile, 'w'); + $data = $serverinfo; + fputs($file, $data); + fclose($file); + + //鯖管理者名 + $file = fopen($adminfile, 'w'); + $data = $serveradminname; + fputs($file, $data); + fclose($file); + + //鯖管理者メアド + $file = fopen($contactfile, 'w'); + $data = $servermailadds; + fputs($file, $data); + fclose($file); + + //招待制にするか + $file = fopen($onlyuserfile, 'w'); + $data = $saveonlyuser; + fputs($file, $data); + fclose($file); + + //利用規約 + $file = fopen($servertermsfile, 'w'); + $data = $serverterms; + fputs($file, $data); + fclose($file); + + //プライバシーポリシー + $file = fopen($serverprvfile, 'w'); + $data = $serverprv; + fputs($file, $data); + fclose($file); + + //鯖停止 + $file = fopen($serverstopfile, 'w'); + $data = $serverstop; + fputs($file, $data); + fclose($file); + + $url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + header("Location:".$url.""); + exit; +} +require('../logout/logout.php'); +?> + + + + + + + + + +サーバー設定 - <?php echo file_get_contents($servernamefile);?> + + + + + +
+ + +
    + +

    + +
+ +
+ + +
+
+

サーバー設定

+
+

サーバー名

+ +
+ +
+

サーバー紹介メッセージ

+ +
+ +
+

サーバー管理者の名前

+ +
+ +
+

サーバーへのお問い合わせ用メールアドレス

+ +
+ +
+

招待制にするかどうか

+
+ + + + + + + +
+
+ +
+

OpenAIによるクロールを拒否するかどうか
※robots.txtによりOpenAIからのクロールを拒否するものであり、他のAI企業によるクロールを完全拒否するものではございません。

+
+ + + + + + + +
+
+ +
+

利用規約

+ +
+
+

プライバシーポリシー

+ +
+ +
+

サーバー停止時表示メッセージ

+ +
+ + +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/settings_admin/settings_left_menu.php b/settings_admin/settings_left_menu.php new file mode 100644 index 0000000..35d28a4 --- /dev/null +++ b/settings_admin/settings_left_menu.php @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/settings_admin/useradmin.php b/settings_admin/useradmin.php new file mode 100644 index 0000000..4252710 --- /dev/null +++ b/settings_admin/useradmin.php @@ -0,0 +1,374 @@ + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + +} catch(PDOException $e) { + + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} +if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_SESSION['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_SESSION['loginid'] === $res["loginid"] && $_SESSION['userid'] === $res["userid"]){ + // セッションに値をセット + $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット + $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $loginid = $res["loginid"]; + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid, [ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('username', $username,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('loginid', $res["loginid"],[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('admin_login', true,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + }else{ + header("Location: ../login.php"); + exit; + } + + +} elseif (isset($_COOKIE['admin_login']) && $_COOKIE['admin_login'] == true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_COOKIE['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_COOKIE['loginid'] === $res["loginid"] && $_COOKIE['userid'] === $res["userid"]){ + // セッションに値をセット + $userid = $_COOKIE['userid']; // クッキーから取得した値をセット + $username = $_COOKIE['username']; // クッキーから取得した値をセット + $loginid = $res["loginid"]; + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('username', $username,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('loginid', $res["loginid"],[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('admin_login', true,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + }else{ + header("Location: ../login.php"); + exit; + } + + +} else { + // ログインが許可されていない場合、ログインページにリダイレクト + header("Location: ../login.php"); + exit; +} +if(empty($userid)){ + header("Location: ../login.php"); + exit; +} +if(empty($username)){ + header("Location: ../login.php"); + exit; +} + +if(!($res["admin"] === "yes")){ + header("Location: ../login.php"); + exit; +} +$notiQuery = $pdo->prepare("SELECT COUNT(*) as notification_count FROM notification WHERE touserid = :userid AND userchk = 'none'"); +$notiQuery->bindValue(':userid', $userid); +$notiQuery->execute(); +$notiData = $notiQuery->fetch(PDO::FETCH_ASSOC); + +$notificationcount = $notiData['notification_count']; + + +if( !empty($_POST['btn_submit']) ) { + + // 空白除去 + $target_userid = $_POST['target_userid']; + + if (!empty($pdo)) { + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $rerole = $dbh->prepare("SELECT * FROM account WHERE userid = :userid"); + + $rerole->bindValue(':userid', $target_userid); + // SQL実行 + $rerole->execute(); + + $userdata = $rerole->fetch(); // ここでデータベースから取得した値を $role に代入する + + if(empty($userdata)){ + $error_message[] = "ユーザーがいません"; + }else{ + $_SESSION['userdata'] = $userdata; + + // リダイレクト先のURLへ転送する + $url = 'userinfo'; + header('Location: ' . $url, true, 303); + + // すべての出力を終了 + exit; + } + + } +} + +if( !empty($_POST['report_done']) ) { + + $report_id = $_POST['report_id']; + + if (!empty($pdo)) { + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $newchk = "done"; + // トランザクション開始 + $pdo->beginTransaction(); + + try { + + $stmt = $pdo->prepare("UPDATE report SET admin_chk = :adchk WHERE uniqid = :uniqid"); + + $stmt->bindValue(':adchk', $newchk, PDO::PARAM_STR); + + $stmt->bindValue(':uniqid', $report_id , PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $res = $pdo->commit(); + + if ($res) { + $url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + header("Location:".$url.""); + exit; + } else { + $error_message[] = '発行に失敗しました。'; + } + + } catch (Exception $e) { + $error_message[] = "えらー"; + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + + } +} +require('../logout/logout.php'); + +if(isset($_GET['q'])){ + $keyword = htmlentities($_GET['q']); +}else{ + $keyword = ""; +} + +if (!empty($pdo)) { + + $sql = "SELECT * FROM report WHERE admin_chk = 'none' ORDER BY datetime DESC"; + $allreport = $pdo->query($sql); + + while ($row = $allreport->fetch(PDO::FETCH_ASSOC)) { + + $reports[] = $row; + } +} + +?> + + + + + + + + + +ユーザー管理 - <?php echo file_get_contents($servernamefile);?> + + + + + +
+ + +
    + +

    + +
+ +
+ + +
+
+

ユーザー管理

+
+

ユーザーID

+
「@」は外してください。
+ +
+ + + +
+
+ + +
+
+ + + +
+
+
+

通報

+ + +
+
+ @ +
+

通報先アカウント名:@

+

通報元アカウント名:@

+
+

通報元アカウントよりメッセージ

+

+
+

通報日時:

+
+

アカウント操作を行う場合は上の「ユーザーID」にアカウントをしたいユーザーIDを入れて対応してください。

+
+
+

解決ボタンを押すとこの件は解決済みとなります。

+ " style="display:none;" > + +
+
+
+
+ + +

通報されたアカウントはありません。

+ + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/settings_admin/userinfo.php b/settings_admin/userinfo.php new file mode 100644 index 0000000..5c8d698 --- /dev/null +++ b/settings_admin/userinfo.php @@ -0,0 +1,696 @@ + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + +} catch(PDOException $e) { + + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} +if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_SESSION['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_SESSION['loginid'] === $res["loginid"] && $_SESSION['userid'] === $res["userid"]){ + // セッションに値をセット + $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット + $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $loginid = $res["loginid"]; + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid, [ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('username', $username,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('loginid', $res["loginid"],[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('admin_login', true,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + }else{ + header("Location: ../login.php"); + exit; + } + + +} elseif (isset($_COOKIE['admin_login']) && $_COOKIE['admin_login'] == true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_COOKIE['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_COOKIE['loginid'] === $res["loginid"] && $_COOKIE['userid'] === $res["userid"]){ + // セッションに値をセット + $userid = $_COOKIE['userid']; // クッキーから取得した値をセット + $username = $_COOKIE['username']; // クッキーから取得した値をセット + $loginid = $res["loginid"]; + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('username', $username,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('loginid', $res["loginid"],[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('admin_login', true,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + }else{ + header("Location: ../login.php"); + exit; + } + + +} else { + // ログインが許可されていない場合、ログインページにリダイレクト + header("Location: ../login.php"); + exit; +} +if(empty($userid)){ + header("Location: ../login.php"); + exit; +} +if(empty($username)){ + header("Location: ../login.php"); + exit; +} + +if(!($res["admin"] === "yes")){ + header("Location: ../login.php"); + exit; +} +$notiQuery = $pdo->prepare("SELECT COUNT(*) as notification_count FROM notification WHERE touserid = :userid AND userchk = 'none'"); +$notiQuery->bindValue(':userid', $userid); +$notiQuery->execute(); +$notiData = $notiQuery->fetch(PDO::FETCH_ASSOC); + +$notificationcount = $notiData['notification_count']; + + +if (!empty($pdo)) { + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + $roles = explode(',', $userdata["role"]); + + $roleDataArray = array(); + + foreach ($roles as $roleId) { + $rerole = $dbh->prepare("SELECT rolename, roleauth, rolecolor FROM role WHERE roleidname = :role"); + $rerole->bindValue(':role', $roleId); + $rerole->execute(); + $roleDataArray[$roleId] = $rerole->fetch(); + } + + $followIds = explode(',', $userdata['follow']); + $followCount = count($followIds)-1; + + $followerIds = explode(',', $userdata['follower']); + $followerCount = count($followerIds)-1; + + $result = $dbh->prepare("SELECT ueuse FROM ueuse WHERE account = :userid ORDER BY datetime"); + $result->bindValue(':userid', $userdata["userid"]); + $result->execute(); + $upload_cnt1 = $result->rowCount(); + +} +if( !empty($_POST['send_ice_submit']) ) { + + $notice_msg = $_POST['notice_msg']; + + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $newrole = "ice"; + $newtoken = "ice"; + $newadmin = "user"; + // トランザクション開始 + $pdo->beginTransaction(); + + try { + $touserid = htmlentities($userdata['userid'], ENT_QUOTES, 'UTF-8'); + // SQL作成 + $stmt = $pdo->prepare("UPDATE account SET role = :role,token = :newtoken,admin = :newadmin WHERE userid = :userid"); + + $stmt->bindValue(':role', $newrole, PDO::PARAM_STR); + $stmt->bindValue(':newtoken', $newtoken, PDO::PARAM_STR); + $stmt->bindValue(':newadmin', $newadmin, PDO::PARAM_STR); + + $stmt->bindValue(':userid', $touserid, PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $res = $pdo->commit(); + + + } catch (Exception $e) { + + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + + $pdo->beginTransaction(); + + try { + $touserid = htmlentities($userdata['userid'], ENT_QUOTES, 'UTF-8'); + $datetime = date("Y-m-d H:i:s"); + $msg = "サービス管理者からのメッセージは以下のものです。\n" . $notice_msg . "\n異議申し立てする場合は連絡用メールに異議申し立てをする旨を記載し送信をしてください。"; + $title = "🧊お使いのアカウントは凍結されました。🧊"; + $url = "/rule/serverabout"; + $userchk = 'none'; + + // 通知用SQL作成 + $stmt = $pdo->prepare("INSERT INTO notification (touserid, msg, url, datetime, userchk, title) VALUES (:touserid, :msg, :url, :datetime, :userchk, :title)"); + + + $stmt->bindParam(':touserid', $touserid, PDO::PARAM_STR); + $stmt->bindParam(':msg', $msg, PDO::PARAM_STR); + $stmt->bindParam(':url', $url, PDO::PARAM_STR); + $stmt->bindParam(':userchk', $userchk, PDO::PARAM_STR); + $stmt->bindParam(':title', $title, PDO::PARAM_STR); + + $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); + + // SQLクエリの実行 + $res2 = $stmt->execute(); + + // コミット + $res2 = $pdo->commit(); + + } catch(Exception $e) { + + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + + if ($res) { + header("Location:useradmin"); + exit; + } else { + $error_message[] = '凍結に失敗しました。'; + } +} +if( !empty($_POST['send_water_submit']) ) { + + $newrole = "user"; + $newtoken = ""; + $newadmin = "user"; + // トランザクション開始 + $pdo->beginTransaction(); + + try { + $touserid = htmlentities($userdata['userid'], ENT_QUOTES, 'UTF-8'); + // SQL作成 + $stmt = $pdo->prepare("UPDATE account SET role = :role,token = :newtoken,admin = :newadmin WHERE userid = :userid"); + + $stmt->bindValue(':role', $newrole, PDO::PARAM_STR); + $stmt->bindValue(':newtoken', $newtoken, PDO::PARAM_STR); + $stmt->bindValue(':newadmin', $newadmin, PDO::PARAM_STR); + + $stmt->bindValue(':userid', $touserid, PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $res = $pdo->commit(); + + + } catch (Exception $e) { + $error_message[] = "えらー"; + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + + $pdo->beginTransaction(); + + try { + $touserid = htmlentities($userdata['userid'], ENT_QUOTES, 'UTF-8'); + $datetime = date("Y-m-d H:i:s"); + $msg = "サービス管理者によりお使いのアカウントは解凍されました!\n今まで通りご利用いただけます。\nまた、APIを使用している方はAPIのトークンがリセットされているため再度トークンを発行してご利用ください。"; + $title = "🫗お使いのアカウントが解凍されました!🫗"; + $url = "/home"; + $userchk = 'none'; + + // 通知用SQL作成 + $stmt = $pdo->prepare("INSERT INTO notification (touserid, msg, url, datetime, userchk, title) VALUES (:touserid, :msg, :url, :datetime, :userchk, :title)"); + + + $stmt->bindParam(':touserid', $touserid, PDO::PARAM_STR); + $stmt->bindParam(':msg', $msg, PDO::PARAM_STR); + $stmt->bindParam(':url', $url, PDO::PARAM_STR); + $stmt->bindParam(':userchk', $userchk, PDO::PARAM_STR); + $stmt->bindParam(':title', $title, PDO::PARAM_STR); + + $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); + + // SQLクエリの実行 + $res2 = $stmt->execute(); + + // コミット + $res2 = $pdo->commit(); + + } catch(Exception $e) { + $error_message[] = "えらー"; + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + + if ($res) { + header("Location:useradmin"); + exit; + } else { + $error_message[] = '解凍に失敗しました。'; + } + +} + + +if( !empty($_POST['send_ban_submit']) ) { + $userId2 = $userdata['userid']; // 削除対象のユーザーID + $folderPath = "../ueuseimages/"; // フォルダのパス + + // 指定したフォルダ内でユーザーIDを含むファイルを検索 + $filesToDelete = glob($folderPath . "*-$userId2.*"); // 「-ユーザーID.拡張子」というパターンを検索 + + // ファイルを順に削除 + foreach ($filesToDelete as $file) { + if (is_file($file)) { + unlink($file); // ファイルを削除 + } + } + + $folderPath2 = "../ueusevideos/"; // フォルダのパス + + // 指定したフォルダ内でユーザーIDを含むファイルを検索 + $filesToDelete2 = glob($folderPath2 . "*-$userId2.*"); // 「-ユーザーID.拡張子」というパターンを検索 + + // ファイルを順に削除 + foreach ($filesToDelete2 as $file2) { + if (is_file($file2)) { + unlink($file2); // ファイルを削除 + } + } + + $folderPath3 = "../usericons/"; // フォルダのパス + + // 指定したフォルダ内でユーザーIDを含むファイルを検索 + $filesToDelete3 = glob($folderPath3 . "*-$userId2.*"); // 「-ユーザーID.拡張子」というパターンを検索 + + // ファイルを順に削除 + foreach ($filesToDelete3 as $file3) { + if (is_file($file3)) { + unlink($file3); // ファイルを削除 + } + } + + $folderPath4 = "../userheads/"; // フォルダのパス + + // 指定したフォルダ内でユーザーIDを含むファイルを検索 + $filesToDelete4 = glob($folderPath4 . "*-$userId2.*"); // 「-ユーザーID.拡張子」というパターンを検索 + + // ファイルを順に削除 + foreach ($filesToDelete4 as $file4) { + if (is_file($file4)) { + unlink($file4); // ファイルを削除 + } + } + + + try { + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS); + + // 投稿削除クエリを実行 + $deleteQuery = $pdo->prepare("DELETE FROM ueuse WHERE account = :userid"); + $deleteQuery->bindValue(':userid', $userId2, PDO::PARAM_STR); + $res = $deleteQuery->execute(); + + // アカウント削除クエリを実行 + $deleteQuery = $pdo->prepare("DELETE FROM account WHERE userid = :userid"); + $deleteQuery->bindValue(':userid', $userId2, PDO::PARAM_STR); + $res = $deleteQuery->execute(); + + // 通知削除クエリを実行 + $deleteQuery = $pdo->prepare("DELETE FROM notification WHERE touserid = :touserid"); + $deleteQuery->bindValue(':touserid', $userId2, PDO::PARAM_STR); + $res = $deleteQuery->execute(); + + // フォローの更新 + $updateFollowQuery = $pdo->prepare("UPDATE account SET follow = REPLACE(follow, :userid, '') WHERE follow LIKE :pattern"); + $updateFollowQuery->bindValue(':userid', ",$userId2", PDO::PARAM_STR); + $updateFollowQuery->bindValue(':pattern', "%,$userId2%", PDO::PARAM_STR); + $updateFollowQuery->execute(); + + // フォロワーの更新 + $updateFollowerQuery = $pdo->prepare("UPDATE account SET follower = REPLACE(follower, :userid, '') WHERE follower LIKE :pattern"); + $updateFollowerQuery->bindValue(':userid', ",$userId2", PDO::PARAM_STR); + $updateFollowerQuery->bindValue(':pattern', "%,$userId2%", PDO::PARAM_STR); + $updateFollowerQuery->execute(); + + // いいねの更新 + $updateFavoriteQuery = $pdo->prepare("UPDATE ueuse SET favorite = REPLACE(favorite, :favorite, '') WHERE favorite LIKE :pattern"); + $updateFavoriteQuery->bindValue(':favorite', ",$userId2", PDO::PARAM_STR); + $updateFavoriteQuery->bindValue(':pattern', "%,$userId2%", PDO::PARAM_STR); + $updateFavoriteQuery->execute(); + + } catch (Exception $e) { + + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + + if ($res) { + header("Location:useradmin"); + exit; + } else { + $error_message[] = 'アカウント削除に失敗しました。'; + } + + + // プリペアドステートメントを削除 + $stmt = null; +} +require('../logout/logout.php'); + +?> + + + + + + + + + +ユーザー管理 - <?php echo file_get_contents($servernamefile);?> + + + + + +
+ + +
    + +

    + +
+ +
+ + +
+
+
+ +
+

+

@

+
+
+ +
+ + +
;"> +

;"> + +

+
+ +
+ + +
+
プロフィール
+

+
+
+
+
メールアドレス
+

+
+
二段階認証
+

+
+
管理者権限
+

+
+
フォロー数
+

0 ){ echo htmlspecialchars($followCount, ENT_QUOTES, 'UTF-8');}else{echo "なし";} ?>

+
フォロワー数
+

0 ){ echo htmlspecialchars($followerCount, ENT_QUOTES, 'UTF-8');}else{echo "なし";} ?>

+
+
投稿数
+

0 ){ echo $upload_cnt1;}else{echo "なし";} ?>

+
+
アカウント登録日時
+

+
+
アカウント操作
+
+ + + + + + +
+
+
+
+
+ + + + + + + +
+ + + + + + + \ No newline at end of file diff --git a/ueuse/index.php b/ueuse/index.php index 8fb3278..26f504c 100644 --- a/ueuse/index.php +++ b/ueuse/index.php @@ -49,7 +49,7 @@ try { if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { - $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin,role FROM account WHERE userid = :userid"); $passQuery->bindValue(':userid', $_SESSION['userid']); $passQuery->execute(); $res = $passQuery->fetch(); @@ -60,6 +60,8 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { // セッションに値をセット $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $loginid = $res["loginid"]; + $role = $res["role"]; $_SESSION['admin_login'] = true; $_SESSION['userid'] = $userid; $_SESSION['username'] = $username; @@ -92,7 +94,7 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { } elseif (isset($_COOKIE['admin_login']) && $_COOKIE['admin_login'] == true) { - $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin,role FROM account WHERE userid = :userid"); $passQuery->bindValue(':userid', $_COOKIE['userid']); $passQuery->execute(); $res = $passQuery->fetch(); @@ -103,6 +105,8 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { // セッションに値をセット $userid = $_COOKIE['userid']; // クッキーから取得した値をセット $username = $_COOKIE['username']; // クッキーから取得した値をセット + $loginid = $res["loginid"]; + $role = $res["role"]; $_SESSION['admin_login'] = true; $_SESSION['userid'] = $userid; $_SESSION['username'] = $username; @@ -482,29 +486,30 @@ $pdo = null;

返信

+ +
+
+ +

画像のEXIF情報(位置情報など)は削除されません。
情報漏洩に気をつけてくださいね…

+
+ + + - -
- -

画像のEXIF情報(位置情報など)は削除されません。
情報漏洩に気をつけてくださいね…

-
- - - - - + +
-
- + + \ No newline at end of file diff --git a/user/report.php b/user/report.php new file mode 100644 index 0000000..6cde719 --- /dev/null +++ b/user/report.php @@ -0,0 +1,456 @@ + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + +} catch(PDOException $e) { + + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} + +if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin,role FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_SESSION['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_SESSION['loginid'] === $res["loginid"] && $_SESSION['userid'] === $res["userid"]){ + // セッションに値をセット + $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット + $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $loginid = $res["loginid"]; + $role = $res["role"]; + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid, [ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('username', $username,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('loginid', $res["loginid"],[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('admin_login', true,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + }else{ + header("Location: ../login.php"); + exit; + } + + +} elseif (isset($_COOKIE['admin_login']) && $_COOKIE['admin_login'] == true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin,role FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_COOKIE['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_COOKIE['loginid'] === $res["loginid"] && $_COOKIE['userid'] === $res["userid"]){ + // セッションに値をセット + $userid = $_COOKIE['userid']; // クッキーから取得した値をセット + $username = $_COOKIE['username']; // クッキーから取得した値をセット + $loginid = $res["loginid"]; + $role = $res["role"]; + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('username', $username,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('loginid', $res["loginid"],[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('admin_login', true,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + }else{ + header("Location: ../login.php"); + exit; + } + + +} else { + // ログインが許可されていない場合、ログインページにリダイレクト + header("Location: ../login.php"); + exit; +} +if(empty($userid)){ + header("Location: ../login.php"); + exit; +} +if(empty($username)){ + header("Location: ../login.php"); + exit; +} +$notiQuery = $pdo->prepare("SELECT COUNT(*) as notification_count FROM notification WHERE touserid = :userid AND userchk = 'none'"); +$notiQuery->bindValue(':userid', $userid); +$notiQuery->execute(); +$notiData = $notiQuery->fetch(PDO::FETCH_ASSOC); + +$notificationcount = $notiData['notification_count']; + +function customStripTags($html, $allowedTags) { + $allowedTagsString = '<' . implode('><', $allowedTags) . '>'; + return strip_tags($html, $allowedTagsString); +} + +$allowedTags = array('h1', 'h2', 'h3', 'center', 'font'); + +if( !empty($pdo) ) { + + // データベース接続の設定 + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + if(isset($_GET['q'])){ + $uwuzuid = htmlentities($_GET['q']); + }else{ + $uwuzuid = ""; + } + + // ユーズ内の絵文字を画像に置き換える + function replaceEmojisWithImages($postText) { + // ユーズ内で絵文字名(:emoji:)を検出して画像に置き換える + $emojiPattern = '/:(\w+):/'; + $postTextWithImages = preg_replace_callback($emojiPattern, function($matches) { + $emojiName = $matches[1]; + return ":$emojiName:"; + }, $postText); + + // @username を検出してリンクに置き換える + $usernamePattern = '/@(\w+)/'; + $postTextWithImagesAndUsernames = preg_replace_callback($usernamePattern, function($matches) { + $username = $matches[1]; + + $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, + )); + + $mentionsuserQuery = $dbh->prepare("SELECT username, userid FROM account WHERE userid = :userid"); + $mentionsuserQuery->bindValue(':userid', $username); + $mentionsuserQuery->execute(); + $mentionsuserData = $mentionsuserQuery->fetch(); + + if(empty($mentionsuserData)){ + return "@$username"; + }else{ + return "@".$mentionsuserData["username"].""; + } + }, $postTextWithImages); + + $hashtagsPattern = '/#([\p{Han}\p{Hiragana}\p{Katakana}A-Za-z0-9_]+)/u'; + $postTextWithHashtags = preg_replace_callback($hashtagsPattern, function($matches) { + $hashtags = $matches[1]; + return "".'#'.$hashtags.""; + }, $postTextWithImagesAndUsernames); + + return $postTextWithHashtags; + } + + function replaceURLsWithLinks($postText) { + // URLを正規表現を使って検出 + $pattern = '/(https?:\/\/[^\s]+)/'; + preg_match_all($pattern, $postText, $matches); + + // 検出したURLごとに処理を行う + foreach ($matches[0] as $url) { + // ドメイン部分を抽出 + $parsedUrl = parse_url($url); + $domain = isset($parsedUrl['host']) ? $parsedUrl['host'] : ''; + + // ドメインのみを表示するaタグを生成 + $link = "$domain"; + + // URLをドメインのみを表示するaタグで置き換え + $postText = str_replace($url, $link, $postText); + } + + return $postText; + } + + $userQuery = $dbh->prepare("SELECT username, userid, profile, role, follower FROM account WHERE userid = :userid"); + $userQuery->bindValue(':userid', $uwuzuid); + $userQuery->execute(); + $userData = $userQuery->fetch(); + + + if(!empty($userData["userid"])){ + + + $roles = explode(',', $userData["role"]); // カンマで区切られたロールを配列に分割 + + $rerole = $dbh->prepare("SELECT follow, follower, username, userid, password, mailadds, profile, iconname, headname, role, datetime FROM account WHERE userid = :userid"); + + $rerole->bindValue(':userid', $uwuzuid); + // SQL実行 + $rerole->execute(); + + $userdata = $rerole->fetch(); // ここでデータベースから取得した値を $role に代入する + + $roleDataArray = array(); + + foreach ($roles as $roleId) { + $rerole = $dbh->prepare("SELECT rolename, roleauth, rolecolor FROM role WHERE roleidname = :role"); + $rerole->bindValue(':role', $roleId); + $rerole->execute(); + $roleDataArray[$roleId] = $rerole->fetch(); + } + + + //-------フォロー数--------- + $follow = $userdata['follow']; // コンマで区切られたユーザーIDを含む変数 + + // コンマで区切って配列に分割し、要素数を数える + $followIds = explode(',', $follow); + $followCount = count($followIds)-1; + + $follow_on_me = strpos($follow, $userid); + if ($follow_on_me !== false) { + $follow_yes = "フォローされています"; // worldを含む:6 + }else{ + $follow_yes = ""; // worldを含む:6 + } + + //-------フォロワー数--------- + $follower = $userdata['follower']; // コンマで区切られたユーザーIDを含む変数 + + // コンマで区切って配列に分割し、要素数を数える + $followerIds = explode(',', $follower); + $followerCount = count($followerIds)-1; + + $profileText = htmlentities($userData['profile'], ENT_QUOTES, 'UTF-8'); + + }else{ + $userData["userid"] = "none"; + $userData['username'] = "ゆーざーなし"; + } +} + +if (!empty($_POST['report'])) { + $msg = htmlentities($_POST['send_text']); + + // 書き込み日時を取得 + $datetime = date("Y-m-d H:i:s"); + $uniqid = createUniqId(); + $admin_chk = "none"; + $touserid = $userData['userid']; + + // トランザクション開始 + $pdo->beginTransaction(); + + try { + + // SQL作成 + $stmt = $pdo->prepare("INSERT INTO report (uniqid, userid, report_userid, msg, datetime, admin_chk) VALUES (:uniqid, :userid, :report_userid, :msg, :datetime, :admin_chk)"); + + $stmt->bindParam(':uniqid', $uniqid, PDO::PARAM_STR); + $stmt->bindParam(':userid', $touserid, PDO::PARAM_STR); + $stmt->bindParam(':report_userid', $userid, PDO::PARAM_STR); + $stmt->bindParam(':msg', $msg, PDO::PARAM_STR); + $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); + + $stmt->bindParam(':admin_chk', $admin_chk, PDO::PARAM_STR); + + // SQLクエリの実行 + $res = $stmt->execute(); + + // コミット + $res = $pdo->commit(); + + } catch(Exception $e) { + + // エラーが発生した時はロールバック + $pdo->rollBack(); + } + + if( $res ) { + header("Location:success"); + exit; + } else { + $error_message[] = $e->getMessage(); + } + + // プリペアドステートメントを削除 + $stmt = null; +} + +require('../logout/logout.php'); + + + +// データベースの接続を閉じる +$pdo = null; + +?> + + + + + + + + + + +<?php echo htmlentities($userData['username'], ENT_QUOTES, 'UTF-8'); ?> さんを通報 - <?php echo file_get_contents($servernamefile);?> + + + + + +
+ + +
    + +

    + +
+ + +
+

通報

+
通報先アカウント名
+

+
通報先id
+

+
プロフィール
+

+
+

さんを通報しますか?
通報すると管理者宛に通知が届き、管理者の判断によりさんのアカウントに対処が行われます。
なお、虚偽の通報や理にかなわない通報などによっては管理者の判断によりあなたのアカウントが凍結やBAN(削除)される可能性があります。

+

管理者は通報者のid(@)を確認できます。

+

もし通報理由などありましたら下の入力欄に記載してください。

+ +
    +

    通報しようとしているアカウントはご自身のアカウントのようですが本当に通報してもよろしいのですか?
    もしアカウントの削除をしたいのであれば左側メニューよりその他からアカウント削除が可能です。

    +
+ + +
※誤通報防止の為通報ボタンを小さくしております。
+
+ +
+ +
+
+ + + + + + + + + + + \ No newline at end of file diff --git a/user/success.php b/user/success.php new file mode 100644 index 0000000..f361f90 --- /dev/null +++ b/user/success.php @@ -0,0 +1,193 @@ + PDO::ERRMODE_EXCEPTION, + PDO::MYSQL_ATTR_MULTI_STATEMENTS => false + ); + $pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); + +} catch(PDOException $e) { + + // 接続エラーのときエラー内容を取得する + $error_message[] = $e->getMessage(); +} + +if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_SESSION['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_SESSION['loginid'] === $res["loginid"] && $_SESSION['userid'] === $res["userid"]){ + // セッションに値をセット + $userid = $_SESSION['userid']; // セッションに格納されている値をそのままセット + $username = $_SESSION['username']; // セッションに格納されている値をそのままセット + $loginid = $res["loginid"]; + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid, [ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('username', $username,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('loginid', $res["loginid"],[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('admin_login', true,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + }else{ + header("Location: ../login.php"); + exit; + } + + +} elseif (isset($_COOKIE['admin_login']) && $_COOKIE['admin_login'] == true) { + + $passQuery = $pdo->prepare("SELECT username,userid,loginid,admin FROM account WHERE userid = :userid"); + $passQuery->bindValue(':userid', $_COOKIE['userid']); + $passQuery->execute(); + $res = $passQuery->fetch(); + if(empty($res["userid"])){ + header("Location: ../login.php"); + exit; + }elseif($_COOKIE['loginid'] === $res["loginid"] && $_COOKIE['userid'] === $res["userid"]){ + // セッションに値をセット + $userid = $_COOKIE['userid']; // クッキーから取得した値をセット + $username = $_COOKIE['username']; // クッキーから取得した値をセット + $loginid = $res["loginid"]; + $_SESSION['admin_login'] = true; + $_SESSION['userid'] = $userid; + $_SESSION['username'] = $username; + $_SESSION['loginid'] = $res["loginid"]; + setcookie('userid', $userid,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('username', $username,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('loginid', $res["loginid"],[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + setcookie('admin_login', true,[ + 'expires' => time() + 60 * 60 * 24 * 14, + 'path' => '/', + 'samesite' => 'lax', + ]); + }else{ + header("Location: ../login.php"); + exit; + } + + +} else { + // ログインが許可されていない場合、ログインページにリダイレクト + header("Location: ../login.php"); + exit; +} +if(empty($userid)){ + header("Location: ../login.php"); + exit; +} +if(empty($username)){ + header("Location: ../login.php"); + exit; +} +$notiQuery = $pdo->prepare("SELECT COUNT(*) as notification_count FROM notification WHERE touserid = :userid AND userchk = 'none'"); +$notiQuery->bindValue(':userid', $userid); +$notiQuery->execute(); +$notiData = $notiQuery->fetch(PDO::FETCH_ASSOC); + +$notificationcount = $notiData['notification_count']; + +require('../logout/logout.php'); +?> + + + + + + + + + + +設定 - <?php echo file_get_contents($servernamefile);?> + + + + + +
+ + +
    + +

    + +
+ + +
+

通報完了

+ +
    + +

    + +
+ +

通報しました!

+ 戻る +
+
+ + + + + + \ No newline at end of file diff --git a/uwuzu_database.sql b/uwuzu_database.sql index d66eb26..665cd3a 100644 --- a/uwuzu_database.sql +++ b/uwuzu_database.sql @@ -2,8 +2,8 @@ -- version 5.2.1 -- https://www.phpmyadmin.net/ -- --- ホスト: ひみつ♡() --- 生成日時: 2023-09-02 18:20:50 +-- ホスト: ひみつ +-- 生成日時: 2023-09-10 11:16:42 -- サーバのバージョン: 10.4.28-MariaDB -- PHP のバージョン: 8.2.4 @@ -18,7 +18,7 @@ SET time_zone = "+00:00"; /*!40101 SET NAMES utf8mb4 */; -- --- データベース: `nandemo` +-- データベース: `account` -- -- -------------------------------------------------------- @@ -49,6 +49,23 @@ CREATE TABLE `account` ( -- -------------------------------------------------------- +-- +-- テーブルの構造 `ads` +-- + +CREATE TABLE `ads` ( + `sysid` int(11) NOT NULL, + `uniqid` varchar(512) NOT NULL, + `url` varchar(512) NOT NULL, + `image_url` varchar(512) NOT NULL, + `memo` text NOT NULL, + `start_date` datetime NOT NULL, + `limit_date` datetime NOT NULL, + `datetime` datetime NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + -- -- テーブルの構造 `emoji` -- @@ -109,6 +126,22 @@ CREATE TABLE `notification` ( -- -------------------------------------------------------- +-- +-- テーブルの構造 `report` +-- + +CREATE TABLE `report` ( + `sysid` int(11) NOT NULL, + `uniqid` varchar(256) NOT NULL, + `userid` varchar(500) NOT NULL, + `report_userid` varchar(500) NOT NULL, + `msg` text NOT NULL, + `datetime` datetime NOT NULL, + `admin_chk` varchar(25) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + -- -- テーブルの構造 `role` -- @@ -153,6 +186,12 @@ CREATE TABLE `ueuse` ( ALTER TABLE `account` ADD PRIMARY KEY (`sysid`); +-- +-- テーブルのインデックス `ads` +-- +ALTER TABLE `ads` + ADD PRIMARY KEY (`sysid`); + -- -- テーブルのインデックス `emoji` -- @@ -177,6 +216,12 @@ ALTER TABLE `notice` ALTER TABLE `notification` ADD PRIMARY KEY (`sysid`); +-- +-- テーブルのインデックス `report` +-- +ALTER TABLE `report` + ADD PRIMARY KEY (`sysid`); + -- -- テーブルのインデックス `role` -- @@ -199,6 +244,12 @@ ALTER TABLE `ueuse` ALTER TABLE `account` MODIFY `sysid` int(11) NOT NULL AUTO_INCREMENT; +-- +-- テーブルの AUTO_INCREMENT `ads` +-- +ALTER TABLE `ads` + MODIFY `sysid` int(11) NOT NULL AUTO_INCREMENT; + -- -- テーブルの AUTO_INCREMENT `emoji` -- @@ -223,6 +274,12 @@ ALTER TABLE `notice` ALTER TABLE `notification` MODIFY `sysid` int(11) NOT NULL AUTO_INCREMENT; +-- +-- テーブルの AUTO_INCREMENT `report` +-- +ALTER TABLE `report` + MODIFY `sysid` int(11) NOT NULL AUTO_INCREMENT; + -- -- テーブルの AUTO_INCREMENT `role` --