1
0
mirror of https://github.com/Daichimarukana/uwuzu.git synced 2026-06-05 03:24:41 +00:00

uwuzu v1.3.4 new_planet

This commit is contained in:
Daichimarukana
2024-03-26 22:48:57 +09:00
parent e0b3b93414
commit ea4ca882da
92 changed files with 3192 additions and 1567 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
$serversettings_file = "../../server/serversettings.ini"; $serversettings_file = "../../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true); $serversettings = parse_ini_file($serversettings_file, true);
if(htmlspecialchars($serversettings["serverinfo"]["server_activitypub"], ENT_QUOTES, 'UTF-8') === "true"){ if(htmlspecialchars($serversettings["serverinfo"]["server_activitypub"], ENT_QUOTES, 'UTF-8') === "true"){
header("Content-Type: application/json"); header("Content-Type: application/activity+json");
header("charset=utf-8"); header("charset=utf-8");
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Origin: *");
+1 -1
View File
@@ -2,7 +2,7 @@
$serversettings_file = "../../server/serversettings.ini"; $serversettings_file = "../../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true); $serversettings = parse_ini_file($serversettings_file, true);
if(htmlspecialchars($serversettings["serverinfo"]["server_activitypub"], ENT_QUOTES, 'UTF-8') === "true"){ if(htmlspecialchars($serversettings["serverinfo"]["server_activitypub"], ENT_QUOTES, 'UTF-8') === "true"){
header("Content-Type: application/json"); header("Content-Type: application/jrd+json");
header("charset=utf-8"); header("charset=utf-8");
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Origin: *");
+6 -1
View File
@@ -2,7 +2,7 @@
$serversettings_file = "../server/serversettings.ini"; $serversettings_file = "../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true); $serversettings = parse_ini_file($serversettings_file, true);
if(htmlspecialchars($serversettings["serverinfo"]["server_activitypub"], ENT_QUOTES, 'UTF-8') === "true"){ if(htmlspecialchars($serversettings["serverinfo"]["server_activitypub"], ENT_QUOTES, 'UTF-8') === "true"){
header("Content-Type: application/json"); header("Content-Type: application/activity+json");
header("charset=utf-8"); header("charset=utf-8");
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Origin: *");
@@ -47,6 +47,11 @@ if(htmlspecialchars($serversettings["serverinfo"]["server_activitypub"], ENT_QUO
"@context" => [ "@context" => [
"https://www.w3.org/ns/activitystreams", "https://www.w3.org/ns/activitystreams",
"https://w3id.org/security/v1", "https://w3id.org/security/v1",
array(
"schema" => "http://schema.org#",
"PropertyValue" => "schema:PropertyValue",
"value" => "schema:value",
),
], ],
"id" => "https://".$domain."/actor/?actor=@".$userid."", "id" => "https://".$domain."/actor/?actor=@".$userid."",
"type" => "Person", "type" => "Person",
+1
View File
@@ -185,6 +185,7 @@ $pdo = null;
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<script src="js/jquery-min.js"></script>
<script src="js/unsupported.js"></script> <script src="js/unsupported.js"></script>
<link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="favicon/icon-192x192.png">
+9 -5
View File
@@ -122,7 +122,7 @@ if( !empty($_POST['btn_submit']) ) {
// アップロードされたファイル情報 // アップロードされたファイル情報
$uploadedFile = $_FILES['image']; $uploadedFile = $_FILES['image'];
if(check_mime_video($uploadedFile['tmp_name'])){ if(check_mime($uploadedFile['tmp_name'])){
// アップロードされたファイルの拡張子を取得 // アップロードされたファイルの拡張子を取得
$extension = pathinfo($uploadedFile['name'], PATHINFO_EXTENSION); $extension = pathinfo($uploadedFile['name'], PATHINFO_EXTENSION);
@@ -136,7 +136,7 @@ if( !empty($_POST['btn_submit']) ) {
delete_exif($extension, $uploadedFile['tmp_name']); delete_exif($extension, $uploadedFile['tmp_name']);
// ファイルを移動 // ファイルを移動
$result = move_uploaded_file($uploadedFile['tmp_name'], $uploadedPath); $result = move_uploaded_file($uploadedFile['tmp_name'], '../'.$uploadedPath);
if ($result) { if ($result) {
$iconName = $uploadedPath; // 保存されたファイルのパスを使用 $iconName = $uploadedPath; // 保存されたファイルのパスを使用
@@ -231,7 +231,7 @@ if( !empty($_POST['btn_submit']) ) {
$error_message[] = '表示名を入力してください。(USERNAME_INPUT_PLEASE)'; $error_message[] = '表示名を入力してください。(USERNAME_INPUT_PLEASE)';
} else { } else {
// 文字数を確認 // 文字数を確認
if( 25 < mb_strlen($username, 'UTF-8') ) { if( 50 < mb_strlen($username, 'UTF-8') ) {
$error_message[] = 'ユーザーネームは50文字以内で入力してください。(USERNAME_OVER_MAX_COUNT)'; $error_message[] = 'ユーザーネームは50文字以内で入力してください。(USERNAME_OVER_MAX_COUNT)';
} }
} }
@@ -249,6 +249,9 @@ if( !empty($_POST['btn_submit']) ) {
if($result > 0){ if($result > 0){
$error_message[] = 'このID('.$userid.')は既に使用されています。他のIDを作成してください。(USERID_SHIYOUZUMI)'; $error_message[] = 'このID('.$userid.')は既に使用されています。他のIDを作成してください。(USERID_SHIYOUZUMI)';
} }
if(!(preg_match("/^[a-zA-Z0-9_]+$/", $userid))){
$error_message[] = "IDは半角英数字で入力してください。(「_」は使用可能です。)(USERID_DONT_USE_WORD)";
}
} }
@@ -337,8 +340,8 @@ if( !empty($_POST['btn_submit']) ) {
} }
// 文字数を確認 // 文字数を確認
if( 100 < mb_strlen($password, 'UTF-8') ) { if( 256 < mb_strlen($password, 'UTF-8') ) {
$error_message[] = 'パスワードは100文字以内で入力してください。(PASSWORD_OVER_MAX_COUNT)'; $error_message[] = 'パスワードは256文字以内で入力してください。(PASSWORD_OVER_MAX_COUNT)';
} }
} }
@@ -431,6 +434,7 @@ $pdo = null;
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/style.css"> <link rel="stylesheet" href="../css/style.css">
<script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<link rel="apple-touch-icon" type="../image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="../image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
+30 -1
View File
@@ -75,6 +75,26 @@ if($result2 > 0){
exit; exit;
} }
if (in_array("gd", get_loaded_extensions())) {
$check_gd = true;
} else {
$check_gd = false;
}
if (in_array("fileinfo", get_loaded_extensions())) {
$check_fileinfo = true;
} else {
$check_fileinfo = false;
}
if (in_array("mbstring", get_loaded_extensions())) {
$check_mbstring = true;
} else {
$check_mbstring = false;
}
if (in_array("pdo_mysql", get_loaded_extensions())) {
$check_pdo_mysql = true;
} else {
$check_pdo_mysql = false;
}
// データベースの接続を閉じる // データベースの接続を閉じる
$pdo = null; $pdo = null;
@@ -84,6 +104,7 @@ $pdo = null;
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/style.css"> <link rel="stylesheet" href="../css/style.css">
<script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<link rel="apple-touch-icon" type="../image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="../image/png" href="../favicon/apple-touch-icon-180x180.png">
@@ -115,7 +136,15 @@ $pdo = null;
<p>おめでとうございます!!!</p> <p>おめでとうございます!!!</p>
<p>uwuzuの導入が完了しました!</p> <p>uwuzuの導入が完了しました!</p>
<p>これより管理者アカウントの登録を行います。<br>userロールとofficialロールの設定はお済みですか?<br>userロールとofficialロールがないとuwuzuは正しく動作しないので設定をしていない方は一度このページを閉じて設定してください!<br>また、php.iniよりGDの有効化または導入はお済みですか?GDがないとuwuzuは二段階認証が正しく動作しないため絶対に設定してください!</p> <p>これより管理者アカウントの登録を行います。<br>userロールとofficialロール、iceロールの設定はお済みですか?<br>userロールとofficialロール、iceロールがないとuwuzuは正しく動作しないので設定をしていない方は一度このページを閉じて設定してください!<br>また、php.iniよりGDの有効化または導入はお済みですか?GDがないとuwuzuは二段階認証が正しく動作しないため絶対に設定してください!</p>
<div class="module_chk">
<p>GD : <?php if($check_gd == true){echo "OK";}else{echo "NG";}?></p>
<p>Fileinfo : <?php if($check_fileinfo == true){echo "OK";}else{echo "NG";}?></p>
<p>mbstring : <?php if($check_mbstring == true){echo "OK";}else{echo "NG";}?></p>
<p>pdo_mysql : <?php if($check_pdo_mysql == true){echo "OK";}else{echo "NG";}?></p>
</div>
<p>uwuzu<br>Version : <?php echo $uwuzuinfo[1]?></p> <p>uwuzu<br>Version : <?php echo $uwuzuinfo[1]?></p>
<div class="btnbox"> <div class="btnbox">
+1
View File
@@ -79,6 +79,7 @@ if(!(empty($_SESSION['backupcode']))){
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/style.css"> <link rel="stylesheet" href="../css/style.css">
<script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
+417 -1
View File
@@ -299,7 +299,7 @@ if(isset($_GET['token'])&&isset($_GET['type'])) {
} }
if($type === "reply"){ if($type === "reply"){
if(isset($_GET['ueuse'])) { if(isset($_GET['ueuse']) && isset($_GET['uniqid'])) {
$rpuniqid = htmlentities($_GET['uniqid']); $rpuniqid = htmlentities($_GET['uniqid']);
$ueuse = nl2br(htmlentities($_GET['ueuse'])); $ueuse = nl2br(htmlentities($_GET['ueuse']));
@@ -679,6 +679,422 @@ if(isset($_GET['token'])&&isset($_GET['type'])) {
} }
} }
if($type === "getuser_from_userid"){
if(isset($_GET['userid'])) {
$userid = htmlentities($_GET['userid']);
if($token === 'ice'){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($token === ''){
$err = "token_input_error";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
require('../db.php');
$datetime = array();
$pdo = null;
session_start();
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();
}
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,
));
$userQuery = $dbh->prepare("SELECT username, userid,role FROM account WHERE token = :token");
$userQuery->bindValue(':token', $token);
$userQuery->execute();
$userData = $userQuery->fetch();
if(empty($userData["userid"])){
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
$userQuery = $pdo->prepare("SELECT username,userid,profile,datetime,follow,follower,iconname,headname FROM account WHERE userid = :userid");
$userQuery->bindValue(':userid', $userid);
$userQuery->execute();
$userdata = $userQuery->fetch();
if (empty($userdata)){
$response = array(
'error_code' => "userid_not_found",
);
}else{
$followcnts = explode(',', $userdata["follow"]);
$userdata["follow_cnt"] = count($followcnts)-1;
$followercnts = explode(',', $userdata["follower"]);
$userdata["follower_cnt"] = count($followercnts)-1;
$response = array(
'user_name' => decode_yajirushi(htmlspecialchars_decode($userdata["username"])),
'user_id' => decode_yajirushi(htmlspecialchars_decode($userdata["userid"])),
'profile' => decode_yajirushi(htmlspecialchars_decode($userdata["profile"])),
'user_icon' => decode_yajirushi(htmlspecialchars_decode("https://".$domain."/".$userdata["iconname"])),
'user_header' => decode_yajirushi(htmlspecialchars_decode("https://".$domain."/".$userdata["headname"])),
'registered_date' => decode_yajirushi(htmlspecialchars_decode($userdata["datetime"])),
'follow' => decode_yajirushi(htmlspecialchars_decode($userdata["follow"])),
'follow_cnt' => decode_yajirushi(htmlspecialchars_decode($userdata["follow_cnt"])),
'follower' => decode_yajirushi(htmlspecialchars_decode($userdata["follower"])),
'follower_cnt' => decode_yajirushi(htmlspecialchars_decode($userdata["follower_cnt"])),
);
}
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
}
}else{
$err = "input_not_found";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
}
if($type === "getltl"){
if(isset($_GET['limit'])) {
$itemsPerPage = htmlentities((int)$_GET['limit']); // 1ページあたりの投稿数
if(isset($_GET['page'])) {
$pageNumber = htmlentities((int)$_GET['page']);
if(!(is_int($pageNumber))){
$pageNumber = 1;
}
}else{
$pageNumber = 1;
}
$offset = ($pageNumber - 1) * $itemsPerPage;
$messages = array();
if($token === 'ice'){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($token === ''){
$err = "token_input_error";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
require('../db.php');
$datetime = array();
$pdo = null;
session_start();
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();
}
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,
));
$userQuery = $dbh->prepare("SELECT username, userid,role FROM account WHERE token = :token");
$userQuery->bindValue(':token', $token);
$userQuery->execute();
$userData = $userQuery->fetch();
if(empty($userData["userid"])){
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
$sql = "SELECT ueuse.*
FROM ueuse
LEFT JOIN account ON ueuse.account = account.userid
WHERE ueuse.rpuniqid = '' AND account.role != 'ice'
ORDER BY ueuse.datetime DESC
LIMIT :offset, :itemsPerPage";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':itemsPerPage', $itemsPerPage, PDO::PARAM_INT);
$stmt->execute();
$message_array = $stmt;
while ($row = $message_array->fetch(PDO::FETCH_ASSOC)) {
$messages[] = $row;
}
// ユーザー情報を取得して、$messages内のusernameをuserDataのusernameに置き換える
foreach ($messages as &$message) {
$userQuery = $pdo->prepare("SELECT username, userid, profile, role FROM account WHERE userid = :userid");
$userQuery->bindValue(':userid', $message["account"]);
$userQuery->execute();
$userData = $userQuery->fetch();
if ($userData) {
$message['username'] = $userData['username'];
$message['role'] = $userData['role'];
}
}
if (!empty($messages)) {
$response = array(); // ループ外で $response を初期化
foreach ($messages as $ueusedata) {
$favcnts = explode(',', $ueusedata["favorite"]);
$ueusedata["favorite_cnt"] = count($favcnts) - 1;
$item = [
'account' => decode_yajirushi(htmlspecialchars_decode($ueusedata["account"])),
'username' => decode_yajirushi(htmlspecialchars_decode($ueusedata["username"])),
'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])),
'ueuse' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])),
'photo1' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', 'https://' . $_SERVER['HTTP_HOST'] . '/', $ueusedata["photo1"]))),
'photo2' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', 'https://' . $_SERVER['HTTP_HOST'] . '/', $ueusedata["photo2"]))),
'photo3' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', 'https://' . $_SERVER['HTTP_HOST'] . '/', $ueusedata["photo3"]))),
'photo4' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', 'https://' . $_SERVER['HTTP_HOST'] . '/', $ueusedata["photo4"]))),
'video1' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', 'https://' . $_SERVER['HTTP_HOST'] . '/', $ueusedata["video1"]))),
'favorite' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite"])),
'favorite_cnt' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite_cnt"])),
'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])),
'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])),
'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])),
'nsfw' => decode_yajirushi(htmlspecialchars_decode($ueusedata["nsfw"])),
];
$response[$ueusedata["uniqid"]] = $item; // ループ内で $response にデータを追加
}
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} else {
$err = "ueuse_not_found";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
$pdo = null;
}
}
}else{
$err = "input_not_found";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
}
if($type === "getueuse"){
if(isset($_GET['ueuseid'])) {
$ueuseid = htmlentities($_GET['ueuseid']);
if($token === 'ice'){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($token === ''){
$err = "token_input_error";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
require('../db.php');
$datetime = array();
$pdo = null;
session_start();
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();
}
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,
));
$userQuery = $dbh->prepare("SELECT username, userid,role FROM account WHERE token = :token");
$userQuery->bindValue(':token', $token);
$userQuery->execute();
$userData = $userQuery->fetch();
if(empty($userData["userid"])){
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
$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,
));
$ueuseQuery = $pdo->prepare("SELECT * FROM ueuse WHERE uniqid = :ueuseid");
$ueuseQuery->bindValue(':ueuseid', $ueuseid);
$ueuseQuery->execute();
$ueusedata = $ueuseQuery->fetch();
if (empty($ueusedata)){
$response = array(
'error_code' => "ueuseid_not_found",
);
}else{
$userQuery = $pdo->prepare("SELECT username, userid, profile, role FROM account WHERE userid = :userid");
$userQuery->bindValue(':userid', $ueusedata["account"]);
$userQuery->execute();
$userData = $userQuery->fetch();
if ($userData) {
$ueusedata['username'] = $userData['username'];
$ueusedata['role'] = $userData['role'];
}
$favcnts = explode(',', $ueusedata["favorite"]);
$ueusedata["favorite_cnt"] = count($favcnts)-1;
$response = array(
'account' => decode_yajirushi(htmlspecialchars_decode($ueusedata["account"])),
'username' => decode_yajirushi(htmlspecialchars_decode($ueusedata["username"])),
'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])),
'ueuse' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])),
'photo1' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', 'https://' . $_SERVER['HTTP_HOST'] . '/', $ueusedata["photo1"]))),
'photo2' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', 'https://' . $_SERVER['HTTP_HOST'] . '/', $ueusedata["photo2"]))),
'photo3' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', 'https://' . $_SERVER['HTTP_HOST'] . '/', $ueusedata["photo3"]))),
'photo4' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', 'https://' . $_SERVER['HTTP_HOST'] . '/', $ueusedata["photo4"]))),
'video1' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', 'https://' . $_SERVER['HTTP_HOST'] . '/', $ueusedata["video1"]))),
'favorite' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite"])),
'favorite_cnt' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite_cnt"])),
'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])),
'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])),
'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])),
'nsfw' => decode_yajirushi(htmlspecialchars_decode($ueusedata["nsfw"])),
);
}
echo json_encode($response, JSON_UNESCAPED_UNICODE);
$pdo = null;
}
}
}else{
$err = "input_not_found";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
}
}else{ }else{
$err = "input_not_found"; $err = "input_not_found";
+4 -108
View File
@@ -2,116 +2,12 @@
header("Content-Type: application/json"); header("Content-Type: application/json");
header("charset=utf-8"); header("charset=utf-8");
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Origin: *");
function decode_yajirushi($postText){
$postText = str_replace('&larr;', '←', $postText);
$postText = str_replace('&darr;', '↓', $postText);
$postText = str_replace('&uarr;', '↑', $postText);
$postText = str_replace('&rarr;', '→', $postText);
return $postText;
}
if(isset($_GET['limit'])) {
$itemsPerPage = htmlentities((int)$_GET['limit']); // 1ページあたりの投稿数 $err = "API_has_been_deleted";
if(isset($_GET['page'])) { $response = array(
$pageNumber = htmlentities((int)$_GET['page']);
}else{
$pageNumber = 1;
}
$offset = ($pageNumber - 1) * $itemsPerPage;
$messages = array();
require('../db.php');
$datetime = array();
$pdo = null;
session_start();
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();
}
if (!empty($pdo)) {
$sql = "SELECT account, username, uniqid, rpuniqid, ueuse, datetime, photo1, photo2, video1, favorite, abi, abidate, nsfw FROM ueuse WHERE rpuniqid = '' ORDER BY datetime DESC LIMIT " . intval($offset) . ", " . intval($itemsPerPage);
$message_array = $pdo->query($sql);
while ($row = $message_array->fetch(PDO::FETCH_ASSOC)) {
$messages[] = $row;
}
// ユーザー情報を取得して、$messages内のusernameをuserDataのusernameに置き換える
foreach ($messages as &$message) {
$userQuery = $pdo->prepare("SELECT username, userid, profile, role FROM account WHERE userid = :userid");
$userQuery->bindValue(':userid', $message["account"]);
$userQuery->execute();
$userData = $userQuery->fetch();
if ($userData) {
$message['username'] = $userData['username'];
$message['role'] = $userData['role'];
}
}
if (!empty($messages)) {
$response = array(); // ループ外で $response を初期化
foreach ($messages as $ueusedata) {
$favcnts = explode(',', $ueusedata["favorite"]);
$ueusedata["favorite_cnt"] = count($favcnts) - 1;
$item = [
'account' => decode_yajirushi(htmlspecialchars_decode($ueusedata["account"])),
'username' => decode_yajirushi(htmlspecialchars_decode($ueusedata["username"])),
'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])),
'ueuse' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])),
'photo1' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', '' . $_SERVER['HTTP_HOST'] . '/', $ueusedata["photo1"]))),
'photo2' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', '' . $_SERVER['HTTP_HOST'] . '/', $ueusedata["photo2"]))),
'video1' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', '' . $_SERVER['HTTP_HOST'] . '/', $ueusedata["video1"]))),
'favorite' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite"])),
'favorite_cnt' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite_cnt"])),
'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])),
'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])),
'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])),
'nsfw' => decode_yajirushi(htmlspecialchars_decode($ueusedata["nsfw"])),
];
$response[$ueusedata["uniqid"]] = $item; // ループ内で $response にデータを追加
}
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} else {
$err = "ueuse_not_found";
$response = array(
'error_code' => $err, 'error_code' => $err,
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
$pdo = null;
}
}else{
$err = "input_not_found";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
?> ?>
+5 -89
View File
@@ -2,96 +2,12 @@
header("Content-Type: application/json"); header("Content-Type: application/json");
header("charset=utf-8"); header("charset=utf-8");
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Origin: *");
function decode_yajirushi($postText){
$postText = str_replace('&larr;', '←', $postText);
$postText = str_replace('&darr;', '↓', $postText);
$postText = str_replace('&uarr;', '↑', $postText);
$postText = str_replace('&rarr;', '→', $postText);
return $postText;
}
if(isset($_GET['ueuseid'])) {
$ueuseid = htmlentities($_GET['ueuseid']); $err = "API_has_been_deleted";
$response = array(
require('../db.php');
$datetime = array();
$pdo = null;
session_start();
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();
}
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,
));
$ueuseQuery = $pdo->prepare("SELECT account, ueuse, uniqid, rpuniqid, datetime, photo1, photo2, video1, favorite, abi, abidate FROM ueuse WHERE uniqid = :ueuseid");
$ueuseQuery->bindValue(':ueuseid', $ueuseid);
$ueuseQuery->execute();
$ueusedata = $ueuseQuery->fetch();
}
if (empty($ueusedata)){
$response = array(
'error_code' => "ueuseid_not_found",
);
}else{
$userQuery = $pdo->prepare("SELECT username, userid, profile, role FROM account WHERE userid = :userid");
$userQuery->bindValue(':userid', $ueusedata["account"]);
$userQuery->execute();
$userData = $userQuery->fetch();
if ($userData) {
$ueusedata['username'] = $userData['username'];
$ueusedata['role'] = $userData['role'];
}
$favcnts = explode(',', $ueusedata["favorite"]);
$ueusedata["favorite_cnt"] = count($favcnts)-1;
$response = array(
'userid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["account"])),
'user_name' => decode_yajirushi(htmlspecialchars_decode($ueusedata["username"])),
'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])),
'ueuse' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])),
'photo1' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', ''.$_SERVER['HTTP_HOST'].'/', $ueusedata["photo1"]))),
'photo2' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', ''.$_SERVER['HTTP_HOST'].'/', $ueusedata["photo2"]))),
'video1' => decode_yajirushi(htmlspecialchars_decode(str_replace('../', ''.$_SERVER['HTTP_HOST'].'/', $ueusedata["video1"]))),
'favorite' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite"])),
'favorite_cnt' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite_cnt"])),
'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])),
'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])),
'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])),
);
}
echo json_encode($response, JSON_UNESCAPED_UNICODE);;
}else{
$err = "input_not_found";
$response = array(
'error_code' => $err, 'error_code' => $err,
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
?> ?>
+4 -79
View File
@@ -2,87 +2,12 @@
header("Content-Type: application/json"); header("Content-Type: application/json");
header("charset=utf-8"); header("charset=utf-8");
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Origin: *");
function decode_yajirushi($postText){
$postText = str_replace('&larr;', '←', $postText);
$postText = str_replace('&darr;', '↓', $postText);
$postText = str_replace('&uarr;', '↑', $postText);
$postText = str_replace('&rarr;', '→', $postText);
return $postText;
}
if(isset($_GET['userid'])) {
$search = htmlentities($_GET['userid']); $err = "API_has_been_deleted";
$response = array(
'error_code' => $err,
);
$domain = $_SERVER['HTTP_HOST'];
require('../db.php');
$datetime = array();
$pdo = null;
session_start();
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();
}
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,
));
$userQuery = $pdo->prepare("SELECT username,userid,profile,datetime,follow,follower,iconname,headname FROM account WHERE userid = :userid");
$userQuery->bindValue(':userid', $search);
$userQuery->execute();
$userdata = $userQuery->fetch();
}
if (empty($userdata)){
$response = array(
'error_code' => "userid_not_found",
);
}else{
$followcnts = explode(',', $userdata["follow"]);
$userdata["follow_cnt"] = count($followcnts)-1;
$followercnts = explode(',', $userdata["follower"]);
$userdata["follower_cnt"] = count($followercnts)-1;
$response = array(
'user_name' => decode_yajirushi(htmlspecialchars_decode($userdata["username"])),
'user_id' => decode_yajirushi(htmlspecialchars_decode($userdata["userid"])),
'profile' => decode_yajirushi(htmlspecialchars_decode($userdata["profile"])),
'user_icon' => decode_yajirushi(htmlspecialchars_decode("https://".$domain."/".$userdata["iconname"])),
'user_header' => decode_yajirushi(htmlspecialchars_decode("https://".$domain."/".$userdata["headname"])),
'registered_date' => decode_yajirushi(htmlspecialchars_decode($userdata["datetime"])),
'follow' => decode_yajirushi(htmlspecialchars_decode($userdata["follow"])),
'follow_cnt' => decode_yajirushi(htmlspecialchars_decode($userdata["follow_cnt"])),
'follower' => decode_yajirushi(htmlspecialchars_decode($userdata["follower"])),
'follower_cnt' => decode_yajirushi(htmlspecialchars_decode($userdata["follower_cnt"])),
);
}
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
}else{
$err = "input_not_found";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
?> ?>
+1
View File
@@ -130,6 +130,7 @@ $pdo = null;
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<script src="js/jquery-min.js"></script>
<script src="js/unsupported.js"></script> <script src="js/unsupported.js"></script>
<link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="favicon/icon-192x192.png">
+1
View File
@@ -289,6 +289,7 @@ $pdo = null;
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<script src="js/jquery-min.js"></script>
<script src="js/unsupported.js"></script> <script src="js/unsupported.js"></script>
<link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="favicon/icon-192x192.png">
+8 -1
View File
@@ -200,7 +200,7 @@ $pdo = null;
<html lang="ja"> <html lang="ja">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
@@ -282,10 +282,17 @@ $pdo = null;
</div> </div>
</div> </div>
<div id="Big_ImageModal" class="Image_modal">
<div class="modal-content">
<img id="Big_ImageMain" href="">
</div>
</div>
</main> </main>
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
+15 -3
View File
@@ -78,7 +78,7 @@ try {
$roleDataArray = array(); $roleDataArray = array();
foreach ($roles as $roleId) { foreach ($roles as $roleId) {
$rerole = $dbh->prepare("SELECT rolename, roleauth, rolecolor FROM role WHERE roleidname = :role"); $rerole = $dbh->prepare("SELECT rolename, roleauth, rolecolor, roleeffect FROM role WHERE roleidname = :role");
$rerole->bindValue(':role', $roleId); $rerole->bindValue(':role', $roleId);
$rerole->execute(); $rerole->execute();
$roleDataArray[$roleId] = $rerole->fetch(); $roleDataArray[$roleId] = $rerole->fetch();
@@ -277,6 +277,7 @@ $pdo = null;
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<script src="js/jquery-min.js"></script>
<script src="js/unsupported.js"></script> <script src="js/unsupported.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png">
@@ -318,9 +319,20 @@ $pdo = null;
<div class="roleboxes"> <div class="roleboxes">
<?php foreach ($roles as $roleId): ?> <?php foreach ($roles as $roleId): ?>
<?php $roleData = $roleDataArray[$roleId]; ?> <?php $roleData = $roleDataArray[$roleId]; ?>
<div class="rolebox" style="border: 1px solid <?php echo '#' . $roleData["rolecolor"]; ?>;"> <?php
if(htmlentities($roleData["roleeffect"], ENT_QUOTES, 'UTF-8', false) == '' || htmlentities($roleData["roleeffect"], ENT_QUOTES, 'UTF-8', false) == 'none'){
$role_view_effect = "";
}elseif(htmlentities($roleData["roleeffect"], ENT_QUOTES, 'UTF-8', false) == 'shine'){
$role_view_effect = "shine";
}elseif(htmlentities($roleData["roleeffect"], ENT_QUOTES, 'UTF-8', false) == 'rainbow'){
$role_view_effect = "rainbow";
}else{
$role_view_effect = "";
}
?>
<div class="rolebox <?php echo htmlentities($role_view_effect, ENT_QUOTES, 'UTF-8', false); ?>" style="border: 1px solid <?php echo '#' . htmlentities($roleData["rolecolor"], ENT_QUOTES, 'UTF-8', false); ?>;">
<p style="color: <?php echo '#' . $roleData["rolecolor"]; ?>;"> <p style="color: <?php echo '#' . $roleData["rolecolor"]; ?>;">
<?php if (!empty($roleData["rolename"])) { echo htmlentities($roleData["rolename"], ENT_QUOTES, 'UTF-8'); } ?> <?php if (!empty($roleData["rolename"])) { echo htmlentities($roleData["rolename"], ENT_QUOTES, 'UTF-8', false); }else{ echo("ロールが正常に設定されていません。");} ?>
</p> </p>
</div> </div>
<?php endforeach; ?> <?php endforeach; ?>
+1 -1
View File
@@ -1,7 +1,7 @@
:root { :root {
--main-color: #FFC832; --main-color: #FFC832;
--sub-color: #FFFAE6; --sub-color: #FFFAE6;
--background-color: #f5f5f5; --background-color: #F5F5F5;
--tl-color: #F7F7F7; --tl-color: #F7F7F7;
--ueuse-color:#f5f5f5; --ueuse-color:#f5f5f5;
--text-color: #252525; --text-color: #252525;
+579 -93
View File
@@ -46,15 +46,12 @@ body{
cursor: pointer; cursor: pointer;
border: none; border: none;
display: block; display: block;
width:50%; width: fit-content;
margin: 32px; margin: 32px;
padding: 8px 5%; padding: 8px 20%;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
padding-top: 8px;
padding-bottom: 8px;
background-color: var(--main-color); background-color: var(--main-color);
text-align: center; text-align: center;
@@ -66,31 +63,27 @@ body{
text-decoration:none; text-decoration:none;
text-align: center; text-align: center;
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15);
transition: box-shadow 250ms ease-in-out; transition: all 250ms ease-in-out;
transition: width 250ms ease-out;
} }
.irobutton:hover{ .irobutton:hover{
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
width:55%; padding: 8px 22%;
} }
.irobutton:active{ .irobutton:active{
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
width:45%; padding: 8px 18%;
} }
.sirobutton{ .sirobutton{
cursor: pointer; cursor: pointer;
border: none; border: none;
display: block; display: block;
width:40%; width: fit-content;
margin: 32px; margin: 32px;
padding: 8px 10%; padding: 8px 20%;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
padding-top: 8px;
padding-bottom: 8px;
text-align: center; text-align: center;
background-color: var(--sub-color); background-color: var(--sub-color);
@@ -102,16 +95,15 @@ body{
font-weight: normal; font-weight: normal;
text-decoration:none; text-decoration:none;
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15);
transition: box-shadow 250ms ease-in-out; transition: all 250ms ease-in-out;
transition: width 250ms ease-out;
} }
.sirobutton:hover{ .sirobutton:hover{
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2); box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
width:45%; padding: 8px 22%;
} }
.sirobutton:active{ .sirobutton:active{
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
width:45%; padding: 8px 18%;
} }
.inbox { .inbox {
@@ -242,41 +234,125 @@ textarea{
} }
.rolebox{ .rolebox {
margin: 4px 6px 4px 6px;
margin-top: 12px; width: auto;
margin-bottom: 12px;
margin-left: auto;
margin-right: auto;
width: 120px;
padding-left: auto; padding-left: auto;
padding-right: auto; padding-right: auto;
background-color: var(--background-color);
border: 1px solid var(--main-color);
border-radius: 25px; border-radius: 25px;
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15);
} }
.rolebox p{ .rolebox p {
margin: 2px 10px 2px 10px;
color:var(--main-color);
margin-top: 2px;
margin-bottom: 2px;
margin-left: 10px;
margin-right: 10px;
text-align: center;
font-size: 16px; font-size: 16px;
font-family: 'Zen Maru Gothic', sans-serif; font-family: "Zen Maru Gothic", sans-serif;
font-weight: normal; font-weight: normal;
} }
.roleboxes {
margin-left: auto;
margin-right: auto;
display: table;
padding: auto;
flex-wrap: wrap;
}
.shine {
position: relative;
overflow: hidden;
}
.shine:after {
content: "";
position: absolute;
top: -50%;
left: -50%;
width: 10%;
height: 150%;
background: #fff;
transform: rotate(45deg);
animation: reflect 3s ease-in-out infinite;
}
@keyframes reflect {
0%,
75% {
transform: rotate(45deg) scale(0);
opacity: 1;
}
100% {
transform: rotate(45deg) scale(100);
opacity: 0;
}
}
.cyclingmark {
display: flex;
}
.cyclingmark p::before {
content: "";
display: inline-block;
width: 16px;
height: 16px;
vertical-align: middle;
margin-right: 5px;
background: url("/img/uwuzuicon.png")
no-repeat;
background-size: contain;
animation: cycling 2s infinite;
margin: -6px 0px 0px -2px;
}
@keyframes cycling {
from {
animation-timing-function: ease-in-out;
transform: translate(0px, 0px) scale(1, 1) rotate(0deg) skew(0deg, 0deg);
opacity: 1;
}
to {
animation-timing-function: ease-in-out;
transform: translate(0px, 0px) scale(1, 1) rotate(360deg) skew(0deg, 0deg);
opacity: 1;
}
25% {
animation-timing-function: ease-in-out;
transform: translate(0px, 0px) scale(1, 1) rotate(400deg) skew(0deg, 0deg);
opacity: 1;
}
40% {
animation-timing-function: ease-in-out;
transform: translate(0px, 0px) scale(1, 1) rotate(330deg) skew(0deg, 0deg);
opacity: 1;
}
60% {
animation-timing-function: ease-in-out;
transform: translate(0px, 0px) scale(1, 1) rotate(360deg) skew(0deg, 0deg);
opacity: 1;
}
}
.rainbow {
animation: rain 5s infinite;
}
@keyframes rain {
0% {
border: 1px solid magenta;
color: magenta;
}
33% {
border: 1px solid yellow;
color: yellow;
}
66% {
border: 1px solid cyan;
color: cyan;
}
100% {
border: 1px solid magenta;
color: magenta;
}
}
.userleftbox{ .userleftbox{
border-radius: 17px; border-radius: 17px;
@@ -576,7 +652,7 @@ main h1{
color:var(--text-color); color:var(--text-color);
text-decoration: none; text-decoration: none;
font-family: 'BIZ UDPGothic', sans-serif; font-family: 'BIZ UDPGothic', sans-serif;
font-weight: bold; font-weight: normal;
} }
.userheader .profile p img{ .userheader .profile p img{
vertical-align: middle; vertical-align: middle;
@@ -606,23 +682,12 @@ main h1{
.userheader .rolebox{ .userheader .rolebox{
margin: 4px 6px 4px 6px;
margin-top: 0px;
margin-bottom: 12px;
margin-left: 0px;
margin-right: 12px;
width: auto; width: auto;
padding-left: auto; padding-left: auto;
padding-right: auto; padding-right: auto;
background-color: var(--background-color);
border: 1px solid var(--main-color);
border-radius: 25px; border-radius: 25px;
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15);
} }
@@ -1132,6 +1197,7 @@ main h1{
padding-right: 6px; padding-right: 6px;
padding-top: 3px; padding-top: 3px;
padding-bottom: 3px; padding-bottom: 3px;
background-color: #F5F5F5;
border: solid 1px #CCC; border: solid 1px #CCC;
color: #323232; color: #323232;
border-radius: 25px; border-radius: 25px;
@@ -1319,6 +1385,7 @@ main h1{
width: 100%; width: 100%;
height: 350px; height: 350px;
border: 1px solid var(--border-color); border: 1px solid var(--border-color);
cursor: pointer;
} }
.ueuse .photo2{ .ueuse .photo2{
@@ -1334,6 +1401,7 @@ main h1{
width: 100%; width: 100%;
height: 350px; height: 350px;
border: 1px solid var(--border-color); border: 1px solid var(--border-color);
cursor: pointer;
} }
.ueuse .photo3{ .ueuse .photo3{
@@ -1353,6 +1421,7 @@ main h1{
width: 100%; width: 100%;
height: 200px; height: 200px;
border: 1px solid var(--border-color); border: 1px solid var(--border-color);
cursor: pointer;
} }
.ueuse .photo3_btm a img{ .ueuse .photo3_btm a img{
object-fit: cover; object-fit: cover;
@@ -1363,6 +1432,7 @@ main h1{
min-width: 100%; min-width: 100%;
height: 200px; height: 200px;
border: 1px solid var(--border-color); border: 1px solid var(--border-color);
cursor: pointer;
} }
.ueuse .photo4{ .ueuse .photo4{
display: flex; display: flex;
@@ -1377,6 +1447,7 @@ main h1{
width: 100%; width: 100%;
height: 200px; height: 200px;
border: 1px solid var(--border-color); border: 1px solid var(--border-color);
cursor: pointer;
} }
.ueuse .video1 video{ .ueuse .video1 video{
object-fit: cover; object-fit: cover;
@@ -2079,6 +2150,16 @@ main h1{
font-size: 12px; font-size: 12px;
color:var(--main-color); color:var(--main-color);
} }
.ueuse .flebox .user .u_name a img{
margin-top: 0px;
margin-bottom: 0px;
margin-left: 4px;
margin-right: 4px;
max-height: 22px;
width: auto;
vertical-align: text-top;
border-radius: 0px;
}
.tokonone p{ .tokonone p{
@@ -2277,6 +2358,75 @@ main h1{
color: #FF4848; color: #FF4848;
} }
.sendbox .emoji_picker{
animation: Up_to_down_slideY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards;
margin-left: auto;
margin-right: auto;
margin-top: 24px;
margin-bottom: 0px;
border-radius: 10px;
padding-left: 12px;
padding-right: 12px;
padding-top: 16px;
padding-bottom: 16px;
background-color: var(--tl-color);
border: 1px solid var(--border-color);
width: auto;
max-height: 260px;
overflow-x: hidden;
overflow-y: scroll;
}
.sendbox .emoji_picker p{
margin: 0px;
word-wrap: break-word;
line-height: 20px;
color: var(--subtext-color);
font-size: 12px;
font-family: 'BIZ UDPGothic', sans-serif;
font-weight: normal;
}
.sendbox .emoji_picker .emoji_picker_flex{
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.sendbox .emoji_picker .emoji_picker_flex .one_emoji{
cursor: pointer;
margin: 6px;
width: 64px;
height: 64px;
background-color: var(--tl-color);
border-radius: 8px;
transition: all 250ms ease-out;
}
.sendbox .emoji_picker .emoji_picker_flex .one_emoji img{
margin: 8px;
width: 48px;
height: 48px;
object-fit:contain;
}
.sendbox .emoji_picker .emoji_picker_flex .one_emoji:hover{
background-color: color-mix(in srgb, var(--tl-color) 95%, #000);
}
.sendbox .emoji_picker .tokonone p{
font-size: 16px;
color:var(--text-color);
text-decoration: none;
font-family: 'BIZ UDPGothic', sans-serif;
font-weight: bold;
}
@keyframes Up_to_down_slideY {
0% {
transform: translateY(-12px);
opacity: 0;
}
100% {
transform: translateY(0px);
}
40%,100% {
opacity: 1;
}
}
.ueusebtn{ .ueusebtn{
cursor: pointer; cursor: pointer;
@@ -2880,6 +3030,48 @@ label>input {
} }
} }
.Image_modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.25);
backdrop-filter: blur(5px);
z-index: 9999;
transition: all 250ms ease-out;
}
.Image_modal .modal-content {
padding: 0px;
border-radius: 15px;
width: fit-content;
height: fit-content;
max-width: 90%;
max-height: 90dvh;
position: absolute;
top: 30dvh;
right: 0;
bottom: 0;
left: 0;
margin: auto;
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15);
overflow: hidden;
cursor: zoom-out;
}
.Image_modal .modal-content img{
background: linear-gradient(45deg, #CCC 25%, transparent 25%, transparent 75%, #CCC 75%),
linear-gradient(45deg, #CCC 25%, transparent 25%, transparent 75%, #CCC 75%);
background-color: #FFF;
background-size: 20px 20px;
background-position: 0 0, 10px 10px;
width: 100%;
height: 80dvh;
margin: 0px;
vertical-align:top;
object-fit: contain;
}
.topbox { .topbox {
position: fixed; position: fixed;
@@ -3378,8 +3570,8 @@ label>input {
} }
.emojibox{ .emojibox{
margin-left: 12px; margin-left: 0px;
margin-right: 12px; margin-right: 0px;
padding: 12px; padding: 12px;
width: auto; width: auto;
} }
@@ -3429,54 +3621,85 @@ label>input {
margin-bottom: 6px; margin-bottom: 6px;
fill: currentColor; fill: currentColor;
} }
.emojibox h1{
margin-left: 12px;
.emojizone{
margin-left: 0px;
margin-right: 0px;
margin-top: 12px;
} }
.emojizone{
margin: 0px;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
padding: 12px;
padding-top: 0px;
}
.emojizone .tokonone{
width: calc(50% - 32px);
height: fit-content;
margin-top: 0px;
margin-left: 0px;
margin-right: 0px;
margin-bottom: 12px;
padding: 12px;
}
.emojizone .tokonone p{
margin-top: 30px;
margin-bottom: 30px;
}
.emjtex{ .emjtex{
width: calc(50% - 32px);
background-color: var(--background-color); background-color: var(--background-color);
margin-top: 12px; margin-top: 0px;
margin-left: auto; margin-left: 0px;
margin-right: auto; margin-right: 0px;
margin-bottom: 12px;
padding: 12px; padding: 12px;
border-radius: 10px; border-radius: 10px;
border: 1px solid var(--border-color); border: 1px solid var(--border-color);
transition: all 250ms ease-out;
}
.emjtex:hover{
background-color: color-mix(in srgb, var(--background-color) 95%, #000);
} }
.emjtex .fx{ .emjtex .fx{
display: block; display: flex;
max-width: 100%; max-width: 100%;
flex-wrap: wrap;
justify-content: flex-start;
} }
.emjtex img{ .emjtex img{
margin-top: auto; margin-top: 6px;
margin-bottom: auto; margin-bottom: 6px;
margin-left: 6px; margin-left: 6px;
margin-right: 4px; margin-right: 6px;
max-height: 64px; max-height: 64px;
max-width: 98%; max-width: calc(100% - 12px);
object-fit: initial;
}
.emjtex .btm_zone{
margin-top: auto;
margin-bottom:auto;
} }
.emjtex h3{ .emjtex h3{
overflow-wrap: break-word; overflow-wrap: break-word;
margin-top: auto; margin-top: 6px;
margin-bottom: auto; margin-bottom: 6px;
margin-left: 6px; margin-left: 6px;
font-size: 24px; font-size: 24px;
color:var(--text-color); color:var(--text-color);
text-decoration: none; text-decoration: none;
font-family: 'BIZ UDPGothic', sans-serif; font-family: 'BIZ UDGothic', sans-serif;
font-weight: bold; font-weight: bold;
} }
.emjtex p{ .emjtex p{
overflow-wrap: break-word; overflow-wrap: break-word;
margin-top: 12px; margin-top: 6px;
margin-bottom: auto; margin-bottom: 6px;
margin-left: 6px; margin-left: 6px;
font-size: 16px; font-size: 16px;
color:var(--text-color); color:var(--text-color);
@@ -3498,7 +3721,7 @@ label>input {
} }
.this{ .this{
background-color: var(--sub-color)!important; background-color: color-mix(in srgb, var(--sub-color) 30%, var(--background-color))!important;
} }
.notification{ .notification{
animation: slideInY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards; animation: slideInY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards;
@@ -3562,6 +3785,12 @@ label>input {
font-family: 'BIZ UDPGothic', sans-serif; font-family: 'BIZ UDPGothic', sans-serif;
font-weight: normal; font-weight: normal;
} }
.notification .flebox .username img{
margin-left: 6px;
margin-right: 6px;
width: 14px;
height: 14px;
}
.notification .flebox .idbox{ .notification .flebox .idbox{
margin-top: auto; margin-top: auto;
margin-bottom: auto; margin-bottom: auto;
@@ -4036,7 +4265,7 @@ hr{
font-weight: bold; font-weight: bold;
} }
.hny .textmain{ .hny .textmain{
background-color: var(--border-color); background-color: #F5F5F5;
padding-top: 8px; padding-top: 8px;
padding-bottom: 8px; padding-bottom: 8px;
padding-left: 24px; padding-left: 24px;
@@ -4055,7 +4284,7 @@ hr{
} }
.hny .textmain p{ .hny .textmain p{
text-align: left; text-align: left;
color:var(--text-color); color:#252525;
font-family: 'BIZ UDPGothic', sans-serif; font-family: 'BIZ UDPGothic', sans-serif;
word-wrap: break-word; word-wrap: break-word;
font-size: 16px; font-size: 16px;
@@ -4064,7 +4293,7 @@ hr{
} }
.hny .textmain .rp{ .hny .textmain .rp{
text-align: right; text-align: right;
color:var(--text-color); color:#252525;
font-family: 'BIZ UDPGothic', sans-serif; font-family: 'BIZ UDPGothic', sans-serif;
word-wrap: break-word; word-wrap: break-word;
font-size: 14px; font-size: 14px;
@@ -4279,16 +4508,12 @@ summary {
font-weight: normal; font-weight: normal;
text-decoration:none; text-decoration:none;
text-align: center; text-align: center;
transition: box-shadow 250ms ease-in-out;
transition: width 250ms ease-out;
transition: all 250ms ease-out; transition: all 250ms ease-out;
} }
.delbox .delbtn:hover{ .delbox .delbtn:hover{
background-color: #FF4848; background-color: #FF4848;
color: var(--background-color);; color: var(--background-color);;
transition: box-shadow 250ms ease-in-out;
transition: width 250ms ease-out;
transition: all 250ms ease-out; transition: all 250ms ease-out;
} }
.mini_irobtn{ .mini_irobtn{
@@ -4311,15 +4536,11 @@ summary {
font-weight: normal; font-weight: normal;
text-decoration:none; text-decoration:none;
text-align: center; text-align: center;
transition: box-shadow 250ms ease-in-out;
transition: width 250ms ease-out;
transition: all 250ms ease-out; transition: all 250ms ease-out;
} }
.mini_irobtn:hover{ .mini_irobtn:hover{
background-color: var(--main-color); background-color: var(--main-color);
color: var(--background-color);; color: var(--background-color);;
transition: box-shadow 250ms ease-in-out;
transition: width 250ms ease-out;
transition: all 250ms ease-out; transition: all 250ms ease-out;
} }
@@ -4683,6 +4904,13 @@ summary {
.serverhead{ .serverhead{
text-align: center; text-align: center;
} }
.formarea .serverhead img {
object-fit: cover;
width: 100%;
height: 220px;
border-radius: 10px;
margin: 0px;
}
.serverhead img { .serverhead img {
object-fit: cover; object-fit: cover;
width: 60%; width: 60%;
@@ -4833,6 +5061,116 @@ summary {
text-align: center; text-align: center;
} }
.graph{
margin-top: 12px;
margin-bottom: 12px;
margin-left: 0px;
margin-right: 0px;
width: 100%;
height: 32px;
background-color: var(--background-color);
border-radius: 50px;
border: solid 1px var(--border-color);
}
.graph .per{
margin-top: 4px;
margin-bottom: 4px;
margin-right: 4px;
margin-left: 4px;
height: 24px;
background-color: var(--main-color);
border-radius: 50px;
border: none;
}
noscript{
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.25);
backdrop-filter: blur(5px);
z-index: 9999;
transition: all 250ms ease-out;
cursor: not-allowed;
}
noscript .noscript_modal{
padding: 0px;
border-radius: 15px;
width: fit-content;
height: fit-content;
background-color: var(--background-color);
max-width: 50%;
max-height: 75dvh;
position: absolute;
top: 45%;
right: 0;
bottom: 45%;
left: 0;
margin: auto;
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15);
overflow: scroll;
cursor: auto;
}
noscript .noscript_modal .inner{
margin: 64px;
}
noscript .noscript_modal .inner .oops_icon{
margin-top: -32px;
font-family: 'BIZ UDPGothic', sans-serif;
font-size: 74px;
text-align: center;
}
noscript .noscript_modal .inner h1{
line-height: 32px;
font-family: 'BIZ UDPGothic', sans-serif;
font-size: 32px;
color:var(--text-color);
text-align: center;
font-weight: bold;
}
noscript .noscript_modal .inner p{
line-height: 20px;
font-family: 'BIZ UDPGothic', sans-serif;
font-size: 16px;
color:var(--text-color);
text-align: center;
}
noscript .noscript_modal .inner .p2{
margin-top: 12px;
text-align: center;
}
noscript .noscript_modal .inner .infobtn{
display: block;
width: 128px;
padding: 6px;
text-align: center;
margin-left: auto;
margin-right: auto;
display: block;
background-color:#FFC832;
color:#ffffff;
border-radius: 32px;
font-size: 20px;
font-family: 'BIZ UDGothic', 'Yu Mincho Regular', 'ヒラギノ角ゴシック', sans-serif;
font-weight: normal;
text-decoration: none;
}
noscript .noscript_modal .inner .center_text{
margin-top: 12px;
display: block;
}
noscript .noscript_modal .inner .center_text p{
line-height: 16px;
margin: 0px;
text-align: center;
color:#777;
font-size: 14px;
font-family: 'BIZ UDGothic', 'Yu Mincho Regular', 'ヒラギノ角ゴシック', sans-serif;
font-weight: normal;
}
/*------------------------------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------スマホ向け--------------------------------------------------*/ /*--------------------------------------------------スマホ向け--------------------------------------------------*/
/*--------------------------------------------------ここから--------------------------------------------------*/ /*--------------------------------------------------ここから--------------------------------------------------*/
@@ -4874,8 +5212,8 @@ summary {
} }
.userheader .roleboxes{ .userheader .roleboxes{
margin-left: 12px; margin-left: 6px;
margin-right: 12px; margin-right: 6px;
display: flex; display: flex;
padding: 0px; padding: 0px;
flex-wrap : wrap; flex-wrap : wrap;
@@ -5036,6 +5374,19 @@ summary {
font-family: 'BIZ UDPGothic', sans-serif; font-family: 'BIZ UDPGothic', sans-serif;
font-weight: bold; font-weight: bold;
} }
.sendbox .emoji_picker .emoji_picker_flex{
justify-content: flex-start;
}
.sendbox .emoji_picker .emoji_picker_flex .one_emoji{
margin: 6px;
width: 40px;
height: 40px;
}
.sendbox .emoji_picker .emoji_picker_flex .one_emoji img{
margin: 3px;
width: 34px;
height: 34px;
}
.ueusebtn{ .ueusebtn{
width:30%; width:30%;
@@ -5920,6 +6271,40 @@ summary {
transform: translateY(-1%); transform: translateY(-1%);
} }
} }
.Image_modal{
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.Image_modal .modal-content {
padding: 0px;
border-radius: 15px;
width: fit-content;
height: fit-content;
max-width: 90%;
max-height: 90dvh;
position: absolute;
top: 45%;
right: 0;
bottom: 45%;
left: 0;
margin: auto;
margin-top: 0px;
margin-bottom: 0px;
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15);
overflow: hidden;
}
.Image_modal .modal-content img{
background: linear-gradient(45deg, #CCC 25%, transparent 25%, transparent 75%, #CCC 75%),
linear-gradient(45deg, #CCC 25%, transparent 25%, transparent 75%, #CCC 75%);
background-color: #FFF;
background-size: 20px 20px;
background-position: 0 0, 10px 10px;
width: 100%;
height: auto;
margin: 0px;
vertical-align:top;
object-fit: contain;
}
.tlchange{ .tlchange{
border-radius: 10px; border-radius: 10px;
@@ -6152,6 +6537,52 @@ summary {
border-radius: 10px; border-radius: 10px;
margin: 0px; margin: 0px;
} }
noscript .noscript_modal{
border-radius: 15px;
max-width: 90%;
max-height: 90dvh;
overflow: scroll;
}
noscript .noscript_modal .inner{
margin: 24px;
}
noscript .noscript_modal .inner .oops_icon{
margin-top: 12px;
font-size: 48px;
}
noscript .noscript_modal .inner h1{
line-height: 24px;
font-size: 24px;
}
noscript .noscript_modal .inner p{
line-height: 16px;
font-size: 14px;
text-align: left;
}
noscript .noscript_modal .inner .center_text{
margin-top: 12px;
display: block;
}
noscript .noscript_modal .inner .center_text p{
line-height: 14px;
font-size: 12px;
}
.emojizone{
display: block;
}
.emjtex{
width: auto;
}
.emjtex .fx{
display: block;
}
.emojizone .tokonone{
width: auto;
height: fit-content;
}
} }
/*------------------------------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------------------------------------*/
@@ -6161,6 +6592,11 @@ summary {
@media (prefers-color-scheme: dark) { @media (prefers-color-scheme: dark) {
::selection {
color: var(--dark-background-color);
background: var(--main-color);
}
body{ body{
background-color: var(--dark-background-color); background-color: var(--dark-background-color);
} }
@@ -6245,6 +6681,11 @@ summary {
background-color: var(--dark-ueuse-color); background-color: var(--dark-ueuse-color);
color: var(--dark-text-color); color: var(--dark-text-color);
} }
.ueuse .unixtime{
background-color: #323232;
border: solid 1px #CCC;
color: #F5F5F5;
}
.ueuse h1{ .ueuse h1{
@@ -6575,11 +7016,31 @@ summary {
color:var(--sub-color); color:var(--sub-color);
} }
.sendbox .emoji_picker{
background-color: var(--dark-background-color);
border: none;
}
.sendbox .emoji_picker p{
color: var(--dark-subtext-color);
}
.sendbox .emoji_picker .emoji_picker_flex .one_emoji{
background-color: var(--dark-background-color);
}
.sendbox .emoji_picker .emoji_picker_flex .one_emoji:hover{
background-color: color-mix(in srgb, var(--dark-background-color) 95%, #FFF);
}
.sendbox .emoji_picker .tokonone p{
color:var(--dark-text-color);
}
.emjtex{ .emjtex{
background-color: var(--dark-sub-color); background-color: var(--dark-sub-color);
border: none; border: none;
} }
.emjtex:hover{
background-color: color-mix(in srgb, var(--dark-sub-color) 95%, #FFF);
}
.emjtex h3{ .emjtex h3{
color:var(--background-color); color:var(--background-color);
@@ -6760,7 +7221,7 @@ summary {
} }
.this{ .this{
background-color: var(--link-color) !important; background-color: color-mix(in srgb, var(--link-color) 30%, var(--dark-background-color))!important;
border: none !important; border: none !important;
} }
@@ -7007,4 +7468,29 @@ summary {
background-color: #3a3333; background-color: #3a3333;
color: #ff4848; color: #ff4848;
} }
.graph{
background-color: var(--dark-background-color);
border: solid 1px var(--dark-background-color);
}
.graph .per{
background-color: var(--main-color);
}
noscript .noscript_modal{
background-color: var(--dark-background-color);
}
noscript .noscript_modal .inner h1{
color:var(--dark-text-color);
}
noscript .noscript_modal .inner p{
color:var(--dark-text-color);
}
noscript .noscript_modal .inner .center_text p{
line-height: 16px;
margin: 0px;
text-align: center;
color:#CCC;
font-size: 14px;
font-family: 'BIZ UDGothic', 'Yu Mincho Regular', 'ヒラギノ角ゴシック', sans-serif;
font-weight: normal;
}
} }
+200 -24
View File
@@ -414,8 +414,6 @@ label > input {
.formarea label{ .formarea label{
overflow-wrap: break-word; overflow-wrap: break-word;
margin-top: 24px;
margin-bottom: 24px;
font-size: 16px; font-size: 16px;
color:var(--text-color); color:var(--text-color);
text-decoration: none; text-decoration: none;
@@ -485,7 +483,7 @@ label > input {
transition: border 350ms ease-in-out; transition: border 350ms ease-in-out;
transition: border-bottom 150ms ease-out; transition: border-bottom 150ms ease-out;
border: 1px solid var(--border-color); border: 1px solid var(--border-color);
} }
.inbox::placeholder { .inbox::placeholder {
color: #999; color: #999;
@@ -592,40 +590,127 @@ label > input {
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05); box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
width:45%; width:45%;
} }
.rolebox{ .roleboxes {
margin-top: 12px;
margin-bottom: 12px;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
max-width: 70%;
display: flex;
padding: auto;
flex-wrap: wrap;
justify-content: center;
}
width: 120px; .rolebox {
margin: 4px 6px 4px 6px;
width: auto;
padding-left: auto; padding-left: auto;
padding-right: auto; padding-right: auto;
background-color: var(--background-color);
border: 1px solid var(--main-color);
border-radius: 25px; border-radius: 25px;
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15);
} }
.rolebox p{ .rolebox p {
margin: 2px 10px 2px 10px;
color:var(--main-color);
margin-top: 2px;
margin-bottom: 2px;
margin-left: 10px;
margin-right: 10px;
font-size: 16px; font-size: 16px;
font-family: 'Zen Maru Gothic', sans-serif; font-family: "Zen Maru Gothic", sans-serif;
font-weight: normal; font-weight: normal;
} }
.shine {
position: relative;
overflow: hidden;
}
.shine:after {
content: "";
position: absolute;
top: -50%;
left: -50%;
width: 10%;
height: 150%;
background: #fff;
transform: rotate(45deg);
animation: reflect 3s ease-in-out infinite;
}
@keyframes reflect {
0%,
75% {
transform: rotate(45deg) scale(0);
opacity: 1;
}
100% {
transform: rotate(45deg) scale(100);
opacity: 0;
}
}
.cyclingmark {
display: flex;
}
.cyclingmark p::before {
content: "";
display: inline-block;
width: 16px;
height: 16px;
vertical-align: middle;
margin-right: 5px;
background: url("/img/uwuzuicon.png")
no-repeat;
background-size: contain;
animation: cycling 2s infinite;
margin: -6px 0px 0px -2px;
}
@keyframes cycling {
from {
animation-timing-function: ease-in-out;
transform: translate(0px, 0px) scale(1, 1) rotate(0deg) skew(0deg, 0deg);
opacity: 1;
}
to {
animation-timing-function: ease-in-out;
transform: translate(0px, 0px) scale(1, 1) rotate(360deg) skew(0deg, 0deg);
opacity: 1;
}
25% {
animation-timing-function: ease-in-out;
transform: translate(0px, 0px) scale(1, 1) rotate(400deg) skew(0deg, 0deg);
opacity: 1;
}
40% {
animation-timing-function: ease-in-out;
transform: translate(0px, 0px) scale(1, 1) rotate(330deg) skew(0deg, 0deg);
opacity: 1;
}
60% {
animation-timing-function: ease-in-out;
transform: translate(0px, 0px) scale(1, 1) rotate(360deg) skew(0deg, 0deg);
opacity: 1;
}
}
.rainbow {
animation: rain 5s infinite;
}
@keyframes rain {
0% {
border: 1px solid magenta;
color: magenta;
}
33% {
border: 1px solid yellow;
color: yellow;
}
66% {
border: 1px solid cyan;
color: cyan;
}
100% {
border: 1px solid magenta;
color: magenta;
}
}
.userleftbox{ .userleftbox{
margin-top: 0px; margin-top: 0px;
@@ -810,6 +895,92 @@ p img{
text-align: left; text-align: left;
} }
.switch_input {
position: absolute;
left: 0;
top: 0;
width: 64%;
height: 64%;
z-index: 5;
opacity: 0;
cursor: pointer;
}
.switch_label {
margin-top: 0px;
margin-bottom: 0px;
width: 48px;
height: 24px;
background: var(--dark-subtext-color);
position: relative;
display: inline-block;
border-radius: 25px;
transition: 0.4s;
box-sizing: border-box;
}
.switch_label:after {
content: "";
position: absolute;
margin-top: 2px;
margin-left: 2px;
width: 20px;
height: 20px;
border-radius: 50%;
left: 0;
top: 0;
z-index: 2;
background: var(--background-color);
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
transition: 0.2s;
}
.switch_input:checked + .switch_label {
background-color: var(--main-color);
}
.switch_input:checked + .switch_label:after {
left: 24px;
}
.switch_button {
position: relative;
width: 48px;
height: 24px;
margin-left: 0px;
}
.switch_flexbox{
display: flex;
margin-top: 12px;
margin-bottom: 12px;
height: fit-content;
}
.switch_flexbox p{
margin: 0px;
margin-top: 6px;
margin-left: 6px;
margin-right: 6px;
text-align: left;
word-wrap: break-word;
line-height: 14px;
color: var(--subtext-color);
font-size: 14px;
font-family: 'BIZ UDPGothic', sans-serif;
font-weight: normal;
}
.module_chk{
padding-top: 16px;
padding-bottom: 16px;
padding-left: 16px;
padding-right: 16px;
border-radius: 15px;
background-color: var(--background-color);
border: 1px solid var(--border-color);
margin-top: 12px;
text-align: left;
margin-left: auto;
margin-right: auto;
}
.module_chk p{
margin: 0px;
line-height: 24px;
}
/*------------------------------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------スマホ向け--------------------------------------------------*/ /*--------------------------------------------------スマホ向け--------------------------------------------------*/
/*--------------------------------------------------ここから--------------------------------------------------*/ /*--------------------------------------------------ここから--------------------------------------------------*/
@@ -1073,6 +1244,7 @@ p img{
.btnbox{ .btnbox{
background-color: var(--dark-sub-color); background-color: var(--dark-sub-color);
border: none;
} }
.irobutton{ .irobutton{
background-color: var(--main-color); background-color: var(--main-color);
@@ -1085,6 +1257,7 @@ p img{
.formarea{ .formarea{
background-color: var(--dark-sub-color); background-color: var(--dark-sub-color);
border: none;
} }
.formarea label{ .formarea label{
color:var(--dark-text-color); color:var(--dark-text-color);
@@ -1132,4 +1305,7 @@ p img{
background-color: var(--main-color); background-color: var(--main-color);
color: var(--dark-sub-color); color: var(--dark-sub-color);
} }
.errmsg p{
color:#ff4848;
}
} }
+114 -19
View File
@@ -190,6 +190,11 @@ if (!empty($pdo)) {
require('../logout/logout.php'); require('../logout/logout.php');
if(isset($_GET['q'])){
$keyword = htmlentities($_GET['q']);
}else{
$keyword = "";
}
// データベースの接続を閉じる // データベースの接続を閉じる
$pdo = null; $pdo = null;
@@ -199,7 +204,7 @@ $pdo = null;
<html lang="ja"> <html lang="ja">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
@@ -212,7 +217,7 @@ $pdo = null;
<body> <body>
<?php require('../require/leftbox.php');?> <?php require('../require/leftbox.php');?>
<main> <main class="outer">
<?php if( !empty($error_message) ): ?> <?php if( !empty($error_message) ): ?>
<ul class="errmsg"> <ul class="errmsg">
<?php foreach( $error_message as $value ): ?> <?php foreach( $error_message as $value ): ?>
@@ -220,35 +225,125 @@ $pdo = null;
<?php endforeach; ?> <?php endforeach; ?>
</ul> </ul>
<?php endif; ?> <?php endif; ?>
<div>
<div id="clipboard" class="online" style="display:none;">
<p>🗒️📎 コピーしました!</p>
</div>
</div>
<section> <section class="inner">
<div class="emojibox"> <div class="emojibox">
<h1>絵文字一覧</h1> <h1>絵文字一覧</h1>
<div class="emojizone">
<?php
if(!empty($messages)){
foreach ($messages as $value) {
echo '<div class="emjtex">';
echo '<div class="fx">';
echo '<img src="../' . $value["emojifile"] . '">';
echo '<h3>:'.$value["emojiname"].':</h3>';
echo '</div>';
echo '<p>'.$value["emojiinfo"].'</p>';
echo '</div>';
}
}else{
echo '<div class="tokonone" id="noueuse"><p>カスタム絵文字がありません</p></div>';
}
?>
</div> </div>
<div class="sendbox">
<input class="inbox" placeholder="絵文字検索" id="emoji_searchword" type="text" value="<?php if( !empty($keyword) ){ echo htmlspecialchars($keyword, ENT_QUOTES, 'UTF-8'); } ?>">
<button class="search_btn" id="search_btn">検索</button>
</div>
<div class="emojizone" id="emojizone">
</div> </div>
</section> </section>
<div id="loading" class="loading" style="display: none;">
🤔
</div>
<div id="error" class="error" style="display: none;">
<h1>エラー</h1>
<p>サーバーの応答がなかったか不完全だったようです。<br>ネットワークの接続が正常かを確認の上再読み込みしてください。<br>(NETWORK_HUKANZEN_STOP)</p>
</div>
</main> </main>
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
<script>
$(document).ready(function() {
$(document).on('click', '.search_btn', function(event) {
if ($("#emoji_searchword").val() != ''){
$('#emojizone').empty();
loadEmojis();
} else {
return;
}
});
window.document.onkeydown = function(event){
if (event.key === 'Enter') {
if ($("#emoji_searchword").val() != ''){
$('#emojizone').empty();
loadEmojis();
} else {
return;
}
}
}
$(document).on('click','.emjtex',function(){
var children = $(this).children("div").children("div").children("h3");
navigator.clipboard.writeText(children.text());
$("#clipboard").show();
window.setTimeout(function(){
$("#clipboard").hide();
}, 5000);
});
loadEmojis();
var Emoji_pageNumber = 1;
var isLoading = false;
function loadEmojis() {
if (isLoading) return;
isLoading = true;
$("#loading").show();
var userid = '<?php echo $userid; ?>';
var account_id = '<?php echo $loginid; ?>';
var search_query = $("#emoji_searchword").val();
var viewmode = 'page'
$.ajax({
url: '../nextpage/emojiview.php', // PHPファイルへのパス
method: 'GET',
data: { page: Emoji_pageNumber, userid: userid , account_id: account_id , search_query: search_query, view_mode: viewmode},
dataType: 'html',
timeout: 300000,
success: function(response) {
$('#emojizone').append(response);
Emoji_pageNumber++;
isLoading = false;
$("#loading").hide();
},
error: function (xhr, textStatus, errorThrown) { // エラーと判定された場合
isLoading = false;
$("#loading").hide();
$("#error").show();
},
});
}
$('.outer').on('scroll', function() {
var innerHeight = $('.inner').innerHeight(), //内側の要素の高さ
outerHeight = $('.outer').innerHeight(), //外側の要素の高さ
outerBottom = innerHeight - outerHeight; //内側の要素の高さ - 外側の要素の高さ
if (outerBottom <= $('.outer').scrollTop()) {
var elem = document.getElementById("noemoji");
if (elem === null){
// 存在しない場合の処理
loadEmojis();
} else {
// 存在する場合の処理
return;
}
}
});
});
</script>
</html> </html>
+1 -1
View File
@@ -17,7 +17,7 @@ $domain = $_SERVER['HTTP_HOST'];
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="/css/home.css"> <link rel="stylesheet" href="/css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
+1 -1
View File
@@ -17,7 +17,7 @@ $domain = $_SERVER['HTTP_HOST'];
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="/css/home.css"> <link rel="stylesheet" href="/css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
+1 -1
View File
@@ -17,7 +17,7 @@ $domain = $_SERVER['HTTP_HOST'];
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="/css/home.css"> <link rel="stylesheet" href="/css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
+1 -1
View File
@@ -19,7 +19,7 @@ $domain = $_SERVER['HTTP_HOST'];
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="/css/home.css"> <link rel="stylesheet" href="/css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
+1 -1
View File
@@ -16,7 +16,7 @@ $domain = $_SERVER['HTTP_HOST'];
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="/css/home.css"> <link rel="stylesheet" href="/css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
+1 -1
View File
@@ -22,7 +22,7 @@ $domain = $_SERVER['HTTP_HOST'];
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="/css/home.css"> <link rel="stylesheet" href="/css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
+1 -1
View File
@@ -19,7 +19,7 @@ if(!empty(file_get_contents($serverstopfile))){
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="/css/home.css"> <link rel="stylesheet" href="/css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="/js/console_notice.js"></script> <script src="/js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
+205
View File
@@ -94,4 +94,209 @@ function check_mime_video($tmp_name){
return false; return false;
} }
} }
//文字装飾・URL変換など
function processMarkdownAndWrapEmptyLines($markdownText){
//\___________________[注意]__________________\
// \____ここの順番を変えるとうまく動かなくなります___\
// \______Markdownうまく動くところを探すべし______\
$markdownText = preg_replace('/\[\[buruburu (.+)\]\]/m', '<span class="buruburu">$1</span>', $markdownText);//ぶるぶる
$markdownText = preg_replace('/(^|[^`])`([^`\n]+)`($|[^`])/m', '$1<span class="inline">$2</span>$3', $markdownText);//Inline Code
$markdownText = preg_replace_callback('/^\[\[time (\d+)\]\]/m', function($matches) {
$timestamp = $matches[1];
return '<span class="unixtime" title="'.date("Y/m/d H:i.s", htmlentities($timestamp, ENT_QUOTES, 'UTF-8', false)).'">' . date("Y/m/d H:i", htmlentities($timestamp, ENT_QUOTES, 'UTF-8', false)) . '</span>';
}, $markdownText);
$markdownText = preg_replace('/\*\*\*(.*?)\*\*\*/', '<b><i>$1</i></b>', $markdownText);//太字&斜体の全部のせセット
$markdownText = preg_replace('/\_\_\_(.*?)\_\_\_/', '<b><i>$1</i></b>', $markdownText);//太字&斜体の全部のせセット
$markdownText = preg_replace('/\*\*(.*?)\*\*/', '<b>$1</b>', $markdownText);//太字
$markdownText = preg_replace('/\_\_(.*?)\_\_/', '<b>$1</b>', $markdownText);//太字
$markdownText = preg_replace('/\*(.*?)\*/', '<i>$1</i>', $markdownText);//斜体
$markdownText = preg_replace('/\_(.*?)\_/', '<i>$1</i>', $markdownText);//斜体
$markdownText = preg_replace('/\~\~(.*?)\~\~/m', '<s>$1</s>', $markdownText);//打ち消し線
$markdownText = preg_replace('/&gt;&gt;&gt; (.*)/m', '<span class="quote">$1</span>', $markdownText);//>>> 引用
$markdownText = preg_replace('/\|\|(.*)\|\|/m', '<span class="blur">$1</span>', $markdownText);//黒塗り
// タイトル(#、##、###)をHTMLのhタグに変換
$markdownText = preg_replace('/^# (.+)/m', '<h1>$1</h1>', $markdownText);
$markdownText = preg_replace('/^## (.+)/m', '<h2>$1</h2>', $markdownText);
$markdownText = preg_replace('/^### (.+)/m', '<h3>$1</h3>', $markdownText);
// 箇条書き(-)をHTMLのul/liタグに変換
$markdownText = preg_replace('/^- (.+)/m', '<p>・ $1</p>', $markdownText);
// 空行の前に何もない行をHTMLのpタグに変換
$markdownText = preg_replace('/(^\s*)(?!\s)(.*)/m', '$1<p>$2</p>', $markdownText);
return $markdownText;
}
//Profile
function replaceProfileEmojiImages($postText) {
$postText = str_replace('&#039;', '\'', $postText);
// プロフィール名で絵文字名(:emoji:)を検出して画像に置き換える
$emojiPattern = '/:(\w+):/';
$postTextWithImages = preg_replace_callback($emojiPattern, function($matches) {
$emojiName = $matches[1];
//絵文字path取得
$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,
));
$emoji_Query = $dbh->prepare("SELECT emojifile, emojiname FROM emoji WHERE emojiname = :emojiname");
$emoji_Query->bindValue(':emojiname', $emojiName);
$emoji_Query->execute();
$emoji_row = $emoji_Query->fetch();
if(empty($emoji_row["emojifile"])){
$emoji_path = "img/sysimage/errorimage/emoji_404.png";
}else{
$emoji_path = $emoji_row["emojifile"];
}
return "<img src='../".$emoji_path."' alt=':$emojiName:' title=':$emojiName:'>";
}, $postText);
return $postTextWithImages;
}
// ユーズ内の絵文字やhashtagを画像に置き換える
function replaceEmojisWithImages($postText) {
$postText = str_replace('&#039;', '\'', $postText);
// ユーズ内で絵文字名(:emoji:)を検出して画像に置き換える
$emojiPattern = '/:(\w+):/';
$postTextWithImages = preg_replace_callback($emojiPattern, function($matches) {
$emojiName = $matches[1];
//絵文字path取得
$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,
));
$emoji_Query = $dbh->prepare("SELECT emojifile, emojiname FROM emoji WHERE emojiname = :emojiname");
$emoji_Query->bindValue(':emojiname', $emojiName);
$emoji_Query->execute();
$emoji_row = $emoji_Query->fetch();
if(empty($emoji_row["emojifile"])){
$emoji_path = "img/sysimage/errorimage/emoji_404.png";
}else{
$emoji_path = $emoji_row["emojifile"];
}
return "<img src='../".$emoji_path."' alt=':$emojiName:' title=':$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 "<a class = 'mta' href='/@".htmlentities($mentionsuserData["userid"], ENT_QUOTES, 'UTF-8', false)."'>@".replaceProfileEmojiImages(htmlentities($mentionsuserData["username"], ENT_QUOTES, 'UTF-8', false))."</a>";
}
}, $postTextWithImages);
$hashtagsPattern = '/#([\p{Han}\p{Hiragana}\p{Katakana}A-Za-z0-9ー_]+)/u';
$postTextWithHashtags = preg_replace_callback($hashtagsPattern, function($matches) {
$hashtags = $matches[1];
return "<a class='hashtags' href='/search?q=" . urlencode('#') . $hashtags . "'>" . '#' . $hashtags . "</a>";
}, $postTextWithImagesAndUsernames);
return $postTextWithHashtags;
}
function replaceURLsWithLinks($postText, $maxLength = 48) {
$pattern = '/(https:\/\/[\w!?\/+\-_~;.,*&@#$%()+|https:\/\/[ぁ-んァ-ヶ一-龠々\w\-\/?=&%.]+)/';
$convertedText = preg_replace_callback($pattern, function($matches) use ($maxLength) {
$link = $matches[0];
$no_https_link = str_replace("https://", "", $link);
if (mb_strlen($link) > $maxLength) {
$truncatedLink = mb_substr($no_https_link, 0, $maxLength).'...';
return '<a href="'.$link.'" target="_blank">'.$truncatedLink.'</a>';
} else {
return '<a href="'.$link.'" target="_blank">'.$no_https_link.'</a>';
}
}, $postText);
return $convertedText;
}
function YouTube_and_nicovideo_Links($postText) {
// URLを正規表現を使って検出
$pattern = '/(https:\/\/[^\s<>\[\]\'"]+)/'; // 改良された正規表現
preg_match_all($pattern, $postText, $matches);
if(empty($url)){
$postText = "";
}
// 検出したURLごとに処理を行う
foreach ($matches[0] as $url) {
// ドメイン部分を抽出
$parsedUrl = parse_url($url);
if($parsedUrl['host'] == "youtube.com" || $parsedUrl['host'] == "youtu.be" || $parsedUrl['host'] == "www.youtube.com" || $parsedUrl['host'] == "m.youtube.com"){
if (isset($parsedUrl['query'])) {
if(false !== strpos($parsedUrl['query'], 'v=')) {
$video_id = str_replace('v=', '', htmlentities($parsedUrl['query'], ENT_QUOTES, 'UTF-8', false));
$iframe = true;
}else{
$video_id = str_replace('/', '', htmlentities($parsedUrl['path'], ENT_QUOTES, 'UTF-8', false));
$iframe = true;
}
$video_id = str_replace('&amp;', '?', $video_id);
}elseif(isset($parsedUrl['path'])){
$video_id = str_replace('/', '', htmlentities($parsedUrl['path'], ENT_QUOTES, 'UTF-8', false));
$iframe = true;
}else{
$video_id = "";
$iframe = false;
}
// 不要な文字を削除してaタグを生成
if($iframe == true){
$link = '<iframe src="https://www.youtube-nocookie.com/embed/'.$video_id.'" rel="0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>';
}else{
$link = "";
}
// URLをドメインのみを表示するaタグで置き換え
$postText = $link;
}elseif($parsedUrl['host'] == "nicovideo.jp" || $parsedUrl['host'] == "www.nicovideo.jp"){
if(isset($parsedUrl['path'])){
$video_id = str_replace('/watch/', '', htmlentities($parsedUrl['path'], ENT_QUOTES, 'UTF-8', false));
$iframe = true;
}else{
$video_id = "";
$iframe = false;
}
// 不要な文字を削除してaタグを生成
if($iframe == true){
$link = '<iframe src="https://embed.nicovideo.jp/watch/'.$video_id.'"</iframe>';
}else{
$link = "";
}
// URLをドメインのみを表示するaタグで置き換え
$postText = $link;
}else{
$postText = "";
}
}
return $postText;
}
?> ?>
+92 -34
View File
@@ -3,7 +3,7 @@ $serversettings_file = "../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true); $serversettings = parse_ini_file($serversettings_file, true);
$mojisizefile = "../server/textsize.txt"; $mojisizefile = "../server/textsize.txt";
$mojisize = (int)htmlspecialchars(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8'); $mojisize = (int)htmlentities(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8');
//投稿及び返信レート制限↓(分):デフォで60件/分まで //投稿及び返信レート制限↓(分):デフォで60件/分まで
$max_ueuse_rate_limit = 60; $max_ueuse_rate_limit = 60;
@@ -192,6 +192,17 @@ $notificationcount = $notiData['notification_count'];
//-----------------URLから取得---------------- //-----------------URLから取得----------------
if(isset($_GET['text'])) { if(isset($_GET['text'])) {
$ueuse = htmlentities($_GET['text']); $ueuse = htmlentities($_GET['text']);
}elseif(isset($_COOKIE['ueuse'])) {
$ueuse = htmlentities($_COOKIE['ueuse'], ENT_QUOTES, 'UTF-8', false);
}
//-----------------絵文字の取得----------------
if (!empty($pdo)) {
$custom_emoji_Query = "SELECT emojifile,emojiname,emojiinfo,emojidate FROM emoji ORDER BY emojidate DESC";
$custom_emoji_array = $pdo->query($custom_emoji_Query);
while ($row = $custom_emoji_array->fetch(PDO::FETCH_ASSOC)) {
$custom_emoji[] = $row;
}
} }
//------------------------------------------- //-------------------------------------------
@@ -225,10 +236,10 @@ function get_mentions_userid($postText) {
if( !empty($_POST['btn_submit']) ) { if( !empty($_POST['btn_submit']) ) {
$ueuse = htmlspecialchars($_POST['ueuse'], ENT_QUOTES, 'UTF-8', false); $ueuse = htmlentities($_POST['ueuse'], ENT_QUOTES, 'UTF-8', false);
if(isset($_POST['nsfw_chk'])){ if(isset($_POST['nsfw_chk'])){
$nsfw_chk = htmlspecialchars($_POST['nsfw_chk'], ENT_QUOTES, 'UTF-8', false); $nsfw_chk = htmlentities($_POST['nsfw_chk'], ENT_QUOTES, 'UTF-8', false);
}else{ }else{
$nsfw_chk = "false"; $nsfw_chk = "false";
} }
@@ -244,8 +255,8 @@ if( !empty($_POST['btn_submit']) ) {
$error_message[] = '内容を入力してください。(INPUT_PLEASE)'; $error_message[] = '内容を入力してください。(INPUT_PLEASE)';
} else { } else {
// 文字数を確認 // 文字数を確認
if( (int)htmlspecialchars(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8', false) < mb_strlen($ueuse, 'UTF-8') ) { if( (int)htmlentities(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8', false) < mb_strlen($ueuse, 'UTF-8') ) {
$error_message[] = '内容は'.htmlspecialchars(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8', false).'文字以内で入力してください。(INPUT_OVER_MAX_COUNT)'; $error_message[] = '内容は'.htmlentities(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8', false).'文字以内で入力してください。(INPUT_OVER_MAX_COUNT)';
} }
// 禁止url確認 // 禁止url確認
@@ -478,6 +489,8 @@ if( !empty($_POST['btn_submit']) ) {
} }
if( empty($error_message) ) { if( empty($error_message) ) {
//一時保存していたユーズ内容の削除
setcookie("ueuse", "", time() - 30);
// 書き込み日時を取得 // 書き込み日時を取得
$datetime = date("Y-m-d H:i:s"); $datetime = date("Y-m-d H:i:s");
@@ -492,21 +505,21 @@ if( !empty($_POST['btn_submit']) ) {
// SQL作成 // SQL作成
$stmt = $pdo->prepare("INSERT INTO ueuse (username, account, uniqid, ueuse, photo1, photo2, photo3, photo4, video1, datetime, abi, nsfw) VALUES (:username, :account, :uniqid, :ueuse, :photo1, :photo2, :photo3, :photo4, :video1, :datetime, :abi, :nsfw)"); $stmt = $pdo->prepare("INSERT INTO ueuse (username, account, uniqid, ueuse, photo1, photo2, photo3, photo4, video1, datetime, abi, nsfw) VALUES (:username, :account, :uniqid, :ueuse, :photo1, :photo2, :photo3, :photo4, :video1, :datetime, :abi, :nsfw)");
$stmt->bindParam(':username', htmlspecialchars($username, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':username', htmlentities($username, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':account', htmlspecialchars($userid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':account', htmlentities($userid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':uniqid', htmlspecialchars($uniqid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':uniqid', htmlentities($uniqid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':ueuse', htmlspecialchars($ueuse, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':ueuse', htmlentities($ueuse, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':photo1', htmlspecialchars($photo1, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':photo1', htmlentities($photo1, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':photo2', htmlspecialchars($photo2, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':photo2', htmlentities($photo2, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':photo3', htmlspecialchars($photo3, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':photo3', htmlentities($photo3, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':photo4', htmlspecialchars($photo4, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':photo4', htmlentities($photo4, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':video1', htmlspecialchars($video1, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':video1', htmlentities($video1, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':datetime', htmlspecialchars($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':datetime', htmlentities($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':nsfw', htmlspecialchars($save_nsfw, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':nsfw', htmlentities($save_nsfw, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':abi', htmlspecialchars($abi, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':abi', htmlentities($abi, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
// SQLクエリの実行 // SQLクエリの実行
$res = $stmt->execute(); $res = $stmt->execute();
@@ -525,21 +538,21 @@ if( !empty($_POST['btn_submit']) ) {
$datetime = date("Y-m-d H:i:s"); $datetime = date("Y-m-d H:i:s");
$msg = "" . $ueuse . ""; $msg = "" . $ueuse . "";
$title = "" . $userid . "さんにメンションされました!"; $title = "" . $userid . "さんにメンションされました!";
$url = "/!" . $uniqid . "~" . $userid . ""; $url = "/!" . $uniqid . "";
$userchk = 'none'; $userchk = 'none';
// 通知用SQL作成 // 通知用SQL作成
$stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title)"); $stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title)");
$stmt->bindParam(':fromuserid', htmlspecialchars($fromuserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':fromuserid', htmlentities($fromuserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':touserid', htmlspecialchars($touserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':touserid', htmlentities($touserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':msg', htmlspecialchars($msg, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':msg', htmlentities($msg, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':url', htmlspecialchars($url, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':url', htmlentities($url, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':userchk', htmlspecialchars($userchk, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':userchk', htmlentities($userchk, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':title', htmlspecialchars($title, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':title', htmlentities($title, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':datetime', htmlspecialchars($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':datetime', htmlentities($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
// SQLクエリの実行 // SQLクエリの実行
$res = $stmt->execute(); $res = $stmt->execute();
@@ -591,7 +604,7 @@ $pdo = null;
<html lang="ja"> <html lang="ja">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<script src="../js/nsfw_event.js"></script> <script src="../js/nsfw_event.js"></script>
@@ -609,7 +622,7 @@ if ("serviceWorker" in navigator) {
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<title>フォロータイムライン - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>フォロータイムライン - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -646,7 +659,8 @@ if ("serviceWorker" in navigator) {
<?php if(!($role ==="ice")){?> <?php if(!($role ==="ice")){?>
<form method="post" enctype="multipart/form-data"> <form method="post" enctype="multipart/form-data">
<div class="sendbox"> <div class="sendbox">
<textarea id="ueuse" placeholder="いまどうしてる?" name="ueuse"><?php if( !empty($ueuse) ){ echo htmlspecialchars($ueuse, ENT_QUOTES, 'UTF-8'); } ?></textarea> <textarea id="ueuse" placeholder="いまどうしてる?" name="ueuse"><?php if( !empty($ueuse) ){ echo htmlentities($ueuse, ENT_QUOTES, 'UTF-8', false); } ?></textarea>
<div class="fxbox"> <div class="fxbox">
<label for="upload_images" id="images" title="画像1"> <label for="upload_images" id="images" title="画像1">
<svg><use xlink:href="../img/sysimage/image_1.svg#image"></use></svg> <svg><use xlink:href="../img/sysimage/image_1.svg#image"></use></svg>
@@ -674,10 +688,33 @@ if ("serviceWorker" in navigator) {
<label for="nsfw_chk" class="nsfw_label" title="投稿をNSFW指定にする"><svg><use xlink:href="../img/sysimage/eye_1.svg#eye"></use></svg></label> <label for="nsfw_chk" class="nsfw_label" title="投稿をNSFW指定にする"><svg><use xlink:href="../img/sysimage/eye_1.svg#eye"></use></svg></label>
</div> </div>
<div class="moji_cnt" id="moji_cnt"><?php echo $mojisize; ?></div>
<label for="emoji_picker_btn" title="カスタム絵文字">
<svg><use xlink:href="../img/sysimage/menuicon/emoji.svg#emoji"></use></svg>
<input id="emoji_picker_btn" type='checkbox' value="false" style="display:none;"/>
</label>
<div class="moji_cnt" id="moji_cnt"><?php echo htmlentities($mojisize, ENT_QUOTES, 'UTF-8', false); ?></div>
<input type="submit" class="ueusebtn" id='ueusebtn' name="btn_submit" value="ユーズする"> <input type="submit" class="ueusebtn" id='ueusebtn' name="btn_submit" value="ユーズする">
</div> </div>
<div class="emoji_picker" id="emoji_picker" style="display:none;">
<p>カスタム絵文字</p>
<div class="emoji_picker_flex">
<?php
if(!empty($custom_emoji)){
foreach ($custom_emoji as $value) {
echo '<div class="one_emoji">';
echo '<img src="../' . htmlentities($value["emojifile"], ENT_QUOTES, 'UTF-8', false) . '" alt=":'.htmlentities($value["emojiname"], ENT_QUOTES, 'UTF-8', false).':" title=":'.htmlentities($value["emojiname"], ENT_QUOTES, 'UTF-8', false).':">';
echo '</div>';
}
}else{
echo '<div class="tokonone" id="noueuse"><p>カスタム絵文字がありません</p></div>';
}
?>
</div>
</div>
</div> </div>
</form> </form>
<?php }?> <?php }?>
@@ -740,9 +777,24 @@ if ("serviceWorker" in navigator) {
$('#moji_cnt').html(mojicount); $('#moji_cnt').html(mojicount);
$('#ueusebtn').prop('disabled', true); $('#ueusebtn').prop('disabled', true);
} }
document.cookie = "ueuse=" + encodeURIComponent($(this).val()) + "; Secure; SameSite=Lax; path=/home;";
}) })
$("#emoji_picker_btn").click(function () {
if ($("#emoji_picker_btn").prop("checked") == true) {
$("#emoji_picker").show();
} else {
$("#emoji_picker").hide();
}
});
$(".one_emoji").click(function (event) {
event.preventDefault();
var children = $(this).children("img");
var custom_emojiname = children.attr("title");
$("#ueuse").val($("#ueuse").val() + custom_emojiname);
});
</script> </script>
<section class="inner"> <section class="inner">
<div id="postContainer"> <div id="postContainer">
@@ -764,8 +816,8 @@ if ("serviceWorker" in navigator) {
<div class="modal-content"> <div class="modal-content">
<p>ユーズを削除しますか?</p> <p>ユーズを削除しますか?</p>
<form class="btn_area" method="post" id="deleteForm"> <form class="btn_area" method="post" id="deleteForm">
<input type="button" id="deleteButton" class="fbtn_no" name="delete" value="削除"> <input type="button" id="deleteButton" class="fbtn" name="delete" value="削除">
<input type="button" id="cancelButton" class="fbtn" value="キャンセル"> <input type="button" id="cancelButton" class="fbtn_no" value="キャンセル">
</form> </form>
</div> </div>
</div> </div>
@@ -776,18 +828,24 @@ if ("serviceWorker" in navigator) {
<h1>ユーズに追記しますか?</h1> <h1>ユーズに追記しますか?</h1>
<p>※追記は削除出来ません。</p> <p>※追記は削除出来ません。</p>
<form method="post" id="AbiForm"> <form method="post" id="AbiForm">
<textarea id="abitexts" placeholder="なに追記する~?" name="abi"><?php if( !empty($_SESSION['abi']) ){ echo htmlspecialchars( $_SESSION['abi'], ENT_QUOTES, 'UTF-8'); } ?></textarea> <textarea id="abitexts" placeholder="なに追記する~?" name="abi"><?php if( !empty($_SESSION['abi']) ){ echo htmlentities( $_SESSION['abi'], ENT_QUOTES, 'UTF-8'); } ?></textarea>
<div class="btn_area"> <div class="btn_area">
<input type="submit" id="AbiAddButton" class="fbtn_no" name="abi" value="追記"> <input type="submit" id="AbiAddButton" class="fbtn" name="abi" value="追記">
<input type="button" id="AbiCancelButton" class="fbtn" value="キャンセル"> <input type="button" id="AbiCancelButton" class="fbtn_no" value="キャンセル">
</div> </div>
</form> </form>
</div> </div>
</div> </div>
<div id="Big_ImageModal" class="Image_modal">
<div class="modal-content">
<img id="Big_ImageMain" href="">
</div>
</div>
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
+92 -35
View File
@@ -3,7 +3,7 @@ $serversettings_file = "../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true); $serversettings = parse_ini_file($serversettings_file, true);
$mojisizefile = "../server/textsize.txt"; $mojisizefile = "../server/textsize.txt";
$mojisize = (int)htmlspecialchars(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8'); $mojisize = (int)htmlentities(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8');
//投稿及び返信レート制限↓(分):デフォで60件/分まで //投稿及び返信レート制限↓(分):デフォで60件/分まで
$max_ueuse_rate_limit = 60; $max_ueuse_rate_limit = 60;
@@ -190,7 +190,18 @@ $notificationcount = $notiData['notification_count'];
//-----------------URLから取得---------------- //-----------------URLから取得----------------
if(isset($_GET['text'])) { if(isset($_GET['text'])) {
$ueuse = htmlspecialchars($_GET['text'], ENT_QUOTES, 'UTF-8', false); $ueuse = htmlentities($_GET['text'], ENT_QUOTES, 'UTF-8', false);
}elseif(isset($_COOKIE['ueuse'])) {
$ueuse = htmlentities($_COOKIE['ueuse'], ENT_QUOTES, 'UTF-8', false);
}
//-----------------絵文字の取得----------------
if (!empty($pdo)) {
$custom_emoji_Query = "SELECT emojifile,emojiname,emojiinfo,emojidate FROM emoji ORDER BY emojidate DESC";
$custom_emoji_array = $pdo->query($custom_emoji_Query);
while ($row = $custom_emoji_array->fetch(PDO::FETCH_ASSOC)) {
$custom_emoji[] = $row;
}
} }
//------------------------------------------- //-------------------------------------------
@@ -222,10 +233,10 @@ function get_mentions_userid($postText) {
} }
if( !empty($_POST['btn_submit']) ) { if( !empty($_POST['btn_submit']) ) {
$ueuse = htmlspecialchars($_POST['ueuse'], ENT_QUOTES, 'UTF-8', false); $ueuse = htmlentities($_POST['ueuse'], ENT_QUOTES, 'UTF-8', false);
if(isset($_POST['nsfw_chk'])){ if(isset($_POST['nsfw_chk'])){
$nsfw_chk = htmlspecialchars($_POST['nsfw_chk'], ENT_QUOTES, 'UTF-8', false); $nsfw_chk = htmlentities($_POST['nsfw_chk'], ENT_QUOTES, 'UTF-8', false);
}else{ }else{
$nsfw_chk = "false"; $nsfw_chk = "false";
} }
@@ -241,8 +252,8 @@ if( !empty($_POST['btn_submit']) ) {
$error_message[] = '内容を入力してください。(INPUT_PLEASE)'; $error_message[] = '内容を入力してください。(INPUT_PLEASE)';
} else { } else {
// 文字数を確認 // 文字数を確認
if( (int)htmlspecialchars(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8', false) < mb_strlen($ueuse, 'UTF-8') ) { if( (int)htmlentities(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8', false) < mb_strlen($ueuse, 'UTF-8') ) {
$error_message[] = '内容は'.htmlspecialchars(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8', false).'文字以内で入力してください。(INPUT_OVER_MAX_COUNT)'; $error_message[] = '内容は'.htmlentities(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8', false).'文字以内で入力してください。(INPUT_OVER_MAX_COUNT)';
} }
// 禁止url確認 // 禁止url確認
@@ -476,6 +487,8 @@ if( !empty($_POST['btn_submit']) ) {
} }
if( empty($error_message) ) { if( empty($error_message) ) {
//一時保存していたユーズ内容の削除
setcookie("ueuse", "", time() - 30);
// 書き込み日時を取得 // 書き込み日時を取得
$datetime = date("Y-m-d H:i:s"); $datetime = date("Y-m-d H:i:s");
@@ -490,21 +503,21 @@ if( !empty($_POST['btn_submit']) ) {
// SQL作成 // SQL作成
$stmt = $pdo->prepare("INSERT INTO ueuse (username, account, uniqid, ueuse, photo1, photo2, photo3, photo4, video1, datetime, abi, nsfw) VALUES (:username, :account, :uniqid, :ueuse, :photo1, :photo2, :photo3, :photo4, :video1, :datetime, :abi, :nsfw)"); $stmt = $pdo->prepare("INSERT INTO ueuse (username, account, uniqid, ueuse, photo1, photo2, photo3, photo4, video1, datetime, abi, nsfw) VALUES (:username, :account, :uniqid, :ueuse, :photo1, :photo2, :photo3, :photo4, :video1, :datetime, :abi, :nsfw)");
$stmt->bindParam(':username', htmlspecialchars($username, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':username', htmlentities($username, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':account', htmlspecialchars($userid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':account', htmlentities($userid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':uniqid', htmlspecialchars($uniqid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':uniqid', htmlentities($uniqid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':ueuse', htmlspecialchars($ueuse, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':ueuse', htmlentities($ueuse, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':photo1', htmlspecialchars($photo1, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':photo1', htmlentities($photo1, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':photo2', htmlspecialchars($photo2, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':photo2', htmlentities($photo2, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':photo3', htmlspecialchars($photo3, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':photo3', htmlentities($photo3, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':photo4', htmlspecialchars($photo4, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':photo4', htmlentities($photo4, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':video1', htmlspecialchars($video1, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':video1', htmlentities($video1, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':datetime', htmlspecialchars($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':datetime', htmlentities($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':nsfw', htmlspecialchars($save_nsfw, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':nsfw', htmlentities($save_nsfw, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':abi', htmlspecialchars($abi, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':abi', htmlentities($abi, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
// SQLクエリの実行 // SQLクエリの実行
$res = $stmt->execute(); $res = $stmt->execute();
@@ -524,21 +537,21 @@ if( !empty($_POST['btn_submit']) ) {
$datetime = date("Y-m-d H:i:s"); $datetime = date("Y-m-d H:i:s");
$msg = "" . $ueuse . ""; $msg = "" . $ueuse . "";
$title = "" . $userid . "さんにメンションされました!"; $title = "" . $userid . "さんにメンションされました!";
$url = "/!" . $uniqid . "~" . $userid . ""; $url = "/!" . $uniqid . "";
$userchk = 'none'; $userchk = 'none';
// 通知用SQL作成 // 通知用SQL作成
$stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title)"); $stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title)");
$stmt->bindParam(':fromuserid', htmlspecialchars($fromuserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':fromuserid', htmlentities($fromuserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':touserid', htmlspecialchars($touserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':touserid', htmlentities($touserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':msg', htmlspecialchars($msg, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':msg', htmlentities($msg, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':url', htmlspecialchars($url, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':url', htmlentities($url, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':userchk', htmlspecialchars($userchk, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':userchk', htmlentities($userchk, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':title', htmlspecialchars($title, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':title', htmlentities($title, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':datetime', htmlspecialchars($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':datetime', htmlentities($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
// SQLクエリの実行 // SQLクエリの実行
$res = $stmt->execute(); $res = $stmt->execute();
@@ -590,7 +603,7 @@ $pdo = null;
<html lang="ja"> <html lang="ja">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<script src="../js/nsfw_event.js"></script> <script src="../js/nsfw_event.js"></script>
@@ -608,7 +621,7 @@ if ("serviceWorker" in navigator) {
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<title>ローカルタイムライン - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>ローカルタイムライン - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8', false);?></title>
</head> </head>
@@ -674,7 +687,7 @@ if ("serviceWorker" in navigator) {
<?php if(!($role ==="ice")){?> <?php if(!($role ==="ice")){?>
<form method="post" enctype="multipart/form-data"> <form method="post" enctype="multipart/form-data">
<div class="sendbox"> <div class="sendbox">
<textarea id="ueuse" placeholder="いまどうしてる?" name="ueuse"><?php if( !empty($ueuse) ){ echo htmlspecialchars($ueuse, ENT_QUOTES, 'UTF-8'); } ?></textarea> <textarea id="ueuse" placeholder="いまどうしてる?" name="ueuse"><?php if( !empty($ueuse) ){ echo htmlentities($ueuse, ENT_QUOTES, 'UTF-8', false); } ?></textarea>
<div class="fxbox"> <div class="fxbox">
<label for="upload_images" id="images" title="画像1"> <label for="upload_images" id="images" title="画像1">
@@ -703,10 +716,33 @@ if ("serviceWorker" in navigator) {
<label for="nsfw_chk" class="nsfw_label" title="投稿をNSFW指定にする"><svg><use xlink:href="../img/sysimage/eye_1.svg#eye"></use></svg></label> <label for="nsfw_chk" class="nsfw_label" title="投稿をNSFW指定にする"><svg><use xlink:href="../img/sysimage/eye_1.svg#eye"></use></svg></label>
</div> </div>
<div class="moji_cnt" id="moji_cnt"><?php echo $mojisize; ?></div>
<label for="emoji_picker_btn" title="カスタム絵文字">
<svg><use xlink:href="../img/sysimage/menuicon/emoji.svg#emoji"></use></svg>
<input id="emoji_picker_btn" type='checkbox' value="false" style="display:none;"/>
</label>
<div class="moji_cnt" id="moji_cnt"><?php echo htmlentities($mojisize, ENT_QUOTES, 'UTF-8', false); ?></div>
<input type="submit" class="ueusebtn" id='ueusebtn' name="btn_submit" value="ユーズする"> <input type="submit" class="ueusebtn" id='ueusebtn' name="btn_submit" value="ユーズする">
</div> </div>
<div class="emoji_picker" id="emoji_picker" style="display:none;">
<p>カスタム絵文字</p>
<div class="emoji_picker_flex">
<?php
if(!empty($custom_emoji)){
foreach ($custom_emoji as $value) {
echo '<div class="one_emoji">';
echo '<img src="../' . htmlentities($value["emojifile"], ENT_QUOTES, 'UTF-8', false) . '" alt=":'.htmlentities($value["emojiname"], ENT_QUOTES, 'UTF-8', false).':" title=":'.htmlentities($value["emojiname"], ENT_QUOTES, 'UTF-8', false).':">';
echo '</div>';
}
}else{
echo '<div class="tokonone" id="noemoji"><p>カスタム絵文字がありません</p></div>';
}
?>
</div>
</div>
</div> </div>
</form> </form>
<?php }?> <?php }?>
@@ -769,7 +805,21 @@ if ("serviceWorker" in navigator) {
$('#moji_cnt').html(mojicount); $('#moji_cnt').html(mojicount);
$('#ueusebtn').prop('disabled', true); $('#ueusebtn').prop('disabled', true);
} }
document.cookie = "ueuse=" + encodeURIComponent($(this).val()) + "; Secure; SameSite=Lax; path=/home;";
}) })
$("#emoji_picker_btn").click(function () {
if ($("#emoji_picker_btn").prop("checked") == true) {
$("#emoji_picker").show();
} else {
$("#emoji_picker").hide();
}
});
$(".one_emoji").click(function (event) {
event.preventDefault();
var children = $(this).children("img");
var custom_emojiname = children.attr("title");
$("#ueuse").val($("#ueuse").val() + custom_emojiname);
});
</script> </script>
<section class="inner"> <section class="inner">
@@ -793,8 +843,8 @@ if ("serviceWorker" in navigator) {
<div class="modal-content"> <div class="modal-content">
<p>ユーズを削除しますか?</p> <p>ユーズを削除しますか?</p>
<form class="btn_area" method="post" id="deleteForm"> <form class="btn_area" method="post" id="deleteForm">
<input type="button" id="deleteButton" class="fbtn_no" name="delete" value="削除"> <input type="button" id="deleteButton" class="fbtn" name="delete" value="削除">
<input type="button" id="cancelButton" class="fbtn" value="キャンセル"> <input type="button" id="cancelButton" class="fbtn_no" value="キャンセル">
</form> </form>
</div> </div>
</div> </div>
@@ -805,18 +855,25 @@ if ("serviceWorker" in navigator) {
<h1>ユーズに追記しますか?</h1> <h1>ユーズに追記しますか?</h1>
<p>※追記は削除出来ません。</p> <p>※追記は削除出来ません。</p>
<form method="post" id="AbiForm"> <form method="post" id="AbiForm">
<textarea id="abitexts" placeholder="なに追記する~?" name="abi"><?php if( !empty($_SESSION['abi']) ){ echo htmlspecialchars( $_SESSION['abi'], ENT_QUOTES, 'UTF-8'); } ?></textarea> <textarea id="abitexts" placeholder="なに追記する~?" name="abi"><?php if( !empty($_SESSION['abi']) ){ echo htmlentities( $_SESSION['abi'], ENT_QUOTES, 'UTF-8', false); } ?></textarea>
<div class="btn_area"> <div class="btn_area">
<input type="submit" id="AbiAddButton" class="fbtn_no" name="abi" value="追記"> <input type="submit" id="AbiAddButton" class="fbtn" name="abi" value="追記">
<input type="button" id="AbiCancelButton" class="fbtn" value="キャンセル"> <input type="button" id="AbiCancelButton" class="fbtn_no" value="キャンセル">
</div> </div>
</form> </form>
</div> </div>
</div> </div>
<div id="Big_ImageModal" class="Image_modal">
<div class="modal-content">
<img id="Big_ImageMain" href="">
</div>
</div>
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
+1
View File
@@ -121,6 +121,7 @@ $count2 = $result2->num_rows;
<meta name="twitter:description" content="<?php echo htmlentities($serverinfo);?>"/> <meta name="twitter:description" content="<?php echo htmlentities($serverinfo);?>"/>
<!--OGPここまで--> <!--OGPここまで-->
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<script src="js/jquery-min.js"></script>
<script src="js/unsupported.js"></script> <script src="js/unsupported.js"></script>
<link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="favicon/icon-192x192.png">
+5 -5
View File
@@ -1,8 +1,8 @@
window.onload = function(){ window.onload = function () {
var url = new URL(window.location.href); var url = new URL(window.location.href);
var ele = document.getElementsByTagName("body")[0]; var ele = document.getElementsByTagName("body")[0];
var n = Math.floor(Math.random() * 3); // 3枚の画像がある場合 var n = Math.floor(Math.random() * 3); // 3枚の画像がある場合
ele.style.backgroundImage = "url("+url.protocol+"//"+url.hostname+"/img/titleimg/"+n+".png)"; ele.style.backgroundImage = "url(" + url.protocol + "//" + url.hostname + "/img/titleimg/" + n + ".png)";
} }
+2
View File
File diff suppressed because one or more lines are too long
+24 -1
View File
@@ -1,4 +1,4 @@
$(document).on('click', '.mini_irobtn', function(event) { $(document).on('click', '.mini_irobtn', function (event) {
event.preventDefault(); event.preventDefault();
mother = $(this).parent(); mother = $(this).parent();
mother2 = $(mother).parent(); mother2 = $(mother).parent();
@@ -8,3 +8,26 @@ $(document).on('click', '.mini_irobtn', function(event) {
$(mother2).next('.nsfw_main').removeClass('nsfw_main'); $(mother2).next('.nsfw_main').removeClass('nsfw_main');
$(mother2).hide(); $(mother2).hide();
}); });
$(document).on('click', '#ueuse_image', function (event) {
var imgLink = $(this).attr('src');
var modal = $('#Big_ImageModal');
var modalMain = $('.modal-content');
var modalimg_zone = $('#Big_ImageMain');
$(modalimg_zone).attr('src',imgLink);
modal.show();
modalMain.addClass("slideUp");
modalMain.removeClass("slideDown");
modal.on('click', function() {
modalMain.removeClass("slideUp");
modalMain.addClass("slideDown");
window.setTimeout(function(){
modal.hide();
}, 150);
});
});
+20 -20
View File
@@ -2,19 +2,19 @@
const ua = window.navigator.userAgent; const ua = window.navigator.userAgent;
/*browser*/ /*browser*/
if(ua.indexOf('Edge') != -1 || ua.indexOf('Edg') != -1) { if (ua.indexOf('Edge') != -1 || ua.indexOf('Edg') != -1) {
user_agent_browser = 'Microsoft_Edge'; user_agent_browser = 'Microsoft_Edge';
} else if(ua.indexOf('Trident') != -1 || ua.indexOf('MSIE') != -1) { } else if (ua.indexOf('Trident') != -1 || ua.indexOf('MSIE') != -1) {
user_agent_browser = 'Microsoft_Internet_Explorer'; user_agent_browser = 'Microsoft_Internet_Explorer';
} else if(ua.indexOf('OPR') != -1 || ua.indexOf('Opera') != -1) { } else if (ua.indexOf('OPR') != -1 || ua.indexOf('Opera') != -1) {
user_agent_browser = 'Opera'; user_agent_browser = 'Opera';
} else if(ua.indexOf('Chrome') != -1) { } else if (ua.indexOf('Chrome') != -1) {
user_agent_browser = 'Google_Chrome'; user_agent_browser = 'Google_Chrome';
} else if(ua.indexOf('Firefox') != -1) { } else if (ua.indexOf('Firefox') != -1) {
user_agent_browser = 'FireFox'; user_agent_browser = 'FireFox';
} else if(ua.indexOf('Safari') != -1) { } else if (ua.indexOf('Safari') != -1) {
user_agent_browser = 'Safari'; user_agent_browser = 'Safari';
} else if(ua.indexOf('NintendoBrowser') != -1) { } else if (ua.indexOf('NintendoBrowser') != -1) {
user_agent_browser = 'NintendoBrowser'; user_agent_browser = 'NintendoBrowser';
} else { } else {
user_agent_browser = 'Other'; user_agent_browser = 'Other';
@@ -22,23 +22,23 @@ if(ua.indexOf('Edge') != -1 || ua.indexOf('Edg') != -1) {
/*OS*/ /*OS*/
const ua2 = ua.toLowerCase(); const ua2 = ua.toLowerCase();
if(ua2.indexOf("windows nt") !== -1) { if (ua2.indexOf("windows nt") !== -1) {
user_agent_os = "Microsoft_Windows_NT"; user_agent_os = "Microsoft_Windows_NT";
} else if(ua.indexOf("Android") !== -1) { } else if (ua.indexOf("Android") !== -1) {
user_agent_os = "Android"; user_agent_os = "Android";
} else if(ua.indexOf("iPhone") !== -1){ } else if (ua.indexOf("iPhone") !== -1) {
ua.match(/iPhone OS (\w+){1,4}/g); ua.match(/iPhone OS (\w+){1,4}/g);
var iosv=(RegExp.$1.replace(/_/g, '.')).slice(0,4); var iosv = (RegExp.$1.replace(/_/g, '.')).slice(0, 4);
if(iosv >= 6.0) { if (iosv >= 6.0) {
user_agent_os = "iOS_6_Over"; user_agent_os = "iOS_6_Over";
} else { } else {
user_agent_os = "iOS_6_Under"; user_agent_os = "iOS_6_Under";
} }
} else if (ua.match(/Linux/)) { } else if (ua.match(/Linux/)) {
user_agent_os = "Linux"; user_agent_os = "Linux";
} else if(ua.indexOf("ipad") !== -1 || ua.indexOf("Mac OS X") !== -1 && typeof document.ontouchstart !== 'undefined') { } else if (ua.indexOf("ipad") !== -1 || ua.indexOf("Mac OS X") !== -1 && typeof document.ontouchstart !== 'undefined') {
user_agent_os = "iPad"; user_agent_os = "iPad";
} else if(ua.indexOf("Mac OS X") !== -1) { } else if (ua.indexOf("Mac OS X") !== -1) {
user_agent_os = "mac_OS"; user_agent_os = "mac_OS";
} else if (ua.match(/^.*\s([A-Za-z]+BSD)/)) { } else if (ua.match(/^.*\s([A-Za-z]+BSD)/)) {
user_agent_os = RegExp.$1; user_agent_os = RegExp.$1;
@@ -62,9 +62,9 @@ if(ua2.indexOf("windows nt") !== -1) {
/*SSL*/ /*SSL*/
if (location.protocol == 'http:') { if (location.protocol == 'http:') {
if (location.hostname == 'localhost'){ if (location.hostname == 'localhost') {
user_agent_ssl = "not_ssl"; user_agent_ssl = "not_ssl";
}else{ } else {
user_agent_ssl = "not_ssl_bad"; user_agent_ssl = "not_ssl_bad";
} }
} else if (location.protocol == 'https:') { } else if (location.protocol == 'https:') {
@@ -96,7 +96,7 @@ if (user_agent_browser == 'Microsoft_Internet_Explorer' || user_agent_browser ==
} else if (user_agent_ssl == 'not_ssl_bad') { } else if (user_agent_ssl == 'not_ssl_bad') {
user_agent_access = 'bad'; user_agent_access = 'bad';
errcode = 'NONE_SSL_SERVER'; errcode = 'NONE_SSL_SERVER';
}else{ } else {
user_agent_access = 'ok'; user_agent_access = 'ok';
errcode = 'NONE_ERROR'; errcode = 'NONE_ERROR';
} }
@@ -110,10 +110,10 @@ console.log('access : '+user_agent_access);
console.log('errorcode : '+errcode); console.log('errorcode : '+errcode);
*/ */
if (user_agent_access == 'bad'){ if (user_agent_access == 'bad') {
setTimeout(link(), 0); setTimeout(link(), 0);
function link(){ function link() {
location.href="../unsupported.php?errcode="+errcode+"&browser="+user_agent_browser+"&os="+user_agent_os+"&cookie="+user_agent_cookie+"&ssl="+user_agent_ssl+"" location.href = "../unsupported.php?errcode=" + errcode + "&browser=" + user_agent_browser + "&os=" + user_agent_os + "&cookie=" + user_agent_cookie + "&ssl=" + user_agent_ssl + ""
} }
} }
+46
View File
@@ -0,0 +1,46 @@
{
"lang_name" : "日本語",
"uwuzu" : "ゆず",
"home" : "ホーム",
"search" : "検索",
"notification" : "通知",
"emoji" : "絵文字",
"profile" : "プロフィール",
"settings" : "設定",
"others" : "その他",
"add_emoji" : "絵文字登録",
"add_notice" : "お知らせ配信",
"server_settings" : "サーバー設定",
"logout" : "ログアウト",
"notice" : "お知らせ",
"editor" : "編集者",
"server_about" : "サーバー情報",
"server" : "Server",
"software" : "software",
"terms" : "利用規約",
"privacy_policy" : "プライバシーポリシー",
"detail" : "詳細",
"learn_more" : "もっと詳しく!",
"release_note" : "リリースノート",
"about" : "概要",
"user" : "ユーザー",
"user_management" : "ユーザー管理",
"invitation" : "招待",
"invitation_code" : "招待コード",
"role" : "ロール",
"ads" : "広告",
"moderation" : "モデレーション",
"customize" : "カスタマイズ",
"ueuse" : "ユーズ",
"media" : "メディア",
"favorite" : "いいね",
"ima_dou_siteru" : "いまどうしてる?",
"ueuse_search" : "ユーズ検索",
"all_emoji" : "絵文字一覧",
"ueuse_count" : "ユーズ数",
"follow_count" : "フォロー数",
"follower_count" : "フォロワー数",
"follow" : "フォロー",
"follower" : "フォロワー"
}
+62 -16
View File
@@ -6,6 +6,8 @@ $serversettings = parse_ini_file($serversettings_file, true);
require('db.php'); require('db.php');
//hCaptcha-------------------------------------------- //hCaptcha--------------------------------------------
require('settings_admin/hCaptcha_settings/hCaptcha_settings.php'); require('settings_admin/hCaptcha_settings/hCaptcha_settings.php');
//Cloudflare_Turnstile--------------------------------------------
require('settings_admin/CloudflareTurnstile_settings/CloudflareTurnstile_settings.php');
//---------------------------------------------------- //----------------------------------------------------
@@ -96,14 +98,14 @@ if( !empty($_POST['btn_submit']) ) {
$userid = htmlentities($_POST['userid']); $userid = htmlentities($_POST['userid']);
$password = htmlentities($_POST['password']); $password = htmlentities($_POST['password']);
if(!empty(CAPTCHA && CAPTCHA == "true")){ if(!empty(H_CAPTCHA_ONOFF && H_CAPTCHA_ONOFF == "true")){
if(isset($_POST['h-captcha-response'])){ if(isset($_POST['h-captcha-response'])){
$hcaptcha_token = htmlentities($_POST['h-captcha-response']); $hcaptcha_token = htmlentities($_POST['h-captcha-response']);
if($hcaptcha_token){ if($hcaptcha_token){
$captcha_data = [ $captcha_data = [
'secret' => htmlentities(SEAC_KEY), 'secret' => htmlentities(H_CAPTCHA_SEAC_KEY),
'response' => $hcaptcha_token, 'response' => $hcaptcha_token,
'sitekey' => htmlentities(SITE_KEY) 'sitekey' => htmlentities(H_CAPTCHA_SITE_KEY)
]; ];
$options = [ $options = [
'http' => [ 'http' => [
@@ -114,13 +116,39 @@ if( !empty($_POST['btn_submit']) ) {
]; ];
$hCaptcha_result = json_decode(file_get_contents('https://hcaptcha.com/siteverify', false, stream_context_create($options)),true); $hCaptcha_result = json_decode(file_get_contents('https://hcaptcha.com/siteverify', false, stream_context_create($options)),true);
if(!($hCaptcha_result["success"] == true)){ if(!($hCaptcha_result["success"] == true)){
$error_message[] = "あなたが人間である確認ができませんでした。(ERROR)"; $error_message[] = "hCaptchaであなたが人間である確認ができませんでした。(ERROR)";
} }
}else{ }else{
$error_message[] = "あなたが人間である確認ができませんでした。(ERROR)"; $error_message[] = "hCaptchaであなたが人間である確認ができませんでした。(ERROR)";
} }
}else{ }else{
$error_message[] = "あなたが人間である確認ができませんでした。(ERROR)"; $error_message[] = "hCaptchaであなたが人間である確認ができませんでした。(ERROR)";
}
}
if(!empty(CF_TURNSTILE_ONOFF && CF_TURNSTILE_ONOFF == "true")){
if(isset($_POST['cf-turnstile-response'])){
$CF_Turnstile_token = htmlentities($_POST['cf-turnstile-response']);
if($CF_Turnstile_token){
$CF_Turnstile_data = [
'secret' => htmlentities(CF_TURNSTILE_SEAC_KEY),
'response' => $CF_Turnstile_token
];
$CF_Turnstile_options = [
'http' => [
'method'=> 'POST',
'header'=> 'Content-Type: application/x-www-form-urlencoded',
'content' => http_build_query($CF_Turnstile_data, '', '&')
]
];
$CF_Turnstile_result = json_decode(file_get_contents('https://challenges.cloudflare.com/turnstile/v0/siteverify', false, stream_context_create($CF_Turnstile_options)),true);
if(!($CF_Turnstile_result["success"] == true)){
$error_message[] = "CloudflareTurnstileであなたが人間である確認ができませんでした。(ERROR)";
}
}else{
$error_message[] = "CloudflareTurnstileであなたが人間である確認ができませんでした。(ERROR)";
}
}else{
$error_message[] = "CloudflareTurnstileであなたが人間である確認ができませんでした。(ERROR)";
} }
} }
@@ -219,10 +247,14 @@ $pdo = null;
<meta name="twitter:description" content="<?php echo htmlentities($serverinfo);?>"/> <meta name="twitter:description" content="<?php echo htmlentities($serverinfo);?>"/>
<!--OGPここまで--> <!--OGPここまで-->
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<script src="js/jquery-min.js"></script>
<script src="js/unsupported.js"></script> <script src="js/unsupported.js"></script>
<?php if(!empty(CAPTCHA && CAPTCHA == "true")){?> <?php if(!empty(H_CAPTCHA_ONOFF && H_CAPTCHA_ONOFF == "true")){?>
<script src="https://js.hcaptcha.com/1/api.js" async defer></script> <script src="https://js.hcaptcha.com/1/api.js" async defer></script>
<?php }?> <?php }?>
<?php if(!empty(CF_TURNSTILE_ONOFF && CF_TURNSTILE_ONOFF == "true")){?>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<?php }?>
<link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="favicon/icon-192x192.png">
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
@@ -265,10 +297,24 @@ $pdo = null;
<label for="password">パスワード</label> <label for="password">パスワード</label>
<input id="password" class="inbox" type="password" name="password" maxlength="32" value="<?php if( !empty($_SESSION['password']) ){ echo htmlentities( $_SESSION['password'], ENT_QUOTES, 'UTF-8'); } ?>"> <input id="password" class="inbox" type="password" name="password" maxlength="32" value="<?php if( !empty($_SESSION['password']) ){ echo htmlentities( $_SESSION['password'], ENT_QUOTES, 'UTF-8'); } ?>">
</div> </div>
<?php if(!empty(CAPTCHA && CAPTCHA == "true")){?> <div class="switch_flexbox">
<div class="switch_button">
<input id="passview" class="switch_input" type='checkbox' name="passview" value=""/>
<label for="passview" class="switch_label"></label>
</div>
<p>パスワードを表示する</p>
</div>
<?php if(!empty(H_CAPTCHA_ONOFF && H_CAPTCHA_ONOFF == "true")){?>
<div class="captcha_zone"> <div class="captcha_zone">
<div class="p2">人間だと思いますが一応お伺いします...<br>人間ですか?<br>人間の場合はチェックボックスにチェックしてください!</div> <div class="p2">人間だと思いますが一応お伺いします...<br>人間ですか?<br>人間の場合はチェックボックスにチェックしてください!</div>
<div class="h-captcha" data-sitekey="<?php echo htmlentities(SITE_KEY);?>"></div> <div class="h-captcha" data-sitekey="<?php echo htmlentities(H_CAPTCHA_SITE_KEY);?>"></div>
</div>
<?php }?>
<?php if(!empty(CF_TURNSTILE_ONOFF && CF_TURNSTILE_ONOFF == "true")){?>
<div class="captcha_zone">
<div class="cf-turnstile" data-sitekey="<?php echo htmlentities(CF_TURNSTILE_SITE_KEY);?>" data-callback="javascriptCallback" data-language="ja"></div>
</div> </div>
<?php }?> <?php }?>
@@ -292,13 +338,13 @@ function checkForm(inputElement) {
} }
inputElement.value = str; inputElement.value = str;
} }
$("#passview").click(function () {
if ($("#passview").prop("checked") == true) {
window.onload = function(){ $('#password').get(0).type = 'text';
var ele = document.getElementsByTagName("body")[0]; } else {
var n = Math.floor(Math.random() * 3); // 3枚の画像がある場合 $('#password').get(0).type = 'password';
ele.style.backgroundImage = "url(img/titleimg/"+n+".png)"; }
} });
</script> </script>
+1
View File
@@ -34,6 +34,7 @@ $_SESSION = null;
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/style.css"> <link rel="stylesheet" href="../css/style.css">
<script src="../js/jquery-min.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
+48 -11
View File
@@ -20,6 +20,8 @@ require('db.php');
require('function/function.php'); require('function/function.php');
//hCaptcha-------------------------------------------- //hCaptcha--------------------------------------------
require('settings_admin/hCaptcha_settings/hCaptcha_settings.php'); require('settings_admin/hCaptcha_settings/hCaptcha_settings.php');
//Cloudflare_Turnstile--------------------------------------------
require('settings_admin/CloudflareTurnstile_settings/CloudflareTurnstile_settings.php');
//---------------------------------------------------- //----------------------------------------------------
$serversettings_file = "server/serversettings.ini"; $serversettings_file = "server/serversettings.ini";
@@ -117,14 +119,14 @@ if( !empty($_POST['btn_submit']) ) {
$invitationcode = $_POST['invitationcode']; $invitationcode = $_POST['invitationcode'];
} }
if(!empty(CAPTCHA && CAPTCHA == "true")){ if(!empty(H_CAPTCHA_ONOFF && H_CAPTCHA_ONOFF == "true")){
if(isset($_POST['h-captcha-response'])){ if(isset($_POST['h-captcha-response'])){
$hcaptcha_token = htmlentities($_POST['h-captcha-response']); $hcaptcha_token = htmlentities($_POST['h-captcha-response']);
if($hcaptcha_token){ if($hcaptcha_token){
$captcha_data = [ $captcha_data = [
'secret' => htmlentities(SEAC_KEY), 'secret' => htmlentities(H_CAPTCHA_SEAC_KEY),
'response' => $hcaptcha_token, 'response' => $hcaptcha_token,
'sitekey' => htmlentities(SITE_KEY) 'sitekey' => htmlentities(H_CAPTCHA_SITE_KEY)
]; ];
$options = [ $options = [
'http' => [ 'http' => [
@@ -135,13 +137,39 @@ if( !empty($_POST['btn_submit']) ) {
]; ];
$hCaptcha_result = json_decode(file_get_contents('https://hcaptcha.com/siteverify', false, stream_context_create($options)),true); $hCaptcha_result = json_decode(file_get_contents('https://hcaptcha.com/siteverify', false, stream_context_create($options)),true);
if(!($hCaptcha_result["success"] == true)){ if(!($hCaptcha_result["success"] == true)){
$error_message[] = "あなたが人間である確認ができませんでした。(ERROR)"; $error_message[] = "hCaptchaであなたが人間である確認ができませんでした。(ERROR)";
} }
}else{ }else{
$error_message[] = "あなたが人間である確認ができませんでした。(ERROR)"; $error_message[] = "hCaptchaであなたが人間である確認ができませんでした。(ERROR)";
} }
}else{ }else{
$error_message[] = "あなたが人間である確認ができませんでした。(ERROR)"; $error_message[] = "hCaptchaであなたが人間である確認ができませんでした。(ERROR)";
}
}
if(!empty(CF_TURNSTILE_ONOFF && CF_TURNSTILE_ONOFF == "true")){
if(isset($_POST['cf-turnstile-response'])){
$CF_Turnstile_token = htmlentities($_POST['cf-turnstile-response']);
if($CF_Turnstile_token){
$CF_Turnstile_data = [
'secret' => htmlentities(CF_TURNSTILE_SEAC_KEY),
'response' => $CF_Turnstile_token
];
$CF_Turnstile_options = [
'http' => [
'method'=> 'POST',
'header'=> 'Content-Type: application/x-www-form-urlencoded',
'content' => http_build_query($CF_Turnstile_data, '', '&')
]
];
$CF_Turnstile_result = json_decode(file_get_contents('https://challenges.cloudflare.com/turnstile/v0/siteverify', false, stream_context_create($CF_Turnstile_options)),true);
if(!($CF_Turnstile_result["success"] == true)){
$error_message[] = "CloudflareTurnstileであなたが人間である確認ができませんでした。(ERROR)";
}
}else{
$error_message[] = "CloudflareTurnstileであなたが人間である確認ができませんでした。(ERROR)";
}
}else{
$error_message[] = "CloudflareTurnstileであなたが人間である確認ができませんでした。(ERROR)";
} }
} }
@@ -400,8 +428,8 @@ if( !empty($_POST['btn_submit']) ) {
} }
// 文字数を確認 // 文字数を確認
if( 100 < mb_strlen($password, 'UTF-8') ) { if( 256 < mb_strlen($password, 'UTF-8') ) {
$error_message[] = 'パスワードは100文字以内で入力してください。(PASSWORD_OVER_MAX_COUNT)'; $error_message[] = 'パスワードは256文字以内で入力してください。(PASSWORD_OVER_MAX_COUNT)';
} }
} }
@@ -506,10 +534,14 @@ $pdo = null;
<meta name="twitter:description" content="<?php echo htmlentities($serverinfo);?>"/> <meta name="twitter:description" content="<?php echo htmlentities($serverinfo);?>"/>
<!--OGPここまで--> <!--OGPここまで-->
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<script src="js/jquery-min.js"></script>
<script src="js/unsupported.js"></script> <script src="js/unsupported.js"></script>
<?php if(!empty(CAPTCHA && CAPTCHA == "true")){?> <?php if(!empty(H_CAPTCHA_ONOFF && H_CAPTCHA_ONOFF == "true")){?>
<script src="https://js.hcaptcha.com/1/api.js" async defer></script> <script src="https://js.hcaptcha.com/1/api.js" async defer></script>
<?php }?> <?php }?>
<?php if(!empty(CF_TURNSTILE_ONOFF && CF_TURNSTILE_ONOFF == "true")){?>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<?php }?>
<link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="favicon/icon-192x192.png">
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
@@ -600,10 +632,15 @@ $pdo = null;
</div> </div>
<p>登録を押すと利用規約とプライバシーポリシーに同意したこととなります。<br>未確認の場合は上のボタンよりお読みください。</p> <p>登録を押すと利用規約とプライバシーポリシーに同意したこととなります。<br>未確認の場合は上のボタンよりお読みください。</p>
<?php if(!empty(CAPTCHA && CAPTCHA == "true")){?> <?php if(!empty(H_CAPTCHA_ONOFF && H_CAPTCHA_ONOFF == "true")){?>
<div class="captcha_zone"> <div class="captcha_zone">
<div class="p2">あなたは人間ですか?<br>もし人間であれば下のチェックボックスにチェックしてください!</div> <div class="p2">あなたは人間ですか?<br>もし人間であれば下のチェックボックスにチェックしてください!</div>
<div class="h-captcha" data-sitekey="<?php echo htmlentities(SITE_KEY);?>"></div> <div class="h-captcha" data-sitekey="<?php echo htmlentities(H_CAPTCHA_SITE_KEY);?>"></div>
</div>
<?php }?>
<?php if(!empty(CF_TURNSTILE_ONOFF && CF_TURNSTILE_ONOFF == "true")){?>
<div class="captcha_zone">
<div class="cf-turnstile" data-sitekey="<?php echo htmlentities(CF_TURNSTILE_SITE_KEY);?>" data-callback="javascriptCallback" data-language="ja"></div>
</div> </div>
<?php }?> <?php }?>
<?php if(htmlspecialchars($serversettings["serverinfo"]["server_invitation"], ENT_QUOTES, 'UTF-8') === "true"){?> <?php if(htmlspecialchars($serversettings["serverinfo"]["server_invitation"], ENT_QUOTES, 'UTF-8') === "true"){?>
+113
View File
@@ -0,0 +1,113 @@
<?php
function createUniqId() {
list($msec, $sec) = explode(" ", microtime());
$hashCreateTime = $sec . floor($msec * 1000000);
$hashCreateTime = strrev($hashCreateTime);
return base_convert($hashCreateTime, 10, 36);
}
require('../db.php');
// データベースに接続
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();
}
if (isset($_GET['userid']) && isset($_GET['account_id']) && isset($_GET['search_query']) && isset($_GET['view_mode'])) {
$userid = htmlentities($_GET['userid'], ENT_QUOTES, 'UTF-8', false);
$loginid = htmlentities($_GET['account_id'], ENT_QUOTES, 'UTF-8', false);
$search_word = str_replace(":","",htmlentities($_GET['search_query'], ENT_QUOTES, 'UTF-8', false));
$viewmode = htmlentities($_GET['view_mode'], ENT_QUOTES, 'UTF-8', false);
$itemsPerPage = 50;
$pageNumber = htmlentities(isset($_GET['page'])) ? htmlentities(intval($_GET['page'])) : 1;
$offset = ($pageNumber - 1) * $itemsPerPage;
// データベース接続の設定
$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(!(empty($result2["loginid"]))){
if($result2["loginid"] === $loginid){
$custom_emoji = array();
if (!(empty($pdo))) {
if(!(empty($search_word))){
$custom_emoji_Query = $pdo->prepare("SELECT emojifile,emojiname,emojiinfo,emojidate FROM emoji WHERE emojiname LIKE :keyword OR emojiinfo LIKE :keyword ORDER BY emojidate DESC");
$custom_emoji_Query->bindValue(':keyword', '%' . $search_word . '%', PDO::PARAM_STR);
$custom_emoji_Query->execute();
}else{
$custom_emoji_Query = $pdo->prepare("SELECT emojifile,emojiname,emojiinfo,emojidate FROM emoji ORDER BY emojidate DESC LIMIT :offset, :itemsPerPage");
$custom_emoji_Query->bindValue(':offset', $offset, PDO::PARAM_INT);
$custom_emoji_Query->bindValue(':itemsPerPage', $itemsPerPage, PDO::PARAM_INT);
$custom_emoji_Query->execute();
}
$custom_array = $custom_emoji_Query->fetchAll();
$custom_emoji = array();
foreach ($custom_array as $row) {
$custom_emoji[] = $row;
}
if((!(empty($custom_emoji)))&&(!(empty($viewmode)))){
if($viewmode == "page"){
foreach ($custom_emoji as $value) {
echo '<div class="emjtex">';
echo '<div class="fx">';
echo '<img src="../' . htmlentities($value["emojifile"], ENT_QUOTES, 'UTF-8', false) . '">';
echo '<div class="btm_zone">';
echo '<h3>:'.htmlentities($value["emojiname"], ENT_QUOTES, 'UTF-8', false).':</h3>';
echo '<p>'.htmlentities($value["emojiinfo"], ENT_QUOTES, 'UTF-8', false).'</p>';
echo '</div>';
echo '</div>';
echo '</div>';
}
}elseif($viewmode == "picker"){
foreach ($custom_emoji as $value) {
echo '<div class="one_emoji">';
echo '<img src="../' . htmlentities($value["emojifile"], ENT_QUOTES, 'UTF-8', false) . '" alt=":'.htmlentities($value["emojiname"], ENT_QUOTES, 'UTF-8', false).':" title=":'.htmlentities($value["emojiname"], ENT_QUOTES, 'UTF-8', false).':">';
echo '</div>';
}
}else{
echo '<div class="tokonone" id="noemoji"><p>取得に失敗しました。</p></div>';
}
}else{
echo '<div class="tokonone" id="noemoji"><p>カスタム絵文字がありません</p></div>';
}
}else{
echo '<div class="tokonone" id="noemoji"><p>取得に失敗しました。</p></div>';
}
}else{
echo '<div class="tokonone" id="noemoji"><p>カスタム絵文字がありません</p></div>';
}
$pdo = null;
}else{
echo '<div class="tokonone" id="noemoji"><p>取得に失敗しました。</p></div>';
}
}else{
echo '<div class="tokonone" id="noemoji"><p>取得に失敗しました。</p></div>';
}
+7 -3
View File
@@ -55,8 +55,10 @@ if (isset($_GET['userid']) && isset($_GET['account_id'])) {
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
)); ));
$messageQuery = $dbh->prepare("SELECT fromuserid,title,msg,url,datetime,userchk FROM notification WHERE touserid = :userid ORDER BY datetime DESC LIMIT $offset, $itemsPerPage"); $messageQuery = $dbh->prepare("SELECT fromuserid,title,msg,url,datetime,userchk FROM notification WHERE touserid = :userid ORDER BY datetime DESC LIMIT :offset, :itemsPerPage");
$messageQuery->bindValue(':userid', $userid); $messageQuery->bindValue(':userid', $userid, PDO::PARAM_STR);
$messageQuery->bindValue(':offset', $offset, PDO::PARAM_INT);
$messageQuery->bindValue(':itemsPerPage', $itemsPerPage, PDO::PARAM_INT);
$messageQuery->execute(); $messageQuery->execute();
$message_array = $messageQuery->fetchAll(); $message_array = $messageQuery->fetchAll();
@@ -73,7 +75,7 @@ if (isset($_GET['userid']) && isset($_GET['account_id'])) {
if (!empty($message_array)) { if (!empty($message_array)) {
foreach ($message_array as $value) { foreach ($message_array as $value) {
$value["servericon"] = htmlspecialchars($serversettings["serverinfo"]["server_icon"], ENT_QUOTES, 'UTF-8', false); $value["servericon"] = htmlentities($serversettings["serverinfo"]["server_icon"], ENT_QUOTES, 'UTF-8', false);
if(!(empty($value['fromuserid']))){ if(!(empty($value['fromuserid']))){
if(!($value['fromuserid'] == "uwuzu-fromsys")){ if(!($value['fromuserid'] == "uwuzu-fromsys")){
$userQuery = $dbh->prepare("SELECT username,iconname FROM account WHERE userid = :userid"); $userQuery = $dbh->prepare("SELECT username,iconname FROM account WHERE userid = :userid");
@@ -94,6 +96,8 @@ if (isset($_GET['userid']) && isset($_GET['account_id'])) {
$pdo = null; $pdo = null;
}else{
echo '<div class="tokonone" id="noueuse"><p>取得に失敗しました。</p></div>';
} }
}else{ }else{
echo '<div class="tokonone" id="noueuse"><p>取得に失敗しました。</p></div>'; echo '<div class="tokonone" id="noueuse"><p>取得に失敗しました。</p></div>';
+12 -128
View File
@@ -1,123 +1,7 @@
<?php <?php
function processMarkdownAndWrapEmptyLines($markdownText){ //関数呼び出し
//- 文字装飾・URL変換など
//\___________________[注意]__________________\ require('../function/function.php');
// \____ここの順番を変えるとうまく動かなくなります___\
// \______Markdownうまく動くところを探すべし______\
$markdownText = preg_replace('/\[\[buruburu (.+)\]\]/m', '<span class="buruburu">$1</span>', $markdownText);//ぶるぶる
$markdownText = preg_replace('/(^|[^`])`([^`\n]+)`($|[^`])/m', '$1<span class="inline">$2</span>$3', $markdownText);//Inline Code
$markdownText = preg_replace('/\*\*\*(.*?)\*\*\*/', '<b><i>$1</i></b>', $markdownText);//太字&斜体の全部のせセット
$markdownText = preg_replace('/\_\_\_(.*?)\_\_\_/', '<b><i>$1</i></b>', $markdownText);//太字&斜体の全部のせセット
$markdownText = preg_replace('/\*\*(.*?)\*\*/', '<b>$1</b>', $markdownText);//太字
$markdownText = preg_replace('/\_\_(.*?)\_\_/', '<b>$1</b>', $markdownText);//太字
$markdownText = preg_replace('/\*(.*?)\*/', '<i>$1</i>', $markdownText);//斜体
$markdownText = preg_replace('/\_(.*?)\_/', '<i>$1</i>', $markdownText);//斜体
$markdownText = preg_replace('/\~\~(.*?)\~\~/m', '<s>$1</s>', $markdownText);//打ち消し線
$markdownText = preg_replace('/&gt;&gt;&gt; (.*)/m', '<span class="quote">$1</span>', $markdownText);//>>> 引用
$markdownText = preg_replace('/\|\|(.*)\|\|/m', '<span class="blur">$1</span>', $markdownText);//黒塗り
// タイトル(#、##、###)をHTMLのhタグに変換
$markdownText = preg_replace('/^# (.+)/m', '<h1>$1</h1>', $markdownText);
$markdownText = preg_replace('/^## (.+)/m', '<h2>$1</h2>', $markdownText);
$markdownText = preg_replace('/^### (.+)/m', '<h3>$1</h3>', $markdownText);
// 箇条書き(-)をHTMLのul/liタグに変換
$markdownText = preg_replace('/^- (.+)/m', '<p>・ $1</p>', $markdownText);
// 空行の前に何もない行をHTMLのpタグに変換
$markdownText = preg_replace('/(^\s*)(?!\s)(.*)/m', '$1<p>$2</p>', $markdownText);
return $markdownText;
}
//Profile
function replaceProfileEmojiImages($postText) {
$postText = str_replace('&#039;', '\'', $postText);
// プロフィール名で絵文字名(:emoji:)を検出して画像に置き換える
$emojiPattern = '/:(\w+):/';
$postTextWithImages = preg_replace_callback($emojiPattern, function($matches) {
$emojiName = $matches[1];
//絵文字path取得
$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,
));
$emoji_Query = $dbh->prepare("SELECT emojifile, emojiname FROM emoji WHERE emojiname = :emojiname");
$emoji_Query->bindValue(':emojiname', $emojiName);
$emoji_Query->execute();
$emoji_row = $emoji_Query->fetch();
if(empty($emoji_row["emojifile"])){
$emoji_path = "img/sysimage/errorimage/emoji_404.png";
}else{
$emoji_path = $emoji_row["emojifile"];
}
return "<img src='../".$emoji_path."' alt=':$emojiName:' title=':$emojiName:'>";
}, $postText);
return $postTextWithImages;
}
function replaceEmojisWithImages($postText) {
$postText = str_replace('&#039;', '\'', $postText);
// ユーズ内で絵文字名(:emoji:)を検出して画像に置き換える
$emojiPattern = '/:(\w+):/';
$postTextWithImages = preg_replace_callback($emojiPattern, function($matches) {
$emojiName = $matches[1];
//絵文字path取得
$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,
));
$emoji_Query = $dbh->prepare("SELECT emojifile, emojiname FROM emoji WHERE emojiname = :emojiname");
$emoji_Query->bindValue(':emojiname', $emojiName);
$emoji_Query->execute();
$emoji_row = $emoji_Query->fetch();
if(empty($emoji_row["emojifile"])){
$emoji_path = "img/sysimage/errorimage/emoji_404.png";
}else{
$emoji_path = $emoji_row["emojifile"];
}
return "<img src='../".$emoji_path."' alt=':$emojiName:' title=':$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 "<a class = 'mta' href='/@".htmlspecialchars($mentionsuserData["userid"], ENT_QUOTES, 'UTF-8', false)."'>@".replaceProfileEmojiImages(htmlspecialchars($mentionsuserData["username"], ENT_QUOTES, 'UTF-8', false))."</a>";
}
}, $postTextWithImages);
$hashtagsPattern = '/#([\p{Han}\p{Hiragana}\p{Katakana}A-Za-z0-9ー_]+)/u';
$postTextWithHashtags = preg_replace_callback($hashtagsPattern, function($matches) {
$hashtags = $matches[1];
return "<a class='hashtags' href='/search?q=" . urlencode('#') . htmlspecialchars($hashtags, ENT_QUOTES, 'UTF-8', false) . "'>" . '#' . htmlspecialchars($hashtags, ENT_QUOTES, 'UTF-8', false) . "</a>";
}, $postTextWithImagesAndUsernames);
return $postTextWithHashtags;
}
class MessageDisplay { class MessageDisplay {
private $value; private $value;
@@ -135,11 +19,11 @@ class MessageDisplay {
echo ' <div class="flebox">'; echo ' <div class="flebox">';
echo ' <div class="time">'; echo ' <div class="time">';
$day = date("Ymd", strtotime(htmlspecialchars($this->value['datetime'], ENT_QUOTES, 'UTF-8', false))); $day = date("Ymd", strtotime(htmlentities($this->value['datetime'], ENT_QUOTES, 'UTF-8', false)));
if ($day == date("Ymd")) { if ($day == date("Ymd")) {
echo date("今日 H:i", strtotime(htmlspecialchars($this->value['datetime'], ENT_QUOTES, 'UTF-8', false))); echo date("今日 H:i", strtotime(htmlentities($this->value['datetime'], ENT_QUOTES, 'UTF-8', false)));
} else { } else {
echo date("Y年m月d日 H:i", strtotime(htmlspecialchars($this->value['datetime'], ENT_QUOTES, 'UTF-8', false))); echo date("Y年m月d日 H:i", strtotime(htmlentities($this->value['datetime'], ENT_QUOTES, 'UTF-8', false)));
} }
echo ' </div>'; echo ' </div>';
@@ -151,24 +35,24 @@ class MessageDisplay {
echo ' <div class="icon">'; echo ' <div class="icon">';
if(($this->value['fromuserid'] == "uwuzu-fromsys")){ if(($this->value['fromuserid'] == "uwuzu-fromsys")){
if(!(empty($this->value["servericon"]))){ if(!(empty($this->value["servericon"]))){
echo ' <a href="/rule/serverabout"><img src="'.htmlspecialchars($this->value["servericon"], ENT_QUOTES, 'UTF-8', false).'"></a>'; echo ' <a href="/rule/serverabout"><img src="'.htmlentities($this->value["servericon"], ENT_QUOTES, 'UTF-8', false).'"></a>';
}else{ }else{
echo ' <a href="/rule/serverabout"><img src="../img/uwuzuicon.png"></a>'; echo ' <a href="/rule/serverabout"><img src="../img/uwuzuicon.png"></a>';
} }
}else{ }else{
echo ' <a href="/@'.htmlspecialchars($this->value['fromuserid'], ENT_QUOTES, 'UTF-8', false).'"><img src="' . htmlspecialchars($this->value['fromusericon'], ENT_QUOTES, 'UTF-8', false) . '"></a>'; echo ' <a href="/@'.htmlentities($this->value['fromuserid'], ENT_QUOTES, 'UTF-8', false).'"><img src="' . htmlentities($this->value['fromusericon'], ENT_QUOTES, 'UTF-8', false) . '"></a>';
} }
echo ' </div>'; echo ' </div>';
if(($this->value['fromuserid'] == "uwuzu-fromsys")){ if(($this->value['fromuserid'] == "uwuzu-fromsys")){
echo ' <div class="username"><a href="/rule/serverabout">uwuzu</a></div>'; echo ' <div class="username"><a href="/rule/serverabout">uwuzu</a></div>';
}else{ }else{
echo ' <div class="username"><a href="/@'.htmlspecialchars($this->value['fromuserid'], ENT_QUOTES, 'UTF-8', false).'">'.htmlspecialchars($this->value['fromusername'], ENT_QUOTES, 'UTF-8', false).'</a></div>'; echo ' <div class="username"><a href="/@'.htmlentities($this->value['fromuserid'], ENT_QUOTES, 'UTF-8', false).'">'.replaceEmojisWithImages(htmlentities($this->value['fromusername'], ENT_QUOTES, 'UTF-8', false)).'</a></div>';
} }
echo ' </div>'; echo ' </div>';
} }
echo ' <h3>' . replaceEmojisWithImages(htmlspecialchars($this->value['title'], ENT_QUOTES, 'UTF-8', false)) . '</h3>'; echo ' <h3>' . replaceEmojisWithImages(htmlentities($this->value['title'], ENT_QUOTES, 'UTF-8', false)) . '</h3>';
echo ' <p>' . processMarkdownAndWrapEmptyLines(replaceEmojisWithImages(nl2br(htmlspecialchars($this->value['msg'], ENT_QUOTES, 'UTF-8', false)))) . '</p>'; echo ' <p>' . processMarkdownAndWrapEmptyLines(replaceEmojisWithImages(nl2br(htmlentities($this->value['msg'], ENT_QUOTES, 'UTF-8', false)))) . '</p>';
echo ' <a href="' . htmlspecialchars($this->value['url'], ENT_QUOTES, 'UTF-8', false) . '">詳細をみる</a>'; echo ' <a href="' . htmlentities($this->value['url'], ENT_QUOTES, 'UTF-8', false) . '">詳細をみる</a>';
echo '</div>'; echo '</div>';
} }
+5 -5
View File
@@ -17,16 +17,16 @@ class UserdataDisplay {
echo '<div class="ueuse">'; echo '<div class="ueuse">';
echo '<div class="headbox">'; echo '<div class="headbox">';
echo ' <a href="/@' . htmlspecialchars($this->value['userid'], ENT_QUOTES, 'UTF-8', false) . '"><img src="'. htmlspecialchars('../'.$this->value['headname'], ENT_QUOTES, 'UTF-8', false) . '"></a>'; echo ' <a href="/@' . htmlentities($this->value['userid'], ENT_QUOTES, 'UTF-8', false) . '"><img src="'. htmlentities('../'.$this->value['headname'], ENT_QUOTES, 'UTF-8', false) . '"></a>';
echo '</div>'; echo '</div>';
echo '<div class="flebox">'; echo '<div class="flebox">';
echo ' <div class="user">'; echo ' <div class="user">';
echo ' <a href="/@' . htmlspecialchars($this->value['userid'], ENT_QUOTES, 'UTF-8', false) . '"><img src="'. htmlspecialchars('../'.$this->value['iconname'], ENT_QUOTES, 'UTF-8', false) . '"></a>'; echo ' <a href="/@' . htmlentities($this->value['userid'], ENT_QUOTES, 'UTF-8', false) . '"><img src="'. htmlentities('../'.$this->value['iconname'], ENT_QUOTES, 'UTF-8', false) . '"></a>';
echo ' <a href="/@' . htmlspecialchars($this->value['userid'], ENT_QUOTES, 'UTF-8', false) . '">' . htmlspecialchars($this->value['username'], ENT_QUOTES, 'UTF-8', false) . '</a>'; echo ' <div class="u_name"><a href="/@' . htmlentities($this->value['userid'], ENT_QUOTES, 'UTF-8', false) . '">' . replaceEmojisWithImages(htmlentities($this->value['username'], ENT_QUOTES, 'UTF-8', false)) . '</a></div>';
echo ' <div class="idbox">'; echo ' <div class="idbox">';
echo ' <a href="/@' . htmlspecialchars($this->value['userid'], ENT_QUOTES, 'UTF-8', false) . '">@' . htmlspecialchars($this->value['userid'], ENT_QUOTES, 'UTF-8', false) . '</a>'; echo ' <a href="/@' . htmlentities($this->value['userid'], ENT_QUOTES, 'UTF-8', false) . '">@' . htmlentities($this->value['userid'], ENT_QUOTES, 'UTF-8', false) . '</a>';
echo ' </div>'; echo ' </div>';
if(!empty($this->value['sacinfo'])){ if(!empty($this->value['sacinfo'])){
if($this->value['sacinfo'] === "bot"){ if($this->value['sacinfo'] === "bot"){
@@ -43,7 +43,7 @@ class UserdataDisplay {
echo '</div>'; echo '</div>';
echo '<div class="profilebox">'; echo '<div class="profilebox">';
echo ' <p>' .replaceEmojisWithImages(replaceURLsWithLinks(nl2br(htmlspecialchars($this->value['profile'], ENT_QUOTES, 'UTF-8', false)))) . '</h1></h2></h3></font></center></p>'; echo ' <p>' .replaceEmojisWithImages(replaceURLsWithLinks(nl2br(htmlentities($this->value['profile'], ENT_QUOTES, 'UTF-8', false)))) . '</h1></h2></h3></font></center></p>';
echo '</div>'; echo '</div>';
echo '</div>'; echo '</div>';
+32 -250
View File
@@ -1,226 +1,8 @@
<?php <?php
function processMarkdownAndWrapEmptyLines($markdownText){ //関数呼び出し
//- 文字装飾・URL変換など
//\___________________[注意]__________________\ require('../function/function.php');
// \____ここの順番を変えるとうまく動かなくなります___\
// \______Markdownうまく動くところを探すべし______\
$markdownText = preg_replace('/\[\[buruburu (.+)\]\]/m', '<span class="buruburu">$1</span>', $markdownText);//ぶるぶる
$markdownText = preg_replace('/(^|[^`])`([^`\n]+)`($|[^`])/m', '$1<span class="inline">$2</span>$3', $markdownText);//Inline Code
/*$markdownText = preg_replace_callback('/^\[\[time (\d+)\]\]/m', function($matches) {
$timestamp = $matches[1];
return '<span class="unixtime">' . date("Y/m/d H:i:s", $timestamp) . '</span>';
}, $markdownText);*/
$markdownText = preg_replace('/\*\*\*(.*?)\*\*\*/', '<b><i>$1</i></b>', $markdownText);//太字&斜体の全部のせセット
$markdownText = preg_replace('/\_\_\_(.*?)\_\_\_/', '<b><i>$1</i></b>', $markdownText);//太字&斜体の全部のせセット
$markdownText = preg_replace('/\*\*(.*?)\*\*/', '<b>$1</b>', $markdownText);//太字
$markdownText = preg_replace('/\_\_(.*?)\_\_/', '<b>$1</b>', $markdownText);//太字
$markdownText = preg_replace('/\*(.*?)\*/', '<i>$1</i>', $markdownText);//斜体
$markdownText = preg_replace('/\_(.*?)\_/', '<i>$1</i>', $markdownText);//斜体
$markdownText = preg_replace('/\~\~(.*?)\~\~/m', '<s>$1</s>', $markdownText);//打ち消し線
$markdownText = preg_replace('/&gt;&gt;&gt; (.*)/m', '<span class="quote">$1</span>', $markdownText);//>>> 引用
$markdownText = preg_replace('/\|\|(.*)\|\|/m', '<span class="blur">$1</span>', $markdownText);//黒塗り
// タイトル(#、##、###)をHTMLのhタグに変換
$markdownText = preg_replace('/^# (.+)/m', '<h1>$1</h1>', $markdownText);
$markdownText = preg_replace('/^## (.+)/m', '<h2>$1</h2>', $markdownText);
$markdownText = preg_replace('/^### (.+)/m', '<h3>$1</h3>', $markdownText);
// 箇条書き(-)をHTMLのul/liタグに変換
$markdownText = preg_replace('/^- (.+)/m', '<p>・ $1</p>', $markdownText);
// 空行の前に何もない行をHTMLのpタグに変換
$markdownText = preg_replace('/(^\s*)(?!\s)(.*)/m', '$1<p>$2</p>', $markdownText);
return $markdownText;
}
//Profile
function replaceProfileEmojiImages($postText) {
$postText = str_replace('&#039;', '\'', $postText);
// プロフィール名で絵文字名(:emoji:)を検出して画像に置き換える
$emojiPattern = '/:(\w+):/';
$postTextWithImages = preg_replace_callback($emojiPattern, function($matches) {
$emojiName = $matches[1];
//絵文字path取得
$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,
));
$emoji_Query = $dbh->prepare("SELECT emojifile, emojiname FROM emoji WHERE emojiname = :emojiname");
$emoji_Query->bindValue(':emojiname', $emojiName);
$emoji_Query->execute();
$emoji_row = $emoji_Query->fetch();
if(empty($emoji_row["emojifile"])){
$emoji_path = "img/sysimage/errorimage/emoji_404.png";
}else{
$emoji_path = $emoji_row["emojifile"];
}
return "<img src='../".$emoji_path."' alt=':$emojiName:' title=':$emojiName:'>";
}, $postText);
return $postTextWithImages;
}
// ユーズ内の絵文字やhashtagを画像に置き換える
function replaceEmojisWithImages($postText) {
$postText = str_replace('&#039;', '\'', $postText);
// ユーズ内で絵文字名(:emoji:)を検出して画像に置き換える
$emojiPattern = '/:(\w+):/';
$postTextWithImages = preg_replace_callback($emojiPattern, function($matches) {
$emojiName = $matches[1];
//絵文字path取得
$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,
));
$emoji_Query = $dbh->prepare("SELECT emojifile, emojiname FROM emoji WHERE emojiname = :emojiname");
$emoji_Query->bindValue(':emojiname', $emojiName);
$emoji_Query->execute();
$emoji_row = $emoji_Query->fetch();
if(empty($emoji_row["emojifile"])){
$emoji_path = "img/sysimage/errorimage/emoji_404.png";
}else{
$emoji_path = $emoji_row["emojifile"];
}
return "<img src='../".$emoji_path."' alt=':$emojiName:' title=':$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 "<a class = 'mta' href='/@".htmlspecialchars($mentionsuserData["userid"], ENT_QUOTES, 'UTF-8', false)."'>@".replaceProfileEmojiImages(htmlspecialchars($mentionsuserData["username"], ENT_QUOTES, 'UTF-8', false))."</a>";
}
}, $postTextWithImages);
$hashtagsPattern = '/#([\p{Han}\p{Hiragana}\p{Katakana}A-Za-z0-9ー_]+)/u';
$postTextWithHashtags = preg_replace_callback($hashtagsPattern, function($matches) {
$hashtags = $matches[1];
return "<a class='hashtags' href='/search?q=" . urlencode('#') . $hashtags . "'>" . '#' . $hashtags . "</a>";
}, $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);
if (!isset($parsedUrl['path'])) {
$parsedUrl['path'] = '';
}
if (!isset($parsedUrl['query'])) {
$parsedUrl['query'] = '';
}
$nochk_domain = $parsedUrl['host'].$parsedUrl['path'].$parsedUrl['query'];
if(strlen($nochk_domain) > 47){
$domain = mb_substr($nochk_domain, 0, 48, "UTF-8")."...";
}else{
$domain = $nochk_domain;
}
// 不要な文字を削除してaタグを生成
$urlWithoutSpaces = preg_replace('/\s+/', '', $url);
$link = "<a href='$urlWithoutSpaces' target='_blank' title='$urlWithoutSpaces'>$domain</a>";
// URLをドメインのみを表示するaタグで置き換え
$postText = preg_replace('/' . preg_quote($url, '/') . '/', $link, $postText);
}
return $postText;
}
function YouTube_and_nicovideo_Links($postText) {
// URLを正規表現を使って検出
$pattern = '/(https:\/\/[^\s<>\[\]\'"]+)/'; // 改良された正規表現
preg_match_all($pattern, $postText, $matches);
if(empty($url)){
$postText = "";
}
// 検出したURLごとに処理を行う
foreach ($matches[0] as $url) {
// ドメイン部分を抽出
$parsedUrl = parse_url($url);
if($parsedUrl['host'] == "youtube.com" || $parsedUrl['host'] == "youtu.be" || $parsedUrl['host'] == "www.youtube.com" || $parsedUrl['host'] == "m.youtube.com"){
if (isset($parsedUrl['query'])) {
if(false !== strpos($parsedUrl['query'], 'v=')) {
$video_id = str_replace('v=', '', htmlspecialchars($parsedUrl['query'], ENT_QUOTES, 'UTF-8', false));
$iframe = true;
}else{
$video_id = str_replace('/', '', htmlspecialchars($parsedUrl['path'], ENT_QUOTES, 'UTF-8', false));
$iframe = true;
}
}elseif(isset($parsedUrl['path'])){
$video_id = str_replace('/', '', htmlspecialchars($parsedUrl['path'], ENT_QUOTES, 'UTF-8', false));
$iframe = true;
}else{
$video_id = "";
$iframe = false;
}
// 不要な文字を削除してaタグを生成
if($iframe == true){
$link = '<iframe src="https://www.youtube-nocookie.com/embed/'.$video_id.'" rel="0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>';
}else{
$link = "";
}
// URLをドメインのみを表示するaタグで置き換え
$postText = $link;
}elseif($parsedUrl['host'] == "nicovideo.jp" || $parsedUrl['host'] == "www.nicovideo.jp"){
if(isset($parsedUrl['path'])){
$video_id = str_replace('/watch/', '', htmlspecialchars($parsedUrl['path'], ENT_QUOTES, 'UTF-8', false));
$iframe = true;
}else{
$video_id = "";
$iframe = false;
}
// 不要な文字を削除してaタグを生成
if($iframe == true){
$link = '<iframe src="https://embed.nicovideo.jp/watch/'.$video_id.'"</iframe>';
}else{
$link = "";
}
// URLをドメインのみを表示するaタグで置き換え
$postText = $link;
}else{
$postText = "";
}
}
return $postText;
}
class MessageDisplay { class MessageDisplay {
private $value; private $value;
@@ -242,10 +24,10 @@ class MessageDisplay {
} }
echo ' <div class="flebox">'; echo ' <div class="flebox">';
echo ' <a href="/@' . htmlspecialchars($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '"><img src="'. htmlspecialchars('../'.$this->value['iconname'], ENT_QUOTES, 'UTF-8', false) . '"></a>'; echo ' <a href="/@' . htmlentities($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '"><img src="'. htmlentities('../'.$this->value['iconname'], ENT_QUOTES, 'UTF-8', false) . '"></a>';
echo ' <a href="/@' . htmlspecialchars($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '"><div class="u_name">' . replaceProfileEmojiImages(htmlspecialchars($this->value['username'], ENT_QUOTES, 'UTF-8', false)) . '</div></a>'; echo ' <a href="/@' . htmlentities($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '"><div class="u_name">' . replaceProfileEmojiImages(htmlentities($this->value['username'], ENT_QUOTES, 'UTF-8', false)) . '</div></a>';
echo ' <div class="idbox">'; echo ' <div class="idbox">';
echo ' <a href="/@' . htmlspecialchars($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '">@' . htmlspecialchars($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '</a>'; echo ' <a href="/@' . htmlentities($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '">@' . htmlentities($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '</a>';
echo ' </div>'; echo ' </div>';
if(!empty($this->value['sacinfo'])){ if(!empty($this->value['sacinfo'])){
if($this->value['sacinfo'] === "bot"){ if($this->value['sacinfo'] === "bot"){
@@ -260,7 +42,7 @@ class MessageDisplay {
} }
echo ' <div class="time">'; echo ' <div class="time">';
$datetime = strtotime(htmlspecialchars($this->value['datetime'], ENT_QUOTES, 'UTF-8', false)); $datetime = strtotime(htmlentities($this->value['datetime'], ENT_QUOTES, 'UTF-8', false));
$today = strtotime(date("Y-m-d")); $today = strtotime(date("Y-m-d"));
$tomorrow = date('Y-m-d', strtotime('+1 day')); $tomorrow = date('Y-m-d', strtotime('+1 day'));
if (date("md", $datetime) == "0101") { if (date("md", $datetime) == "0101") {
@@ -283,45 +65,45 @@ class MessageDisplay {
echo ' </div>'; echo ' </div>';
if($this->value['nsfw'] === "true"){ if($this->value['nsfw'] === "true"){
echo ' <div class="nsfw" data-uniqid="' . htmlspecialchars($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '">'; echo ' <div class="nsfw" data-uniqid="' . htmlentities($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '">';
echo ' <p>NSFW指定がされている投稿です!<br>職場や公共の場での表示には適さない場合があります。<br>表示ボタンを押すと表示されます。</p>'; echo ' <p>NSFW指定がされている投稿です!<br>職場や公共の場での表示には適さない場合があります。<br>表示ボタンを押すと表示されます。</p>';
echo ' <div class="btnzone">'; echo ' <div class="btnzone">';
echo ' <input type="button" id="nsfw_view" class="mini_irobtn" value="表示">'; echo ' <input type="button" id="nsfw_view" class="mini_irobtn" value="表示">';
echo ' </div>'; echo ' </div>';
echo ' </div>'; echo ' </div>';
echo ' <div class="nsfw_main" data-uniqid="' . htmlspecialchars($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '">'; echo ' <div class="nsfw_main" data-uniqid="' . htmlentities($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '">';
echo ' <div class="block">'; echo ' <div class="block">';
} }
echo ' <p>' . replaceEmojisWithImages(processMarkdownAndWrapEmptyLines(replaceURLsWithLinks(nl2br(htmlspecialchars($this->value['ueuse'], ENT_QUOTES, 'UTF-8', false))))) . '</h1></h2></h3></font></center></p>'; echo ' <p>' . processMarkdownAndWrapEmptyLines(replaceEmojisWithImages(replaceURLsWithLinks(nl2br(htmlentities($this->value['ueuse'], ENT_QUOTES, 'UTF-8', false))))) . '</h1></h2></h3></font></center></p>';
if (!empty($this->value['photo4']) && $this->value['photo4'] !== 'none') { if (!empty($this->value['photo4']) && $this->value['photo4'] !== 'none') {
echo ' <div class="photo4">'; echo ' <div class="photo4">';
echo ' <a href="'.htmlspecialchars($this->value['photo1'], ENT_QUOTES, 'UTF-8', false).'" target=”_blank”><img src="'.htmlspecialchars($this->value['photo1'], ENT_QUOTES, 'UTF-8', false).'" alt="画像1" title="画像1" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>'; echo ' <a><img src="'.htmlentities($this->value['photo1'], ENT_QUOTES, 'UTF-8', false).'" alt="画像1" title="画像1" data-id="1" id="ueuse_image" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>';
echo ' <a href="'.htmlspecialchars($this->value['photo2'], ENT_QUOTES, 'UTF-8', false).'" target=”_blank”><img src="'.htmlspecialchars($this->value['photo2'], ENT_QUOTES, 'UTF-8', false).'" alt="画像2" title="画像2" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>'; echo ' <a><img src="'.htmlentities($this->value['photo2'], ENT_QUOTES, 'UTF-8', false).'" alt="画像2" title="画像2" data-id="2" id="ueuse_image" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>';
echo ' <a href="'.htmlspecialchars($this->value['photo3'], ENT_QUOTES, 'UTF-8', false).'" target=”_blank”><img src="'.htmlspecialchars($this->value['photo3'], ENT_QUOTES, 'UTF-8', false).'" alt="画像3" title="画像3" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>'; echo ' <a><img src="'.htmlentities($this->value['photo3'], ENT_QUOTES, 'UTF-8', false).'" alt="画像3" title="画像3" data-id="3" id="ueuse_image" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>';
echo ' <a href="'.htmlspecialchars($this->value['photo4'], ENT_QUOTES, 'UTF-8', false).'" target=”_blank”><img src="'.htmlspecialchars($this->value['photo4'], ENT_QUOTES, 'UTF-8', false).'" alt="画像4" title="画像4" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>'; echo ' <a><img src="'.htmlentities($this->value['photo4'], ENT_QUOTES, 'UTF-8', false).'" alt="画像4" title="画像4" data-id="4" id="ueuse_image" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>';
echo ' </div>'; echo ' </div>';
} elseif (!empty($this->value['photo3']) && $this->value['photo3'] !== 'none') { } elseif (!empty($this->value['photo3']) && $this->value['photo3'] !== 'none') {
echo ' <div class="photo3">'; echo ' <div class="photo3">';
echo ' <a href="'.htmlspecialchars($this->value['photo1'], ENT_QUOTES, 'UTF-8', false).'" target=”_blank”><img src="'.htmlspecialchars($this->value['photo1'], ENT_QUOTES, 'UTF-8', false).'" alt="画像1" title="画像1" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>'; echo ' <a><img src="'.htmlentities($this->value['photo1'], ENT_QUOTES, 'UTF-8', false).'" alt="画像1" title="画像1" data-id="1" id="ueuse_image" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>';
echo ' <a href="'.htmlspecialchars($this->value['photo2'], ENT_QUOTES, 'UTF-8', false).'" target=”_blank”><img src="'.htmlspecialchars($this->value['photo2'], ENT_QUOTES, 'UTF-8', false).'" alt="画像2" title="画像2" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>'; echo ' <a><img src="'.htmlentities($this->value['photo2'], ENT_QUOTES, 'UTF-8', false).'" alt="画像2" title="画像2" data-id="2" id="ueuse_image" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>';
echo ' <div class="photo3_btm">'; echo ' <div class="photo3_btm">';
echo ' <a href="'.htmlspecialchars($this->value['photo3'], ENT_QUOTES, 'UTF-8', false).'" target=”_blank”><img src="'.htmlspecialchars($this->value['photo3'], ENT_QUOTES, 'UTF-8', false).'" alt="画像3" title="画像3" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>'; echo ' <a><img src="'.htmlentities($this->value['photo3'], ENT_QUOTES, 'UTF-8', false).'" alt="画像3" title="画像3" data-id="3" id="ueuse_image" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>';
echo ' </div>'; echo ' </div>';
echo ' </div>'; echo ' </div>';
} elseif (!empty($this->value['photo2']) && $this->value['photo2'] !== 'none') { } elseif (!empty($this->value['photo2']) && $this->value['photo2'] !== 'none') {
echo ' <div class="photo2">'; echo ' <div class="photo2">';
echo ' <a href="'.htmlspecialchars($this->value['photo1'], ENT_QUOTES, 'UTF-8', false).'" target=”_blank”><img src="'.htmlspecialchars($this->value['photo1'], ENT_QUOTES, 'UTF-8', false).'" alt="画像1" title="画像1" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>'; echo ' <a><img src="'.htmlentities($this->value['photo1'], ENT_QUOTES, 'UTF-8', false).'" alt="画像1" title="画像1" data-id="1" id="ueuse_image" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>';
echo ' <a href="'.htmlspecialchars($this->value['photo2'], ENT_QUOTES, 'UTF-8', false).'" target=”_blank”><img src="'.htmlspecialchars($this->value['photo2'], ENT_QUOTES, 'UTF-8', false).'" alt="画像2" title="画像2" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>'; echo ' <a><img src="'.htmlentities($this->value['photo2'], ENT_QUOTES, 'UTF-8', false).'" alt="画像2" title="画像2" data-id="2" id="ueuse_image" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>';
echo ' </div>'; echo ' </div>';
} elseif (!empty($this->value['photo1']) && $this->value['photo1'] !== 'none') { } elseif (!empty($this->value['photo1']) && $this->value['photo1'] !== 'none') {
echo ' <div class="photo1">'; echo ' <div class="photo1">';
echo ' <a href="'.htmlspecialchars($this->value['photo1'], ENT_QUOTES, 'UTF-8', false).'" target=”_blank”><img src="'.htmlspecialchars($this->value['photo1'], ENT_QUOTES, 'UTF-8', false).'" alt="画像1" title="画像1" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>'; echo ' <a><img src="'.htmlentities($this->value['photo1'], ENT_QUOTES, 'UTF-8', false).'" alt="画像1" title="画像1" data-id="1" id="ueuse_image" onerror="this.onerror=null;this.src=\'../img/sysimage/errorimage/image_404.png\'"></a>';
echo ' </div>'; echo ' </div>';
} }
if (!empty($this->value['video1']) && $this->value['video1'] !== 'none') { if (!empty($this->value['video1']) && $this->value['video1'] !== 'none') {
echo ' <div class="video1">'; echo ' <div class="video1">';
echo ' <video controls src="' . htmlspecialchars($this->value['video1'], ENT_QUOTES, 'UTF-8', false) . '"></video>'; echo ' <video controls src="' . htmlentities($this->value['video1'], ENT_QUOTES, 'UTF-8', false) . '"></video>';
echo ' </div>'; echo ' </div>';
}elseif (!empty(YouTube_and_nicovideo_Links($this->value['ueuse']))) { }elseif (!empty(YouTube_and_nicovideo_Links($this->value['ueuse']))) {
echo ' <div class="youtube_and_nicovideo_player">'; echo ' <div class="youtube_and_nicovideo_player">';
@@ -332,10 +114,10 @@ class MessageDisplay {
if(!($this->value['abi'] == "none")){ if(!($this->value['abi'] == "none")){
echo '<div class="abi">'; echo '<div class="abi">';
echo ' <div class="back">'; echo ' <div class="back">';
echo '<h1>' . replaceProfileEmojiImages(htmlspecialchars($this->value['username'], ENT_QUOTES, 'UTF-8', false)) . 'さんが追記しました</h1>'; echo '<h1>' . replaceProfileEmojiImages(htmlentities($this->value['username'], ENT_QUOTES, 'UTF-8', false)) . 'さんが追記しました</h1>';
echo ' </div>'; echo ' </div>';
echo '<p>'.processMarkdownAndWrapEmptyLines(replaceEmojisWithImages(replaceURLsWithLinks(nl2br(htmlspecialchars($this->value['abi'], ENT_QUOTES, 'UTF-8', false))))) . '</p>'; echo '<p>'.processMarkdownAndWrapEmptyLines(replaceEmojisWithImages(replaceURLsWithLinks(nl2br(htmlentities($this->value['abi'], ENT_QUOTES, 'UTF-8', false))))) . '</p>';
echo '<div class="h3s">追記日時 : '. date("Y年m月d日 H:i", strtotime(htmlspecialchars($this->value['abidate'], ENT_QUOTES, 'UTF-8', false))) . '</div>'; echo '<div class="h3s">追記日時 : '. date("Y年m月d日 H:i", strtotime(htmlentities($this->value['abidate'], ENT_QUOTES, 'UTF-8', false))) . '</div>';
echo '</div>'; echo '</div>';
} }
if($this->value['nsfw'] === "true"){ if($this->value['nsfw'] === "true"){
@@ -347,27 +129,27 @@ class MessageDisplay {
echo '<div class="favbox">'; echo '<div class="favbox">';
$favoriteList = explode(',', $this->value['favorite']); $favoriteList = explode(',', $this->value['favorite']);
if (in_array($this->userid, $favoriteList)) { if (in_array($this->userid, $favoriteList)) {
echo '<button class="favbtn favbtn_after" id="favbtn" data-uniqid="' . htmlspecialchars($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '" data-userid2="' . htmlspecialchars($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '"><svg><use xlink:href="../img/sysimage/favorite_2.svg#favorite" alt="いいね"></use></svg> <span class="like-count">' . htmlentities($this->value['favcnt']) . '</span></button>'; echo '<button class="favbtn favbtn_after" id="favbtn" data-uniqid="' . htmlentities($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '" data-userid2="' . htmlentities($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '"><svg><use xlink:href="../img/sysimage/favorite_2.svg#favorite" alt="いいね"></use></svg> <span class="like-count">' . htmlentities($this->value['favcnt']) . '</span></button>';
}else{ }else{
echo '<button class="favbtn" id="favbtn" data-uniqid="' . htmlspecialchars($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '" data-userid2="' . htmlspecialchars($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '"><svg><use xlink:href="../img/sysimage/favorite_1.svg#favorite" alt="いいね"></use></svg> <span class="like-count">' . htmlentities($this->value['favcnt']) . '</span></button>'; echo '<button class="favbtn" id="favbtn" data-uniqid="' . htmlentities($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '" data-userid2="' . htmlentities($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '"><svg><use xlink:href="../img/sysimage/favorite_1.svg#favorite" alt="いいね"></use></svg> <span class="like-count">' . htmlentities($this->value['favcnt']) . '</span></button>';
} }
echo '<a href="/!'.htmlspecialchars($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false). '~' . htmlspecialchars($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '" class="tuduki"><svg><use xlink:href="../img/sysimage/reply_1.svg#reply_1"></use></svg>'.htmlspecialchars($this->value['reply_count'], ENT_QUOTES, 'UTF-8', false).'</a>'; echo '<a href="/!'.htmlentities($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false). '" class="tuduki"><svg><use xlink:href="../img/sysimage/reply_1.svg#reply_1"></use></svg>'.htmlentities($this->value['reply_count'], ENT_QUOTES, 'UTF-8', false).'</a>';
echo '<button name="share" id="share" class="share" data-uniqid="' . htmlspecialchars($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '" data-userid="' . htmlspecialchars($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '"><svg><use xlink:href="../img/sysimage/share_1.svg#share_1"></use></svg></button>'; echo '<button name="share" id="share" class="share" data-uniqid="' . htmlentities($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '" data-userid="' . htmlentities($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '"><svg><use xlink:href="../img/sysimage/share_1.svg#share_1"></use></svg></button>';
$bookmarkList = explode(',', $this->value['bookmark']); $bookmarkList = explode(',', $this->value['bookmark']);
if (in_array($this->value['uniqid'], $bookmarkList)) { if (in_array($this->value['uniqid'], $bookmarkList)) {
echo '<button name="bookmark" id="bookmark" class="bookmark bookmark_after" data-uniqid="' . htmlspecialchars($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '" data-userid="' . htmlspecialchars($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '"><svg><use xlink:href="../img/sysimage/bookmark_1.svg#bookmark_1"></use></svg></button>'; echo '<button name="bookmark" id="bookmark" class="bookmark bookmark_after" data-uniqid="' . htmlentities($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '" data-userid="' . htmlentities($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '"><svg><use xlink:href="../img/sysimage/bookmark_1.svg#bookmark_1"></use></svg></button>';
}else{ }else{
echo '<button name="bookmark" id="bookmark" class="bookmark" data-uniqid="' . htmlspecialchars($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '" data-userid="' . htmlspecialchars($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '"><svg><use xlink:href="../img/sysimage/bookmark_1.svg#bookmark_1"></use></svg></button>'; echo '<button name="bookmark" id="bookmark" class="bookmark" data-uniqid="' . htmlentities($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '" data-userid="' . htmlentities($this->value['account'], ENT_QUOTES, 'UTF-8', false) . '"><svg><use xlink:href="../img/sysimage/bookmark_1.svg#bookmark_1"></use></svg></button>';
} }
if($this->value['account'] === $this->userid){ if($this->value['account'] === $this->userid){
if(!($this->value['role'] === "ice")){ if(!($this->value['role'] === "ice")){
if($this->value['abi'] === "none"){ if($this->value['abi'] === "none"){
echo '<button name="addabi" id="addabi" data-uniqid2="' . htmlspecialchars($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '" class="addabi"><svg><use xlink:href="../img/sysimage/addabi_1.svg#addabi_1"></use></svg></button>'; echo '<button name="addabi" id="addabi" data-uniqid2="' . htmlentities($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '" class="addabi"><svg><use xlink:href="../img/sysimage/addabi_1.svg#addabi_1"></use></svg></button>';
} }
} }
echo '<input type="submit" name="delueuse" id="uniqid2" data-uniqid2="' . htmlspecialchars($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '" class="delbtn" value="削除">'; echo '<input type="submit" name="delueuse" id="uniqid2" data-uniqid2="' . htmlentities($this->value['uniqid'], ENT_QUOTES, 'UTF-8', false) . '" class="delbtn" value="削除">';
} }
echo '</div>'; echo '</div>';
echo '</div>'; echo '</div>';
+1 -1
View File
@@ -9,7 +9,7 @@ function decode_yajirushi($postText){
return $postText; return $postText;
} }
if(htmlspecialchars($serversettings["serverinfo"]["server_activitypub"], ENT_QUOTES, 'UTF-8') === "true"){ if(htmlspecialchars($serversettings["serverinfo"]["server_activitypub"], ENT_QUOTES, 'UTF-8') === "true"){
header("Content-Type: application/json"); header("Content-Type: application/activity+json");
header("charset=utf-8"); header("charset=utf-8");
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Origin: *");
+96 -35
View File
@@ -181,41 +181,11 @@ $notiData = $notiQuery->fetch(PDO::FETCH_ASSOC);
$notificationcount = $notiData['notification_count']; $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,
));
$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=utf8mb4;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($_POST['btn_submit']) ) { if( !empty($_POST['btn_submit']) ) {
//$level = $_POST['notice_level']; //$level = $_POST['notice_level'];
$title = $_POST['title']; $title = htmlentities($_POST['title'], ENT_QUOTES, 'UTF-8', false);
$note = $_POST['note']; $note = htmlentities($_POST['note'], ENT_QUOTES, 'UTF-8', false);
// IDの入力チェック // IDの入力チェック
if( empty($title) ) { if( empty($title) ) {
@@ -245,6 +215,8 @@ if( !empty($_POST['btn_submit']) ) {
if( empty($error_message) ) { if( empty($error_message) ) {
$uniqid = createUniqId();
// 書き込み日時を取得 // 書き込み日時を取得
$datetime = date("Y-m-d H:i:s"); $datetime = date("Y-m-d H:i:s");
@@ -254,11 +226,12 @@ if( !empty($_POST['btn_submit']) ) {
try { try {
// SQL作成 // SQL作成
$stmt = $pdo->prepare("INSERT INTO notice (title,note,account,datetime) VALUES (:title,:note,:account,:datetime)"); $stmt = $pdo->prepare("INSERT INTO notice (uniqid,title,note,account,datetime) VALUES (:uniqid,:title,:note,:account,:datetime)");
// 値をセット // 値をセット
//$stmt->bindParam( ':level', $notice_level, PDO::PARAM_STR); //$stmt->bindParam( ':level', $notice_level, PDO::PARAM_STR);
$stmt->bindParam( ':uniqid', $uniqid, PDO::PARAM_STR);
$stmt->bindParam( ':title', $title, PDO::PARAM_STR); $stmt->bindParam( ':title', $title, PDO::PARAM_STR);
$stmt->bindParam( ':note', $note, PDO::PARAM_STR); $stmt->bindParam( ':note', $note, PDO::PARAM_STR);
@@ -294,10 +267,58 @@ if( !empty($_POST['btn_submit']) ) {
} }
if( !empty($_POST['note_del']) ) {
$note_id = htmlentities($_POST['note_id']);
if (!empty($pdo)) {
$query = $pdo->prepare('SELECT * FROM notice WHERE uniqid = :uniqid limit 1');
$query->execute(array(':uniqid' => $note_id));
$result = $query->fetch();
if($result == 0){
$error_message[] = "削除できないお知らせです。";
}
if(empty($error_message)){
try{
// 通知削除クエリを実行
$deleteQuery = $pdo->prepare("DELETE FROM notice WHERE uniqid = :uniqid");
$deleteQuery->bindValue(':uniqid', $note_id, 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[] = "お知らせの削除ができませんでした。(NOTICE_DELETE_DAME)";
}
$stmt = null;
}
}
}
if (!empty($pdo)) {
$sql = "SELECT * FROM notice ORDER BY datetime DESC";
$allnotice = $pdo->query($sql);
while ($row = $allnotice->fetch(PDO::FETCH_ASSOC)) {
$Notices[] = $row;
}
}
require('../logout/logout.php'); require('../logout/logout.php');
// データベースの接続を閉じる // データベースの接続を閉じる
$pdo = null; $pdo = null;
@@ -310,7 +331,7 @@ $pdo = null;
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>お知らせ配信 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>お知らせ配信 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
@@ -367,7 +388,47 @@ $pdo = null;
</form> </form>
<div class="formarea">
<?php if(!(empty($Notices))){?>
<?php foreach ($Notices as $value) {?>
<div class="server_code">
<details>
<summary><?php echo htmlentities($value["title"]);?></summary>
<hr>
<div class="p2">本文</div>
<p><?php echo htmlentities($value["note"]);?></p>
<hr>
<div class="p2">配信日時</div>
<p><?php echo date("Y年m月d日 H:i", strtotime(htmlentities($value["datetime"])));?></p>
<div class="p2">ID</div>
<?php if(!(empty($value["uniqid"]))){?>
<p><?php echo htmlentities($value["uniqid"]);?></p>
<?php }else{?>
<p>IDはありません。</p>
<?php }?>
<hr>
<form enctype="multipart/form-data" method="post">
<?php if(!(empty($value["uniqid"]))){?>
<div class="delbox">
<p>削除ボタンを押すとこのお知らせは削除されます。</p>
<input type="text" name="note_id" id="note_id" value="<?php echo htmlentities($value["uniqid"]);?>" style="display:none;" >
<input type="submit" name="note_del" class="delbtn" value="削除">
</div> </div>
<?php }else{?>
<div class="delbox">
<p>このお知らせは削除できません。</p>
</div>
<?php }?>
</form>
</details>
</div>
<?php }?>
<?php }?>
</div>
</main> </main>
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
+13 -34
View File
@@ -179,41 +179,19 @@ $notiData = $notiQuery->fetch(PDO::FETCH_ASSOC);
$notificationcount = $notiData['notification_count']; $notificationcount = $notiData['notification_count'];
//------------------通知-------------- //------------------通知--------------
function replaceURLsWithLinks_forNotice($postText) { function replaceURLsWithLinks_forNotice($postText, $maxLength = 48) {
$postText = str_replace('&#039;', '\'', $postText); $pattern = '/(https:\/\/[\w!?\/+\-_~;.,*&@#$%()+|https:\/\/[ぁ-んァ-ヶ一-龠々\w\-\/?=&%.]+)/';
$convertedText = preg_replace_callback($pattern, function($matches) use ($maxLength) {
// URLを正規表現を使って検出 $link = $matches[0];
$pattern = '/(https:\/\/[^\s<>\[\]\'"]+)/'; // 改良された正規表現 if (mb_strlen($link) > $maxLength) {
preg_match_all($pattern, $postText, $matches); $truncatedLink = mb_substr($link, 0, $maxLength).'…';
return '<a href="'.$link.'">'.$truncatedLink.'</a>';
// 検出したURLごとに処理を行う } else {
foreach ($matches[0] as $url) { return '<a href="'.$link.'">'.$link.'</a>';
// ドメイン部分を抽出
$parsedUrl = parse_url($url);
if (!isset($parsedUrl['path'])) {
$parsedUrl['path'] = '';
}
if (!isset($parsedUrl['query'])) {
$parsedUrl['query'] = '';
} }
}, $postText);
$nochk_domain = $parsedUrl['host'].$parsedUrl['path'].$parsedUrl['query']; return $convertedText;
if(strlen($nochk_domain) > 47){
$domain = mb_substr($nochk_domain, 0, 48, "UTF-8")."...";
}else{
$domain = $nochk_domain;
}
// 不要な文字を削除してaタグを生成
$urlWithoutSpaces = preg_replace('/\s+/', '', $url);
$link = "<a href='$urlWithoutSpaces' target='_blank' title='$urlWithoutSpaces'>$domain</a>";
// URLをドメインのみを表示するaタグで置き換え
$postText = preg_replace('/' . preg_quote($url, '/') . '/', $link, $postText);
}
return $postText;
} }
$sql = "SELECT title, note, account, datetime FROM notice ORDER BY datetime DESC"; $sql = "SELECT title, note, account, datetime FROM notice ORDER BY datetime DESC";
@@ -237,7 +215,7 @@ $pdo = null;
<html lang="ja"> <html lang="ja">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
@@ -284,6 +262,7 @@ $pdo = null;
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
+2 -1
View File
@@ -186,7 +186,7 @@ $pdo = null;
<html lang="ja"> <html lang="ja">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
@@ -233,6 +233,7 @@ $pdo = null;
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
+16 -15
View File
@@ -402,7 +402,7 @@ if( !empty($_POST['session_submit']) ) {
// すべての出力を終了 // すべての出力を終了
exit; exit;
} else { } else {
$error_message[] = 'セッションの終了に失敗しました。(END_OF_SESSION_DAME)'; $error_message[] = 'セッショントークンの再生成に失敗しました。(END_OF_SESSION_DAME)';
} }
} }
@@ -439,7 +439,7 @@ if( !empty($_POST['token_submit']) ) {
header('Location: ' . $url, true, 303); header('Location: ' . $url, true, 303);
exit; exit;
} else { } else {
$error_message[] = 'トークンの発行に失敗しました。(CREATE_TOKEN_DAME)'; $error_message[] = 'アクセストークンの発行に失敗しました。(CREATE_TOKEN_DAME)';
} }
} }
@@ -473,7 +473,7 @@ if( !empty($_POST['token_off_submit']) ) {
header("Location:".$url.""); header("Location:".$url."");
exit; exit;
} else { } else {
$error_message[] = 'トークンの削除に失敗しました。(TOKEN_DELETE_DAME)'; $error_message[] = 'アクセストークンの削除に失敗しました。(TOKEN_DELETE_DAME)';
} }
} }
@@ -491,10 +491,10 @@ require('../logout/logout.php');
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>その他の項目 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>その他の項目 - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -511,9 +511,9 @@ require('../logout/logout.php');
<?php endif; ?> <?php endif; ?>
<form class="formarea" method="post"> <form class="formarea" method="post">
<h1>セッション終了</h1> <h1>セッショントークンの再生成</h1>
<p>下のセッションを終了ボタンを押すと全てのログイン中のデバイスからログアウトされます。<br>再度uwuzu使用するにはログインが必須になります。</p> <p>下のセッショントークン再生成ボタンを押すと全てのログイン中のデバイスからログアウトされます。<br>再度uwuzu使用するにはログインが必須になります。</p>
<input type="submit" class = "irobutton" name="session_submit" value="セッションを終了"> <input type="submit" class = "irobutton" name="session_submit" value="セッショントークン再生成">
<hr> <hr>
<h1>アカウント削除</h1> <h1>アカウント削除</h1>
@@ -532,29 +532,29 @@ require('../logout/logout.php');
<p>APIの簡単な使用法です。</p> <p>APIの簡単な使用法です。</p>
<hr> <hr>
<li>サーバー情報取得API</li> <li>サーバー情報取得API</li>
<p>https://<?php echo htmlspecialchars($domain, ENT_QUOTES, 'UTF-8');?>/api/serverinfo-api</p> <div class="p2">https://<?php echo htmlentities($domain, ENT_QUOTES, 'UTF-8');?>/api/serverinfo-api</div>
<p>これによりサーバーの各種情報を取得できます。</p> <p>これによりサーバーの各種情報を取得できます。</p>
<hr> <hr>
<li>ユーザー情報取得API</li> <li>ユーザー情報取得API</li>
<p>https://<?php echo htmlspecialchars($domain, ENT_QUOTES, 'UTF-8');?>/api/userdata-api?userid=[ユーザーID]</p> <div class="p2">https://<?php echo htmlentities($domain, ENT_QUOTES, 'UTF-8');?>/api/bot-api?token=[アクセストークン]&type=getuser_from_userid&userid=[ユーザーID]</div>
<p>これによりユーザーのユーザーネーム(user_name)、プロフィール(profile)、登録日時(registered_date)、フォローしている人一覧(follow)、フォロワー一覧(follower)、フォロー・フォロワー数(follow_cnt,follower_cnt)が取得できます。</p> <p>これによりユーザーのユーザーネーム(user_name)、プロフィール(profile)、登録日時(registered_date)、フォローしている人一覧(follow)、フォロワー一覧(follower)、フォロー・フォロワー数(follow_cnt,follower_cnt)が取得できます。</p>
<hr> <hr>
<li>単独投稿取得API</li> <li>単独投稿取得API</li>
<p>https://<?php echo htmlspecialchars($domain, ENT_QUOTES, 'UTF-8');?>/api/ueuse-api?ueuseid=[投稿の詳細ページのリンクより投稿のID(!より後、~より手前の文字列)]</p> <div class="p2">https://<?php echo htmlentities($domain, ENT_QUOTES, 'UTF-8');?>/api/bot-api?token=[アクセストークン]&type=getueuse&ueuseid=[投稿の詳細ページのリンクより投稿のID(!より後、~より手前の文字列)]</div>
<p>これにより投稿内容(ueuse)と、ユーザーネーム(user_name)、ユーザーID(userid)、投稿ID(uniqid)、写真・動画URL(photo1,photo2,video1)、いいねした人一覧(favorite)、いいね数(favorite_cnt)、投稿日時(datetime)、追記内容(abi)、追記日時(abidatetime)が取得できます。</p> <p>これにより投稿内容(ueuse)と、ユーザーネーム(user_name)、ユーザーID(userid)、投稿ID(uniqid)、写真・動画URL(photo1,photo2,video1)、いいねした人一覧(favorite)、いいね数(favorite_cnt)、投稿日時(datetime)、追記内容(abi)、追記日時(abidatetime)が取得できます。</p>
<hr> <hr>
<li>ローカルタイムライン投稿取得API</li> <li>ローカルタイムライン投稿取得API</li>
<p>https://<?php echo htmlspecialchars($domain, ENT_QUOTES, 'UTF-8');?>/api/ltl-api?limit=[取得件数]&page=[ページ切り替え]</p> <div class="p2">https://<?php echo htmlentities($domain, ENT_QUOTES, 'UTF-8');?>/api/bot-api?token=[アクセストークン]&type=getltl&limit=[取得件数]&page=[ページ切り替え]</div>
<p>これにより投稿内容(ueuse)と、ユーザーネーム(user_name)、ユーザーID(userid)、投稿ID(uniqid)、写真・動画URL(photo1,photo2,video1)、いいねした人一覧(favorite)、いいね数(favorite_cnt)、投稿日時(datetime)、追記内容(abi)、追記日時(abidatetime)が取得できます。<br>page=は指定しなくても動作します。(https://[ドメイン名(uwuzu.netなど)]/api/ltl-api?limit=[取得件数])</p> <p>これにより投稿内容(ueuse)と、ユーザーネーム(user_name)、ユーザーID(userid)、投稿ID(uniqid)、写真・動画URL(photo1,photo2,video1)、いいねした人一覧(favorite)、いいね数(favorite_cnt)、投稿日時(datetime)、追記内容(abi)、追記日時(abidatetime)が取得できます。<br>page=は指定しなくても動作します。(https://[ドメイン名(uwuzu.netなど)]/api/ltl-api?limit=[取得件数])</p>
<hr> <hr>
<li>投稿API</li> <li>投稿API</li>
<p>https://<?php echo htmlspecialchars($domain, ENT_QUOTES, 'UTF-8');?>/api/bot-api?token=[アクセストークン]&type=post&ueuse=[投稿の内容]</p> <div class="p2">https://<?php echo htmlentities($domain, ENT_QUOTES, 'UTF-8');?>/api/bot-api?token=[アクセストークン]&type=post&ueuse=[投稿の内容]</div>
<hr> <hr>
<li>アクセストークンからユーザー情報取得API</li> <li>アクセストークンからユーザー情報取得API</li>
<p>https://<?php echo htmlspecialchars($domain, ENT_QUOTES, 'UTF-8');?>/api/bot-api?token=[アクセストークン]&type=getuser</p> <div class="p2">https://<?php echo htmlentities($domain, ENT_QUOTES, 'UTF-8');?>/api/bot-api?token=[アクセストークン]&type=getuser</div>
<hr> <hr>
<li>返信API</li> <li>返信API</li>
<p>https://<?php echo htmlspecialchars($domain, ENT_QUOTES, 'UTF-8');?>/api/bot-api?token=[アクセストークン]&type=reply&uniqid=[返信先のuniqid]&ueuse=[返信の内容]</p> <div class="p2">https://<?php echo htmlentities($domain, ENT_QUOTES, 'UTF-8');?>/api/bot-api?token=[アクセストークン]&type=reply&uniqid=[返信先のuniqid]&ueuse=[返信の内容]</div>
<hr> <hr>
<?php <?php
if(empty($userData['token'])){ if(empty($userData['token'])){
@@ -591,6 +591,7 @@ require('../logout/logout.php');
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
</html> </html>
+2
View File
@@ -181,6 +181,7 @@ require('../logout/logout.php');
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
@@ -225,6 +226,7 @@ require('../logout/logout.php');
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
</html> </html>
+1
View File
@@ -10,6 +10,7 @@ $serversettings = parse_ini_file($serversettings_file, true);
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/style.css"> <link rel="stylesheet" href="../css/style.css">
<script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
+1
View File
@@ -10,6 +10,7 @@ $serversettings = parse_ini_file($serversettings_file, true);
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/style.css"> <link rel="stylesheet" href="../css/style.css">
<script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
+46 -9
View File
@@ -7,6 +7,8 @@ $serversettings = parse_ini_file($serversettings_file, true);
require('../db.php'); require('../db.php');
//hCaptcha-------------------------------------------- //hCaptcha--------------------------------------------
require('../settings_admin/hCaptcha_settings/hCaptcha_settings.php'); require('../settings_admin/hCaptcha_settings/hCaptcha_settings.php');
//Cloudflare_Turnstile--------------------------------------------
require('../settings_admin/CloudflareTurnstile_settings/CloudflareTurnstile_settings.php');
//---------------------------------------------------- //----------------------------------------------------
@@ -57,14 +59,14 @@ if( !empty($_POST['btn_submit']) ) {
$userid = $_POST['userid']; $userid = $_POST['userid'];
$mailadds = $_POST['mailadds']; $mailadds = $_POST['mailadds'];
if(!empty(CAPTCHA && CAPTCHA == "true")){ if(!empty(H_CAPTCHA_ONOFF && H_CAPTCHA_ONOFF == "true")){
if(isset($_POST['h-captcha-response'])){ if(isset($_POST['h-captcha-response'])){
$hcaptcha_token = htmlentities($_POST['h-captcha-response']); $hcaptcha_token = htmlentities($_POST['h-captcha-response']);
if($hcaptcha_token){ if($hcaptcha_token){
$captcha_data = [ $captcha_data = [
'secret' => htmlentities(SEAC_KEY), 'secret' => htmlentities(H_CAPTCHA_SEAC_KEY),
'response' => $hcaptcha_token, 'response' => $hcaptcha_token,
'sitekey' => htmlentities(SITE_KEY) 'sitekey' => htmlentities(H_CAPTCHA_SITE_KEY)
]; ];
$options = [ $options = [
'http' => [ 'http' => [
@@ -75,13 +77,39 @@ if( !empty($_POST['btn_submit']) ) {
]; ];
$hCaptcha_result = json_decode(file_get_contents('https://hcaptcha.com/siteverify', false, stream_context_create($options)),true); $hCaptcha_result = json_decode(file_get_contents('https://hcaptcha.com/siteverify', false, stream_context_create($options)),true);
if(!($hCaptcha_result["success"] == true)){ if(!($hCaptcha_result["success"] == true)){
$error_message[] = "あなたが人間である確認ができませんでした。(ERROR)"; $error_message[] = "hCaptchaであなたが人間である確認ができませんでした。(ERROR)";
} }
}else{ }else{
$error_message[] = "あなたが人間である確認ができませんでした。(ERROR)"; $error_message[] = "hCaptchaであなたが人間である確認ができませんでした。(ERROR)";
} }
}else{ }else{
$error_message[] = "あなたが人間である確認ができませんでした。(ERROR)"; $error_message[] = "hCaptchaであなたが人間である確認ができませんでした。(ERROR)";
}
}
if(!empty(CF_TURNSTILE_ONOFF && CF_TURNSTILE_ONOFF == "true")){
if(isset($_POST['cf-turnstile-response'])){
$CF_Turnstile_token = htmlentities($_POST['cf-turnstile-response']);
if($CF_Turnstile_token){
$CF_Turnstile_data = [
'secret' => htmlentities(CF_TURNSTILE_SEAC_KEY),
'response' => $CF_Turnstile_token
];
$CF_Turnstile_options = [
'http' => [
'method'=> 'POST',
'header'=> 'Content-Type: application/x-www-form-urlencoded',
'content' => http_build_query($CF_Turnstile_data, '', '&')
]
];
$CF_Turnstile_result = json_decode(file_get_contents('https://challenges.cloudflare.com/turnstile/v0/siteverify', false, stream_context_create($CF_Turnstile_options)),true);
if(!($CF_Turnstile_result["success"] == true)){
$error_message[] = "CloudflareTurnstileであなたが人間である確認ができませんでした。(ERROR)";
}
}else{
$error_message[] = "CloudflareTurnstileであなたが人間である確認ができませんでした。(ERROR)";
}
}else{
$error_message[] = "CloudflareTurnstileであなたが人間である確認ができませんでした。(ERROR)";
} }
} }
@@ -172,9 +200,13 @@ $pdo = null;
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/style.css"> <link rel="stylesheet" href="../css/style.css">
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<?php if(!empty(CAPTCHA && CAPTCHA == "true")){?> <script src="../js/jquery-min.js"></script>
<?php if(!empty(H_CAPTCHA_ONOFF && H_CAPTCHA_ONOFF == "true")){?>
<script src="https://js.hcaptcha.com/1/api.js" async defer></script> <script src="https://js.hcaptcha.com/1/api.js" async defer></script>
<?php }?> <?php }?>
<?php if(!empty(CF_TURNSTILE_ONOFF && CF_TURNSTILE_ONOFF == "true")){?>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<?php }?>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
@@ -221,10 +253,15 @@ $pdo = null;
<input id="mailadds" class="inbox" type="text" name="mailadds" value="<?php if( !empty($_SESSION['mailadds']) ){ echo htmlentities( $_SESSION['mailadds'], ENT_QUOTES, 'UTF-8'); } ?>"> <input id="mailadds" class="inbox" type="text" name="mailadds" value="<?php if( !empty($_SESSION['mailadds']) ){ echo htmlentities( $_SESSION['mailadds'], ENT_QUOTES, 'UTF-8'); } ?>">
</div> </div>
<?php if(!empty(CAPTCHA && CAPTCHA == "true")){?> <?php if(!empty(H_CAPTCHA_ONOFF && H_CAPTCHA_ONOFF == "true")){?>
<div class="captcha_zone"> <div class="captcha_zone">
<div class="p2">パスワードを復元するためには人間である確認が必要です!<br>下のチェックボックスにチェックしてください。</div> <div class="p2">パスワードを復元するためには人間である確認が必要です!<br>下のチェックボックスにチェックしてください。</div>
<div class="h-captcha" data-sitekey="<?php echo htmlentities(SITE_KEY);?>"></div> <div class="h-captcha" data-sitekey="<?php echo htmlentities(H_CAPTCHA_SITE_KEY);?>"></div>
</div>
<?php }?>
<?php if(!empty(CF_TURNSTILE_ONOFF && CF_TURNSTILE_ONOFF == "true")){?>
<div class="captcha_zone">
<div class="cf-turnstile" data-sitekey="<?php echo htmlentities(CF_TURNSTILE_SITE_KEY);?>" data-callback="javascriptCallback" data-language="ja"></div>
</div> </div>
<?php }?> <?php }?>
+1
View File
@@ -234,6 +234,7 @@ $pdo = null;
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/style.css"> <link rel="stylesheet" href="../css/style.css">
<script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
+22
View File
@@ -0,0 +1,22 @@
<noscript>
<div class="noscript_modal">
<div class="inner">
<div class="oops_icon">⚠️</div>
<h1>JavaScriptを有効にしてください</h1>
<p>uwuzuを開いてくださりありがとうございます。<br>
申し訳ございませんがuwuzuの動作にはJavaScriptが必要です。<br>
JavaScriptを有効にして再読み込みをしてください。</p>
<p>JavaScriptを無効にしている状態での使用はできません。</p>
<p>詳細は下記のリンクよりご確認ください。</p>
<a href="https://uwuzu.com/docs/uwuzusupport" class="infobtn">詳細</a>
<div class="p2">JS_BLOCKED_ERROR</div>
<div class="center_text">
<p><?php echo htmlentities($serversettings["serverinfo"]["server_name"]);?></p>
<p><?php echo $domain;?></p>
<p><?php echo htmlentities($uwuzuinfo[0]);?><br>Version <?php echo htmlentities($uwuzuinfo[1]);?></p>
</div>
</div>
</div>
</noscript>
+11 -33
View File
@@ -19,41 +19,19 @@
for( $i=0;$i<$cnt;$i++ ){ for( $i=0;$i<$cnt;$i++ ){
$uwuzuinfo[$i] = ($softwaredata[$i]); $uwuzuinfo[$i] = ($softwaredata[$i]);
} }
function replaceURLsWithLinks_forRightbox($postText) { function replaceURLsWithLinks_forRightbox($postText, $maxLength = 48) {
$postText = str_replace('&#039;', '\'', $postText); $pattern = '/(https:\/\/[\w!?\/+\-_~;.,*&@#$%()+|https:\/\/[ぁ-んァ-ヶ一-龠々\w\-\/?=&%.]+)/';
$convertedText = preg_replace_callback($pattern, function($matches) use ($maxLength) {
// URLを正規表現を使って検出 $link = $matches[0];
$pattern = '/(https:\/\/[^\s<>\[\]\'"]+)/'; // 改良された正規表現 if (mb_strlen($link) > $maxLength) {
preg_match_all($pattern, $postText, $matches); $truncatedLink = mb_substr($link, 0, $maxLength).'…';
return '<a href="'.$link.'">'.$truncatedLink.'</a>';
// 検出したURLごとに処理を行う } else {
foreach ($matches[0] as $url) { return '<a href="'.$link.'">'.$link.'</a>';
// ドメイン部分を抽出
$parsedUrl = parse_url($url);
if (!isset($parsedUrl['path'])) {
$parsedUrl['path'] = '';
}
if (!isset($parsedUrl['query'])) {
$parsedUrl['query'] = '';
} }
}, $postText);
$nochk_domain = $parsedUrl['host'].$parsedUrl['path'].$parsedUrl['query']; return $convertedText;
if(strlen($nochk_domain) > 47){
$domain = mb_substr($nochk_domain, 0, 48, "UTF-8")."...";
}else{
$domain = $nochk_domain;
}
// 不要な文字を削除してaタグを生成
$urlWithoutSpaces = preg_replace('/\s+/', '', $url);
$link = "<a href='$urlWithoutSpaces' target='_blank' title='$urlWithoutSpaces'>$domain</a>";
// URLをドメインのみを表示するaタグで置き換え
$postText = preg_replace('/' . preg_quote($url, '/') . '/', $link, $postText);
}
return $postText;
} }
?> ?>
<div class="noticearea"> <div class="noticearea">
+1
View File
@@ -51,6 +51,7 @@ foreach ($sprivacypolicy as $privacypolicy) {
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
+1
View File
@@ -68,6 +68,7 @@ foreach ($srelease as $release) {
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
+1
View File
@@ -69,6 +69,7 @@ $count4 = $result4->num_rows;
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
+1
View File
@@ -51,6 +51,7 @@ foreach ($sterms as $terms) {
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
+1
View File
@@ -60,6 +60,7 @@ foreach ($sterms as $terms) {
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
+11 -2
View File
@@ -199,7 +199,7 @@ $pdo = null;
<html lang="ja"> <html lang="ja">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<script src="../js/nsfw_event.js"></script> <script src="../js/nsfw_event.js"></script>
@@ -281,8 +281,15 @@ $pdo = null;
</div> </div>
</div> </div>
<div id="Big_ImageModal" class="Image_modal">
<div class="modal-content">
<img id="Big_ImageMain" href="">
</div>
</div>
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
@@ -420,6 +427,8 @@ $(document).ready(function() {
var modal = document.getElementById('myDelModal'); var modal = document.getElementById('myDelModal');
var deleteButton = document.getElementById('deleteButton'); var deleteButton = document.getElementById('deleteButton');
var cancelButton = document.getElementById('cancelButton'); // 追加 var cancelButton = document.getElementById('cancelButton'); // 追加
@@ -490,7 +499,6 @@ $(document).ready(function() {
abimodal.style.display = 'none'; abimodal.style.display = 'none';
}, 150); }, 150);
}); });
});
$('#AbiForm').off('submit').on('submit', function (event) { $('#AbiForm').off('submit').on('submit', function (event) {
@@ -532,6 +540,7 @@ $(document).ready(function() {
}); });
} }
}); });
});
$(document).on('click', '.share', function (event) { $(document).on('click', '.share', function (event) {
+61 -36
View File
@@ -55,14 +55,24 @@ PHP 8では事前にGDを有効化しておいてください!(QRコードの
- datetime(datetime) アカウント作成日時保存用 - datetime(datetime) アカウント作成日時保存用
- follow(mediumtext) アカウントがフォローしている人保存用 - follow(mediumtext) アカウントがフォローしている人保存用
- follower(mediumtext) アカウントがフォローされている人保存用 - follower(mediumtext) アカウントがフォローされている人保存用
- blocklist(mediumtext) ブロックしている人保存用
- bookmark(mediumtext) ブックマーク保存用 - bookmark(mediumtext) ブックマーク保存用
- blocklist(mediumtext) ブロックしている人保存用
- admin(varchar(25)) 管理者アカウントなら「yes」、それ以外なら「none」と入力。 - admin(varchar(25)) 管理者アカウントなら「yes」、それ以外なら「none」と入力。
- authcode(varchar(256)) 二段階認証用キー保存用 - authcode(varchar(256)) 二段階認証用キー保存用
- backupcode(varchar(256)) 二段階認証のバックアップコード保存用 - backupcode(varchar(256)) 二段階認証のバックアップコード保存用
- sacinfo(varchar(256)) 特殊アカウント識別用 - sacinfo(varchar(256)) 特殊アカウント識別用
- mail_settings(mediumtext) メールの送信設定保存用 - mail_settings(mediumtext) メールの送信設定保存用
### ads
- sysid(INT)(AUTO_INCREMENT) 追加されるとカウントされるシステム用ID
- uniqid(varchar(512)) 広告ID保存用
- url(varchar(512)) 広告のクリック先URL保存用
- image_url(varchar(512)) 広告に表示する画像URL保存用
- memo(mediumtext) 広告にマウスオーバーしたときに表示されるメッセージ保存用
- start_date(datetime) 広告配信開始日時保存用
- limit_date(datetime) 広告配信終了日時保存用
- datetime(datetime) 広告追加日時保存用
### emoji ### emoji
- sysid(INT)(AUTO_INCREMENT) アカウントが追加されるとカウントされるシステム用ID - sysid(INT)(AUTO_INCREMENT) アカウントが追加されるとカウントされるシステム用ID
- emojifile(varchar(512)) 絵文字ファイルパス保存用 - emojifile(varchar(512)) 絵文字ファイルパス保存用
@@ -70,23 +80,51 @@ PHP 8では事前にGDを有効化しておいてください!(QRコードの
- emojiinfo(mediumtext) 絵文字についての説明保存用 - emojiinfo(mediumtext) 絵文字についての説明保存用
- emojidate(datetime) 絵文字登録日時保存用 - emojidate(datetime) 絵文字登録日時保存用
### invitation
- sysid(INT)(AUTO_INCREMENT) 追加されるとカウントされるシステム用ID
- code(varchar(512)) 招待コード
- used(varchar(25)) 使用済みかそうでないか
- datetime(datetime) 招待コード仕様日時更新用
### notice ### notice
- sysid(INT)(AUTO_INCREMENT) うんえいからのおしらせが追加されるとカウントされるシステム用ID - sysid(INT)(AUTO_INCREMENT) うんえいからのおしらせが追加されるとカウントされるシステム用ID
- uniqid(varchar(256)) ID保存用
- title(varchar(1024)) お知らせのタイトル保存用 - title(varchar(1024)) お知らせのタイトル保存用
- note(mediumtext) お知らせの内容保存用 - note(mediumtext) お知らせの内容保存用
- account(varchar(500)) 編集者ID保存用 - account(varchar(500)) 編集者ID保存用
- emojidate(datetime) お知らせ登録日時保存用 - emojidate(datetime) お知らせ登録日時保存用
### notification
- sysid(INT)(AUTO_INCREMENT) 通知されるとカウントされるシステム用ID
- fromuserid(varchar(512)) 通知元ID保存用
- touserid(varchar(512)) 通知先ID保存用
- title(varchar(1024)) 通知のタイトル
- url(通知のクリック先URL保存用)
- msg(mediumtext) 通知の内容
- datetime(datetime) 通知日時
- userchk(varchar(25)) 通知の既読確認
### report
- sysid(INT)(AUTO_INCREMENT) 追加されるとカウントされるシステム用ID
- uniqid(varchar(256)) 通報ID保存用
- userid(varchar(500)) 通報先ユーザーID保存用
- report_userid(varchar(500)) 通報元ユーザーID保存用
- msg(mediumtext) サービス管理者宛メッセージ保存用
- datetime(datetime) 通報日時保存用
- admin_chk(varchar(25)) 解決済みかどうか確認用
### role ### role
- sysid(INT)(AUTO_INCREMENT) ロールが追加されるとカウントされるシステム用ID - sysid(INT)(AUTO_INCREMENT) ロールが追加されるとカウントされるシステム用ID
- rolename(varchar(512)) ロール表示名保存用 - rolename(varchar(512)) ロール表示名保存用
- roleauth(varchar(256)) ロールの権限保存用 - roleauth(varchar(256)) ロールの権限保存用
- rolecolor(varchar(25)) ロールの色保存用 - rolecolor(varchar(25)) ロールの色保存用
- roleidname(varchar(512)) 「user」のようなロール指定用 - roleidname(varchar(512)) 「user」のようなロール指定用
- roleeffect(varchar(256)) アニメーションロール機能のエフェクト指定用
### ueuse ### ueuse
- sysid(INT)(AUTO_INCREMENT) 投稿されるとカウントされるシステム用ID - sysid(INT)(AUTO_INCREMENT) 投稿されるとカウントされるシステム用ID
- account(varchar(256)) 投稿者ID保存用 - username(varchar(512)) 投稿時点での投稿者名保存用
- account(varchar(512)) 投稿者ID保存用
- uniqid(varchar(256)) 投稿ID保存用 - uniqid(varchar(256)) 投稿ID保存用
- rpuniqid(varchar(256)) リプライ先ID保存用 - rpuniqid(varchar(256)) リプライ先ID保存用
- ueuse(mediumtext) 投稿内容保存用 - ueuse(mediumtext) 投稿内容保存用
@@ -101,39 +139,6 @@ PHP 8では事前にGDを有効化しておいてください!(QRコードの
- abidate(datetime) 追記日時保存用 - abidate(datetime) 追記日時保存用
- nsfw(varchar(25)) NSFW指定有無保存用 - nsfw(varchar(25)) NSFW指定有無保存用
### notification
- sysid(INT)(AUTO_INCREMENT) 通知されるとカウントされるシステム用ID
- touserid(varchar(512)) 通知先ID保存用
- title(varchar(1024)) 通知のタイトル
- msg(mediumtext) 通知の内容
- datetime(datetime) 通知日時
- userchk(varchar(25)) 通知の既読確認
### invitation
- sysid(INT)(AUTO_INCREMENT) 追加されるとカウントされるシステム用ID
- code(varchar(512)) 招待コード
- 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(mediumtext) サービス管理者宛メッセージ保存用
- 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(mediumtext) 広告にマウスオーバーしたときに表示されるメッセージ保存用
- start_date(datetime) 広告配信開始日時保存用
- limit_date(datetime) 広告配信終了日時保存用
- datetime(datetime) 広告追加日時保存用
すべて作成完了したらGithubよりuwuzuのファイルをDLし、解凍し、それをサーバーの動作ディレクトリに置き、Apacheのhttpd.confからその動作ディレクトリを指定し、動作ディレクトリ内のdb.phpにDBのログイン情報を書き込んであとはApacheとphpとMy SQLを起動するだけ! すべて作成完了したら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つのロールがないとエラーが発生します。) 起動したらまずDBのroleにphpmyadminから「user」ロールと「official」ロールと「ice」ロールを追加、権限は「user」と「official」と「ice」でOK。ロール名はとりあえず「一般ユーザー」とか適当でOK、ロールの色はHEXコード(#を除く)で000000のように指定。(この3つのロールがないとエラーが発生します。)
そしたら普通にuwuzuにアクセスして自分のアカウントを登録。 そしたら普通にuwuzuにアクセスして自分のアカウントを登録。
@@ -185,5 +190,25 @@ daichimarukanaと一緒に開発したいよ~って人は私のHPからメー
UPULライセンスです! UPULライセンスです!
UPULライセンスに関しては同梱されているUPUL_License.txtを確認するか、uwuzu.comより詳細をご確認ください。 UPULライセンスに関しては同梱されているUPUL_License.txtを確認するか、uwuzu.comより詳細をご確認ください。
## 10. 利用させていただいているライブラリなどのライセンス
### Google Authenticator PHP class
Copyright (c) 2012, Michael Kliewe All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1.Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
なお、使わせていただいているコードは改変させていただいでおります。
### jQuery 3.7.1
MITライセンスで提供されているようです。
詳細は以下のリンク先をご覧ください。
https://jquery.com/license/
### QRcode image PHP scripts
Y.Swetake様よりお借りしています。
## 更新情報
編集者 : daichimarukana 編集者 : daichimarukana
最終更新日 : 2023/02/24 19:02 最終更新日 : 2024/03/26 22:32
+2 -2
View File
@@ -1,4 +1,4 @@
uwuzu uwuzu
1.3.3 1.3.4
2024/03/06 2024/03/26
daichimarukana,putonfps daichimarukana,putonfps
+44
View File
@@ -1,6 +1,50 @@
## リリースノートだぜぇぇぇぇぇぇい!!!!!!! ## リリースノートだぜぇぇぇぇぇぇい!!!!!!!
ここにはuwuzuの更新情報を載せてくぜぇ~!(いやまてテンションおかしいだろ...) ここにはuwuzuの更新情報を載せてくぜぇ~!(いやまてテンションおかしいだろ...)
## Version 1.3.4 (new_Planet)
リリース日:2024/03/26
fix: サーバーアイコンが設定されていない状態でサポートされていない端末からアクセスするとアイコンが表示されない問題を修正しました。
fix: 脆弱性を修正しました。
fix: URLをハイパーリンクに変換する機能のバグを修正しました!
fix: ActivityPub機能がオンの場合に他のActivityPub対応サーバーに認識してもらえない問題を修正しました。
fix: YouTube埋め込みが再生できなくなるバグを修正しました。
chg: 一部APIをbot-apiに統合しました。
詳細はOtherタブをご覧ください。
chg: 一部UIを変更しました!
UIの変更が多いため、キャッシュの削除はお忘れなく!
chg: jQueryをローカル環境から呼び出すようにしました。
chg: パスワードの最大文字数を100文字から256文字に拡大しました。
chg: セッションの終了機能をセッショントークン再生成に名称変更しました。
エラーコードに変更はありません。
chg: 絵文字ページを結構変えました
new: ログイン画面でパスワードを表示できるようにしました!
new: 絵文字ピッカーを実装しました!
new: 管理用ページよりサーバー概要ページにてディスク空き容量の表示とロードアベレージ(Linux環境のみ)の表示をしました!
new: 管理者アカウント登録時に必須モジュールが導入されているかを確認する仕組みを実装しました!
デフォルトでインストールされているモジュールは確認されません。
new: Markdownを強化し、"[[time (unixtime)]]"を使用できるようにしました!
new: ユーズに添付されている画像ファイルを新しいタブで開かずにページ内で表示できるようにしました!
画像を開いた状態で開かれた画像をクリックすると画像を閉じます。
new: 絵文字の検索機能と無限スクロール機能を実装しました!
new: JavaScriptがブロックされている際にエラーを表示するようにしました。
new: 絵文字一覧ページよりクリックで絵文字のIDをコピーできるようにしました!
new: アニメーションロール機能を実装しました!
ロールにいくつかの種類のエフェクトをつけられるようになっています。
これによりuwuzuのDB内、roleテーブルの構造に「roleeffect」(varchar(256))を追加する必要があります!
アニメーションロールを使用する予定のないサーバーでもDBに追加しないとエラーを引き起こすため必ず追加してください!
new: CloudflareTurnstileを設定して、利用できるようにしました!
これによりhCaptchaに限らず、不正なアカウント登録を防げるようになります!
また、hCaptchaとの二重確認も可能です。
new: 管理者ページよりモデレーション、hCapthca、CloudflareTurnstileのところに実際のキャプチャのデモ表示をするようにしました!
new: 記入中のユーズをCookieに一時保存し、投稿するまで、またはセッションを終了するまで保持します。
Cookieは一字ずつ入力を検知して上書きしているので、コピペやカスタム絵文字を絵文字ピッカーから選択すると保存されない場合があります。
多くのブラウザで最大4096バイト文まで保存が可能です。
画像や動画の添付などに関しては保存されません。
new: 管理者ページよりお知らせ配信ページにて過去お知らせの閲覧と削除を行えるようにしました!
これによりuwuzuのDB内、noticeテーブルの構造に「uniqid」(varchar(256))を追加する必要があります!
v1.3.4以前に作成されたお知らせに関してはIDの付与ができておりませんのでuwuzuからの削除はできません。
uwuzu_database.sqlは更新済みです。
## Version 1.3.3 (new_Planet) ## Version 1.3.3 (new_Planet)
リリース日:2024/03/06 リリース日:2024/03/06
fix: 重大な脆弱性を修正しました。 fix: 重大な脆弱性を修正しました。
+2 -1
View File
@@ -266,7 +266,7 @@ $pdo = null;
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>設定 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>設定 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
@@ -323,6 +323,7 @@ $pdo = null;
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
</html> </html>
+24 -8
View File
@@ -430,8 +430,8 @@ if( !empty($_POST['pass_submit']) ) {
} }
// 文字数を確認 // 文字数を確認
if( 100 < mb_strlen($password, 'UTF-8') ) { if( 256 < mb_strlen($password, 'UTF-8') ) {
$error_message[] = 'パスワードは100文字以内で入力してください。(PASSWORD_OVER_MAX_COUNT)'; $error_message[] = 'パスワードは256文字以内で入力してください。(PASSWORD_OVER_MAX_COUNT)';
} }
if( 4 > mb_strlen($password, 'UTF-8') ) { if( 4 > mb_strlen($password, 'UTF-8') ) {
@@ -780,10 +780,10 @@ $pdo = null;
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>設定 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>設定 - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -827,16 +827,16 @@ $pdo = null;
<!--ユーザーネーム関係--> <!--ユーザーネーム関係-->
<div> <div>
<p>ユーザーネーム</p> <p>ユーザーネーム</p>
<input id="username" placeholder="" class="inbox" type="text" name="username" value="<?php if( !empty($userdata['username']) ){ echo htmlspecialchars( $userdata['username'], ENT_QUOTES, 'UTF-8'); } ?>"> <input id="username" placeholder="" class="inbox" type="text" name="username" value="<?php if( !empty($userdata['username']) ){ echo htmlentities( $userdata['username'], ENT_QUOTES, 'UTF-8'); } ?>">
</div> </div>
<div> <div>
<p>メールアドレス</p> <p>メールアドレス</p>
<input id="mailadds" type="text" placeholder="" class="inbox" name="mailadds" value="<?php if( !empty($userdata['mailadds']) ){ echo htmlspecialchars( $userdata['mailadds'], ENT_QUOTES, 'UTF-8'); } ?>"> <input id="mailadds" type="text" placeholder="" class="inbox" name="mailadds" value="<?php if( !empty($userdata['mailadds']) ){ echo htmlentities( $userdata['mailadds'], ENT_QUOTES, 'UTF-8'); } ?>">
</div> </div>
<!--プロフィール関連--> <!--プロフィール関連-->
<div> <div>
<p>プロフィール</p> <p>プロフィール</p>
<textarea id="profile" type="text" placeholder="" class="inbox" name="profile" value=""><?php if( !empty($userdata['profile']) ){ echo htmlspecialchars( $userdata['profile'], ENT_QUOTES, 'UTF-8'); } ?></textarea> <textarea id="profile" type="text" placeholder="" class="inbox" name="profile" value=""><?php if( !empty($userdata['profile']) ){ echo htmlentities( $userdata['profile'], ENT_QUOTES, 'UTF-8'); } ?></textarea>
</div> </div>
<?php if(!empty($userData['token'])){?> <?php if(!empty($userData['token'])){?>
@@ -880,8 +880,14 @@ $pdo = null;
</div> </div>
<div> <div>
<p>新しいパスワード</p> <p>新しいパスワード</p>
<input id="password" type="text" class="inbox" name="password" oncopy="return false" onpaste="return false" oncontextmenu="return false" style="-webkit-text-security:disc;" value=""> <input id="password" type="password" class="inbox" name="password" oncopy="return false" onpaste="return false" oncontextmenu="return false" value="">
<p>パスワードを表示する</p>
<div class="switch_button">
<input id="passview" class="switch_input" type='checkbox' name="passview" value=""/>
<label for="passview" class="switch_label"></label>
</div> </div>
</div>
<input type="submit" class = "irobutton" name="pass_submit" value="パスワード更新"> <input type="submit" class = "irobutton" name="pass_submit" value="パスワード更新">
@@ -901,5 +907,15 @@ $pdo = null;
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
</html> </html>
<script>
$("#passview").click(function () {
if ($("#passview").prop("checked") == true) {
$('#password').get(0).type = 'text';
} else {
$('#password').get(0).type = 'password';
}
});
</script>
+2 -1
View File
@@ -183,7 +183,7 @@ require('../logout/logout.php');
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>設定 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>設定 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
@@ -223,6 +223,7 @@ require('../logout/logout.php');
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
</html> </html>
@@ -0,0 +1,8 @@
<?php // Captchaの認証情報
define( 'CF_TURNSTILE_ONOFF', '');// trueならCloudflareTurnstileが有効
define( 'CF_TURNSTILE_SITE_KEY', '');
define( 'CF_TURNSTILE_SEAC_KEY', '');
?>
+3 -2
View File
@@ -306,13 +306,13 @@ if (!empty($pdo)) {
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>広告 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>広告 - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -406,6 +406,7 @@ if (!empty($pdo)) {
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
</html> </html>
+9 -4
View File
@@ -360,10 +360,10 @@ $pdo = null;
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>絵文字登録 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>絵文字登録 - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -388,6 +388,10 @@ $pdo = null;
<h1>絵文字登録</h1> <h1>絵文字登録</h1>
<p>絵文字登録です。</p> <p>絵文字登録です。</p>
<div class="p2">
注意 : uwuzuで表示されるカスタム絵文字の最大の大きさは縦64pxです。<br>
縦64px以上のカスタム絵文字を登録しても縮小されて表示されます。<br>
また、縦64px以上の画像をアップロードすると、uwuzuの動作が遅くなる恐れがあるため、絵文字の画像サイズは縦64pxを推奨します。</div>
<div id="wrap"> <div id="wrap">
@@ -399,12 +403,12 @@ $pdo = null;
<!--ユーザーネーム関係--> <!--ユーザーネーム関係-->
<div> <div>
<p>EmojiID</p> <p>EmojiID</p>
<input id="username" onInput="checkForm(this)" placeholder="kusa" class="inbox" type="text" name="emojiname" value="<?php if( !empty($_SESSION['emojiname']) ){ echo htmlspecialchars( $_SESSION['emojiname'], ENT_QUOTES, 'UTF-8'); } ?>"> <input id="username" onInput="checkForm(this)" placeholder="kusa" class="inbox" type="text" name="emojiname" value="<?php if( !empty($_SESSION['emojiname']) ){ echo htmlentities( $_SESSION['emojiname'], ENT_QUOTES, 'UTF-8'); } ?>">
</div> </div>
<div> <div>
<p>この絵文字について</p> <p>この絵文字について</p>
<input id="username" placeholder="くさデス" class="inbox" type="text" name="emojiinfo" value="<?php if( !empty($_SESSION['emojiinfo']) ){ echo htmlspecialchars( $_SESSION['emojiinfo'], ENT_QUOTES, 'UTF-8'); } ?>"> <input id="username" placeholder="くさデス" class="inbox" type="text" name="emojiinfo" value="<?php if( !empty($_SESSION['emojiinfo']) ){ echo htmlentities( $_SESSION['emojiinfo'], ENT_QUOTES, 'UTF-8'); } ?>">
</div> </div>
<div> <div>
@@ -420,6 +424,7 @@ $pdo = null;
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
<script type="text/javascript"> <script type="text/javascript">
+4 -3
View File
@@ -275,13 +275,13 @@ require('../logout/logout.php');
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>招待コード発行所 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>招待コード発行所 - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -302,7 +302,7 @@ require('../logout/logout.php');
<div class="admin_right"> <div class="admin_right">
<form class="formarea" enctype="multipart/form-data" method="post"> <form class="formarea" enctype="multipart/form-data" method="post">
<h1>招待コード発行所</h1> <h1>招待コード発行所</h1>
<?php if(htmlspecialchars($serversettings["serverinfo"]["server_invitation"], ENT_QUOTES, 'UTF-8') === "true"){?> <?php if(htmlentities($serversettings["serverinfo"]["server_invitation"], ENT_QUOTES, 'UTF-8') === "true"){?>
<p>下の発行ボタンで新しくコードを発行できます!<br>なお、コードは一回限り有効です。</p> <p>下の発行ボタンで新しくコードを発行できます!<br>なお、コードは一回限り有効です。</p>
<div> <div>
<p>発行数</p> <p>発行数</p>
@@ -338,6 +338,7 @@ require('../logout/logout.php');
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
<script> <script>
$(document).ready(function() { $(document).ready(function() {
+3 -2
View File
@@ -262,13 +262,13 @@ require('../logout/logout.php');
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>サーバーカスタマイズ - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>サーバーカスタマイズ - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -310,6 +310,7 @@ require('../logout/logout.php');
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
@@ -1,8 +1,8 @@
<?php // Captchaの認証情報 <?php // Captchaの認証情報
define( 'CAPTCHA', '');// trueならhCaptchaが有効 define( 'H_CAPTCHA_ONOFF', '');// trueならhCaptchaが有効
define( 'SITE_KEY', ''); define( 'H_CAPTCHA_SITE_KEY', '');
define( 'SEAC_KEY', ''); define( 'H_CAPTCHA_SEAC_KEY', '');
?> ?>
+4 -3
View File
@@ -8,7 +8,7 @@ $serverstopfile = "../server/serverstop.txt";
$htaccessfile = "../.htaccess"; $htaccessfile = "../.htaccess";
if(!empty(file_get_contents($serverstopfile))){ if(!empty(file_get_contents($serverstopfile))){
$serverstop = htmlspecialchars(file_get_contents($serverstopfile), ENT_QUOTES, 'UTF-8'); $serverstop = htmlentities(file_get_contents($serverstopfile), ENT_QUOTES, 'UTF-8');
}else{ }else{
$serverstop = ""; $serverstop = "";
} }
@@ -284,13 +284,13 @@ require('../logout/logout.php');
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>メンテナンス - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>メンテナンス - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -336,6 +336,7 @@ require('../logout/logout.php');
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
+86 -18
View File
@@ -26,6 +26,8 @@ function random_code($length = 8){
require('../db.php'); require('../db.php');
//hCaptcha-------------------------------------------- //hCaptcha--------------------------------------------
require('hCaptcha_settings/hCaptcha_settings.php'); require('hCaptcha_settings/hCaptcha_settings.php');
//Cloudflare_Turnstile--------------------------------------------
require('CloudflareTurnstile_settings/CloudflareTurnstile_settings.php');
//---------------------------------------------------- //----------------------------------------------------
// 変数の初期化 // 変数の初期化
@@ -237,12 +239,17 @@ if (!empty($pdo)) {
if( !empty($_POST['btn_submit']) ) { if( !empty($_POST['btn_submit']) ) {
// 空白除去 // 空白除去
$banuserid = $_POST['banuserid']; $banuserid = htmlentities($_POST['banuserid'], ENT_QUOTES, 'UTF-8', false);
$banurldomain = $_POST['banurldomain']; $banurldomain = htmlentities($_POST['banurldomain'], ENT_QUOTES, 'UTF-8', false);
$max_textsize = $_POST['max_textsize']; $max_textsize = htmlentities($_POST['max_textsize'], ENT_QUOTES, 'UTF-8', false);
if((int)$max_textsize > 16777216){
$error_message[] = "投稿の最大文字数の限界値を超えています。";
}
if(empty($error_message)){
//banuserid //banuserid
$file = fopen($banuseridfile, 'w'); $file = fopen($banuseridfile, 'w');
$data = $banuserid; $data = $banuserid;
@@ -262,17 +269,17 @@ if( !empty($_POST['btn_submit']) ) {
fclose($file); fclose($file);
$Captcha_ONOFF = $_POST['hCaptcha_onoff']; $hCaptcha_ONOFF = htmlentities($_POST['hCaptcha_onoff'], ENT_QUOTES, 'UTF-8', false);
$Captcha_sitekey = $_POST['hCaptcha_sitekey']; $hCaptcha_sitekey = htmlentities($_POST['hCaptcha_sitekey'], ENT_QUOTES, 'UTF-8', false);
$Captcha_seackey = $_POST['hCaptcha_seackey']; $hCaptcha_seackey = htmlentities($_POST['hCaptcha_seackey'], ENT_QUOTES, 'UTF-8', false);
$New_hCaptcha_Settings = " $New_hCaptcha_Settings = "
<?php // Captchaの認証情報 <?php // Captchaの認証情報
define( 'CAPTCHA', '".htmlentities($Captcha_ONOFF)."');// trueならhCaptchaが有効 define( 'H_CAPTCHA_ONOFF', '".htmlentities($hCaptcha_ONOFF, ENT_QUOTES, 'UTF-8', false)."');// trueならhCaptchaが有効
define( 'SITE_KEY', '".htmlentities($Captcha_sitekey)."'); define( 'H_CAPTCHA_SITE_KEY', '".htmlentities($hCaptcha_sitekey, ENT_QUOTES, 'UTF-8', false)."');
define( 'SEAC_KEY', '".htmlentities($Captcha_seackey)."'); define( 'H_CAPTCHA_SEAC_KEY', '".htmlentities($hCaptcha_seackey, ENT_QUOTES, 'UTF-8', false)."');
?> ?>
"; ";
@@ -282,9 +289,32 @@ if( !empty($_POST['btn_submit']) ) {
fputs($file, $data); fputs($file, $data);
fclose($file); fclose($file);
//CF_Turnstile
$CF_Turnstile_ONOFF = htmlentities($_POST['CF_Turnstile_onoff'], ENT_QUOTES, 'UTF-8', false);
$CF_Turnstile_sitekey = htmlentities($_POST['CF_Turnstile_sitekey'], ENT_QUOTES, 'UTF-8', false);
$CF_Turnstile_seackey = htmlentities($_POST['CF_Turnstile_seackey'], ENT_QUOTES, 'UTF-8', false);
$New_CF_Turnstile_Settings = "
<?php // Captchaの認証情報
define( 'CF_TURNSTILE_ONOFF', '".htmlentities($CF_Turnstile_ONOFF, ENT_QUOTES, 'UTF-8', false)."');// trueならCloudflareTurnstileが有効
define( 'CF_TURNSTILE_SITE_KEY', '".htmlentities($CF_Turnstile_sitekey, ENT_QUOTES, 'UTF-8', false)."');
define( 'CF_TURNSTILE_SEAC_KEY', '".htmlentities($CF_Turnstile_seackey, ENT_QUOTES, 'UTF-8', false)."');
?>
";
//設定上書き
$file = fopen('CloudflareTurnstile_settings/CloudflareTurnstile_settings.php', 'w');
$data = $New_CF_Turnstile_Settings;
fputs($file, $data);
fclose($file);
$url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header("Location:".$url.""); header("Location:".$url."");
exit; exit;
}
} }
require('../logout/logout.php'); require('../logout/logout.php');
?> ?>
@@ -293,13 +323,15 @@ require('../logout/logout.php');
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<script src="https://js.hcaptcha.com/1/api.js" async defer></script>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>モデレーション - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>モデレーション - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -326,25 +358,25 @@ require('../logout/logout.php');
<div class="p2">ここに入力してあるユーザーidは登録できません。<br>改行で禁止するユーザーidを指定できます。<br>すでにあるアカウントは影響を受けません。</div> <div class="p2">ここに入力してあるユーザーidは登録できません。<br>改行で禁止するユーザーidを指定できます。<br>すでにあるアカウントは影響を受けません。</div>
<textarea id="banuserid" placeholder="uwuzu" class="inbox" type="text" name="banuserid"><?php $sinfo = explode("\r", $banuserid_info); foreach ($sinfo as $info) { echo $info; }?></textarea> <textarea id="banuserid" placeholder="uwuzu" class="inbox" type="text" name="banuserid"><?php $sinfo = explode("\r", $banuserid_info); foreach ($sinfo as $info) { echo $info; }?></textarea>
</div> </div>
<hr>
<div> <div>
<p>投稿禁止URLドメイン</p> <p>投稿禁止URLドメイン</p>
<div class="p2">ここに入力してあるドメインが含まれる投稿をしようとすると投稿が拒否されます。<br>なお、この機能はまだ確実な動作が保証されないためベータ版です。<br>位置情報特定サイトなどの対策等にご利用ください。</div> <div class="p2">ここに入力してあるドメインが含まれる投稿をしようとすると投稿が拒否されます。<br>なお、この機能はまだ確実な動作が保証されないためベータ版です。<br>位置情報特定サイトなどの対策等にご利用ください。</div>
<textarea id="banurldomain" placeholder="" class="inbox" type="text" name="banurldomain"><?php $sinfo = explode("\r", $banurldomain_info); foreach ($sinfo as $info) { echo $info; }?></textarea> <textarea id="banurldomain" placeholder="" class="inbox" type="text" name="banurldomain"><?php $sinfo = explode("\r", $banurldomain_info); foreach ($sinfo as $info) { echo $info; }?></textarea>
</div> </div>
<hr>
<div> <div>
<p>投稿の最大文字数</p> <p>投稿の最大文字数</p>
<div class="p2">ここで設定した文字数までの投稿が可能です。<br>なお、データベースより最大文字数を設定している場合そちらが優先されて使用されます。<br>1文字から16777216文字の間で設定が可能です。<br>※uwuzu version 1.3.0以前にuwuzuを導入された方はuwuzuのDB内のtext型を全てmediumtext型にしてください。</div> <div class="p2">ここで設定した文字数までの投稿が可能です。<br>なお、データベースより最大文字数を設定している場合そちらが優先されて使用されます。<br>1文字から16777216文字の間で設定が可能です。<br>※uwuzu version 1.3.0以前にuwuzuを導入された方はuwuzuのDB内のtext型を全てmediumtext型にしてください。</div>
<input id="max_textsize" placeholder="1024" class="inbox" type="number" min="1" max="16777216" name="max_textsize" value="<?php if( !empty(file_get_contents($mojisizefile)) ){ echo htmlspecialchars(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8'); } ?>"> <input id="max_textsize" placeholder="1024" class="inbox" type="number" min="1" max="16777216" name="max_textsize" value="<?php if( !empty(file_get_contents($mojisizefile)) ){ echo htmlentities(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8'); } ?>">
</div> </div>
<hr>
<div> <div>
<p>hCaptcha認証</p> <p>hCaptcha認証</p>
<div class="p2">hCaptchaを使用し、ログイン時とアカウント登録時に認証をすることができます。<br>もし人間でないと判断された場合はアカウント登録やログイン、パスワード変更を受け付けません。</div> <div class="p2">hCaptchaを使用し、ログイン時とアカウント登録時に認証をすることができます。<br>もし人間でないと判断された場合はアカウント登録やログイン、パスワード変更を受け付けません。</div>
<p>hCaptchaのオンオフ</p> <p>hCaptchaのオンオフ</p>
<div class="switch_button"> <div class="switch_button">
<?php if(!empty(CAPTCHA && CAPTCHA == "true")){?> <?php if(!empty(H_CAPTCHA_ONOFF && H_CAPTCHA_ONOFF == "true")){?>
<input id="hCaptcha_onoff" class="switch_input" type='checkbox' name="hCaptcha_onoff" value="true" checked/> <input id="hCaptcha_onoff" class="switch_input" type='checkbox' name="hCaptcha_onoff" value="true" checked/>
<label for="hCaptcha_onoff" class="switch_label"></label> <label for="hCaptcha_onoff" class="switch_label"></label>
<?php }else{?> <?php }else{?>
@@ -355,9 +387,35 @@ require('../logout/logout.php');
<div id="hcaptcha"> <div id="hcaptcha">
<p>hCaptcha - 認証情報設定</p> <p>hCaptcha - 認証情報設定</p>
<div class="p2">サイトキー</div> <div class="p2">サイトキー</div>
<input id="hcaptcha" placeholder="" class="inbox" type="text" name="hCaptcha_sitekey" value="<?php if( !empty(SITE_KEY) ){ echo htmlspecialchars(SITE_KEY, ENT_QUOTES, 'UTF-8'); } ?>"> <input id="hcaptcha" placeholder="" class="inbox" type="text" name="hCaptcha_sitekey" value="<?php if( !empty(H_CAPTCHA_SITE_KEY) ){ echo htmlentities(H_CAPTCHA_SITE_KEY, ENT_QUOTES, 'UTF-8'); } ?>">
<div class="p2">シークレットキー</div> <div class="p2">シークレットキー</div>
<input id="hcaptcha" placeholder="" class="inbox" type="text" name="hCaptcha_seackey" value="<?php if( !empty(SEAC_KEY) ){ echo htmlspecialchars(SEAC_KEY, ENT_QUOTES, 'UTF-8'); } ?>"> <input id="hcaptcha" placeholder="" class="inbox" type="text" name="hCaptcha_seackey" value="<?php if( !empty(H_CAPTCHA_SEAC_KEY) ){ echo htmlentities(H_CAPTCHA_SEAC_KEY, ENT_QUOTES, 'UTF-8'); } ?>">
<p>デモ</p>
<div class="h-captcha" data-sitekey="10000000-ffff-ffff-ffff-000000000001"></div>
</div>
</div>
<hr>
<div>
<p>CloudflareTurnstile認証</p>
<div class="p2">CloudflareTurnstileを使用し、ログイン時とアカウント登録時に認証をすることができます。<br>もし人間でないと判断された場合はアカウント登録やログイン、パスワード変更を受け付けません。<br>hCaptchaなどと二重に設定することが可能です。</div>
<p>CloudflareTurnstileのオンオフ</p>
<div class="switch_button">
<?php if(!empty(CF_TURNSTILE_ONOFF && CF_TURNSTILE_ONOFF == "true")){?>
<input id="CF_Turnstile_onoff" class="switch_input" type='checkbox' name="CF_Turnstile_onoff" value="true" checked/>
<label for="CF_Turnstile_onoff" class="switch_label"></label>
<?php }else{?>
<input id="CF_Turnstile_onoff" class="switch_input" type='checkbox' name="CF_Turnstile_onoff" value="true" />
<label for="CF_Turnstile_onoff" class="switch_label"></label>
<?php }?>
</div>
<div id="CF_Turnstile">
<p>CloudflareTurnstile - 認証情報設定</p>
<div class="p2">サイトキー</div>
<input id="CF_Turnstile" placeholder="" class="inbox" type="text" name="CF_Turnstile_sitekey" value="<?php if( !empty(CF_TURNSTILE_SITE_KEY) ){ echo htmlentities(CF_TURNSTILE_SITE_KEY, ENT_QUOTES, 'UTF-8'); } ?>">
<div class="p2">シークレットキー</div>
<input id="CF_Turnstile" placeholder="" class="inbox" type="text" name="CF_Turnstile_seackey" value="<?php if( !empty(CF_TURNSTILE_SEAC_KEY) ){ echo htmlentities(CF_TURNSTILE_SEAC_KEY, ENT_QUOTES, 'UTF-8'); } ?>">
<p>デモ<p>
<div class="cf-turnstile" data-sitekey="1x00000000000000000000AA" data-callback="javascriptCallback" data-language="ja"></div>
</div> </div>
</div> </div>
@@ -369,6 +427,7 @@ require('../logout/logout.php');
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
<script> <script>
@@ -391,6 +450,15 @@ $(document).ready(function() {
$('#hCaptcha_onoff').change(function(){ $('#hCaptcha_onoff').change(function(){
$('#hcaptcha').toggle(); $('#hcaptcha').toggle();
}); });
if ($("#CF_Turnstile_onoff").prop("checked")) {
$('#CF_Turnstile').show();
}else{
$('#CF_Turnstile').hide();
}
$('#CF_Turnstile_onoff').change(function(){
$('#CF_Turnstile').toggle();
});
}); });
</script> </script>
+63 -9
View File
@@ -22,6 +22,11 @@ function createUniqId(){
function random_code($length = 8){ function random_code($length = 8){
return substr(str_shuffle('1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, $length); return substr(str_shuffle('1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, $length);
} }
function mb_to_gb($megabyte){
$n_mb = $megabyte / 1024;
return round($n_mb, 1);
}
require('../db.php'); require('../db.php');
@@ -208,6 +213,30 @@ $count3 = $result3->num_rows;
$result4 = $mysqli->query("SELECT userid FROM account WHERE sacinfo = 'bot'"); $result4 = $mysqli->query("SELECT userid FROM account WHERE sacinfo = 'bot'");
$count4 = $result4->num_rows; $count4 = $result4->num_rows;
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$diskFree = (int) disk_free_space('C:') / 1024 / 1024;
$diskTotal = (int) disk_total_space('C:') / 1024 / 1024;
$diskUmari = $diskTotal - $diskFree;
if ($diskFree / $diskTotal < 0.1) {
$disk_over90p = true;
}else{
$disk_over90p = false;
}
$loadAve = null;
} else {
$diskFree = (int) disk_free_space('/') / 1024 / 1024;
$diskTotal = (int) disk_total_space('/') / 1024 / 1024;
$diskUmari = $diskTotal - $diskFree;
if ($diskFree / $diskTotal < 0.1) {
$disk_over90p = true;
}else{
$disk_over90p = false;
}
$loadAve = sys_getloadavg()[0];
}
require('../logout/logout.php'); require('../logout/logout.php');
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@@ -215,13 +244,13 @@ require('../logout/logout.php');
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>サーバー概要 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>サーバー概要 - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -245,32 +274,32 @@ require('../logout/logout.php');
<!--(サーバーアイコン)--> <!--(サーバーアイコン)-->
<?php if( !empty($serversettings["serverinfo"]["server_head"]) ){ ?> <?php if( !empty($serversettings["serverinfo"]["server_head"]) ){ ?>
<div class="serverhead"> <div class="serverhead">
<img src="<?php echo htmlspecialchars($serversettings["serverinfo"]["server_head"], ENT_QUOTES, 'UTF-8'); ?>"> <img src="<?php echo htmlentities($serversettings["serverinfo"]["server_head"], ENT_QUOTES, 'UTF-8'); ?>">
</div> </div>
<?php }?> <?php }?>
<?php if( !empty($serversettings["serverinfo"]["server_icon"]) ){ ?> <?php if( !empty($serversettings["serverinfo"]["server_icon"]) ){ ?>
<div class="servericon"> <div class="servericon">
<?php if( !empty($serversettings["serverinfo"]["server_head"]) ){ ?> <?php if( !empty($serversettings["serverinfo"]["server_head"]) ){ ?>
<div class="up"> <div class="up">
<img src="<?php echo htmlspecialchars($serversettings["serverinfo"]["server_icon"], ENT_QUOTES, 'UTF-8'); ?>"> <img src="<?php echo htmlentities($serversettings["serverinfo"]["server_icon"], ENT_QUOTES, 'UTF-8'); ?>">
</div> </div>
<?php }else{?> <?php }else{?>
<img src="<?php echo htmlspecialchars($serversettings["serverinfo"]["server_icon"], ENT_QUOTES, 'UTF-8'); ?>"> <img src="<?php echo htmlentities($serversettings["serverinfo"]["server_icon"], ENT_QUOTES, 'UTF-8'); ?>">
<?php }?> <?php }?>
</div> </div>
<?php }?> <?php }?>
<!--(サーバーアイコンここまで)--> <!--(サーバーアイコンここまで)-->
<p>サーバー名</p> <p>サーバー名</p>
<p><?php if( !empty(htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')) ){ echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8'); } ?></p> <p><?php if( !empty(htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')) ){ echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8'); } ?></p>
<hr> <hr>
<p>サーバー紹介メッセージ</p> <p>サーバー紹介メッセージ</p>
<p><?php $sinfo = explode("\n", $serverinfo); foreach ($sinfo as $info) { echo nl2br(htmlspecialchars($info)); }?></p> <p><?php $sinfo = explode("\n", $serverinfo); foreach ($sinfo as $info) { echo nl2br(htmlentities($info)); }?></p>
<hr> <hr>
<p>サーバー管理者の名前</p> <p>サーバー管理者の名前</p>
<p><?php if( !empty(htmlspecialchars($serversettings["serverinfo"]["server_admin"], ENT_QUOTES, 'UTF-8')) ){ echo htmlspecialchars($serversettings["serverinfo"]["server_admin"], ENT_QUOTES, 'UTF-8'); } ?></p> <p><?php if( !empty(htmlentities($serversettings["serverinfo"]["server_admin"], ENT_QUOTES, 'UTF-8')) ){ echo htmlentities($serversettings["serverinfo"]["server_admin"], ENT_QUOTES, 'UTF-8'); } ?></p>
<hr> <hr>
<p>サーバーへのお問い合わせ用メールアドレス</p> <p>サーバーへのお問い合わせ用メールアドレス</p>
<p><?php if( !empty(htmlspecialchars($serversettings["serverinfo"]["server_admin_mailadds"], ENT_QUOTES, 'UTF-8')) ){ echo htmlspecialchars($serversettings["serverinfo"]["server_admin_mailadds"], ENT_QUOTES, 'UTF-8'); } ?></p> <p><?php if( !empty(htmlentities($serversettings["serverinfo"]["server_admin_mailadds"], ENT_QUOTES, 'UTF-8')) ){ echo htmlentities($serversettings["serverinfo"]["server_admin_mailadds"], ENT_QUOTES, 'UTF-8'); } ?></p>
<hr> <hr>
<p>統計情報</p> <p>統計情報</p>
<div class="overview"> <div class="overview">
@@ -293,6 +322,30 @@ require('../logout/logout.php');
<p><?php echo htmlentities($count4);?></p> <p><?php echo htmlentities($count4);?></p>
</div> </div>
</div> </div>
<hr>
<p>ディスク空き容量</p>
<?php if($disk_over90p == true){?>
<p class="errmsg">90%以上が使用済みです。<br>早急に容量拡張などの対応を考えてください!</p>
<?php }else{?>
<p>ディスク空き容量には余裕があります。</p>
<?php };?>
<div class="graph">
<div class="per" style="width:calc(<?php echo round((int)mb_to_gb($diskUmari) / (int)mb_to_gb($diskTotal) * 100, 1);?>% - 8px);">
</div>
</div>
<p>使用済み : <?php echo mb_to_gb($diskUmari)."GB/".mb_to_gb($diskTotal);?>GB<br>
空き容量 : <?php echo mb_to_gb($diskFree);?>GB</p>
<hr>
<p>ロードアベレージ</p>
<div class="p2">ロードアベレージはCPUのコア数と照らし合わせて活用してください。<br>
"ロードアベレージ/CPUコア数"で計算をした時に1.0を超えると処理が重くなっています。<br>
※Windows環境ではロードアベレージの取得はできません。</div>
<?php if(empty($loadAve)){?>
<p>ロードアベレージの取得ができませんでした。</p>
<?php }else{?>
<p>過去1分間のロードアベレージ : <?php echo $loadAve?></p>
<?php };?>
</div> </div>
</div> </div>
</div> </div>
@@ -300,6 +353,7 @@ require('../logout/logout.php');
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
</html> </html>
+9 -8
View File
@@ -8,7 +8,7 @@ $serverstopfile = "../server/serverstop.txt";
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
if(!empty(file_get_contents($serverstopfile))){ if(!empty(file_get_contents($serverstopfile))){
$serverstop = htmlspecialchars(file_get_contents($serverstopfile), ENT_QUOTES, 'UTF-8'); $serverstop = htmlentities(file_get_contents($serverstopfile), ENT_QUOTES, 'UTF-8');
}else{ }else{
$serverstop = ""; $serverstop = "";
} }
@@ -246,13 +246,13 @@ require('../logout/logout.php');
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>プラグイン - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>プラグイン - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -291,15 +291,15 @@ require('../logout/logout.php');
<div id="mail_plugin"> <div id="mail_plugin">
<p>PHPMailer - メールサーバー設定</p> <p>PHPMailer - メールサーバー設定</p>
<div class="p2">メールアドレス</div> <div class="p2">メールアドレス</div>
<input id="mail_plugin" placeholder="user@localhost" class="inbox" type="text" name="N_MAIL_ADDS" value="<?php if( !empty(MAIL_ADDS) ){ echo htmlspecialchars(MAIL_ADDS, ENT_QUOTES, 'UTF-8'); } ?>"> <input id="mail_plugin" placeholder="user@localhost" class="inbox" type="text" name="N_MAIL_ADDS" value="<?php if( !empty(MAIL_ADDS) ){ echo htmlentities(MAIL_ADDS, ENT_QUOTES, 'UTF-8'); } ?>">
<div class="p2">ホスト名</div> <div class="p2">ホスト名</div>
<input id="mail_plugin" placeholder="smtp.mailserver.com" class="inbox" type="text" name="N_MAIL_HOST" value="<?php if( !empty(MAIL_HOST) ){ echo htmlspecialchars(MAIL_HOST, ENT_QUOTES, 'UTF-8'); } ?>"> <input id="mail_plugin" placeholder="smtp.mailserver.com" class="inbox" type="text" name="N_MAIL_HOST" value="<?php if( !empty(MAIL_HOST) ){ echo htmlentities(MAIL_HOST, ENT_QUOTES, 'UTF-8'); } ?>">
<div class="p2">ポート番号</div> <div class="p2">ポート番号</div>
<input id="mail_plugin" placeholder="465" class="inbox" type="text" name="N_MAIL_PORT" value="<?php if( !empty(MAIL_PORT) ){ echo htmlspecialchars(MAIL_PORT, ENT_QUOTES, 'UTF-8'); } ?>"> <input id="mail_plugin" placeholder="465" class="inbox" type="text" name="N_MAIL_PORT" value="<?php if( !empty(MAIL_PORT) ){ echo htmlentities(MAIL_PORT, ENT_QUOTES, 'UTF-8'); } ?>">
<div class="p2">ユーザー名</div> <div class="p2">ユーザー名</div>
<input id="mail_plugin" placeholder="from@localhost" class="inbox" type="text" name="N_MAIL_USER" value="<?php if( !empty(MAIL_USER) ){ echo htmlspecialchars(MAIL_USER, ENT_QUOTES, 'UTF-8'); } ?>"> <input id="mail_plugin" placeholder="from@localhost" class="inbox" type="text" name="N_MAIL_USER" value="<?php if( !empty(MAIL_USER) ){ echo htmlentities(MAIL_USER, ENT_QUOTES, 'UTF-8'); } ?>">
<div class="p2">パスワード</div> <div class="p2">パスワード</div>
<input id="mail_plugin" placeholder="password" class="inbox" type="text" name="N_MAIL_PASS" style="-webkit-text-security:disc;" value="<?php if( !empty(MAIL_PASS) ){ echo htmlspecialchars(MAIL_PASS, ENT_QUOTES, 'UTF-8'); } ?>"> <input id="mail_plugin" placeholder="password" class="inbox" type="text" name="N_MAIL_PASS" style="-webkit-text-security:disc;" value="<?php if( !empty(MAIL_PASS) ){ echo htmlentities(MAIL_PASS, ENT_QUOTES, 'UTF-8'); } ?>">
<div class="p2">暗号化設定</div> <div class="p2">暗号化設定</div>
<div class="radio_btn_zone"> <div class="radio_btn_zone">
@@ -334,6 +334,7 @@ require('../logout/logout.php');
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
+64 -3
View File
@@ -188,6 +188,7 @@ if( !empty($_POST['role_btn_submit']) ) {
$rolename = htmlentities($_POST['rolename']); $rolename = htmlentities($_POST['rolename']);
$roleid = htmlentities($_POST['roleid']); $roleid = htmlentities($_POST['roleid']);
$rolecolor = htmlentities($_POST['rolecolor']); $rolecolor = htmlentities($_POST['rolecolor']);
$roleeffect = htmlentities($_POST['roleeffect']);
$dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option);
$query = $dbh->prepare('SELECT * FROM role WHERE roleidname = :roleid limit 1'); $query = $dbh->prepare('SELECT * FROM role WHERE roleidname = :roleid limit 1');
@@ -207,6 +208,20 @@ if( !empty($_POST['role_btn_submit']) ) {
$error_message[] = "ロールの色が入力されていません。(INPUT_PLEASE)"; $error_message[] = "ロールの色が入力されていません。(INPUT_PLEASE)";
} }
if(empty($roleeffect)){
$error_message[] = "ロールに適用するエフェクトが選択されていません。(INPUT_PLEASE)";
}else{
if($roleeffect == "0"){
$save_role_effect = "none";
}
if($roleeffect == "1"){
$save_role_effect = "shine";
}
if($roleeffect == "2"){
$save_role_effect = "rainbow";
}
}
if (!empty($pdo)) { if (!empty($pdo)) {
if (empty($error_message)) { if (empty($error_message)) {
// 書き込み日時を取得 // 書き込み日時を取得
@@ -219,12 +234,13 @@ if( !empty($_POST['role_btn_submit']) ) {
try { try {
// SQL作成 // SQL作成
$stmt = $pdo->prepare("INSERT INTO role (rolename, roleauth, rolecolor, roleidname) VALUES (:rolename, :roleauth, :rolecolor, :roleidname)"); $stmt = $pdo->prepare("INSERT INTO role (rolename, roleauth, rolecolor, roleidname, roleeffect) VALUES (:rolename, :roleauth, :rolecolor, :roleidname, :roleeffect)");
$stmt->bindParam(':rolename', $rolename, PDO::PARAM_STR); $stmt->bindParam(':rolename', $rolename, PDO::PARAM_STR);
$stmt->bindParam(':roleauth', $roleauth, PDO::PARAM_STR); $stmt->bindParam(':roleauth', $roleauth, PDO::PARAM_STR);
$stmt->bindParam(':rolecolor', $rolecolor, PDO::PARAM_STR); $stmt->bindParam(':rolecolor', $rolecolor, PDO::PARAM_STR);
$stmt->bindParam(':roleidname', $roleid, PDO::PARAM_STR); $stmt->bindParam(':roleidname', $roleid, PDO::PARAM_STR);
$stmt->bindParam(':roleeffect', $save_role_effect, PDO::PARAM_STR);
// SQLクエリの実行 // SQLクエリの実行
$res = $stmt->execute(); $res = $stmt->execute();
@@ -420,13 +436,13 @@ if (!empty($pdo)) {
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>ロール - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>ロール - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8', false);?></title>
</head> </head>
@@ -463,6 +479,19 @@ if (!empty($pdo)) {
<div class="p2">ロールの色です。<br>HEXコードで入力してください。(#はつけないでください。)</div> <div class="p2">ロールの色です。<br>HEXコードで入力してください。(#はつけないでください。)</div>
<input id="rolecolor" onInput="checkForm(this)" placeholder="256238" class="inbox" type="text" name="rolecolor" maxlength="6" value=""> <input id="rolecolor" onInput="checkForm(this)" placeholder="256238" class="inbox" type="text" name="rolecolor" maxlength="6" value="">
</div> </div>
<div>
<div class="p2">ロールに付与するエフェクト</div>
<div class="radio_btn_zone">
<input type="radio" name="roleeffect" value="0" id="0" class="radiobtn_input" checked>
<label for="0" class="radiobtn_label">なし</label>
<input type="radio" name="roleeffect" value="1" id="1" class="radiobtn_input">
<label for="1" class="radiobtn_label">輝かせる</label>
<input type="radio" name="roleeffect" value="2" id="2" class="radiobtn_input">
<label for="2" class="radiobtn_label">枠を虹色にする</label>
</div>
</div>
<input type="submit" class = "irobutton" name="role_btn_submit" value="作成"> <input type="submit" class = "irobutton" name="role_btn_submit" value="作成">
</form> </form>
@@ -485,6 +514,37 @@ if (!empty($pdo)) {
<hr> <hr>
<p>ロールのid:<?php echo htmlentities($value["roleidname"]);?></p> <p>ロールのid:<?php echo htmlentities($value["roleidname"]);?></p>
<p>ロールの色:#<?php echo htmlentities($value["rolecolor"]);?></p> <p>ロールの色:#<?php echo htmlentities($value["rolecolor"]);?></p>
<p>ロールのエフェクト:<?php
if(htmlentities($value["roleeffect"]) == '' || htmlentities($value["roleeffect"]) == 'none'){
$role_view_effect = "なし";
}elseif(htmlentities($value["roleeffect"]) == 'shine'){
$role_view_effect = "輝かせる";
}elseif(htmlentities($value["roleeffect"]) == 'rainbow'){
$role_view_effect = "枠を虹色にする";
}else{
$role_view_effect = "不明";
}
echo $role_view_effect;
?></p>
<hr>
<div class="roleboxes">
<?php
if(htmlentities($value["roleeffect"], ENT_QUOTES, 'UTF-8', false) == '' || htmlentities($value["roleeffect"], ENT_QUOTES, 'UTF-8', false) == 'none'){
$role_view_effect = "";
}elseif(htmlentities($value["roleeffect"], ENT_QUOTES, 'UTF-8', false) == 'shine'){
$role_view_effect = "shine";
}elseif(htmlentities($value["roleeffect"], ENT_QUOTES, 'UTF-8', false) == 'rainbow'){
$role_view_effect = "rainbow";
}else{
$role_view_effect = "";
}
?>
<div class="rolebox <?php echo htmlentities($role_view_effect, ENT_QUOTES, 'UTF-8', false); ?>" style="border: 1px solid <?php echo '#' . htmlentities($value["rolecolor"], ENT_QUOTES, 'UTF-8', false); ?>;">
<p style="color: <?php echo '#' . $value["rolecolor"]; ?>;">
<?php if (!empty($value["rolename"])) { echo htmlentities($value["rolename"], ENT_QUOTES, 'UTF-8', false); }else{ echo("ロールが正常に設定されていません。");} ?>
</p>
</div>
</div>
<hr> <hr>
<form enctype="multipart/form-data" method="post"> <form enctype="multipart/form-data" method="post">
@@ -546,6 +606,7 @@ if (!empty($pdo)) {
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
<script type="text/javascript"> <script type="text/javascript">
+13 -12
View File
@@ -347,13 +347,13 @@ require('../logout/logout.php');
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>サーバー設定 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>サーバー設定 - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -377,17 +377,17 @@ require('../logout/logout.php');
<!--(サーバーアイコン)--> <!--(サーバーアイコン)-->
<?php if( !empty($serversettings["serverinfo"]["server_head"]) ){ ?> <?php if( !empty($serversettings["serverinfo"]["server_head"]) ){ ?>
<div class="serverhead_set"> <div class="serverhead_set">
<img src="<?php echo htmlspecialchars($serversettings["serverinfo"]["server_head"], ENT_QUOTES, 'UTF-8'); ?>"> <img src="<?php echo htmlentities($serversettings["serverinfo"]["server_head"], ENT_QUOTES, 'UTF-8'); ?>">
</div> </div>
<?php }?> <?php }?>
<?php if( !empty($serversettings["serverinfo"]["server_icon"]) ){ ?> <?php if( !empty($serversettings["serverinfo"]["server_icon"]) ){ ?>
<div class="servericon"> <div class="servericon">
<?php if( !empty($serversettings["serverinfo"]["server_head"]) ){ ?> <?php if( !empty($serversettings["serverinfo"]["server_head"]) ){ ?>
<div class="up"> <div class="up">
<img src="<?php echo htmlspecialchars($serversettings["serverinfo"]["server_icon"], ENT_QUOTES, 'UTF-8'); ?>"> <img src="<?php echo htmlentities($serversettings["serverinfo"]["server_icon"], ENT_QUOTES, 'UTF-8'); ?>">
</div> </div>
<?php }else{?> <?php }else{?>
<img src="<?php echo htmlspecialchars($serversettings["serverinfo"]["server_icon"], ENT_QUOTES, 'UTF-8'); ?>"> <img src="<?php echo htmlentities($serversettings["serverinfo"]["server_icon"], ENT_QUOTES, 'UTF-8'); ?>">
<?php }?> <?php }?>
</div> </div>
<?php }?> <?php }?>
@@ -395,12 +395,12 @@ require('../logout/logout.php');
<div> <div>
<p>サーバーアイコン</p> <p>サーバーアイコン</p>
<div class="p2">サーバー登録画面などに表示されます。<br>自動的に角が丸くなります。<br>URLより設定してください。(設定しなくても大丈夫です。)</div> <div class="p2">サーバー登録画面などに表示されます。<br>自動的に角が丸くなります。<br>URLより設定してください。(設定しなくても大丈夫です。)</div>
<input id="servericon" placeholder="https://~" class="inbox" type="text" name="servericon" value="<?php if( !empty($serversettings["serverinfo"]["server_icon"]) ){ echo htmlspecialchars($serversettings["serverinfo"]["server_icon"], ENT_QUOTES, 'UTF-8'); } ?>"> <input id="servericon" placeholder="https://~" class="inbox" type="text" name="servericon" value="<?php if( !empty($serversettings["serverinfo"]["server_icon"]) ){ echo htmlentities($serversettings["serverinfo"]["server_icon"], ENT_QUOTES, 'UTF-8'); } ?>">
</div> </div>
<div> <div>
<p>サーバーヘッダー</p> <p>サーバーヘッダー</p>
<div class="p2">サーバー登録画面などに表示されます。<br>自動的に角が丸くなります。<br>URLより設定してください。(設定しなくても大丈夫です。)</div> <div class="p2">サーバー登録画面などに表示されます。<br>自動的に角が丸くなります。<br>URLより設定してください。(設定しなくても大丈夫です。)</div>
<input id="serverhead" placeholder="https://~" class="inbox" type="text" name="serverhead" value="<?php if( !empty($serversettings["serverinfo"]["server_head"]) ){ echo htmlspecialchars($serversettings["serverinfo"]["server_head"], ENT_QUOTES, 'UTF-8'); } ?>"> <input id="serverhead" placeholder="https://~" class="inbox" type="text" name="serverhead" value="<?php if( !empty($serversettings["serverinfo"]["server_head"]) ){ echo htmlentities($serversettings["serverinfo"]["server_head"], ENT_QUOTES, 'UTF-8'); } ?>">
</div> </div>
<div> <div>
@@ -419,9 +419,9 @@ require('../logout/logout.php');
<p>サーバーロゴ</p> <p>サーバーロゴ</p>
<div class="p2">サーバーの左上に表示されているuwuzuのロゴを独自のロゴに置き換えるときに使用します。<br>自動的に角が丸くなります。<br>URLより設定してください。<br>背景透過画像を推奨します。</div> <div class="p2">サーバーの左上に表示されているuwuzuのロゴを独自のロゴに置き換えるときに使用します。<br>自動的に角が丸くなります。<br>URLより設定してください。<br>背景透過画像を推奨します。</div>
<div class="p2">ログイン後のロゴ</div> <div class="p2">ログイン後のロゴ</div>
<input id="serverlogo" placeholder="https://~" class="inbox" type="text" name="serverlogo_light" value="<?php if( !empty($serversettings["serverinfo"]["server_logo_home"]) ){ echo htmlspecialchars($serversettings["serverinfo"]["server_logo_home"], ENT_QUOTES, 'UTF-8'); } ?>"> <input id="serverlogo" placeholder="https://~" class="inbox" type="text" name="serverlogo_light" value="<?php if( !empty($serversettings["serverinfo"]["server_logo_home"]) ){ echo htmlentities($serversettings["serverinfo"]["server_logo_home"], ENT_QUOTES, 'UTF-8'); } ?>">
<div class="p2">ログイン画面と利用規約などドキュメントページのロゴ</div> <div class="p2">ログイン画面と利用規約などドキュメントページのロゴ</div>
<input id="serverlogo" placeholder="https://~" class="inbox" type="text" name="serverlogo_dark" value="<?php if( !empty($serversettings["serverinfo"]["server_logo_login"]) ){ echo htmlspecialchars($serversettings["serverinfo"]["server_logo_login"], ENT_QUOTES, 'UTF-8'); } ?>"> <input id="serverlogo" placeholder="https://~" class="inbox" type="text" name="serverlogo_dark" value="<?php if( !empty($serversettings["serverinfo"]["server_logo_login"]) ){ echo htmlentities($serversettings["serverinfo"]["server_logo_login"], ENT_QUOTES, 'UTF-8'); } ?>">
</div> </div>
<script> <script>
if ($("#serverlogo_onoff").prop("checked")) { if ($("#serverlogo_onoff").prop("checked")) {
@@ -437,7 +437,7 @@ require('../logout/logout.php');
<div> <div>
<p>サーバー名</p> <p>サーバー名</p>
<div class="p2">サーバー名です。</div> <div class="p2">サーバー名です。</div>
<input id="servername" placeholder="uwuzuさ~ば~" class="inbox" type="text" name="servername" value="<?php if( !empty($serversettings["serverinfo"]["server_name"]) ){ echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8'); } ?>"> <input id="servername" placeholder="uwuzuさ~ば~" class="inbox" type="text" name="servername" value="<?php if( !empty($serversettings["serverinfo"]["server_name"]) ){ echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8'); } ?>">
</div> </div>
<div> <div>
@@ -449,13 +449,13 @@ require('../logout/logout.php');
<div> <div>
<p>サーバー管理者の名前</p> <p>サーバー管理者の名前</p>
<div class="p2">サーバー管理者名です。</div> <div class="p2">サーバー管理者名です。</div>
<input id="serveradminname" placeholder="わたし" class="inbox" type="text" name="serveradminname" value="<?php if( !empty($serversettings["serverinfo"]["server_admin"]) ){ echo htmlspecialchars($serversettings["serverinfo"]["server_admin"], ENT_QUOTES, 'UTF-8'); } ?>"> <input id="serveradminname" placeholder="わたし" class="inbox" type="text" name="serveradminname" value="<?php if( !empty($serversettings["serverinfo"]["server_admin"]) ){ echo htmlentities($serversettings["serverinfo"]["server_admin"], ENT_QUOTES, 'UTF-8'); } ?>">
</div> </div>
<div> <div>
<p>サーバーへのお問い合わせ用メールアドレス</p> <p>サーバーへのお問い合わせ用メールアドレス</p>
<div class="p2">ユーザーからのお問い合わせメアドです。</div> <div class="p2">ユーザーからのお問い合わせメアドです。</div>
<input id="servermailadds" placeholder="" class="inbox" type="text" name="servermailadds" value="<?php if( !empty($serversettings["serverinfo"]["server_admin_mailadds"]) ){ echo htmlspecialchars($serversettings["serverinfo"]["server_admin_mailadds"], ENT_QUOTES, 'UTF-8'); } ?>"> <input id="servermailadds" placeholder="" class="inbox" type="text" name="servermailadds" value="<?php if( !empty($serversettings["serverinfo"]["server_admin_mailadds"]) ){ echo htmlentities($serversettings["serverinfo"]["server_admin_mailadds"], ENT_QUOTES, 'UTF-8'); } ?>">
</div> </div>
<div> <div>
@@ -515,6 +515,7 @@ require('../logout/logout.php');
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
+4 -3
View File
@@ -290,13 +290,13 @@ if (!empty($pdo)) {
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>ユーザー管理 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>ユーザー管理 - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -319,7 +319,7 @@ if (!empty($pdo)) {
<h1>ユーザー管理</h1> <h1>ユーザー管理</h1>
<div> <div>
<p>ユーザーID</p> <p>ユーザーID</p>
<input id="target_userid" placeholder="admin" class="inbox" type="text" name="target_userid" value="<?php if( !empty($keyword) ){ echo htmlspecialchars($keyword, ENT_QUOTES, 'UTF-8'); } ?>"> <input id="target_userid" placeholder="admin" class="inbox" type="text" name="target_userid" value="<?php if( !empty($keyword) ){ echo htmlentities($keyword, ENT_QUOTES, 'UTF-8'); } ?>">
</div> </div>
<input type="submit" class = "irobutton" name="btn_submit" value="検索"> <input type="submit" class = "irobutton" name="btn_submit" value="検索">
@@ -375,6 +375,7 @@ if (!empty($pdo)) {
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
+27 -15
View File
@@ -201,7 +201,7 @@ if (!empty($pdo)) {
$roleDataArray = array(); $roleDataArray = array();
foreach ($roles as $roleId) { foreach ($roles as $roleId) {
$rerole = $dbh->prepare("SELECT rolename, roleauth, rolecolor FROM role WHERE roleidname = :role"); $rerole = $dbh->prepare("SELECT rolename, roleauth, rolecolor, roleeffect FROM role WHERE roleidname = :role");
$rerole->bindValue(':role', $roleId); $rerole->bindValue(':role', $roleId);
$rerole->execute(); $rerole->execute();
$roleDataArray[$roleId] = $rerole->fetch(); $roleDataArray[$roleId] = $rerole->fetch();
@@ -264,8 +264,8 @@ if( !empty($_POST['send_ice_submit']) ) {
if(!empty(MAIL_CHKS && MAIL_CHKS == "true")){ if(!empty(MAIL_CHKS && MAIL_CHKS == "true")){
if( !empty($userdata["mailadds"]) ){ if( !empty($userdata["mailadds"]) ){
if(filter_var($userdata["mailadds"], FILTER_VALIDATE_EMAIL)){ if(filter_var($userdata["mailadds"], FILTER_VALIDATE_EMAIL)){
$mail_title = "お使いの".htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')."アカウントは凍結されました"; $mail_title = "お使いの".htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')."アカウントは凍結されました";
$mail_text = "".$userdata["username"]."(".$userdata["userid"].")さん いつもuwuzuをご利用いただきありがとうございます。 ご利用のアカウント(".$userdata["userid"].")が".htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')."管理者により凍結されたためお知らせいたします。 サービス管理者からのメッセージは以下のものです。 ". $notice_msg ." 異議申し立てする場合は[".htmlspecialchars($serversettings["serverinfo"]["server_admin_mailadds"], ENT_QUOTES, 'UTF-8')."]まで異議申し立てをする旨を記載し送信をしてください。"; $mail_text = "".$userdata["username"]."(".$userdata["userid"].")さん いつもuwuzuをご利用いただきありがとうございます。 ご利用のアカウント(".$userdata["userid"].")が".htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')."管理者により凍結されたためお知らせいたします。 サービス管理者からのメッセージは以下のものです。 ". $notice_msg ." 異議申し立てする場合は[".htmlentities($serversettings["serverinfo"]["server_admin_mailadds"], ENT_QUOTES, 'UTF-8')."]まで異議申し立てをする旨を記載し送信をしてください。";
send_html_mail($userdata["mailadds"],$mail_title,$mail_text,"../"); send_html_mail($userdata["mailadds"],$mail_title,$mail_text,"../");
} }
@@ -352,7 +352,7 @@ if( !empty($_POST['send_water_submit']) ) {
if(!empty(MAIL_CHKS && MAIL_CHKS == "true")){ if(!empty(MAIL_CHKS && MAIL_CHKS == "true")){
if( !empty($userdata["mailadds"]) ){ if( !empty($userdata["mailadds"]) ){
if(filter_var($userdata["mailadds"], FILTER_VALIDATE_EMAIL)){ if(filter_var($userdata["mailadds"], FILTER_VALIDATE_EMAIL)){
$mail_title = "お使いの".htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')."アカウントは解凍されました!"; $mail_title = "お使いの".htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')."アカウントは解凍されました!";
$mail_text = "".$userdata["username"]."(".$userdata["userid"].")さん いつもuwuzuをご利用いただきありがとうございます。 ご利用のアカウント(".$userdata["userid"].")が解凍されたためお知らせいたします。 今後、ご利用のuwuzuアカウントは今まで通りご利用いただけます。 また、APIを使用している方はAPIのトークンがリセットされているため再度トークンを発行してご利用ください。"; $mail_text = "".$userdata["username"]."(".$userdata["userid"].")さん いつもuwuzuをご利用いただきありがとうございます。 ご利用のアカウント(".$userdata["userid"].")が解凍されたためお知らせいたします。 今後、ご利用のuwuzuアカウントは今まで通りご利用いただけます。 また、APIを使用している方はAPIのトークンがリセットされているため再度トークンを発行してご利用ください。";
send_html_mail($userdata["mailadds"],$mail_title,$mail_text,"../"); send_html_mail($userdata["mailadds"],$mail_title,$mail_text,"../");
@@ -535,8 +535,8 @@ if( !empty($_POST['send_ban_submit']) ) {
if(!empty(MAIL_CHKS && MAIL_CHKS == "true")){ if(!empty(MAIL_CHKS && MAIL_CHKS == "true")){
if( !empty($userdata["mailadds"]) ){ if( !empty($userdata["mailadds"]) ){
if(filter_var($userdata["mailadds"], FILTER_VALIDATE_EMAIL)){ if(filter_var($userdata["mailadds"], FILTER_VALIDATE_EMAIL)){
$mail_title = "お使いの".htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')."アカウントはBANされました"; $mail_title = "お使いの".htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')."アカウントはBANされました";
$mail_text = "".$userdata["username"]."(".$userdata["userid"].")さん いつもuwuzuをご利用いただきありがとうございます。 この度、ご利用のアカウント(".$userdata["userid"].")が".htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')."管理者によりBAN(削除)されたためお知らせいたします。 今後は今までご利用いただいた".htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')."アカウントは利用できません。 ".htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')."サーバー上から今までご利用いただいていたアカウントの情報は削除されたためログインなどもできません。 ご理解とご協力のほどよろしくお願いします。"; $mail_text = "".$userdata["username"]."(".$userdata["userid"].")さん いつもuwuzuをご利用いただきありがとうございます。 この度、ご利用のアカウント(".$userdata["userid"].")が".htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')."管理者によりBAN(削除)されたためお知らせいたします。 今後は今までご利用いただいた".htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')."アカウントは利用できません。 ".htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8')."サーバー上から今までご利用いただいていたアカウントの情報は削除されたためログインなどもできません。 ご理解とご協力のほどよろしくお願いします。";
send_html_mail($userdata["mailadds"],$mail_title,$mail_text,"../"); send_html_mail($userdata["mailadds"],$mail_title,$mail_text,"../");
} }
@@ -570,13 +570,13 @@ require('../logout/logout.php');
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>ユーザー管理 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>ユーザー管理 - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -607,9 +607,20 @@ require('../logout/logout.php');
<div class="roleboxes"> <div class="roleboxes">
<?php foreach ($roles as $roleId): ?> <?php foreach ($roles as $roleId): ?>
<?php $roleData = $roleDataArray[$roleId]; ?> <?php $roleData = $roleDataArray[$roleId]; ?>
<div class="rolebox" style="border: 1px solid <?php echo '#' . $roleData["rolecolor"]; ?>;"> <?php
if(htmlentities($roleData["roleeffect"], ENT_QUOTES, 'UTF-8', false) == '' || htmlentities($roleData["roleeffect"], ENT_QUOTES, 'UTF-8', false) == 'none'){
$role_view_effect = "";
}elseif(htmlentities($roleData["roleeffect"], ENT_QUOTES, 'UTF-8', false) == 'shine'){
$role_view_effect = "shine";
}elseif(htmlentities($roleData["roleeffect"], ENT_QUOTES, 'UTF-8', false) == 'rainbow'){
$role_view_effect = "rainbow";
}else{
$role_view_effect = "";
}
?>
<div class="rolebox <?php echo htmlentities($role_view_effect, ENT_QUOTES, 'UTF-8', false); ?>" style="border: 1px solid <?php echo '#' . htmlentities($roleData["rolecolor"], ENT_QUOTES, 'UTF-8', false); ?>;">
<p style="color: <?php echo '#' . $roleData["rolecolor"]; ?>;"> <p style="color: <?php echo '#' . $roleData["rolecolor"]; ?>;">
<?php if (!empty($roleData["rolename"])) { echo htmlentities($roleData["rolename"], ENT_QUOTES, 'UTF-8'); } ?> <?php if (!empty($roleData["rolename"])) { echo htmlentities($roleData["rolename"], ENT_QUOTES, 'UTF-8', false); }else{ echo("ロールが正常に設定されていません。");} ?>
</p> </p>
</div> </div>
<?php endforeach; ?> <?php endforeach; ?>
@@ -618,12 +629,12 @@ require('../logout/logout.php');
<div class="profile"> <div class="profile">
<div class="p2">プロフィール</div> <div class="p2">プロフィール</div>
<p><?php echo nl2br(htmlspecialchars($userdata["profile"], ENT_QUOTES, 'UTF-8')); ?></p> <p><?php echo nl2br(htmlentities($userdata["profile"], ENT_QUOTES, 'UTF-8')); ?></p>
</div> </div>
<hr> <hr>
<div class="about"> <div class="about">
<div class="p2">メールアドレス</div> <div class="p2">メールアドレス</div>
<p><?php if( !empty($userdata["mailadds"]) ){ echo htmlspecialchars($userdata["mailadds"], ENT_QUOTES, 'UTF-8'); }else{echo "未設定";} ?></p> <p><?php if( !empty($userdata["mailadds"]) ){ echo htmlentities($userdata["mailadds"], ENT_QUOTES, 'UTF-8'); }else{echo "未設定";} ?></p>
<hr> <hr>
<div class="p2">二段階認証</div> <div class="p2">二段階認証</div>
<p><?php if( !empty($userdata["authcode"]) ){ echo "設定済み";}else{echo "未設定";} ?></p> <p><?php if( !empty($userdata["authcode"]) ){ echo "設定済み";}else{echo "未設定";} ?></p>
@@ -632,15 +643,15 @@ require('../logout/logout.php');
<p><?php if( !empty($userdata["admin"] === "yes") ){ echo "あり";}else{echo "なし";} ?></p> <p><?php if( !empty($userdata["admin"] === "yes") ){ echo "あり";}else{echo "なし";} ?></p>
<hr> <hr>
<div class="p2">フォロー数</div> <div class="p2">フォロー数</div>
<p><?php if( $followCount > 0 ){ echo htmlspecialchars($followCount, ENT_QUOTES, 'UTF-8');}else{echo "なし";} ?></p> <p><?php if( $followCount > 0 ){ echo htmlentities($followCount, ENT_QUOTES, 'UTF-8');}else{echo "なし";} ?></p>
<div class="p2">フォロワー数</div> <div class="p2">フォロワー数</div>
<p><?php if( $followerCount > 0 ){ echo htmlspecialchars($followerCount, ENT_QUOTES, 'UTF-8');}else{echo "なし";} ?></p> <p><?php if( $followerCount > 0 ){ echo htmlentities($followerCount, ENT_QUOTES, 'UTF-8');}else{echo "なし";} ?></p>
<hr> <hr>
<div class="p2">投稿数</div> <div class="p2">投稿数</div>
<p><?php if( $upload_cnt1 > 0 ){ echo $upload_cnt1;}else{echo "なし";} ?></p> <p><?php if( $upload_cnt1 > 0 ){ echo $upload_cnt1;}else{echo "なし";} ?></p>
<hr> <hr>
<div class="p2">アカウント登録日時</div> <div class="p2">アカウント登録日時</div>
<p><?php echo htmlspecialchars($userdata["datetime"], ENT_QUOTES, 'UTF-8'); ?></p> <p><?php echo htmlentities($userdata["datetime"], ENT_QUOTES, 'UTF-8'); ?></p>
<hr> <hr>
<div class="p2">アカウント操作</div> <div class="p2">アカウント操作</div>
<div class="banzone"> <div class="banzone">
@@ -698,6 +709,7 @@ require('../logout/logout.php');
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
<script> <script>
+1
View File
@@ -16,6 +16,7 @@ if(!(empty($_SESSION['backupcode']))){
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<script src="js/jquery-min.js"></script>
<script src="js/unsupported.js"></script> <script src="js/unsupported.js"></script>
<link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="favicon/icon-192x192.png">
+1 -1
View File
@@ -2,7 +2,7 @@
$serversettings_file = "../../server/serversettings.ini"; $serversettings_file = "../../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true); $serversettings = parse_ini_file($serversettings_file, true);
if(htmlspecialchars($serversettings["serverinfo"]["server_activitypub"], ENT_QUOTES, 'UTF-8') == "true"){ if(htmlspecialchars($serversettings["serverinfo"]["server_activitypub"], ENT_QUOTES, 'UTF-8') == "true"){
header("Content-Type: application/json"); header("Content-Type: application/activity+json");
header("charset=utf-8"); header("charset=utf-8");
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Origin: *");
+127 -50
View File
@@ -5,7 +5,7 @@ $serversettings = parse_ini_file($serversettings_file, true);
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
$mojisizefile = "../server/textsize.txt"; $mojisizefile = "../server/textsize.txt";
$mojisize = (int)htmlspecialchars(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8'); $mojisize = (int)htmlentities(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8');
//投稿及び返信レート制限↓(分):デフォで60件/分まで //投稿及び返信レート制限↓(分):デフォで60件/分まで
$max_ueuse_rate_limit = 60; $max_ueuse_rate_limit = 60;
@@ -185,22 +185,51 @@ if(empty($username)){
header("Location: ../login.php"); header("Location: ../login.php");
exit; 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))) {
$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);
if(isset($_GET['ueuseid']) && isset($_GET['touser'])) { $notificationcount = $notiData['notification_count'];
if(isset($_GET['ueuseid'])) {
$ueuseid = htmlentities(str_replace('!', '', $_GET['ueuseid'])); $ueuseid = htmlentities(str_replace('!', '', $_GET['ueuseid']));
$touserid = htmlentities(str_replace('~', '', $_GET['touser'])); }
}elseif(isset($_GET['ueuseid'])){
$ueuseid = htmlentities(str_replace('!', '', $_GET['ueuseid']));
$touserid = null;
} }
//返信先id取得
if (!(empty($pdo))) {
$toUserIdQuery = $pdo->prepare("SELECT account FROM ueuse WHERE uniqid = :ueuseid ORDER BY datetime ASC LIMIT 1");
$toUserIdQuery->bindValue(':ueuseid', $ueuseid, PDO::PARAM_STR);
$toUserIdQuery->execute();
$toUserId_res = $toUserIdQuery->fetch();
if(!(empty($toUserId_res))){
$touserid = $toUserId_res["account"];
}else{
$touserid = null;
}
}
//-----------------URLから取得----------------
if(isset($_GET['text'])) {
$ueuse = htmlentities($_GET['text'], ENT_QUOTES, 'UTF-8', false);
}elseif(isset($_COOKIE['ueuse'])) {
$ueuse = htmlentities($_COOKIE['ueuse'], ENT_QUOTES, 'UTF-8', false);
}
//-----------------絵文字の取得----------------
if (!empty($pdo)) {
$custom_emoji_Query = "SELECT emojifile,emojiname,emojiinfo,emojidate FROM emoji ORDER BY emojidate DESC";
$custom_emoji_array = $pdo->query($custom_emoji_Query);
while ($row = $custom_emoji_array->fetch(PDO::FETCH_ASSOC)) {
$custom_emoji[] = $row;
}
}
//-------------------------------------------
function get_mentions_userid($postText) { function get_mentions_userid($postText) {
// @useridを検出する // @useridを検出する
$usernamePattern = '/@(\w+)/'; $usernamePattern = '/@(\w+)/';
@@ -251,8 +280,8 @@ if( !empty($_POST['btn_submit']) ) {
$error_message[] = '内容を入力してください。(INPUT_PLEASE)'; $error_message[] = '内容を入力してください。(INPUT_PLEASE)';
} else { } else {
// 文字数を確認 // 文字数を確認
if( (int)htmlspecialchars(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8') < mb_strlen($ueuse, 'UTF-8') ) { if( (int)htmlentities(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8') < mb_strlen($ueuse, 'UTF-8') ) {
$error_message[] = '内容は'.htmlspecialchars(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8').'文字以内で入力してください。(INPUT_OVER_MAX_COUNT)'; $error_message[] = '内容は'.htmlentities(file_get_contents($mojisizefile), ENT_QUOTES, 'UTF-8').'文字以内で入力してください。(INPUT_OVER_MAX_COUNT)';
} }
// 禁止url確認 // 禁止url確認
@@ -486,6 +515,8 @@ if( !empty($_POST['btn_submit']) ) {
} }
if( empty($error_message) ) { if( empty($error_message) ) {
//一時保存していたユーズ内容の削除
setcookie("ueuse", "", time() - 30);
// 書き込み日時を取得 // 書き込み日時を取得
$datetime = date("Y-m-d H:i:s"); $datetime = date("Y-m-d H:i:s");
@@ -500,22 +531,22 @@ if( !empty($_POST['btn_submit']) ) {
// SQL作成 // SQL作成
$stmt = $pdo->prepare("INSERT INTO ueuse (username, account, uniqid, rpuniqid, ueuse, photo1, photo2, photo3, photo4, video1, datetime, abi, nsfw) VALUES (:username, :account, :uniqid, :rpuniqid, :ueuse, :photo1, :photo2, :photo3, :photo4, :video1, :datetime, :abi, :nsfw)"); $stmt = $pdo->prepare("INSERT INTO ueuse (username, account, uniqid, rpuniqid, ueuse, photo1, photo2, photo3, photo4, video1, datetime, abi, nsfw) VALUES (:username, :account, :uniqid, :rpuniqid, :ueuse, :photo1, :photo2, :photo3, :photo4, :video1, :datetime, :abi, :nsfw)");
$stmt->bindParam(':username', htmlspecialchars($username, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':username', htmlentities($username, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':account', htmlspecialchars($userid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':account', htmlentities($userid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':uniqid', htmlspecialchars($uniqid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':uniqid', htmlentities($uniqid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':rpuniqid', htmlspecialchars($ueuseid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':rpuniqid', htmlentities($ueuseid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':ueuse', htmlspecialchars($ueuse, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':ueuse', htmlentities($ueuse, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':photo1', htmlspecialchars($photo1, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':photo1', htmlentities($photo1, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':photo2', htmlspecialchars($photo2, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':photo2', htmlentities($photo2, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':photo3', htmlspecialchars($photo3, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':photo3', htmlentities($photo3, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':photo4', htmlspecialchars($photo4, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':photo4', htmlentities($photo4, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':video1', htmlspecialchars($video1, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':video1', htmlentities($video1, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':datetime', htmlspecialchars($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':datetime', htmlentities($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':nsfw', htmlspecialchars($save_nsfw, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':nsfw', htmlentities($save_nsfw, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':abi', htmlspecialchars($abi, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':abi', htmlentities($abi, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
// SQLクエリの実行 // SQLクエリの実行
$res = $stmt->execute(); $res = $stmt->execute();
@@ -533,14 +564,14 @@ if( !empty($_POST['btn_submit']) ) {
// 通知用SQL作成 // 通知用SQL作成
$stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title)"); $stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title)");
$stmt->bindParam(':fromuserid', htmlspecialchars($fromuserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':fromuserid', htmlentities($fromuserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':touserid', htmlspecialchars($touserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':touserid', htmlentities($touserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':msg', htmlspecialchars($msg, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':msg', htmlentities($msg, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':url', htmlspecialchars($url, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':url', htmlentities($url, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':userchk', htmlspecialchars($userchk, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':userchk', htmlentities($userchk, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':title', htmlspecialchars($title, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':title', htmlentities($title, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':datetime', htmlspecialchars($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':datetime', htmlentities($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
// SQLクエリの実行 // SQLクエリの実行
$res = $stmt->execute(); $res = $stmt->execute();
@@ -562,20 +593,20 @@ if( !empty($_POST['btn_submit']) ) {
$datetime = date("Y-m-d H:i:s"); $datetime = date("Y-m-d H:i:s");
$msg = "" . $ueuse . ""; $msg = "" . $ueuse . "";
$title = "" . $userid . "さんにメンションされました!"; $title = "" . $userid . "さんにメンションされました!";
$url = "/!" . $uniqid . "~" . $userid . ""; $url = "/!" . $uniqid . "";
$userchk = 'none'; $userchk = 'none';
// 通知用SQL作成 // 通知用SQL作成
$stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title)"); $stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title)");
$stmt->bindParam(':fromuserid', htmlspecialchars($fromuserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':fromuserid', htmlentities($fromuserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':touserid', htmlspecialchars($touserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':touserid', htmlentities($touserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':msg', htmlspecialchars($msg, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':msg', htmlentities($msg, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':url', htmlspecialchars($url, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':url', htmlentities($url, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':userchk', htmlspecialchars($userchk, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':userchk', htmlentities($userchk, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':title', htmlspecialchars($title, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':title', htmlentities($title, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':datetime', htmlspecialchars($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':datetime', htmlentities($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
// SQLクエリの実行 // SQLクエリの実行
$res = $stmt->execute(); $res = $stmt->execute();
@@ -643,7 +674,7 @@ $pdo = null;
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<script src="../js/nsfw_event.js"></script> <script src="../js/nsfw_event.js"></script>
@@ -651,7 +682,7 @@ $pdo = null;
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>ID <?php echo htmlentities($ueuseid, ENT_QUOTES, 'UTF-8'); ?> のユーズ - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title>ID <?php echo htmlentities($ueuseid, ENT_QUOTES, 'UTF-8'); ?> のユーズ - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -678,7 +709,8 @@ $pdo = null;
<?php if(!($role ==="ice")){?> <?php if(!($role ==="ice")){?>
<form method="post" enctype="multipart/form-data"> <form method="post" enctype="multipart/form-data">
<div class="sendbox"> <div class="sendbox">
<textarea id="ueuse" placeholder="へんし~ん!!!" name="ueuse"><?php if( !empty($_SESSION['ueuse']) ){ echo htmlentities( $_SESSION['ueuse'], ENT_QUOTES, 'UTF-8'); } ?></textarea> <textarea id="ueuse" placeholder="いまどうしてる?" name="ueuse"><?php if( !empty($ueuse) ){ echo htmlentities($ueuse, ENT_QUOTES, 'UTF-8', false); } ?></textarea>
<div class="fxbox"> <div class="fxbox">
<label for="upload_images" id="images" title="画像1"> <label for="upload_images" id="images" title="画像1">
<svg><use xlink:href="../img/sysimage/image_1.svg#image"></use></svg> <svg><use xlink:href="../img/sysimage/image_1.svg#image"></use></svg>
@@ -706,9 +738,32 @@ $pdo = null;
<label for="nsfw_chk" class="nsfw_label" title="投稿をNSFW指定にする"><svg><use xlink:href="../img/sysimage/eye_1.svg#eye"></use></svg></label> <label for="nsfw_chk" class="nsfw_label" title="投稿をNSFW指定にする"><svg><use xlink:href="../img/sysimage/eye_1.svg#eye"></use></svg></label>
</div> </div>
<div class="moji_cnt" id="moji_cnt"><?php echo $mojisize; ?></div>
<input type="submit" class="ueusebtn" id='ueusebtn' name="btn_submit" value="返信する"> <label for="emoji_picker_btn" title="絵文字">
<svg><use xlink:href="../img/sysimage/menuicon/emoji.svg#emoji"></use></svg>
<input id="emoji_picker_btn" type='checkbox' value="false" style="display:none;"/>
</label>
<div class="moji_cnt" id="moji_cnt"><?php echo htmlentities($mojisize, ENT_QUOTES, 'UTF-8', false); ?></div>
<input type="submit" class="ueusebtn" id='ueusebtn' name="btn_submit" value="ユーズする">
</div>
<div class="emoji_picker" id="emoji_picker" style="display:none;">
<p>カスタム絵文字</p>
<div class="emoji_picker_flex">
<?php
if(!empty($custom_emoji)){
foreach ($custom_emoji as $value) {
echo '<div class="one_emoji">';
echo '<img src="../' . htmlentities($value["emojifile"], ENT_QUOTES, 'UTF-8', false) . '" alt=":'.htmlentities($value["emojiname"], ENT_QUOTES, 'UTF-8', false).':" title=":'.htmlentities($value["emojiname"], ENT_QUOTES, 'UTF-8', false).':">';
echo '</div>';
}
}else{
echo '<div class="tokonone" id="noueuse"><p>カスタム絵文字がありません</p></div>';
}
?>
</div>
</div> </div>
</div> </div>
</form> </form>
@@ -759,6 +814,7 @@ $pdo = null;
}); });
file_reader.readAsText(e.target.files[0]); file_reader.readAsText(e.target.files[0]);
}); });
$('#ueuse').on('input', function () { $('#ueuse').on('input', function () {
var mojisize = '<?php echo $mojisize; ?>'; var mojisize = '<?php echo $mojisize; ?>';
var mojicount = Number(mojisize) - $(this).val().length; var mojicount = Number(mojisize) - $(this).val().length;
@@ -771,7 +827,21 @@ $pdo = null;
$('#moji_cnt').html(mojicount); $('#moji_cnt').html(mojicount);
$('#ueusebtn').prop('disabled', true); $('#ueusebtn').prop('disabled', true);
} }
document.cookie = "ueuse=" + encodeURIComponent($(this).val()) + "; Secure; SameSite=Lax; path=/!<?php echo $ueuseid; ?>;";
}) })
$("#emoji_picker_btn").click(function () {
if ($("#emoji_picker_btn").prop("checked") == true) {
$("#emoji_picker").show();
} else {
$("#emoji_picker").hide();
}
});
$(".one_emoji").click(function (event) {
event.preventDefault();
var children = $(this).children("img");
var custom_emojiname = children.attr("title");
$("#ueuse").val($("#ueuse").val() + custom_emojiname);
});
</script> </script>
<?php }else{?> <?php }else{?>
<h1>ユーズ</h1> <h1>ユーズ</h1>
@@ -798,8 +868,8 @@ $pdo = null;
<div class="modal-content"> <div class="modal-content">
<p>ユーズを削除しますか?</p> <p>ユーズを削除しますか?</p>
<form class="btn_area" method="post" id="deleteForm"> <form class="btn_area" method="post" id="deleteForm">
<input type="button" id="deleteButton" class="fbtn_no" name="delete" value="削除"> <input type="button" id="deleteButton" class="fbtn" name="delete" value="削除">
<input type="button" id="cancelButton" class="fbtn" value="キャンセル"> <input type="button" id="cancelButton" class="fbtn_no" value="キャンセル">
</form> </form>
</div> </div>
</div> </div>
@@ -811,17 +881,24 @@ $pdo = null;
<form method="post" id="AbiForm"> <form method="post" id="AbiForm">
<textarea id="abitexts" placeholder="なに追記する~?" name="abi"><?php if( !empty($_SESSION['abi']) ){ echo htmlentities( $_SESSION['abi'], ENT_QUOTES, 'UTF-8'); } ?></textarea> <textarea id="abitexts" placeholder="なに追記する~?" name="abi"><?php if( !empty($_SESSION['abi']) ){ echo htmlentities( $_SESSION['abi'], ENT_QUOTES, 'UTF-8'); } ?></textarea>
<div class="btn_area"> <div class="btn_area">
<input type="submit" id="AbiAddButton" class="fbtn_no" name="abi" value="追記"> <input type="submit" id="AbiAddButton" class="fbtn" name="abi" value="追記">
<input type="button" id="AbiCancelButton" class="fbtn" value="キャンセル"> <input type="button" id="AbiCancelButton" class="fbtn_no" value="キャンセル">
</div> </div>
</form> </form>
</div> </div>
</div> </div>
<div id="Big_ImageModal" class="Image_modal">
<div class="modal-content">
<img id="Big_ImageMain" href="">
</div>
</div>
</main> </main>
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
<script> <script>
$(document).ready(function() { $(document).ready(function() {
+4
View File
@@ -67,7 +67,11 @@ if($errcode == "UNSUPPORTED_BROWSER"){
<main> <main>
<div class="server_icon_zone"> <div class="server_icon_zone">
<?php if( !empty($serversettings["serverinfo"]["server_icon"]) ){ ?>
<img src=<?php echo htmlspecialchars($serversettings["serverinfo"]["server_icon"], ENT_QUOTES, 'UTF-8');?>> <img src=<?php echo htmlspecialchars($serversettings["serverinfo"]["server_icon"], ENT_QUOTES, 'UTF-8');?>>
<?php }else{?>
<img src="/img/uwuzuicon.png">
<?php }?>
</div> </div>
<h1>お使いの環境での利用はできません</h1> <h1>お使いの環境での利用はできません</h1>
<div class="maintext"> <div class="maintext">
+1 -1
View File
@@ -2,7 +2,7 @@
$serversettings_file = "../../server/serversettings.ini"; $serversettings_file = "../../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true); $serversettings = parse_ini_file($serversettings_file, true);
if(htmlspecialchars($serversettings["serverinfo"]["server_activitypub"], ENT_QUOTES, 'UTF-8') === "true"){ if(htmlspecialchars($serversettings["serverinfo"]["server_activitypub"], ENT_QUOTES, 'UTF-8') === "true"){
header("Content-Type: application/json"); header("Content-Type: application/activity+json");
header("charset=utf-8"); header("charset=utf-8");
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Origin: *");
+75 -172
View File
@@ -16,6 +16,9 @@ function createUniqId(){
} }
require('../db.php'); require('../db.php');
//関数呼び出し
//- 文字装飾・URL変換など
require('../function/function.php');
// 変数の初期化 // 変数の初期化
$datetime = array(); $datetime = array();
@@ -199,124 +202,6 @@ if( !empty($pdo) ) {
$uwuzuid = htmlentities(str_replace('@'.$domain, '', $uwuzuid2)); $uwuzuid = htmlentities(str_replace('@'.$domain, '', $uwuzuid2));
// プロフィールの絵文字対応
function replaceProfileEmojiImages($postText) {
$postText = str_replace('&#039;', '\'', $postText);
// プロフィール名で絵文字名(:emoji:)を検出して画像に置き換える
$emojiPattern = '/:(\w+):/';
$postTextWithImages = preg_replace_callback($emojiPattern, function($matches) {
$emojiName = $matches[1];
//絵文字path取得
$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,
));
$emoji_Query = $dbh->prepare("SELECT emojifile, emojiname FROM emoji WHERE emojiname = :emojiname");
$emoji_Query->bindValue(':emojiname', $emojiName);
$emoji_Query->execute();
$emoji_row = $emoji_Query->fetch();
if(empty($emoji_row["emojifile"])){
$emoji_path = "img/sysimage/errorimage/emoji_404.png";
}else{
$emoji_path = $emoji_row["emojifile"];
}
return "<img src='../".$emoji_path."' alt=':$emojiName:' title=':$emojiName:'>";
}, $postText);
return $postTextWithImages;
}
// ユーズ内の絵文字を画像に置き換える
function replaceEmojisWithImages($postText) {
$postText = str_replace('&#039;', '\'', $postText);
// ユーズ内で絵文字名(:emoji:)を検出して画像に置き換える
$emojiPattern = '/:(\w+):/';
$postTextWithImages = preg_replace_callback($emojiPattern, function($matches) {
$emojiName = $matches[1];
//絵文字path取得
$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,
));
$emoji_Query = $dbh->prepare("SELECT emojifile, emojiname FROM emoji WHERE emojiname = :emojiname");
$emoji_Query->bindValue(':emojiname', $emojiName);
$emoji_Query->execute();
$emoji_row = $emoji_Query->fetch();
if(empty($emoji_row["emojifile"])){
$emoji_path = "img/sysimage/errorimage/emoji_404.png";
}else{
$emoji_path = $emoji_row["emojifile"];
}
return "<img src='../".$emoji_path."' alt=':$emojiName:' title=':$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 "<a class = 'mta' href='/@".htmlentities($mentionsuserData["userid"])."'>@".replaceProfileEmojiImages(htmlentities($mentionsuserData["username"]))."</a>";
}
}, $postTextWithImages);
$hashtagsPattern = '/#([\p{Han}\p{Hiragana}\p{Katakana}A-Za-z0-9ー_]+)/u';
$postTextWithHashtags = preg_replace_callback($hashtagsPattern, function($matches) {
$hashtags = $matches[1];
return "<a class='hashtags' href='/search?q=" . urlencode('#') . $hashtags . "'>" . '#' . $hashtags . "</a>";
}, $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);
if (!isset($parsedUrl['path'])) {
$parsedUrl['path'] = '';
}
if (!isset($parsedUrl['query'])) {
$parsedUrl['query'] = '';
}
$nochk_domain = $parsedUrl['host'].$parsedUrl['path'].$parsedUrl['query'];
if(strlen($nochk_domain) > 47){
$domain = mb_substr($nochk_domain, 0, 48, "UTF-8")."...";
}else{
$domain = $nochk_domain;
}
// 不要な文字を削除してaタグを生成
$urlWithoutSpaces = preg_replace('/\s+/', '', $url);
$link = "<a href='$urlWithoutSpaces' target='_blank' title='$urlWithoutSpaces'>$domain</a>";
// URLをドメインのみを表示するaタグで置き換え
$postText = preg_replace('/' . preg_quote($url, '/') . '/', $link, $postText);
}
return $postText;
}
$userQuery = $dbh->prepare("SELECT username, userid, profile, role, follower, blocklist FROM account WHERE userid = :userid"); $userQuery = $dbh->prepare("SELECT username, userid, profile, role, follower, blocklist FROM account WHERE userid = :userid");
$userQuery->bindValue(':userid', $uwuzuid); $userQuery->bindValue(':userid', $uwuzuid);
$userQuery->execute(); $userQuery->execute();
@@ -339,7 +224,7 @@ if( !empty($pdo) ) {
$roleDataArray = array(); $roleDataArray = array();
foreach ($roles as $roleId) { foreach ($roles as $roleId) {
$rerole = $dbh->prepare("SELECT rolename, roleauth, rolecolor FROM role WHERE roleidname = :role"); $rerole = $dbh->prepare("SELECT rolename, roleauth, rolecolor, roleeffect FROM role WHERE roleidname = :role");
$rerole->bindValue(':role', $roleId); $rerole->bindValue(':role', $roleId);
$rerole->execute(); $rerole->execute();
$roleDataArray[$roleId] = $rerole->fetch(); $roleDataArray[$roleId] = $rerole->fetch();
@@ -466,14 +351,14 @@ if (!empty($_POST['follow'])) {
// 通知用SQL作成 // 通知用SQL作成
$stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title)"); $stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title)");
$stmt->bindParam(':fromuserid', htmlspecialchars($fromuserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':fromuserid', htmlentities($fromuserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':touserid', htmlspecialchars($touserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':touserid', htmlentities($touserid, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':msg', htmlspecialchars($msg, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':msg', htmlentities($msg, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':url', htmlspecialchars($url, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':url', htmlentities($url, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':userchk', htmlspecialchars($userchk, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':userchk', htmlentities($userchk, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':title', htmlspecialchars($title, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':title', htmlentities($title, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
$stmt->bindParam(':datetime', htmlspecialchars($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR); $stmt->bindParam(':datetime', htmlentities($datetime, ENT_QUOTES, 'UTF-8', false), PDO::PARAM_STR);
// SQLクエリの実行 // SQLクエリの実行
$res = $stmt->execute(); $res = $stmt->execute();
@@ -615,7 +500,7 @@ $pdo = null;
<html lang="ja"> <html lang="ja">
<head> <head>
<script src="//cdnjs.cloudflare.com/ajax/libs/push.js/1.0.12/push.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/push.js/1.0.12/push.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<script src="../js/nsfw_event.js"></script> <script src="../js/nsfw_event.js"></script>
@@ -625,7 +510,7 @@ $pdo = null;
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title><?php echo htmlspecialchars($userData['username'], ENT_QUOTES, 'UTF-8', false); ?> さんのプロフィール - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title><?php echo htmlentities($userData['username'], ENT_QUOTES, 'UTF-8', false); ?> さんのプロフィール - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -685,28 +570,39 @@ $pdo = null;
<!--ここまで!---> <!--ここまで!--->
<?php }else{?> <?php }else{?>
<div class="hed"> <div class="hed">
<img src="<?php echo htmlspecialchars('../'.$userdata['headname'], ENT_QUOTES, 'UTF-8', false); ?>"> <img src="<?php echo htmlentities('../'.$userdata['headname'], ENT_QUOTES, 'UTF-8', false); ?>">
</div> </div>
<div class="icon"> <div class="icon">
<img src="<?php echo htmlspecialchars('../'.$userdata['iconname'], ENT_QUOTES, 'UTF-8', false); ?>"> <img src="<?php echo htmlentities('../'.$userdata['iconname'], ENT_QUOTES, 'UTF-8', false); ?>">
<h2><?php echo replaceProfileEmojiImages(htmlspecialchars($userData['username'], ENT_QUOTES, 'UTF-8', false)); ?></h2> <h2><?php echo replaceProfileEmojiImages(htmlentities($userData['username'], ENT_QUOTES, 'UTF-8', false)); ?></h2>
<p>@<?php echo htmlspecialchars($userData['userid'], ENT_QUOTES, 'UTF-8', false); ?><!--<span>@<?php /*echo htmlentities($domain, ENT_QUOTES, 'UTF-8'); */?></span>--></p> <p>@<?php echo htmlentities($userData['userid'], ENT_QUOTES, 'UTF-8', false); ?><!--<span>@<?php /*echo htmlentities($domain, ENT_QUOTES, 'UTF-8'); */?></span>--></p>
</div> </div>
<div class="roleboxes"> <div class="roleboxes">
<?php foreach ($roles as $roleId): ?> <?php foreach ($roles as $roleId): ?>
<?php $roleData = $roleDataArray[$roleId]; ?> <?php $roleData = $roleDataArray[$roleId]; ?>
<div class="rolebox" style="border: 1px solid <?php echo '#' . $roleData["rolecolor"]; ?>;"> <?php
if(htmlentities($roleData["roleeffect"], ENT_QUOTES, 'UTF-8', false) == '' || htmlentities($roleData["roleeffect"], ENT_QUOTES, 'UTF-8', false) == 'none'){
$role_view_effect = "";
}elseif(htmlentities($roleData["roleeffect"], ENT_QUOTES, 'UTF-8', false) == 'shine'){
$role_view_effect = "shine";
}elseif(htmlentities($roleData["roleeffect"], ENT_QUOTES, 'UTF-8', false) == 'rainbow'){
$role_view_effect = "rainbow";
}else{
$role_view_effect = "";
}
?>
<div class="rolebox <?php echo htmlentities($role_view_effect, ENT_QUOTES, 'UTF-8', false); ?>" style="border: 1px solid <?php echo '#' . htmlentities($roleData["rolecolor"], ENT_QUOTES, 'UTF-8', false); ?>;">
<p style="color: <?php echo '#' . $roleData["rolecolor"]; ?>;"> <p style="color: <?php echo '#' . $roleData["rolecolor"]; ?>;">
<?php if (!empty($roleData["rolename"])) { echo htmlspecialchars($roleData["rolename"], ENT_QUOTES, 'UTF-8', false); }else{ echo("ロールが正常に設定されていません。");} ?> <?php if (!empty($roleData["rolename"])) { echo htmlentities($roleData["rolename"], ENT_QUOTES, 'UTF-8', false); }else{ echo("ロールが正常に設定されていません。");} ?>
</p> </p>
</div> </div>
<?php endforeach; ?> <?php endforeach; ?>
</div> </div>
<?php if (false === strpos($myblocklist, ','.htmlspecialchars($userData['userid'], ENT_QUOTES, 'UTF-8', false))) {?> <?php if (false === strpos($myblocklist, ','.htmlentities($userData['userid'], ENT_QUOTES, 'UTF-8', false))) {?>
<div class="profile"> <div class="profile">
<p><?php echo replaceEmojisWithImages(replaceURLsWithLinks(nl2br(htmlspecialchars($profileText, ENT_QUOTES, 'UTF-8', false)))); ?></p> <p><?php echo replaceEmojisWithImages(replaceURLsWithLinks(nl2br(htmlentities($profileText, ENT_QUOTES, 'UTF-8', false)))); ?></p>
</div> </div>
<?php }else{?> <?php }else{?>
<div class="profile"> <div class="profile">
@@ -718,7 +614,7 @@ $pdo = null;
<div class="fzone"> <div class="fzone">
<div class="time"> <div class="time">
<p><?php echo date('Y年m月d日 H:i:s', strtotime($userdata['datetime'])); ?>からuwuzuを利用しています。</p> <p><?php echo date('Y年m月d日 H:i:s', strtotime($userdata['datetime'])); ?>からuwuzuを利用しています。</p>
<p><?php if(htmlspecialchars($userdata['role'], ENT_QUOTES, 'UTF-8', false) === "ice"){echo"このアカウントは凍結されています。";}; ?></p> <p><?php if(htmlentities($userdata['role'], ENT_QUOTES, 'UTF-8', false) === "ice"){echo"このアカウントは凍結されています。";}; ?></p>
</div> </div>
<?php if(!empty($follow_yes)){?> <?php if(!empty($follow_yes)){?>
@@ -727,8 +623,8 @@ $pdo = null;
</div> </div>
<?php }?> <?php }?>
<?php if ($userid !== htmlspecialchars($userData['userid'], ENT_QUOTES, 'UTF-8', false)) {?> <?php if ($userid !== htmlentities($userData['userid'], ENT_QUOTES, 'UTF-8', false)) {?>
<?php if (false !== strpos($myblocklist, ','.htmlspecialchars($userData['userid'], ENT_QUOTES, 'UTF-8', false))) {?> <?php if (false !== strpos($myblocklist, ','.htmlentities($userData['userid'], ENT_QUOTES, 'UTF-8', false))) {?>
<div class="follow"> <div class="follow">
<a id="un_block" href="javascript:void(0);" class="report" title="ブロック解除"><svg><use xlink:href="../img/sysimage/unblock_1.svg#block"></use></svg></a> <a id="un_block" href="javascript:void(0);" class="report" title="ブロック解除"><svg><use xlink:href="../img/sysimage/unblock_1.svg#block"></use></svg></a>
</div> </div>
@@ -740,7 +636,7 @@ $pdo = null;
<?php }?> <?php }?>
<div class="follow"> <div class="follow">
<a href="/user/report?q=<?php echo htmlspecialchars($userData['userid'], ENT_QUOTES, 'UTF-8', false); ?>" class="report" title="通報"><svg><use xlink:href="../img/sysimage/report_1.svg#report"></use></svg></a> <a href="/user/report?q=<?php echo htmlentities($userData['userid'], ENT_QUOTES, 'UTF-8', false); ?>" class="report" title="通報"><svg><use xlink:href="../img/sysimage/report_1.svg#report"></use></svg></a>
</div> </div>
<?php if ($userData['userid'] == $userid) { ?> <?php if ($userData['userid'] == $userid) { ?>
<div class="follow"> <div class="follow">
@@ -748,7 +644,7 @@ $pdo = null;
</div> </div>
<?php } else { ?> <?php } else { ?>
<?php if (false === strpos($myblocklist, ','.htmlspecialchars($userData['userid'], ENT_QUOTES, 'UTF-8', false))) {?> <?php if (false === strpos($myblocklist, ','.htmlentities($userData['userid'], ENT_QUOTES, 'UTF-8', false))) {?>
<form method="post"> <form method="post">
<div class="follow"> <div class="follow">
<?php <?php
@@ -773,17 +669,17 @@ $pdo = null;
<div class="sp_time_area"> <div class="sp_time_area">
<div class="time"> <div class="time">
<p><?php echo date('Y年m月d日 H:i:s', strtotime($userdata['datetime'])); ?>からuwuzuを利用しています。</p> <p><?php echo date('Y年m月d日 H:i:s', strtotime($userdata['datetime'])); ?>からuwuzuを利用しています。</p>
<p><?php if(htmlspecialchars($userdata['role'], ENT_QUOTES, 'UTF-8', false) === "ice"){echo"このアカウントは凍結されています。";}; ?></p> <p><?php if(htmlentities($userdata['role'], ENT_QUOTES, 'UTF-8', false) === "ice"){echo"このアカウントは凍結されています。";}; ?></p>
</div> </div>
</div> </div>
<?php if(!($role === "ice")){?> <?php if(!($role === "ice")){?>
<div id="myModal" class="modal"> <div id="myModal" class="modal">
<div class="modal-content"> <div class="modal-content">
<p><?php echo replaceProfileEmojiImages(htmlspecialchars($userData['username'], ENT_QUOTES, 'UTF-8', false)); ?>さんをフォロー解除しますか?</p> <p><?php echo replaceProfileEmojiImages(htmlentities($userData['username'], ENT_QUOTES, 'UTF-8', false)); ?>さんをフォロー解除しますか?</p>
<form class="btn_area" method="post"> <form class="btn_area" method="post">
<input type="submit" id="openModalButton" class="fbtn_no" name="unfollow" value="フォロー解除"> <input type="submit" id="openModalButton" class="fbtn" name="unfollow" value="フォロー解除">
<input type="button" id="closeModal" class="fbtn" value="キャンセル"> <input type="button" id="closeModal" class="fbtn_no" value="キャンセル">
</form> </form>
</div> </div>
</div> </div>
@@ -811,7 +707,7 @@ $pdo = null;
</div> </div>
<hr> <hr>
<?php if (false === strpos($myblocklist, ','.htmlspecialchars($userData['userid'], ENT_QUOTES, 'UTF-8', false))) {?> <?php if (false === strpos($myblocklist, ','.htmlentities($userData['userid'], ENT_QUOTES, 'UTF-8', false))) {?>
<section class="inner"> <section class="inner">
<div id="postContainer"> <div id="postContainer">
@@ -822,7 +718,7 @@ $pdo = null;
🤔 🤔
</div> </div>
<?php }else{?> <?php }else{?>
<div class="tokonone" id="noueuse"><p><?php echo htmlspecialchars($userData['username'], ENT_QUOTES, 'UTF-8', false); ?>さんをブロックしているため投稿の閲覧は出来ません。</p></div> <div class="tokonone" id="noueuse"><p><?php echo htmlentities($userData['username'], ENT_QUOTES, 'UTF-8', false); ?>さんをブロックしているため投稿の閲覧は出来ません。</p></div>
<?php }?> <?php }?>
<div id="error" class="error" style="display: none;"> <div id="error" class="error" style="display: none;">
@@ -834,8 +730,8 @@ $pdo = null;
<div class="modal-content"> <div class="modal-content">
<p>ユーズを削除しますか?</p> <p>ユーズを削除しますか?</p>
<form class="btn_area" method="post" id="deleteForm"> <form class="btn_area" method="post" id="deleteForm">
<input type="button" id="deleteButton" class="fbtn_no" name="delete" value="削除"> <input type="button" id="deleteButton" class="fbtn" name="delete" value="削除">
<input type="button" id="cancelButton" class="fbtn" value="キャンセル"> <input type="button" id="cancelButton" class="fbtn_no" value="キャンセル">
</form> </form>
</div> </div>
</div> </div>
@@ -845,33 +741,39 @@ $pdo = null;
<p>ユーズに追記しますか?</p> <p>ユーズに追記しますか?</p>
<p>※追記は削除出来ません。</p> <p>※追記は削除出来ません。</p>
<form method="post" id="AbiForm"> <form method="post" id="AbiForm">
<textarea id="abitexts" placeholder="なに追記する~?" name="abi"><?php if( !empty($_SESSION['abi']) ){ echo htmlspecialchars( $_SESSION['abi'], ENT_QUOTES, 'UTF-8', false); } ?></textarea> <textarea id="abitexts" placeholder="なに追記する~?" name="abi"><?php if( !empty($_SESSION['abi']) ){ echo htmlentities( $_SESSION['abi'], ENT_QUOTES, 'UTF-8', false); } ?></textarea>
<div class="btn_area"> <div class="btn_area">
<input type="submit" id="AbiAddButton" class="fbtn_no" name="abi" value="追記"> <input type="submit" id="AbiAddButton" class="fbtn" name="abi" value="追記">
<input type="button" id="AbiCancelButton" class="fbtn" value="キャンセル"> <input type="button" id="AbiCancelButton" class="fbtn_no" value="キャンセル">
</div> </div>
</form> </form>
</div> </div>
</div> </div>
<div id="Big_ImageModal" class="Image_modal">
<div class="modal-content">
<img id="Big_ImageMain" href="">
</div>
</div>
<div id="account_BlockModal" class="modal"> <div id="account_BlockModal" class="modal">
<div class="modal-content"> <div class="modal-content">
<h1><?php echo replaceProfileEmojiImages(htmlspecialchars($userdata['username'], ENT_QUOTES, 'UTF-8', false)); ?>さんをブロックしますか?</h1> <h1><?php echo replaceProfileEmojiImages(htmlentities($userdata['username'], ENT_QUOTES, 'UTF-8', false)); ?>さんをブロックしますか?</h1>
<p><?php echo replaceProfileEmojiImages(htmlspecialchars($userdata['username'], ENT_QUOTES, 'UTF-8', false)); ?>さんのアカウントをブロックしますか?<br>ブロックするとフォローが解除され、検索以外のLTL、FTL等で<?php echo htmlspecialchars($userdata['username'], ENT_QUOTES, 'UTF-8', false); ?>さんの投稿が表示されなくなります。<br>また、相手からこのアカウントを閲覧することもできなくなります。<br>※ブロックしたことは相手には通知されません。<br><br>ブロックを解除するときはこのアカウントのユーザーページ(このページ)から解除を行ってください。</p> <p><?php echo replaceProfileEmojiImages(htmlentities($userdata['username'], ENT_QUOTES, 'UTF-8', false)); ?>さんのアカウントをブロックしますか?<br>ブロックするとフォローが解除され、検索以外のLTL、FTL等で<?php echo htmlentities($userdata['username'], ENT_QUOTES, 'UTF-8', false); ?>さんの投稿が表示されなくなります。<br>また、相手からこのアカウントを閲覧することもできなくなります。<br>※ブロックしたことは相手には通知されません。<br><br>ブロックを解除するときはこのアカウントのユーザーページ(このページ)から解除を行ってください。</p>
<form class="btn_area" method="post"> <form class="btn_area" method="post">
<input type="submit" id="deleteButton2" class="fbtn_no" name="send_block_submit" value="ブロック"> <input type="submit" id="deleteButton2" class="fbtn" name="send_block_submit" value="ブロック">
<input type="button" id="cancelButton2" class="fbtn" value="キャンセル"> <input type="button" id="cancelButton2" class="fbtn_no" value="キャンセル">
</form> </form>
</div> </div>
</div> </div>
<div id="account_un_BlockModal" class="modal"> <div id="account_un_BlockModal" class="modal">
<div class="modal-content"> <div class="modal-content">
<h1><?php echo replaceProfileEmojiImages(htmlspecialchars($userdata['username'], ENT_QUOTES, 'UTF-8', false)); ?>さんのブロックを解除しますか?</h1> <h1><?php echo replaceProfileEmojiImages(htmlentities($userdata['username'], ENT_QUOTES, 'UTF-8', false)); ?>さんのブロックを解除しますか?</h1>
<p><?php echo replaceProfileEmojiImages(htmlspecialchars($userdata['username'], ENT_QUOTES, 'UTF-8', false)); ?>さんのアカウントをブロック解除しますか?<br>ブロック解除すると<?php echo htmlspecialchars($userdata['username'], ENT_QUOTES, 'UTF-8', false); ?>さんの投稿の閲覧が可能になりフォローすることもできるようになります。</p> <p><?php echo replaceProfileEmojiImages(htmlentities($userdata['username'], ENT_QUOTES, 'UTF-8', false)); ?>さんのアカウントをブロック解除しますか?<br>ブロック解除すると<?php echo htmlentities($userdata['username'], ENT_QUOTES, 'UTF-8', false); ?>さんの投稿の閲覧が可能になりフォローすることもできるようになります。</p>
<form class="btn_area" method="post"> <form class="btn_area" method="post">
<input type="submit" id="deleteButton3" class="fbtn_no" name="send_un_block_submit" value="ブロック解除"> <input type="submit" id="deleteButton3" class="fbtn" name="send_un_block_submit" value="ブロック解除">
<input type="button" id="cancelButton3" class="fbtn" value="キャンセル"> <input type="button" id="cancelButton3" class="fbtn_no" value="キャンセル">
</form> </form>
</div> </div>
</div> </div>
@@ -879,22 +781,22 @@ $pdo = null;
<div id="FollowerUserModal" class="modal"> <div id="FollowerUserModal" class="modal">
<div class="modal-content"> <div class="modal-content">
<p><?php echo replaceProfileEmojiImages(htmlspecialchars($userData["username"], ENT_QUOTES, 'UTF-8', false));?>さんをフォローしているユーザー</p> <p><?php echo replaceProfileEmojiImages(htmlentities($userData["username"], ENT_QUOTES, 'UTF-8', false));?>さんをフォローしているユーザー</p>
<?php <?php
if(!empty($follower_userdata)){ if(!empty($follower_userdata)){
foreach ($follower_userdata as $value) { foreach ($follower_userdata as $value) {
if (false === strpos($myblocklist, ',' . htmlspecialchars($value['userid'], ENT_QUOTES, 'UTF-8', false))) { if (false === strpos($myblocklist, ',' . htmlentities($value['userid'], ENT_QUOTES, 'UTF-8', false))) {
echo "<div class='action_userlist'>"; echo "<div class='action_userlist'>";
echo "<a href='/@".htmlspecialchars($value['userid'], ENT_QUOTES, 'UTF-8', false)."'><img src=".htmlspecialchars($value['iconname'], ENT_QUOTES, 'UTF-8', false)."></a>"; echo "<a href='/@".htmlentities($value['userid'], ENT_QUOTES, 'UTF-8', false)."'><img src=".htmlentities($value['iconname'], ENT_QUOTES, 'UTF-8', false)."></a>";
echo "<div class='userabout'>"; echo "<div class='userabout'>";
echo "<div class='username'><a href='/@".htmlspecialchars($value['userid'], ENT_QUOTES, 'UTF-8', false)."'>".replaceEmojisWithImages(htmlspecialchars($value['username'], ENT_QUOTES, 'UTF-8', false))."</a></div>"; echo "<div class='username'><a href='/@".htmlentities($value['userid'], ENT_QUOTES, 'UTF-8', false)."'>".replaceEmojisWithImages(htmlentities($value['username'], ENT_QUOTES, 'UTF-8', false))."</a></div>";
echo "<div class='userid'><a href='/@".htmlspecialchars($value['userid'], ENT_QUOTES, 'UTF-8', false)."'>@".htmlspecialchars($value['userid'], ENT_QUOTES, 'UTF-8', false)."</a></div>"; echo "<div class='userid'><a href='/@".htmlentities($value['userid'], ENT_QUOTES, 'UTF-8', false)."'>@".htmlentities($value['userid'], ENT_QUOTES, 'UTF-8', false)."</a></div>";
echo "</div>"; echo "</div>";
echo "</div>"; echo "</div>";
} }
} }
}else{ }else{
echo "<p>".replaceProfileEmojiImages(htmlspecialchars($userData["username"], ENT_QUOTES, 'UTF-8', false))."さんは誰にもフォローされていません。</p>"; echo "<p>".replaceProfileEmojiImages(htmlentities($userData["username"], ENT_QUOTES, 'UTF-8', false))."さんは誰にもフォローされていません。</p>";
} }
?> ?>
<div class="btn_area"> <div class="btn_area">
@@ -905,22 +807,22 @@ $pdo = null;
<div id="FollowUserModal" class="modal"> <div id="FollowUserModal" class="modal">
<div class="modal-content"> <div class="modal-content">
<p><?php echo replaceProfileEmojiImages(htmlspecialchars($userData["username"], ENT_QUOTES, 'UTF-8', false));?>さんがフォローしているユーザー</p> <p><?php echo replaceProfileEmojiImages(htmlentities($userData["username"], ENT_QUOTES, 'UTF-8', false));?>さんがフォローしているユーザー</p>
<?php <?php
if(!empty($follow_userdata)){ if(!empty($follow_userdata)){
foreach ($follow_userdata as $value) { foreach ($follow_userdata as $value) {
if (false === strpos($myblocklist, ',' . htmlspecialchars($value['userid'], ENT_QUOTES, 'UTF-8', false))) { if (false === strpos($myblocklist, ',' . htmlentities($value['userid'], ENT_QUOTES, 'UTF-8', false))) {
echo "<div class='action_userlist'>"; echo "<div class='action_userlist'>";
echo "<a href='/@".htmlspecialchars($value['userid'], ENT_QUOTES, 'UTF-8', false)."'><img src=".htmlspecialchars($value['iconname'], ENT_QUOTES, 'UTF-8', false)."></a>"; echo "<a href='/@".htmlentities($value['userid'], ENT_QUOTES, 'UTF-8', false)."'><img src=".htmlentities($value['iconname'], ENT_QUOTES, 'UTF-8', false)."></a>";
echo "<div class='userabout'>"; echo "<div class='userabout'>";
echo "<div class='username'><a href='/@".htmlspecialchars($value['userid'], ENT_QUOTES, 'UTF-8', false)."'>".replaceEmojisWithImages(htmlspecialchars($value['username'], ENT_QUOTES, 'UTF-8', false))."</a></div>"; echo "<div class='username'><a href='/@".htmlentities($value['userid'], ENT_QUOTES, 'UTF-8', false)."'>".replaceEmojisWithImages(htmlentities($value['username'], ENT_QUOTES, 'UTF-8', false))."</a></div>";
echo "<div class='userid'><a href='/@".htmlspecialchars($value['userid'], ENT_QUOTES, 'UTF-8', false)."'>@".htmlspecialchars($value['userid'], ENT_QUOTES, 'UTF-8', false)."</a></div>"; echo "<div class='userid'><a href='/@".htmlentities($value['userid'], ENT_QUOTES, 'UTF-8', false)."'>@".htmlentities($value['userid'], ENT_QUOTES, 'UTF-8', false)."</a></div>";
echo "</div>"; echo "</div>";
echo "</div>"; echo "</div>";
} }
} }
}else{ }else{
echo "<p>".replaceProfileEmojiImages(htmlspecialchars($userData["username"], ENT_QUOTES, 'UTF-8', false))."さんは誰もフォローしていません。</p>"; echo "<p>".replaceProfileEmojiImages(htmlentities($userData["username"], ENT_QUOTES, 'UTF-8', false))."さんは誰もフォローしていません。</p>";
} }
?> ?>
<div class="btn_area"> <div class="btn_area">
@@ -935,6 +837,7 @@ $pdo = null;
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
+1 -1
View File
@@ -2,7 +2,7 @@
$serversettings_file = "../../server/serversettings.ini"; $serversettings_file = "../../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true); $serversettings = parse_ini_file($serversettings_file, true);
if(htmlspecialchars($serversettings["serverinfo"]["server_activitypub"], ENT_QUOTES, 'UTF-8') === "true"){ if(htmlspecialchars($serversettings["serverinfo"]["server_activitypub"], ENT_QUOTES, 'UTF-8') === "true"){
header("Content-Type: application/json"); header("Content-Type: application/activity+json");
header("charset=utf-8"); header("charset=utf-8");
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Origin: *");
+3 -2
View File
@@ -424,7 +424,7 @@ $pdo = null;
<!DOCTYPE html> <!DOCTYPE html>
<html lang="ja"> <html lang="ja">
<head> <head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
@@ -432,7 +432,7 @@ $pdo = null;
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title><?php echo htmlentities($userData['username'], ENT_QUOTES, 'UTF-8'); ?> さんを通報 - <?php echo htmlspecialchars($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title> <title><?php echo htmlentities($userData['username'], ENT_QUOTES, 'UTF-8'); ?> さんを通報 - <?php echo htmlentities($serversettings["serverinfo"]["server_name"], ENT_QUOTES, 'UTF-8');?></title>
</head> </head>
@@ -487,6 +487,7 @@ $pdo = null;
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
+2
View File
@@ -177,6 +177,7 @@ require('../logout/logout.php');
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<script src="../js/jquery-min.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
@@ -212,6 +213,7 @@ require('../logout/logout.php');
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body> </body>
</html> </html>
+6 -4
View File
@@ -2,8 +2,8 @@
-- version 5.2.1 -- version 5.2.1
-- https://www.phpmyadmin.net/ -- https://www.phpmyadmin.net/
-- --
-- ホスト: XXX.XXX.XXX.XXX -- ホスト: ひ.み.つ
-- 生成日時: 2024-02-24 19:11:00 -- 生成日時: 2024-03-26 14:43:05
-- サーバのバージョン: 10.4.32-MariaDB -- サーバのバージョン: 10.4.32-MariaDB
-- PHP のバージョン: 8.2.12 -- PHP のバージョン: 8.2.12
@@ -18,7 +18,7 @@ SET time_zone = "+00:00";
/*!40101 SET NAMES utf8mb4 */; /*!40101 SET NAMES utf8mb4 */;
-- --
-- データベース: `uwuzu_db` -- データベース: `account`
-- --
-- -------------------------------------------------------- -- --------------------------------------------------------
@@ -103,6 +103,7 @@ CREATE TABLE `invitation` (
CREATE TABLE `notice` ( CREATE TABLE `notice` (
`sysid` int(11) NOT NULL, `sysid` int(11) NOT NULL,
`uniqid` varchar(256) NOT NULL,
`title` varchar(1024) NOT NULL, `title` varchar(1024) NOT NULL,
`note` mediumtext NOT NULL, `note` mediumtext NOT NULL,
`account` varchar(256) NOT NULL, `account` varchar(256) NOT NULL,
@@ -153,7 +154,8 @@ CREATE TABLE `role` (
`rolename` varchar(512) NOT NULL, `rolename` varchar(512) NOT NULL,
`roleauth` varchar(256) NOT NULL, `roleauth` varchar(256) NOT NULL,
`rolecolor` varchar(32) NOT NULL, `rolecolor` varchar(32) NOT NULL,
`roleidname` varchar(512) NOT NULL `roleidname` varchar(512) NOT NULL,
`roleeffect` varchar(256) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- -------------------------------------------------------- -- --------------------------------------------------------
+5
View File
@@ -22,6 +22,7 @@ post_not_found - ユーズが存在しない時に表示されます。
ueuseid_not_found - ユーズが存在しない時に表示されます。 ueuseid_not_found - ユーズが存在しない時に表示されます。
critical_error_userdata_not_found - ユーザーデータがない時に表示されます。 critical_error_userdata_not_found - ユーザーデータがない時に表示されます。
userid_not_found - ユーザーデータがない時に表示されます。 userid_not_found - ユーザーデータがない時に表示されます。
API_has_been_deleted - APIが削除または統合、変更された場合に表示されます。
----------(UWUZU ERR CODE)---------- ----------(UWUZU ERR CODE)----------
FILE_DEKASUGUI_PHP_INI_KAKUNIN - php.iniで設定されているファイルサイズ上限を上回っている時に表示されます。 FILE_DEKASUGUI_PHP_INI_KAKUNIN - php.iniで設定されているファイルサイズ上限を上回っている時に表示されます。
@@ -113,6 +114,10 @@ OVER_RATE_LIMIT - 投稿回数のレート制限を超過している場合に
BOOKMARK_NOT_DELETED - ブックマークの削除に失敗した場合に表示されます。 BOOKMARK_NOT_DELETED - ブックマークの削除に失敗した場合に表示されます。
JS_BLOCKED_ERROR - JavaScriptがブラウザにより無効化されている場合に表示されます。
NOTICE_DELETE_DAME - サーバーからのお知らせの削除に失敗した場合に表示されます。
ERROR - 想定されていないエラーが発生した際に表示されます。 ERROR - 想定されていないエラーが発生した際に表示されます。
----------(OTHERS ERR CODE)---------- ----------(OTHERS ERR CODE)----------