diff --git a/actor/index.php b/actor/index.php
index 0d47419..5a633f1 100644
--- a/actor/index.php
+++ b/actor/index.php
@@ -24,7 +24,11 @@ if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){
$error_message[] = $e->getMessage();
}
- $user = safetext($_GET['actor']);
+ if(isset($_GET['actor'])){
+ $user = safetext($_GET['actor']);
+ }else{
+ $user = null;
+ }
$userid = str_replace('@','', str_replace('@'.$domain.'', '', $user));
if( !empty($pdo) ) {
diff --git a/admin/setup_db_php.php b/admin/setup_db_php.php
index 372e4ea..28aaebc 100644
--- a/admin/setup_db_php.php
+++ b/admin/setup_db_php.php
@@ -105,20 +105,22 @@ if(!(empty($_POST['btn_submit']))){
}
if(empty($error_message)){
- $DB_Settings = "
-
- ";
+define( 'RATE_LM', '60'); // レートリミット(ユーズ/分)
+define( 'STOP_LA', '4'); // 自動停止ロードアベレージ上限
+
+// タイムゾーン設定
+date_default_timezone_set('Asia/Tokyo');
+?>
+";
//設定上書き
$file = fopen('../db.php', 'w');
diff --git a/api/favorite/change.php b/api/favorite/change.php
index 5f07294..db3fd45 100644
--- a/api/favorite/change.php
+++ b/api/favorite/change.php
@@ -6,8 +6,6 @@ require('../../db.php');
//- Base64_mime
require('../../function/function.php');
blockedIP($_SERVER['REMOTE_ADDR']);
-//投稿及び返信レート制限↓(分):デフォで60件/分まで
-$max_ueuse_rate_limit = 60;
$mojisizefile = "../../server/textsize.txt";
diff --git a/api/favorite/get.php b/api/favorite/get.php
index b890478..b118792 100644
--- a/api/favorite/get.php
+++ b/api/favorite/get.php
@@ -6,8 +6,6 @@ require('../../db.php');
//- Base64_mime
require('../../function/function.php');
blockedIP($_SERVER['REMOTE_ADDR']);
-//投稿及び返信レート制限↓(分):デフォで60件/分まで
-$max_ueuse_rate_limit = 60;
$mojisizefile = "../../server/textsize.txt";
diff --git a/api/sitemap-api.php b/api/sitemap-api.php
new file mode 100644
index 0000000..a8881d8
--- /dev/null
+++ b/api/sitemap-api.php
@@ -0,0 +1,34 @@
+
+
+ https://$domain/
+ 1.0
+
+
+ https://$domain/new.php
+ 0.8
+
+
+ https://$domain/login.php
+ 0.8
+
+
+XML;
+
+$test_xml = new SimpleXMLElement($xml_text);
+
+echo $test_xml->asXML();
+?>
\ No newline at end of file
diff --git a/api/ueuse/create.php b/api/ueuse/create.php
index f387565..5c44828 100644
--- a/api/ueuse/create.php
+++ b/api/ueuse/create.php
@@ -6,8 +6,6 @@ require('../../db.php');
//- Base64_mime
require('../../function/function.php');
blockedIP($_SERVER['REMOTE_ADDR']);
-//投稿及び返信レート制限↓(分):デフォで60件/分まで
-$max_ueuse_rate_limit = 60;
$mojisizefile = "../../server/textsize.txt";
@@ -88,6 +86,14 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$ueuse = safetext($_GET['text']);
}elseif(!(empty($post_json["text"]))){
$ueuse = safetext($post_json["text"]);
+ }else{
+ $err = "input_not_found";
+ $response = array(
+ 'error_code' => $err,
+ );
+
+ echo json_encode($response, JSON_UNESCAPED_UNICODE);
+ exit;
}
//リプライ先取得
if(!(empty($_GET['replyid']))){
@@ -97,6 +103,14 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
}else{
$replyid = "";
}
+ //リユーズ先取得
+ if(!(empty($_GET['reuseid']))){
+ $reuseid = safetext($_GET['reuseid']);
+ }elseif(!(empty($post_json["reuseid"]))){
+ $reuseid = safetext($post_json["reuseid"]);
+ }else{
+ $reuseid = "";
+ }
//NSFWの有無
if(!(empty($_GET['nsfw']))){
@@ -117,211 +131,155 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$nsfw = "false";
}
- //Base64での画像送信の確認(POSTのみ&デコードは関数(Base64_mime)側でやってくれる)
- $img_uid = safetext($userData["userid"]);//UserID必須
if(!(empty($post_json["image1"]))){
- $image1 = safetext($post_json["image1"]);
- $UploadPath1 = base64_mime($image1,$img_uid);
- if($UploadPath1 == false){
- $UploadPath1 = "none";
- }
- }else{
- $UploadPath1 = "none";
- }
- if(!(empty($post_json["image2"]))){
- $image2 = safetext($post_json["image2"]);
- $UploadPath2 = base64_mime($image2,$img_uid);
- if($UploadPath2 == false){
- $UploadPath2 = "none";
- }
- }else{
- $UploadPath2 = "none";
- }
- if(!(empty($post_json["image3"]))){
- $image3 = safetext($post_json["image3"]);
- $UploadPath3 = base64_mime($image3,$img_uid);
- if($UploadPath3 == false){
- $UploadPath3 = "none";
- }
- }else{
- $UploadPath3 = "none";
- }
- if(!(empty($post_json["image4"]))){
- $image4 = safetext($post_json["image4"]);
- $UploadPath4 = base64_mime($image4,$img_uid);
- if($UploadPath4 == false){
- $UploadPath4 = "none";
- }
- }else{
- $UploadPath4 = "none";
- }
- //ここまで-----------------------------------------
-
- $old_datetime = date("Y-m-d H:i:00");
- $now_datetime = date("Y-m-d H:i:00",strtotime("+1 minute"));
- $rate_Query = $pdo->prepare("SELECT * FROM ueuse WHERE account = :userid AND TIME(datetime) BETWEEN :old_datetime AND :now_datetime");
- $rate_Query->bindValue(':userid', $userData["userid"]);
- $rate_Query->bindValue(':old_datetime', $old_datetime);
- $rate_Query->bindValue(':now_datetime', $now_datetime);
- $rate_Query->execute();
- $rate_count = $rate_Query->rowCount();
- if(!($rate_count > $max_ueuse_rate_limit-1)){
- if( empty($ueuse) ) {
- $err = "input_not_found";
- $response = array(
- 'error_code' => $err,
- );
- echo json_encode($response, JSON_UNESCAPED_UNICODE);
- exit;
- } else {
- // 文字数を確認
- if( (int)safetext(file_get_contents($mojisizefile)) < mb_strlen($ueuse, 'UTF-8') ) {
- $err = "content_to_".safetext(file_get_contents($mojisizefile))."_characters";
- $response = array(
- 'error_code' => $err,
- );
- echo json_encode($response, JSON_UNESCAPED_UNICODE);
- exit;
- }
- // 禁止url確認
- for($i = 0; $i < count($banurl); $i++) {
- if(!($banurl[$i] == "")){
- if (false !== strpos($ueuse, 'https://'.$banurl[$i])) {
- $err = "contains_prohibited_url";
- $response = array(
- 'error_code' => $err,
- );
-
- echo json_encode($response, JSON_UNESCAPED_UNICODE);
- exit;
- }
- }
- }
- }
- if(!(empty($replyid))){
- $rpChkQuery = $pdo->prepare("SELECT * FROM ueuse WHERE uniqid = :rpuniqid");
- $rpChkQuery->bindValue(':rpuniqid', $replyid);
- $rpChkQuery->execute();
- $rpChkcount = $rpChkQuery->rowCount();
- if(empty($rpChkcount)){
- $err = "no_reply_destination";
- $response = array(
- 'error_code' => $err,
- );
-
- echo json_encode($response, JSON_UNESCAPED_UNICODE);
- exit;
- }
- }
-
- // 書き込み日時を取得
- $username = safetext($userData["username"]);
- $userid = safetext($userData["userid"]);
- $datetime = safetext(date("Y-m-d H:i:s"));
- $uniqid = safetext(createUniqId());
- $abi = "none";
- $nones = "none";
- $popularity = 0;
-
- // トランザクション開始
- $pdo->beginTransaction();
-
- try {
-
- // SQL作成
- $stmt = $pdo->prepare("INSERT INTO ueuse (username, account, uniqid, rpuniqid, ueuse, photo1, photo2, photo3, photo4, video1, datetime, abi, nsfw, popularity) VALUES (:username, :account, :uniqid, :rpuniqid, :ueuse, :photo1, :photo2, :photo3, :photo4, :video1, :datetime, :abi, :nsfw, :popularity)");
+ $imageData = base64_decode($post_json["image1"],true);
- $stmt->bindParam(':username', $username, PDO::PARAM_STR);
- $stmt->bindParam(':account', $userid, PDO::PARAM_STR);
- $stmt->bindParam(':uniqid', $uniqid, PDO::PARAM_STR);
- $stmt->bindParam(':rpuniqid', $replyid, PDO::PARAM_STR);
- $stmt->bindParam(':ueuse', $ueuse, PDO::PARAM_STR);
+ $tmpFilePath = tempnam(sys_get_temp_dir(), 'upload_'.createUniqId());
+ file_put_contents($tmpFilePath, $imageData);
+
+ $Img1Files = [
+ 'name' => 'upload.png',
+ 'type' => check_mime($tmpFilePath),
+ 'tmp_name' => $tmpFilePath,
+ 'error' => UPLOAD_ERR_OK,
+ 'size' => strlen($imageData),
+ ];
+ } else {
+ $Img1Files = array();
+ }
- $stmt->bindParam(':photo1', $UploadPath1, PDO::PARAM_STR);
- $stmt->bindParam(':photo2', $UploadPath2, PDO::PARAM_STR);
- $stmt->bindParam(':photo3', $UploadPath3, PDO::PARAM_STR);
- $stmt->bindParam(':photo4', $UploadPath4, PDO::PARAM_STR);
- $stmt->bindParam(':video1', $nones, PDO::PARAM_STR);
+ if(!(empty($post_json["image2"]))){
+ $imageData = base64_decode($post_json["image2"],true);
+
+ $tmpFilePath = tempnam(sys_get_temp_dir(), 'upload_'.createUniqId());
+ file_put_contents($tmpFilePath, $imageData);
+
+ $Img2Files = [
+ 'name' => 'upload.png',
+ 'type' => check_mime($tmpFilePath),
+ 'tmp_name' => $tmpFilePath,
+ 'error' => UPLOAD_ERR_OK,
+ 'size' => strlen($imageData),
+ ];
+ } else {
+ $Img2Files = array();
+ }
- $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR);
+ if(!(empty($post_json["image3"]))){
+ $imageData = base64_decode($post_json["image3"],true);
+
+ $tmpFilePath = tempnam(sys_get_temp_dir(), 'upload_'.createUniqId());
+ file_put_contents($tmpFilePath, $imageData);
+
+ $Img3Files = [
+ 'name' => 'upload.png',
+ 'type' => check_mime($tmpFilePath),
+ 'tmp_name' => $tmpFilePath,
+ 'error' => UPLOAD_ERR_OK,
+ 'size' => strlen($imageData),
+ ];
+ } else {
+ $Img3Files = array();
+ }
- $stmt->bindParam(':abi', $abi, PDO::PARAM_STR);
- $stmt->bindParam(':nsfw', $nsfw, PDO::PARAM_STR);
- $stmt->bindParam(':popularity', $popularity, PDO::PARAM_INT);
-
- // SQLクエリの実行
- $res = $stmt->execute();
-
- // コミット
- $res = $pdo->commit();
-
- $mentionedUsers = array_unique(get_mentions_userid($ueuse));
-
- foreach ($mentionedUsers as $mentionedUser) {
-
- $pdo->beginTransaction();
-
- try {
- $fromuserid = safetext($userid);
- $touserid = safetext($mentionedUser);
- $datetime = safetext(date("Y-m-d H:i:s"));
- $msg = "" . $ueuse . "";
- $title = "" . safetext($username) . "さんにメンションされました!";
- $url = "/!" . safetext($uniqid) . "";
- $userchk = 'none';
-
- // 通知用SQL作成
- $stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title)");
-
- $stmt->bindParam(':fromuserid', $fromuserid, PDO::PARAM_STR);
- $stmt->bindParam(':touserid', $touserid, PDO::PARAM_STR);
- $stmt->bindParam(':msg', $msg, PDO::PARAM_STR);
- $stmt->bindParam(':url', $url, PDO::PARAM_STR);
- $stmt->bindParam(':userchk', $userchk, PDO::PARAM_STR);
- $stmt->bindParam(':title', $title, PDO::PARAM_STR);
-
- $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR);
-
- // SQLクエリの実行
- $res = $stmt->execute();
-
- // コミット
- $res = $pdo->commit();
-
- } catch(Exception $e) {
-
- // エラーが発生した時はロールバック
- $pdo->rollBack();
- }
-
- }
-
- } catch(Exception $e) {
-
- // エラーが発生した時はロールバック
- $pdo->rollBack();
- }
-
- if( $res ) {
- $response = array(
- 'uniqid' => decode_yajirushi(htmlspecialchars_decode($uniqid)),
- 'userid' => decode_yajirushi(htmlspecialchars_decode($userid)),
- );
-
- echo json_encode($response, JSON_UNESCAPED_UNICODE);
- } else {
- $err = "db_error_".$e->getMessage();
- $response = array(
- 'error_code' => $err,
- );
-
- echo json_encode($response, JSON_UNESCAPED_UNICODE);
- }
-
- // プリペアドステートメントを削除
- $stmt = null;
+ if(!(empty($post_json["image4"]))){
+ $imageData = base64_decode($post_json["image4"],true);
+
+ $tmpFilePath = tempnam(sys_get_temp_dir(), 'upload_'.createUniqId());
+ file_put_contents($tmpFilePath, $imageData);
+
+ $Img4Files = [
+ 'name' => 'upload.png',
+ 'type' => check_mime($tmpFilePath),
+ 'tmp_name' => $tmpFilePath,
+ 'error' => UPLOAD_ERR_OK,
+ 'size' => strlen($imageData),
+ ];
+ } else {
+ $Img4Files = array();
+ }
+
+ $settingsJson = getUserData($pdo, $userData["userid"])["other_settings"];
+ if(!(empty($settingsJson))){
+ $isAIBWM = val_OtherSettings("isAIBlockWaterMark", $settingsJson);
}else{
- $err = "over_rate_limit";
+ $isAIBWM = false;
+ }
+
+ $video1 = array();
+
+ $ueuse_result = send_ueuse($userData["userid"],$replyid,$reuseid,$ueuse,$Img1Files,$Img2Files,$Img3Files,$Img4Files,$video1,$nsfw,$isAIBWM, "../");
+
+
+ if($ueuse_result[0] == true){
+ $response = array(
+ 'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueuse_result[1])),
+ 'userid' => decode_yajirushi(htmlspecialchars_decode($userData["userid"])),
+ );
+
+ echo json_encode($response, JSON_UNESCAPED_UNICODE);
+ }else{
+ $errcode = $ueuse_result[1][0];
+ switch (true) {
+ case strpos($errcode, 'ACCOUNT_HAS_BEEN_FROZEN' ) !==false:
+ $err = "this_account_has_been_frozen";
+ break;
+ case strpos($errcode, 'INPUT_PLEASE' ) !==false:
+ $err = "input_not_found";
+ break;
+ case strpos($errcode, 'INPUT_OVER_MAX_COUNT' ) !==false:
+ $err = "content_to_".safetext(file_get_contents($mojisizefile))."_characters";
+ break;
+ case strpos($errcode, 'INPUT_CONTAINS_PROHIBITED_URL' ) !==false:
+ $err = "contains_prohibited_url";
+ break;
+ case strpos($errcode, 'FILE_DEKASUGUI_PHP_INI_KAKUNIN' ) !==false:
+ $err = "upload_error";
+ break;
+ case strpos($errcode, 'FILE_DEKASUGUI_HTML_KAKUNIN' ) !==false:
+ $err = "upload_error";
+ break;
+ case strpos($errcode, 'FILE_SUKOSHIDAKE_UPLOAD' ) !==false:
+ $err = "upload_error";
+ break;
+ case strpos($errcode, 'FILE_UPLOAD_DEKINAKATTA' ) !==false:
+ $err = "upload_error";
+ break;
+ case strpos($errcode, 'TMP_FOLDER_NAI' ) !==false:
+ $err = "upload_error";
+ break;
+ case strpos($errcode, 'FILE_KAKIKOMI_SIPPAI' ) !==false:
+ $err = "upload_error";
+ break;
+ case strpos($errcode, 'PHPINFO()_KAKUNIN' ) !==false:
+ $err = "upload_error";
+ break;
+ case strpos($errcode, 'S3ERROR' ) !==false:
+ $err = "upload_error";
+ break;
+ case strpos($errcode, 'SORRY_FILE_HITAIOU' ) !==false:
+ $err = "upload_error";
+ break;
+ case strpos($errcode, 'FILE_UPLOAD_DEKINAKATTA' ) !==false:
+ $err = "upload_error";
+ break;
+ case strpos($errcode, 'PHOTO_SELECT_PLEASE' ) !==false:
+ $err = "upload_error";
+ break;
+ case strpos($errcode, 'REGISTERED_DAME' ) !==false:
+ $err = "could_not_complete";
+ break;
+ case strpos($errcode, 'OVER_RATE_LIMIT' ) !==false:
+ $err = "over_rate_limit";
+ break;
+ case strpos($errcode, 'ERROR' ) !==false:
+ $err = "could_not_complete";
+ break;
+ default:
+ $err = "could_not_complete";
+ break;
+ }
+
$response = array(
'error_code' => $err,
);
diff --git a/api/users/follow.php b/api/users/follow.php
index 27dba26..7f52f72 100644
--- a/api/users/follow.php
+++ b/api/users/follow.php
@@ -6,8 +6,6 @@ require('../../db.php');
//- Base64_mime
require('../../function/function.php');
blockedIP($_SERVER['REMOTE_ADDR']);
-//投稿及び返信レート制限↓(分):デフォで60件/分まで
-$max_ueuse_rate_limit = 60;
$mojisizefile = "../../server/textsize.txt";
diff --git a/api/users/unfollow.php b/api/users/unfollow.php
index 82d8d97..0b04050 100644
--- a/api/users/unfollow.php
+++ b/api/users/unfollow.php
@@ -6,8 +6,6 @@ require('../../db.php');
//- Base64_mime
require('../../function/function.php');
blockedIP($_SERVER['REMOTE_ADDR']);
-//投稿及び返信レート制限↓(分):デフォで60件/分まで
-$max_ueuse_rate_limit = 60;
$mojisizefile = "../../server/textsize.txt";
diff --git a/api/v1/instance.php b/api/v1/instance.php
index f973d08..697c0a2 100644
--- a/api/v1/instance.php
+++ b/api/v1/instance.php
@@ -1,5 +1,5 @@
+
@@ -237,27 +238,33 @@ $pdo = null;
$(document).ready(function () {
var userid = '';
var account_id = '';
-
- loadPosts();
+ view_ueuse_init(userid, account_id);
var pageNumber = 1;
var isLoading = false;
+ loadPosts();
function loadPosts() {
if (isLoading) return;
isLoading = true;
$("#loading").show();
$.ajax({
- url: '../nextpage/bookmark.php', // PHPファイルへのパス
- method: 'GET',
+ url: '../nextpage/bookmarktimeline.php',
+ method: 'POST',
data: { page: pageNumber, userid: userid, account_id: account_id },
- dataType: 'html',
- success: function (response) {
- $('#postContainer').append(response);
+ dataType: 'json',
+ timeout: 300000,
+ success: function(response) {
+ renderUeuses(response);
pageNumber++;
isLoading = false;
$("#loading").hide();
- }
+ },
+ error: function(xhr, textStatus, errorThrown) {
+ isLoading = false;
+ $("#loading").hide();
+ $("#error").show();
+ },
});
}
diff --git a/css/color.css b/css/color.css
index 9f597d6..afc236a 100644
--- a/css/color.css
+++ b/css/color.css
@@ -4,7 +4,7 @@
--sub-color: #FFFAE6;
--background-color: #F5F5F5;
--tl-color: #F7F7F7;
- --ueuse-color:#f5f5f5;
+ --ueuse-color:#F9F9F9;
--text-color: #252525;
--subtext-color: #999;
--link-color: #4e4428;
@@ -20,6 +20,7 @@
--dark-background-color: #0c0c0c;
--dark-subtext-color: #CCC;
--dark-text-color: #FFF;
+ --dark-border-color: #252525;
/*HeadingFonts*/
--Head-fonts: "Zen Maru Gothic";
/*TextFonts*/
diff --git a/css/home.css b/css/home.css
index e0bdf43..792d027 100644
--- a/css/home.css
+++ b/css/home.css
@@ -56,22 +56,20 @@ body{
text-align: center;
border-radius: 50px;
- color:var(--background-color);
+ color:var(--dark-text-color);
font-size: 18px;
font-family: var(--Head-fonts), sans-serif;
font-weight: normal;
text-decoration:none;
text-align: center;
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15);
transition: all 250ms ease-in-out;
}
.irobutton:hover{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
- padding: 6px 24px;
+ padding: 6px 22px;
}
.irobutton:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
- padding: 6px 8px;
+ background-color: color-mix(in srgb, var(--main-color) 90%, #000);
+ padding: 6px 12px;
}
.sirobutton{
@@ -86,24 +84,22 @@ body{
text-align: center;
- background-color: var(--sub-color);
+ background-color: var(--dark-subtext-color);
+ color: var(--dark-text-color);
border-radius: 50px;
- color:var(--main-color);
font-size: 18px;
font-family: var(--Head-fonts), sans-serif;
font-weight: normal;
text-decoration:none;
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15);
transition: all 250ms ease-in-out;
+ border: transparent 1px solid;
}
.sirobutton:hover{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
- padding: 6px 24px;
+ padding: 6px 22px;
}
.sirobutton:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
- padding: 6px 8px;
+ padding: 6px 12px;
}
.inbox {
@@ -359,16 +355,13 @@ textarea{
.userleftbox{
border-radius: 17px;
margin-top: 12px;
- margin-left: 12px;
+ margin-left: 0px;
margin-right: 12px;
margin-bottom: 12px;
- background-color: var(--tl-color);
width: 240px;
height: 100%;
margin-left: 0px;
- padding: 32px;
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
- border: 1px solid var(--main-color);
+ padding: 0px;
}
.userleftbox h1{
@@ -400,44 +393,6 @@ textarea{
margin-bottom: -4px;
}
-.leftbutton_on{
- cursor: pointer;
- border: none;
- display: block;
- width:80%;
- margin: 16px;
- padding: 8px auto;
- margin-left: auto;
- margin-right: auto;
-
- padding-left: 16px;
- padding-top: 8px;
- padding-bottom: 8px;
-
-
- background-color: var(--sub-color);
-
- border-radius: 50px;
- color:var(--main-color);
- font-size: 20px;
- font-family: var(--Head-fonts), sans-serif;
- font-weight: bold;
- text-decoration:none;
- text-align: left;
- align-items: center;
- transition: all 250ms ease-out;
-}
-.leftbutton_on:hover{
- background-color: var(--main-color);
- color: var(--sub-color);
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
- width:85%;
-}
-.leftbutton_on:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
- width:78%;
-}
-
.leftbutton{
cursor: pointer;
@@ -453,8 +408,7 @@ textarea{
padding-top: 8px;
padding-bottom: 8px;
-
- background-color: var(--background-color)FFF;
+ background-color: transparent;
border-radius: 50px;
color:var(--main-color);
@@ -548,8 +502,8 @@ main{
margin-right: 12px;
width: 60%;
background-color: var(--tl-color);
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
- border: 1px solid var(--main-color);
+ box-shadow:0 0px 48px 0 rgba(0, 0, 0, .025);
+ border: 1px solid var(--border-color);
}
main h1{
@@ -769,11 +723,9 @@ main h1{
.fzone .follow .fbtn:hover{
background-color: var(--main-color);
color: var(--sub-color);
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
width:125px;
}
.fzone .follow .fbtn:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
width:115px;
}
@@ -811,11 +763,9 @@ main h1{
.fzone .follow .fbtn_no:hover{
background-color: var(--sub-color);
color: var(--main-color);
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
width:125px;
}
.fzone .follow .fbtn_no:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
width:115px;
}
@@ -852,11 +802,9 @@ main h1{
.fzone .follow .fbtn_un:hover{
background-color: var(--sub-color);
color: var(--text-color);
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
width:125px;
}
.fzone .follow .fbtn_un:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
width:115px;
}
@@ -893,11 +841,9 @@ main h1{
background-color: color-mix(in srgb, var(--tl-color) 90%, var(--error));
color: var(--error);
border: 1px solid var(--error);
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
width:32px;
}
.fzone .follow .report:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
width:22px;
}
.fzone .follow .report svg{
@@ -1032,20 +978,27 @@ main h1{
width: 100%;
height: auto;
vertical-align:top;
+ transition: all 0.5s ease;
+}
+.ads a img:hover{
+ cursor: pointer;
+ filter: saturate(125%) brightness(110%);
}
.ueuse{
animation: slideInY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards;
- margin: 12px;
- border-radius: 10px;
+ margin: 0px;
+ border-radius: 0px;
padding-left: 24px;
padding-right: 24px;
padding-top: 16px;
padding-bottom: 16px;
background-color: var(--ueuse-color);
- border: 1px solid var(--border-color);
+ border-bottom: 1px solid var(--border-color);
+ box-shadow: 0 -1px 0 var(--border-color);
width: auto;
overflow: hidden;
}
+
@keyframes slideInY {
0% {
transform: translateY(24px);
@@ -1131,12 +1084,15 @@ main h1{
font-size: 12px;
color:var(--main-color);
}
+.ueuse .content{
+ margin-left: 60px;
+}
.ueuse p{
line-height:20px;
overflow-wrap: break-word;
margin-top: auto;
margin-bottom: auto;
- margin-left: 60px;
+ margin-left: 0px;
font-size: 16px;
color:var(--text-color);
text-decoration: none;
@@ -1161,6 +1117,24 @@ main h1{
vertical-align: top;
}
+.ueuse .codeblock{
+ width: calc(100% - 12px);
+ margin-left: 0px;
+ margin-right: 0px;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 3px;
+ padding-bottom: 3px;
+ background-color: #DDDDDD;
+ color: #323232;
+ border-radius: 5px;
+ font-size: calc(100% - 2px);
+ text-decoration: none;
+ font-family: var(--Mono-fonts), sans-serif;
+ font-weight: bold;
+ vertical-align: top;
+}
+
.ueuse .quote{
width: fit-content;
border-left: 5px solid;
@@ -1219,7 +1193,7 @@ main h1{
overflow-wrap: break-word;
margin-top: auto;
margin-bottom: auto;
- margin-left: 60px;
+ margin-left: 0px;
font-size: 48px;
color:var(--text-color);
text-decoration: none;
@@ -1231,7 +1205,7 @@ main h1{
overflow-wrap: break-word;
margin-top: auto;
margin-bottom: auto;
- margin-left: 60px;
+ margin-left: 0px;
font-size: 32px;
color:var(--text-color);
text-decoration: none;
@@ -1243,7 +1217,7 @@ main h1{
overflow-wrap: break-word;
margin-top: auto;
margin-bottom: auto;
- margin-left: 60px;
+ margin-left: 0px;
font-size: 24px;
color:var(--text-color);
text-decoration: none;
@@ -1376,12 +1350,16 @@ main h1{
}
.ueuse .photo1 a img{
+ background: linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%), linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%);
+ background-color: #FFF;
+ background-size: 20px 20px;
+ background-position: 0 0, 10px 10px;
object-fit: cover;
border-radius: 10px;
margin-top: 12px;
margin-left: auto;
margin-right: auto;
- width: 100%;
+ width: calc(100% - 2px);
height: 350px;
border: 1px solid var(--border-color);
cursor: pointer;
@@ -1393,12 +1371,16 @@ main h1{
}
.ueuse .photo2 a img{
+ background: linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%), linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%);
+ background-color: #FFF;
+ background-size: 20px 20px;
+ background-position: 0 0, 10px 10px;
object-fit: cover;
border-radius: 10px;
margin-top: 12px;
margin-left: auto;
margin-right: auto;
- width: 100%;
+ width: calc(100% - 2px);
height: 350px;
border: 1px solid var(--border-color);
cursor: pointer;
@@ -1414,23 +1396,31 @@ main h1{
width: 100%;
}
.ueuse .photo3 a img{
+ background: linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%), linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%);
+ background-color: #FFF;
+ background-size: 20px 20px;
+ background-position: 0 0, 10px 10px;
object-fit: cover;
border-radius: 10px;
margin-top: 12px;
margin-left: auto;
margin-right: auto;
- width: 100%;
+ width: calc(100% - 2px);
height: 200px;
border: 1px solid var(--border-color);
cursor: pointer;
}
.ueuse .photo3_btm a img{
+ background: linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%), linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%);
+ background-color: #FFF;
+ background-size: 20px 20px;
+ background-position: 0 0, 10px 10px;
object-fit: cover;
border-radius: 10px;
margin-top: 12px;
margin-left: auto;
margin-right: auto;
- min-width: 100%;
+ min-width: calc(100% - 2px);
height: 200px;
border: 1px solid var(--border-color);
cursor: pointer;
@@ -1441,12 +1431,16 @@ main h1{
justify-content: space-between;
}
.ueuse .photo4 a img{
+ background: linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%), linear-gradient(45deg, #EEE 25%, transparent 25%, transparent 75%, #EEE 75%);
+ background-color: #FFF;
+ background-size: 20px 20px;
+ background-position: 0 0, 10px 10px;
object-fit: cover;
border-radius: 10px;
margin-top: 12px;
margin-left: auto;
margin-right: auto;
- width: 100%;
+ width: calc(100% - 2px);
height: 200px;
border: 1px solid var(--border-color);
cursor: pointer;
@@ -1457,7 +1451,7 @@ main h1{
margin-top: 12px;
margin-left: auto;
margin-right: auto;
- width: 100%;
+ width: calc(100% - 2px);
height: 350px;
border: 1px solid var(--border-color);
}
@@ -1598,8 +1592,7 @@ main h1{
padding-left: 12px;
padding-right: 12px;
-
- background-color: var(--sub-color);
+ background-color: transparent;
border-radius: 50px;
color:var(--main-color);
@@ -1610,7 +1603,25 @@ main h1{
text-align: center;
transition: all 250ms ease-out;
}
+.ueuse .favbox .favbtn:hover{
+ cursor: pointer;
+ border: none;
+ display: block;
+ width:auto;
+ background-color: var(--main-color);
+
+ border-radius: 50px;
+ color: var(--sub-color);;
+ font-size: 16px;
+ font-family: var(--Head-fonts), sans-serif;
+ font-weight: normal;
+ text-decoration:none;
+ text-align: center;
+ transition: box-shadow 250ms ease-in-out;
+ transition: width 250ms ease-out;
+ transition: all 250ms ease-out;
+}
.ueuse .favbox .favbtn_after{
cursor: pointer;
border: none;
@@ -1677,7 +1688,7 @@ main h1{
padding-right: 12px;
- background-color: var(--sub-color);
+ background-color: transparent;
border-radius: 50px;
color:var(--main-color);
@@ -1688,7 +1699,6 @@ main h1{
text-align: center;
transition: all 250ms ease-out;
}
-
.ueuse .favbox .tuduki:hover{
cursor: pointer;
border: none;
@@ -1738,7 +1748,7 @@ main h1{
padding-right: 12px;
- background-color: var(--sub-color);
+ background-color: transparent;
border-radius: 50px;
color:var(--main-color);
@@ -1780,7 +1790,7 @@ main h1{
margin-top: 2px;
margin-bottom: 2px;
- background-color: var(--sub-color);
+ background-color: transparent;
border-radius: 50px;
color: var(--error);
font-size: 16px;
@@ -1828,7 +1838,7 @@ main h1{
margin-top: 2px;
margin-bottom: 2px;
- background-color: var(--sub-color);
+ background-color: transparent;
border-radius: 50px;
color: var(--main-color);
font-size: 16px;
@@ -1874,7 +1884,7 @@ main h1{
padding-right: 12px;
- background-color: var(--sub-color);
+ background-color: transparent;
border-radius: 50px;
color:var(--main-color);
@@ -2018,7 +2028,7 @@ main h1{
padding-right: 12px;
- background-color: var(--sub-color);
+ background-color: transparent;
border-radius: 50px;
color:var(--main-color);
@@ -2097,7 +2107,7 @@ main h1{
border: 1px solid var(--border-color);
background-color: var(--background-color);
padding: 12px;
- border-radius: 8px;
+ border-radius: 10px;
}
.ueuse .nsfw .btnzone{
display: block;
@@ -2154,7 +2164,6 @@ main h1{
width: 100%;
height: 74px;
border-radius: 7px;
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
}
.ueuse .flebox .user{
margin-bottom: 12px;
@@ -2343,15 +2352,42 @@ main h1{
font-weight: bold;
}
+.send_progress{
+ display: none;
+ width: 100%;
+ height: 2px;
+ margin: 0px;
+ overflow: hidden;
+ box-shadow: 0 -1px 0 var(--border-color);
+ animation: progressView 250ms ease-out 1 forwards;
+}
+.send_progress .per{
+ width: 0px;
+ margin: 0px;
+ height: 2px;
+ background-color: var(--main-color);
+ transition: width 500ms ease-in;
+}
+@keyframes progressView {
+ 0% {
+ height: 0px;
+ opacity: 0;
+ }
+ 100% {
+ height: 2px;
+ opacity: 1;
+ }
+}
.sendbox{
- margin: 12px;
- border-radius: 10px;
+ margin: 0px;
+ border-radius: 0px;
padding-left: 24px;
padding-right: 24px;
padding-top: 24px;
padding-bottom: 24px;
background-color: var(--ueuse-color);
- border: 1px solid var(--border-color);
+ border-top: solid 1px var(--border-color);
+ box-shadow: 0 1px 0 var(--border-color);
width: auto;
}
@@ -2414,8 +2450,8 @@ main h1{
height: 24px;
padding: 6px 6px;
- margin-left: 6px;
- margin-right: 6px;
+ margin-left: 0px;
+ margin-right: 12px;
padding-top: 6px;
padding-bottom: 6px;
@@ -3005,11 +3041,9 @@ label>input {
.imgbtn:hover{
background-color: var(--main-color);
color: var(--sub-color);
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
padding: 4px 22px;
}
.imgbtn:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
padding: 4px 12px;
}
@@ -3039,11 +3073,9 @@ label>input {
.imgbtn2:hover{
background-color: var(--main-color);
color: var(--sub-color);
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
padding: 4px 22px;
}
.imgebtn2:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
padding: 4px 12px;
}
@@ -3166,11 +3198,9 @@ label>input {
.modal-content .fbtn:hover{
background-color: var(--main-color);
color: var(--sub-color);
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
width:125px;
}
.modal-content .fbtn:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
width:115px;
}
@@ -3206,11 +3236,9 @@ label>input {
.modal-content .fbtn_no:hover{
background-color: var(--sub-color);
color: var(--main-color);
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
width:125px;
}
.modal-content .fbtn_no:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
width:115px;
}
@@ -3349,36 +3377,39 @@ label>input {
top: 0;
left: 0;
width: 100%;
- height: 44px;
- padding-top: 0.0%;
- padding-bottom: 0.2%;
- padding-left: 23%;
+ height: 47px;
background-color: var(--main-color);
- box-shadow: 0px 0px 30px rgba(0,0,0,0.1);
font-family: var(--Text-fonts), sans-serif;
font-weight: bold;
font-size: 2em;
text-align: left;
color: var(--background-color);
-
+ border-bottom: 1px solid color-mix(in srgb, var(--main-color) 95%, #000);
+}
+.topbox .logo{
+ width: 1080px;
+ max-width: 95%;
+ margin: 0px auto;
}
-
.topbox .logo img{
margin-left: 0px;
margin-right: auto;
- margin-top: 2px;
- height: 44px;
+ margin-top: 0px;
+ height: 47px;
}
.terms{
overflow-wrap: break-word;
margin-left: auto;
margin-right: auto;
- width: 77%;
+ width: calc(1080px - 64px);
margin-top: 64px;
margin-bottom: 64px;
- background-color: var(--background-color);
+ background-color: var(--ueuse-color);
+ border: solid 1px var(--border-color);
+ padding: 32px;
+ border-radius: 15px;
}
.terms h1{
@@ -3623,6 +3654,7 @@ label>input {
text-align: center;
margin-left: auto;
margin-right: auto;
+ background: transparent;
}
.terms .err404 h1{
@@ -3649,16 +3681,13 @@ label>input {
.rightbox{
position: relative;
- border-radius: 17px;
+ border-radius: 0px;
margin-top: 12px;
margin-left: 12px;
margin-right: 12px;
- width: 260px;
+ width: 280px;
height: 92.5dvh;
- background-color: var(--tl-color);
- padding: 12px;
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
- border: 1px solid var(--main-color);
+ padding: 0px;
}
.rightbox h1{
@@ -3688,7 +3717,7 @@ label>input {
margin-left: auto;
margin-right: auto;
width: auto;
- background-color: var(--background-color);
+ background-color: var(--ueuse-color);
border: 1px solid var(--border-color);
width: auto;
padding: 12px;
@@ -3904,8 +3933,8 @@ label>input {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
- padding: 12px;
- padding-top: 0px;
+ padding: 24px;
+ padding-top: 24px;
}
.emojizone .tokonone{
width: calc(50% - 32px);
@@ -3921,15 +3950,16 @@ label>input {
margin-bottom: 30px;
}
.emjtex{
- width: calc(50% - 32px);
+ width: calc(50% - 36px);
background-color: var(--ueuse-color);
margin-top: 0px;
margin-left: 0px;
margin-right: 0px;
- margin-bottom: 12px;
+ margin-bottom: 24px;
padding: 12px;
border-radius: 10px;
border: 1px solid var(--border-color);
+ box-shadow: none;
transition: all 250ms ease-out;
}
.emjtex:hover{
@@ -3982,17 +4012,36 @@ label>input {
font-weight: bold;
}
+.rp{
+ display: flex;
+ width: 100%;
+ height: fit-content;
+}
.rp p{
overflow-wrap: break-word;
margin-top: 0px;
margin-bottom: 6px;
- margin-left: 12px;
- font-size: 16px;
+ margin-left: 6px;
+ font-size: 14px;
color:var(--text-color);
text-decoration: none;
font-family: var(--Text-fonts), sans-serif;
font-weight: bold;
}
+.rp .here{
+ margin-right: 8px;
+ width: 12px;
+ height: 12px;
+ background-color: var(--main-color);
+ border-radius: 50%;
+}
+.rp .totop{
+ width: 14px;
+ height: 8px;
+ border-left: 2px solid var(--text-color);
+ border-bottom: 2px solid var(--text-color);
+ border-bottom-left-radius: 6px;
+}
.ru{
display: flex;
width: 100%;
@@ -4039,16 +4088,19 @@ label>input {
}
.notification{
animation: slideInY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards;
- margin: 12px;
- border-radius: 10px;
+ margin: 0px;
+ border-radius: 0px;
padding-left: 24px;
padding-right: 24px;
padding-top: 16px;
padding-bottom: 16px;
- background-color: var(--background-color);
- border: 1px solid var(--border-color);
+ background-color: var(--ueuse-color);
+ border-bottom: 1px solid var(--border-color);
width: auto;
}
+.notification:first-child{
+ border-top: 1px solid var(--border-color);
+}
@keyframes slideInY {
0% {
transform: translateY(24px);
@@ -4321,7 +4373,7 @@ label>input {
margin-top: auto;
margin-bottom: auto;
margin-left: auto;
- margin-right: 12px;
+ margin-right: 0px;
text-align: right;
font-size: 12px;
color:var(--subtext-color);
@@ -4512,10 +4564,10 @@ hr{
}
.tlchange{
- border-radius: 10px;
- margin: 12px;
+ border-radius: 0px;
+ margin: 0px;
background-color: var(--ueuse-color);
- border: 1px solid var(--border-color);
+ box-shadow: 0 1px 0 var(--border-color);
width: auto;
text-align: center;
display: flex;
@@ -4538,6 +4590,8 @@ hr{
display: inline-block;
border: none;
cursor: pointer;
+
+ padding: 0px;
}
.tlchange .on{
color: var(--main-color);
@@ -4610,35 +4664,40 @@ hr{
cursor: pointer;
}
.switch_label {
- width: 48px;
- height: 24px;
- background: var(--dark-subtext-color);
+ width: 50px;
+ height: 26px;
+ background: color-mix(in srgb, var(--background-color) 90%, #000);
position: relative;
display: inline-block;
border-radius: 25px;
transition: 0.4s;
box-sizing: border-box;
+ border: solid 1px color-mix(in srgb, var(--background-color) 85%, #000);
}
.switch_label:after {
content: "";
position: absolute;
- margin-top: 2px;
- margin-left: 2px;
- width: 20px;
- height: 20px;
+ margin-top: 4px;
+ margin-left: 4px;
+ width: 16px;
+ height: 16px;
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);
+ border: solid 1px var(--main-color);
}
.switch_input:checked + .switch_label:after {
left: 24px;
+ margin-top: 2px;
+ margin-left: 2px;
+ width: 20px;
+ height: 20px;
}
.switch_button {
position: relative;
@@ -5155,7 +5214,7 @@ summary {
width: 50%;
background-color: var(--background-color);
padding: 12px;
- border-radius: 8px;
+ border-radius: 10px;
border: 1px solid var(--border-color);
}
.overview_cnt_r{
@@ -5164,7 +5223,7 @@ summary {
width: 50%;
background-color: var(--background-color);
padding: 12px;
- border-radius: 8px;
+ border-radius: 10px;
border: 1px solid var(--border-color);
}
.overview p{
@@ -5948,7 +6007,7 @@ noscript .noscript_modal .inner .center_text p{
}
main{
- height: 100dvh;
+ height: 94dvh;
overflow: auto;
border-radius: 0px;
margin-top: 0px;
@@ -6082,6 +6141,7 @@ noscript .noscript_modal .inner .center_text p{
background-color: var(--tl-color);
border-top: 1px solid var(--border-color);
z-index: 9999;
+ height: 6dvh;
}
.botbox .lbtnzone{
@@ -6281,14 +6341,13 @@ noscript .noscript_modal .inner .center_text p{
}
.ueuse{
animation: slideInY 0.5s cubic-bezier(0.25, 1, 0.5, 1) 1 forwards;
- margin: 12px;
- border-radius: 10px;
+ margin: 0px;
+ border-radius: 0px;
padding-left: 12px;
padding-right: 12px;
padding-top: 12px;
padding-bottom: 12px;
background-color: var(--ueuse-color);
- border: 1px solid var(--border-color);
width: auto;
}
@@ -6411,11 +6470,9 @@ noscript .noscript_modal .inner .center_text p{
.imgbtn:hover{
background-color: var(--main-color);
color: var(--sub-color);
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
width:35%;
}
.imgebtn:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
width:45%;
}
@@ -6449,11 +6506,9 @@ noscript .noscript_modal .inner .center_text p{
.imgbtn2:hover{
background-color: var(--main-color);
color: var(--sub-color);
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
width:19%;
}
.imgebtn2:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
width:21%;
}
@@ -6466,18 +6521,18 @@ noscript .noscript_modal .inner .center_text p{
margin-left: 0px;
margin-right: 0px;
height: 44px;
- padding-top: 0.0%;
- padding-bottom: 0.2%;
- padding-left: 0;
margin-left: auto;
margin-right: auto;
}
+ .topbox .logo{
+ width: 92%;
+ }
.topbox .logo img{
margin-left: 0px;
margin-right: auto;
- margin-top: 2px;
- width: 120px;
+ margin-top: 0px;
+ width: fit-content;
}
.terms{
@@ -6485,9 +6540,11 @@ noscript .noscript_modal .inner .center_text p{
margin-left: auto;
margin-right: auto;
width: 90%;
+ padding: 0px;
margin-top: 64px;
margin-bottom: 64px;
- background-color: var(--background-color);
+ border: none !important;
+ background-color: transparent !important;
}
.terms h1{
@@ -6857,7 +6914,8 @@ noscript .noscript_modal .inner .center_text p{
overflow: scroll;
padding: 24px;
bottom: 0px;
- left: 0;
+ left: 50%;
+ transform: translate(-50%, -50%);
animation: SlideUp .5s ease-in-out forwards;
}
@@ -6940,34 +6998,36 @@ noscript .noscript_modal .inner .center_text p{
.modal-content.slideDown {
animation: SlideDown .15s ease-in-out forwards;
}
+ .modal-content .modal-follow-area{
+ max-height: 40dvh;
+ }
/*下から上*/
@keyframes SlideUp {
0% {
- opacity: 0;
- transform: translateY(-1%);
+ opacity: 0;
+ transform: translate(-50%, -1%);
}
100% {
- opacity: 1;
- transform: translateY(-40%);
+ opacity: 1;
+ transform: translate(-50%, -40%);
}
}
/*上から下*/
@keyframes SlideDown {
0% {
- opacity: 1;
- transform: translateY(-40%);
+ opacity: 1;
+ transform: translate(-50%, -40%);
}
100% {
- opacity: 0;
- transform: translateY(-1%);
+ opacity: 0;
+ transform: translate(-50%, -1%);
}
}
- .modal-content .modal-follow-area{
- max-height: 40dvh;
- }
+
.Image_modal{
-moz-box-sizing: border-box;
box-sizing: border-box;
+ height: 100dvh;
}
.Image_modal .modal-content {
padding: 0px;
@@ -6977,10 +7037,10 @@ noscript .noscript_modal .inner .center_text p{
max-width: 90%;
max-height: 90dvh;
position: absolute;
- top: 45%;
- right: 0;
- bottom: 45%;
- left: 0;
+ top: 50%;
+ left: 50%;
+ right: 0%;
+ transform: translate(-50%, -50%);
margin: auto;
margin-top: 0px;
margin-bottom: 0px;
@@ -6999,10 +7059,39 @@ noscript .noscript_modal .inner .center_text p{
vertical-align:top;
object-fit: contain;
}
+ .Image_modal .modal-content.slideUp {
+ animation: I-SlideUp .3s ease-out forwards;
+ }
+ .Image_modal .modal-content.slideDown {
+ animation: I-SlideDown .15s ease-in-out forwards;
+ }
+ /*下から上*/
+ @keyframes I-SlideUp {
+ 0% {
+ opacity: 0;
+ transform: translate(-50%, -1%);
+ }
+ 100% {
+ opacity: 1;
+ transform: translate(-50%, calc(-50% - 6dvh));
+ }
+ }
+ /*上から下*/
+ @keyframes I-SlideDown {
+ 0% {
+ opacity: 1;
+ transform: translate(-50%, calc(-50% - 6dvh));
+ }
+ 100% {
+ opacity: 0;
+ transform: translate(-50%, -1%);
+ }
+ }
.tlchange{
- border-radius: 10px;
- margin: 12px;
+ border-radius: 0px;
+ margin: 0px;
+ margin-top: 0px;
margin-bottom: 0px;
width: auto;
text-align: center;
@@ -7016,7 +7105,6 @@ noscript .noscript_modal .inner .center_text p{
overflow-wrap: break-word;
margin-top: 12px;
margin-bottom: 12px;
- font-size: 24px;
}
.tlchange .on{
width: 30%;
@@ -7026,7 +7114,6 @@ noscript .noscript_modal .inner .center_text p{
overflow-wrap: break-word;
margin-top: 12px;
margin-bottom: 12px;
- font-size: 24px;
}
.hny{
@@ -7113,7 +7200,7 @@ noscript .noscript_modal .inner .center_text p{
cursor: pointer;
border: none;
display: block;
- width:80%;
+ width: calc(100% - 48px);
margin: 8px;
padding: 8px auto;
margin-left: auto;
@@ -7124,7 +7211,7 @@ noscript .noscript_modal .inner .center_text p{
padding-bottom: 4px;
- background-color: var(--background-color)FFF;
+ background-color: var(--background-color);
border-radius: 50px;
color:var(--main-color);
@@ -7141,11 +7228,11 @@ noscript .noscript_modal .inner .center_text p{
background-color: var(--main-color);
color: var(--sub-color);
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
- width:85%;
+ width: calc(100% - 24px);
}
.admin_leftbtn:active{
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
- width:75%;
+ width: calc(100% - 64px);
}
.bot_menu_area{
@@ -7266,9 +7353,15 @@ noscript .noscript_modal .inner .center_text p{
.emojizone{
display: block;
+ padding: 0px;
}
.emjtex{
width: auto;
+ margin: 0px;
+ border: none;
+ border-top: var(--border-color) solid 1px;
+ box-shadow: 0 1px 0 var(--border-color);
+ border-radius: 0px;
}
.emjtex .fx{
display: block;
@@ -7337,6 +7430,13 @@ noscript .noscript_modal .inner .center_text p{
body{
background-color: var(--dark-background-color);
}
+
+ .sirobutton{
+ background-color: var(--dark-background-color);
+ color:var(--main-color);
+ border: solid 1px var(--dark-border-color);
+ }
+
.errmsg{
background-color: color-mix(in srgb, var(--dark-sub-color) 90%, var(--error));
color:var(--error);
@@ -7348,12 +7448,12 @@ noscript .noscript_modal .inner .center_text p{
}
.userleftbox{
- background-color: var(--dark-sub-color);
+ background-color: transparent;
border: none;
}
.leftbutton{
- background-color: var(--dark-sub-color);
+ background-color: transparent;
color:var(--sub-color);
}
.leftbutton:hover{
@@ -7366,8 +7466,9 @@ noscript .noscript_modal .inner .center_text p{
}
main{
- background-color: var(--dark-background-color);
- border: none;
+ background-color: var(--dark-sub-color);
+ box-shadow:0 0px 48px 0 rgba(0, 0, 0, .025);
+ border: 1px solid var(--dark-border-color);
}
main h1{
@@ -7379,7 +7480,8 @@ noscript .noscript_modal .inner .center_text p{
.ueuse{
background-color: var(--dark-sub-color);
- border: none;
+ box-shadow: 0 -1px 0 var(--dark-border-color);
+ border-bottom: 1px solid var(--dark-border-color);
}
.ueuse .flebox a{
color:var(--sub-color);
@@ -7452,21 +7554,29 @@ noscript .noscript_modal .inner .center_text p{
color:var(--dark-subtext-color);
}
- .ueuse .photo1 img{
- border: none;
+ .ueuse .photo1 a img{
+ border: 1px solid var(--dark-border-color);
}
- .ueuse .photo2 img{
- border: none;
+ .ueuse .photo2 a img{
+ border: 1px solid var(--dark-border-color);
+ }
+
+ .ueuse .photo3 a img{
+ border: 1px solid var(--dark-border-color);
+ }
+
+ .ueuse .photo4 a img{
+ border: 1px solid var(--dark-border-color);
}
.ueuse .video1 video{
- border: none;
+ border: 1px solid var(--dark-border-color);
}
.ueuse .abi{
background-color: var(--dark-background-color);
- border: none;
+ border: 1px solid var(--dark-border-color);
}
.ueuse .abi p{
@@ -7496,86 +7606,109 @@ noscript .noscript_modal .inner .center_text p{
.ueuse .favbox .favbtn{
background-color: var(--dark-background-color);
color:var(--main-color);
+ border: solid 1px var(--dark-border-color);
+ }
+ .ueuse .favbox .favbtn:hover{
+ background-color: var(--main-color);
+ color:var(--sub-color);
+ border: solid 1px var(--main-color);
}
.ueuse .favbox .favbtn_after{
background-color: var(--main-color);
color:var(--sub-color);
+ border: solid 1px var(--main-color);
}
.ueuse .favbox .tuduki{
background-color: var(--dark-background-color);
color:var(--main-color);
+ border: solid 1px var(--dark-border-color);
}
.ueuse .favbox .tuduki:hover{
background-color: var(--main-color);
color:var(--sub-color);
+ border: solid 1px var(--main-color);
}
.ueuse .favbox .reuse{
background-color: var(--dark-background-color);
color:var(--main-color);
+ border: solid 1px var(--dark-border-color);
}
.ueuse .favbox .reuse:hover{
background-color: var(--main-color);
color:var(--sub-color);
+ border: solid 1px var(--main-color);
}
.ueuse .favbox .reuse_after{
background-color: var(--main-color);
color:var(--sub-color);
+ border: solid 1px var(--main-color);
}
.ueuse .favbox .etcbtn{
background-color: var(--dark-background-color);
color:var(--main-color);
+ border: solid 1px var(--dark-border-color);
}
.ueuse .favbox .etcbtn:hover{
background-color: var(--main-color);
color: var(--sub-color);
+ border: solid 1px var(--main-color);
}
.ueuse .favbox .delbtn{
background-color: var(--dark-background-color);
color:var(--error);
+ border: solid 1px var(--dark-border-color);
}
.ueuse .favbox .delbtn:hover{
background-color: var(--error);
- color: var(--background-color);;
+ color: var(--background-color);
+ border: solid 1px var(--error);
}
.ueuse .favbox .addabi{
background-color: var(--dark-background-color);
color:var(--main-color);
+ border: solid 1px var(--dark-border-color);
}
.ueuse .favbox .addabi:hover{
background-color: var(--main-color);
color: var(--sub-color);;
+ border: solid 1px var(--main-color);
}
.ueuse .favbox .share{
background-color: var(--dark-background-color);
color:var(--main-color);
+ border: solid 1px var(--dark-border-color);
}
.ueuse .favbox .share:hover{
background-color: var(--main-color);
color: var(--sub-color);;
+ border: solid 1px var(--main-color);
}
.ueuse .favbox .bookmark{
background-color: var(--dark-background-color);
color:var(--main-color);
+ border: solid 1px var(--dark-border-color);
}
.ueuse .favbox .bookmark:hover{
background-color: var(--main-color);
color: var(--sub-color);;
+ border: solid 1px var(--main-color);
}
.ueuse .favbox .bookmark_after{
background-color: var(--main-color);
color: var(--sub-color);
+ border: solid 1px var(--main-color);
}
.ueuse hr{
- border-top: 1px solid var(--dark-subtext-color);
+ border-top: 1px solid var(--dark-border-color);
}
.ueuse .nsfw{
- border: none;
+ border: 1px solid var(--dark-border-color);
background-color: var(--dark-background-color);
}
.ueuse .nsfw_main{
- border: none;
+ border: 1px solid var(--dark-border-color);
}
.ueuse .profilebox p{
@@ -7601,7 +7734,7 @@ noscript .noscript_modal .inner .center_text p{
.ueuse .reuse_box{
background-color: var(--dark-background-color);
- border: none;
+ border: 1px solid var(--dark-border-color);
}
.ueuse .reuse_box .reuse_flebox a {
color:var(--sub-color);
@@ -7614,6 +7747,9 @@ noscript .noscript_modal .inner .center_text p{
border: none;
background-color: var(--dark-sub-color);
}
+ .ueuse .youtube_and_nicovideo_player iframe{
+ border: 1px solid var(--dark-border-color);
+ }
.userheader h2{
color:var(--sub-color);
@@ -7687,11 +7823,9 @@ noscript .noscript_modal .inner .center_text p{
.fzone .follow .fbtn_un:hover{
background-color: var(--dark-sub-color);
color: var(--dark-text-color);
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
width:125px;
}
.fzone .follow .fbtn_un:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
width:115px;
}
@@ -7772,9 +7906,14 @@ noscript .noscript_modal .inner .center_text p{
color:var(--main-color);
}
+ .send_progress{
+ box-shadow: 0 -1px 0 var(--dark-border-color);
+ }
+
.sendbox{
+ border-top: solid 1px var(--dark-border-color);
background-color: var(--dark-sub-color);
- border:none;
+ box-shadow: 0 1px 0 var(--dark-border-color);
}
.sendbox p{
@@ -7791,7 +7930,7 @@ noscript .noscript_modal .inner .center_text p{
.sendbox .emoji_picker{
background-color: var(--dark-background-color);
- border: none;
+ border: solid 1px var(--dark-border-color);
}
.sendbox .emoji_picker p{
color: var(--dark-subtext-color);
@@ -7816,7 +7955,8 @@ noscript .noscript_modal .inner .center_text p{
.emjtex{
background-color: var(--dark-sub-color);
- border: none;
+ border-color: var(--dark-border-color);
+ box-shadow: var(--dark-border-color);
}
.emjtex:hover{
background-color: color-mix(in srgb, var(--dark-sub-color) 95%, #FFF);
@@ -7830,6 +7970,14 @@ noscript .noscript_modal .inner .center_text p{
color:var(--dark-subtext-color);
}
+ .rp .totop{
+ width: 14px;
+ height: 8px;
+ border-left: 2px solid var(--dark-text-color);
+ border-bottom: 2px solid var(--dark-text-color);
+ border-bottom-left-radius: 6px;
+ }
+
.formarea{
background-color: var(--dark-sub-color);
}
@@ -7904,7 +8052,7 @@ noscript .noscript_modal .inner .center_text p{
.inbox {
background: var(--dark-background-color);
color: var(--background-color);
- border: none;
+ border: 1px solid var(--dark-border-color);
}
.inbox::placeholder {
@@ -7944,7 +8092,7 @@ noscript .noscript_modal .inner .center_text p{
.server_code{
background-color: var(--dark-background-color);
- border: none;
+ border: 1px solid var(--dark-border-color);
}
.server_code details{
color: var(--dark-subtext-color);
@@ -7955,27 +8103,28 @@ noscript .noscript_modal .inner .center_text p{
.terms{
- background-color: var(--dark-background-color);
+ background-color: var(--dark-sub-color);
+ border: solid 1px var(--dark-border-color);
}
.terms h1{
- color: var(--dark-subtext-color);
+ color: var(--dark-text-color);
}
.terms h2{
- color: var(--background-color);
+ color: var(--dark-text-color);
}
.terms h3{
- color: var(--background-color);
+ color: var(--dark-text-color);
}
.terms h4{
- color: var(--background-color);
+ color: var(--dark-text-color);
}
.terms p{
- color: var(--background-color);
+ color: var(--dark-text-color);
}
.terms .code{
@@ -7991,36 +8140,39 @@ noscript .noscript_modal .inner .center_text p{
}
.terms .p2c{
- color: var(--dark-subtext-color);
+ color: var(--dark-text-color);
}
.terms .p3{
- color: var(--background-color);
+ color: var(--dark-text-color);
}
.terms .sp2c{
- color: var(--dark-subtext-color);
+ color: var(--dark-text-color);
}
.terms .sp3{
- color: var(--background-color);
+ color: var(--dark-text-color);
}
.terms .err404 h1{
- color: var(--dark-subtext-color);
+ color: var(--dark-text-color);
}
.terms .err404 p{
- color: var(--background-color);
+ color: var(--dark-text-color);
}
.this{
background-color: color-mix(in srgb, var(--link-color) 30%, var(--dark-background-color))!important;
- border: none !important;
+ border-top: solid 1px var(--dark-border-color);
}
.notification{
background-color: var(--dark-sub-color);
- border: none;
+ border-bottom: solid 1px var(--dark-border-color);
+ }
+ .notification:first-child {
+ border-top: solid 1px var(--dark-border-color);
}
.notification .flebox a{
@@ -8128,11 +8280,11 @@ noscript .noscript_modal .inner .center_text p{
}
.tlchange{
- background-color: var(--dark-background-color);
- border: none;
+ background-color: var(--dark-sub-color);
+ box-shadow: 0 1px 0 var(--dark-border-color);
}
.tlchange .btn{
- background: var(--dark-background-color);
+ background: var(--dark-sub-color);
color: var(--background-color);
}
.tlchange .on{
@@ -8142,11 +8294,11 @@ noscript .noscript_modal .inner .center_text p{
.select_utl{
- background-color: var(--dark-background-color);
+ background-color: var(--dark-sub-color);
}
.select_utl .btn{
- background: var(--dark-background-color);
+ background: var(--dark-sub-color);
color: var(--border-color);
}
.select_utl .btmline{
@@ -8155,11 +8307,11 @@ noscript .noscript_modal .inner .center_text p{
}
.admin_settings .admin_left{
- background-color: var(--dark-background-color);
- border-right: none;
+ background-color: var(--dark-sub-color);
+ border-right: solid 1px var(--dark-border-color);
}
.admin_leftbtn{
- background-color: var(--dark-background-color);
+ background-color: var(--dark-sub-color);
color:var(--main-color);
}
.admin_leftbtn:hover{
@@ -8229,11 +8381,11 @@ noscript .noscript_modal .inner .center_text p{
}
.overview_cnt_l{
background-color: var(--dark-background-color);
- border: none;
+ border: solid 1px var(--dark-border-color);
}
.overview_cnt_r{
background-color: var(--dark-background-color);
- border: none;
+ border: solid 1px var(--dark-border-color);
}
.overview p{
color: var(--dark-text-color);
@@ -8251,7 +8403,7 @@ noscript .noscript_modal .inner .center_text p{
box-shadow:none;
}
.f_c_area{
- background-color: var(--dark-background-color);
+ background-color: var(--dark-sub-color);
}
.f_c_area .fcnt p{
color: var(--dark-text-color);
@@ -8353,7 +8505,7 @@ noscript .noscript_modal .inner .center_text p{
.actionlog {
background-color: var(--dark-background-color);
- border: solid 1px var(--dark-background-color);
+ border: solid 1px var(--dark-border-color);
}
.actionlog details {
color: var(--dark-text-color);
@@ -8376,4 +8528,8 @@ noscript .noscript_modal .inner .center_text p{
.actionlog p {
color: var(--dark-text-color);
}
+ .switch_label {
+ background: var(--dark-background-color);
+ border: solid 1px var(--dark-border-color);
+ }
}
\ No newline at end of file
diff --git a/css/style.css b/css/style.css
index a411bdf..ffb62e3 100644
--- a/css/style.css
+++ b/css/style.css
@@ -195,16 +195,18 @@ body{
display: flex;
width: 100%;
padding: 0px;
+ justify-content: space-between;
}
.textbox .cntzone .usercnt{
margin-top: 24px;
- margin-left: 12px;
- margin-right: 12px;
- width: 43%;
+ margin-left: 0px;
+ margin-right: 0px;
+ width: calc(50% - 52px);
height: 5dvh;
border-radius: 15px;
background-color: var(--sub-color);
+ border: solid 1px var(--border-color);
padding: 18px;
}
@@ -243,8 +245,7 @@ body{
object-fit: cover;
width: 100%;
height: 180px;
- border-radius: 10px;
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
+ border-radius: 15px;
margin: 0px;
}
@@ -307,7 +308,6 @@ body{
text-align: center;
margin-left: auto;
margin-right: auto;
-
}
label > input {
@@ -334,15 +334,12 @@ label > input {
font-weight: normal;
text-decoration:none;
text-align: center;
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15);
transition: all 250ms ease-in-out;
}
.irobutton:hover{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
padding: 8px 22%;
}
.irobutton:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
padding: 8px 18%;
}
@@ -358,23 +355,20 @@ label > input {
text-align: center;
- background-color: var(--sub-color);
+ background-color: var(--dark-subtext-color);
+ color: var(--dark-text-color);
border-radius: 50px;
- color:var(--main-color);
font-size: 22px;
font-family: var(--Head-fonts), sans-serif;
font-weight: normal;
text-decoration:none;
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15);
transition: all 250ms ease-in-out;
}
.sirobutton:hover{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
padding: 8px 22%;
}
.sirobutton:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
padding: 8px 18%;
}
@@ -464,7 +458,7 @@ label > input {
}
.inbox {
- width: calc(100% - 24px);
+ width: calc(100% - 20px);
padding: 8px 10px;
border: none;
border-radius: 10px;
@@ -474,7 +468,6 @@ label > input {
font-size: 16px;
line-height: 1.5;
white-space: nowrap;
- box-shadow: 0px 0px 25px rgba(0,0,0,0.03);
overflow-x: scroll;
overflow-y : scroll ;
transition: border 350ms ease-in-out;
@@ -846,11 +839,9 @@ main h1{
.fbtn:hover{
background-color: var(--main-color);
color: var(--sub-color);
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .2);
width:55%;
}
.fbtn:active{
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05);
width:45%;
}
.textbox .authzone{
@@ -994,13 +985,9 @@ p img{
}
.formarea{
- padding-top: 0px;
- padding-bottom: 0px;
- padding-left: 0px;
- padding-right: 0px;
+ padding: 12px;
border-radius: 15px;
background-color: none;
- border: none;
margin-top: 32px;
}
@@ -1073,7 +1060,6 @@ p img{
padding-right: 12px;
border-radius: 15px;
background-color: var(--background-color);
- box-shadow:0 0px 48px 0 rgba(0, 0, 0, .05) inset;
margin-top: 32px;
text-align: center;
margin-left: auto;
@@ -1239,6 +1225,7 @@ p img{
}
.textbox .cntzone .usercnt{
background-color: var(--dark-sub-color);
+ border: solid 1px var(--dark-border-color);
}
.textbox .cntzone .usercnt .p1{
@@ -1251,7 +1238,7 @@ p img{
.btnbox{
background-color: var(--dark-sub-color);
- border: none;
+ border: solid 1px var(--dark-border-color);
}
.irobutton{
background-color: var(--main-color);
@@ -1260,11 +1247,12 @@ p img{
.sirobutton{
background-color: var(--dark-background-color);
color:var(--main-color);
+ border: solid 1px var(--dark-border-color);
}
.formarea{
background-color: var(--dark-sub-color);
- border: none;
+ border: 1px solid var(--dark-border-color);
}
.formarea label{
color:var(--dark-text-color);
@@ -1284,7 +1272,7 @@ p img{
.inbox {
background: var(--dark-background-color);
color: var(--dark-text-color);
- border: none;
+ border: 1px solid var(--dark-border-color);
}
.flexbtn .irobutton{
diff --git a/db.php b/db.php
index 26e8f54..6fee8ba 100644
--- a/db.php
+++ b/db.php
@@ -1,14 +1,15 @@
+
+define( 'RATE_LM', '60'); // レートリミット(ユーズ/分)
+define( 'STOP_LA', '4'); // 自動停止ロードアベレージ上限
+// タイムゾーン設定
+date_default_timezone_set('Asia/Tokyo');
+?>
\ No newline at end of file
diff --git a/delete/delete.php b/delete/delete.php
index 4872ee9..940bce4 100644
--- a/delete/delete.php
+++ b/delete/delete.php
@@ -16,6 +16,7 @@ if (safetext(isset($_POST['uniqid'])) && safetext(isset($_POST['userid'])) && sa
exit;
}
+
$result = delete_ueuse($postUniqid, $postUserid, $loginid);
if($result[0] === true){
echo json_encode(['success' => true]);
diff --git a/errorpage/overcapacity.php b/errorpage/overcapacity.php
new file mode 100644
index 0000000..6d83241
--- /dev/null
+++ b/errorpage/overcapacity.php
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+503 Service Unavailable -
+
+
+
+
+
+
+
>
+
+
+
+

+
+
+
+
+
+
+
+
+
+
;?>)
+
+
の処理能力の限界を超えました
+
ごめんなさい...!
+ 現在の処理能力では対応できないほどの負荷がかかっています。
+ 時間をおいてから再度アクセスをお願いいたします。
+ (503 Service Unavailable)
+
+
+
+
+
\ No newline at end of file
diff --git a/function/function.php b/function/function.php
index 64198ab..1b2d000 100644
--- a/function/function.php
+++ b/function/function.php
@@ -67,6 +67,25 @@ function blockedIP($ip_addr) {
}
}
}
+function stopLoadAvg(){
+ if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
+ $loadAve = 0;
+ } else {
+ if (function_exists("sys_getloadavg")) {
+ $load = sys_getloadavg();
+ $loadAve = is_array($load) && isset($load[0]) ? $load[0] : 0;
+ } else {
+ $loadAve = 0;
+ }
+ }
+
+ if (defined('STOP_LA') && (int)STOP_LA !== -1) {
+ if ($loadAve > (int)STOP_LA) {
+ include_once __DIR__ . '/../errorpage/overcapacity.php';
+ exit;
+ }
+ }
+}
//通常のログイン処理
function uwuzuUserLogin($session, $cookie, $ip_addr, $operation_permission = "user") {
//セッション,クッキー,IPアドレス,閲覧権限(userかadminかの二種類)を受け取る
@@ -117,12 +136,15 @@ function uwuzuUserLogin($session, $cookie, $ip_addr, $operation_permission = "us
$is_login = true;
}else{
$is_login = false;
+ stopLoadAvg();
}
}else{
$is_login = true;
+ stopLoadAvg();
}
}else{
$is_login = false;
+ stopLoadAvg();
}
}else{
if(isset($session['userid']) && isset($session['username'])){
@@ -132,12 +154,15 @@ function uwuzuUserLogin($session, $cookie, $ip_addr, $operation_permission = "us
$is_login = true;
}else{
$is_login = false;
+ stopLoadAvg();
}
}else{
$is_login = true;
+ stopLoadAvg();
}
}else{
$is_login = false;
+ stopLoadAvg();
}
}else if(isset($cookie['userid']) && isset($cookie['username'])){
if($cookie['userid'] === $loginResponse["userid"] && $cookie['username'] === $loginResponse["username"]){
@@ -146,15 +171,19 @@ function uwuzuUserLogin($session, $cookie, $ip_addr, $operation_permission = "us
$is_login = true;
}else{
$is_login = false;
+ stopLoadAvg();
}
}else{
$is_login = true;
+ stopLoadAvg();
}
}else{
$is_login = false;
+ stopLoadAvg();
}
}else{
$is_login = false;
+ stopLoadAvg();
}
}
@@ -211,6 +240,14 @@ function uwuzuUserLogin($session, $cookie, $ip_addr, $operation_permission = "us
}
}
+ //JobがあればJobを実行する---------------------------------------------------
+ $job = getJob($pdo, $userid);
+ if(!(empty($job))){
+ if($job["job"] == "deleteUser"){
+ deleteUser($pdo, $job["userid"], $job["step"], $job["uniqid"]);
+ }
+ }
+
return $loginResponse;
}else{
return false;
@@ -387,6 +424,27 @@ function check_mime_video($tmp_name){
return false;
}
}
+function convert_mime($mime_type){
+ $safe_img_mime = array(
+ "image/gif" => 'gif',
+ "image/jpeg" => 'jpg',
+ "image/png" => 'png',
+ "image/svg+xml" => 'svg',
+ "image/webp" => 'webp',
+ "image/bmp" => 'bmp',
+ "image/x-icon" => 'ico',
+ "image/tiff" => 'tiff',
+ "video/mpeg" => 'mpeg',
+ "video/mp4" => 'mp4',
+ "video/webm" => 'webm',
+ "video/x-msvideo" => 'avi',
+ );
+ if(isset($safe_img_mime[$mime_type])){
+ return $safe_img_mime[$mime_type];
+ }else{
+ return false;
+ }
+}
//ファイル形式チェック(Base64の場合)
function base64_mime($Base64,$userid){
$Base64 = base64_decode($Base64);
@@ -519,6 +577,108 @@ function resizeImage($filePath, $maxWidth, $maxHeight) {
}
}
+function uploadAmazonS3($tmp_name){
+ if(check_mime_video($tmp_name) == false){
+ $is_video = false;
+ }else{
+ $is_video = true;
+ }
+ $credentials = [
+ 'key' => AMS3_ACCESSKEY,
+ 'secret' => AMS3_SECRETKEY,
+ ];
+
+ $bucket = AMS3_BUCKET_NM;
+ $srcFilePath = $tmp_name;
+ if($is_video == true){
+ $mime = check_mime_video($srcFilePath);
+ $extension = convert_mime($mime);
+ }else{
+ $mime = check_mime($srcFilePath);
+ $extension = convert_mime($mime);
+ }
+ $key = AMS3_PREFIX_NM.'/'.createUniqId().'' . '.' . $extension;
+
+ if(AMS3_IS_S3FPS_ == 'true'){
+ $S3FPS = true;
+ }else{
+ $S3FPS = false;
+ }
+
+ try {
+ $s3Client = new Aws\S3\S3Client([
+ 'endpoint' => AMS3_ENDPOINTS,
+ 'region' => AMS3_REGION_NM,
+ 'version' => 'latest',
+ 'credentials' => $credentials,
+ 'use_path_style_endpoint' => $S3FPS,
+ ]);
+ $result = $s3Client->putObject([
+ 'Bucket' => $bucket,
+ 'Key' => $key,
+ 'SourceFile' => $srcFilePath,
+ 'ContentType' => $mime,
+ ]);
+ if($result){
+ $url = AMS3_BASE_URLS . '/' . $key;
+ return $url;
+ }else{
+ actionLog(null, "error", "uploadAmazonS3", null, "アップロードに失敗しました", 4);
+ return false;
+ }
+ } catch (Aws\S3\Exception\S3Exception $e) {
+ actionLog(null, "error", "uploadAmazonS3", null, $e->getMessage(), 4);
+ return false;
+ }
+}
+
+function deleteAmazonS3($url){
+ $key = explode("/", mb_substr(parse_url($url, PHP_URL_PATH), 1));
+ array_shift($key);//最初の一個を消す
+ $key = implode("/", $key);
+
+ $credentials = [
+ 'key' => AMS3_ACCESSKEY,
+ 'secret' => AMS3_SECRETKEY,
+ ];
+
+ $bucket = AMS3_BUCKET_NM;
+ if(AMS3_IS_S3FPS_ == 'true'){
+ $S3FPS = true;
+ }else{
+ $S3FPS = false;
+ }
+
+ try {
+ $s3Client = new Aws\S3\S3Client([
+ 'endpoint' => AMS3_ENDPOINTS,
+ 'region' => AMS3_REGION_NM,
+ 'version' => 'latest',
+ 'credentials' => $credentials,
+ 'use_path_style_endpoint' => $S3FPS,
+ ]);
+ $is_hasfile = $s3Client->doesObjectExistV2($bucket, $key, false, []);
+ if($is_hasfile == true){
+ $result = $s3Client->deleteObject([
+ 'Bucket' => $bucket,
+ 'Key' => $key
+ ]);
+ if($result){
+ return true;
+ }else{
+ actionLog(null, "error", "deleteAmazonS3", null, "削除に失敗しました", 4);
+ return false;
+ }
+ }else{
+ actionLog(null, "error", "deleteAmazonS3", null, $key."が既に削除されていました", 1);
+ return true;
+ }
+ } catch (Aws\S3\Exception\S3Exception $e) {
+ actionLog(null, "error", "deleteAmazonS3", null, $e->getMessage(), 4);
+ return false;
+ }
+}
+
//文字装飾・URL変換など
function processMarkdownAndWrapEmptyLines($markdownText) {
$placeholders = [];
@@ -800,6 +960,28 @@ function YouTube_and_nicovideo_Links($postText) {
return $postText;
}
+function to_null($value) {
+ $null_conditions = [
+ "ueuse" => "",
+ "photo1" => "none",
+ "photo2" => "none",
+ "photo3" => "none",
+ "photo4" => "none",
+ "video1" => "none",
+ "rpuniqid" => "",
+ "ruuniqid" => "",
+ "abi" => "none",
+ ];
+
+ foreach ($null_conditions as $key => $invalid_value) {
+ if (isset($value[$key]) && $value[$key] === $invalid_value) {
+ $value[$key] = null;
+ }
+ }
+
+ return $value;
+}
+
function UserAgent_to_Device($useragent) {
if(preg_match('/Windows\sNT\s10.0/', $useragent)) {
$device = "Windows 10/11";
@@ -1029,9 +1211,27 @@ function send_notification($to,$from,$title,$message,$url,$category){
}
// ユーズするとき全部この関数
function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$photo4,$video1,$nsfw,$aibwm){
- //AIBlockWaterMark--------------------------------------------
- require('../settings_admin/plugin_settings/aiblockwatermark_settings.php');
+ // AIBlockWaterMark--------------------------------------------
+ require_once(__DIR__ . '/../settings_admin/plugin_settings/aiblockwatermark_settings.php');
//------------------------------------------------------
+ if ($aibwm === true && !empty(AIBWM_CHK) && AIBWM_CHK == "true") {
+ if (file_exists(__DIR__ . '/../plugin/AIBlockWaterMark/aiblockwatermark.php')) {
+ require(__DIR__ . '/../plugin/AIBlockWaterMark/aiblockwatermark.php');
+ }
+ }
+ //------------------------------------------------------
+ if (file_exists(__DIR__ . '/../settings_admin/plugin_settings/amazons3_settings.php')) {
+ require_once(__DIR__ . '/../settings_admin/plugin_settings/amazons3_settings.php');
+ if (defined('AMS3_CHKS') && AMS3_CHKS == "true") {
+ if (file_exists(__DIR__ . '/../plugin/aws/aws-autoloader.php')) {
+ require_once(__DIR__ . '/../plugin/aws/aws-autoloader.php');
+ } else {
+ actionLog(null, "error", "uploadAmazonS3", null, "AWS SDK for PHPが見つかりませんでした!", 4);
+ }
+ }
+ } else {
+ actionLog(null, "error", "uploadAmazonS3", null, "amazons3_settings.phpが見つかりませんでした!", 3);
+ }
$rpUniqid = safetext($rpUniqid);
$ruUniqid = safetext($ruUniqid);
@@ -1040,12 +1240,16 @@ function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$
$nsfw = safetext($nsfw);
$error_message = array();
- $mojisizefile = "../server/textsize.txt";
+ $mojisizefile = __DIR__ . "/../server/textsize.txt";
//投稿及び返信レート制限↓(分):デフォで60件/分まで
- $max_ueuse_rate_limit = 60;
+ if(!((int)RATE_LM === -1)){
+ $max_ueuse_rate_limit = (int)RATE_LM;
+ }else{
+ $max_ueuse_rate_limit = PHP_INT_MAX;
+ }
- $banurldomainfile = "../server/banurldomain.txt";
+ $banurldomainfile = __DIR__ . "/../server/banurldomain.txt";
$banurl_info = file_get_contents($banurldomainfile);
$banurl = array_filter(preg_split("/\r\n|\n|\r/", $banurl_info));
@@ -1059,7 +1263,7 @@ function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$
$pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option);
} catch(PDOException $e) {
actionLog($userid, "error", "send_ueuse", null, $e, 4);
- return false;
+ return [false, "DB_ERROR"];
}
if(!(empty($pdo))){
@@ -1094,6 +1298,10 @@ function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$
}
}
+ // 改行ユーズ確認
+ if(preg_match('/^[\n\r]+$/', $ueuse) === 1){
+ $error_message[] = '内容を入力してください。(INPUT_PLEASE)';
+ }
}
$old_datetime = date("Y-m-d H:i:00");
@@ -1115,28 +1323,41 @@ function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$
if(!(empty($uploadedFile['tmp_name']))){
if(check_mime($uploadedFile['tmp_name'])){
// アップロードされたファイルの拡張子を取得
- $extension = strtolower(pathinfo($uploadedFile['name'], PATHINFO_EXTENSION));
- // 新しいファイル名を生成(uniqid + 拡張子)
- $newFilename = createUniqId() . '-'.$userid.'.' . $extension;
- // 保存先のパスを生成
- $uploadedPath = '../ueuseimages/' . $newFilename;
- // EXIF削除
+ $extension = convert_mime(check_mime($uploadedFile['tmp_name']));
delete_exif($extension, $uploadedFile['tmp_name']);
- // ファイルを移動
- $result = move_uploaded_file($uploadedFile['tmp_name'], $uploadedPath);
-
- if ($result) {
- $save_photo1 = $uploadedPath; // 保存されたファイルのパスを使用
- } else {
- $errnum = $uploadedFile['error'];
- if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";}
- if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";}
- if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";}
- if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";}
- if($errnum === 6){$errcode = "TMP_FOLDER_NAI";}
- if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";}
- if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";}
- $error_message[] = 'アップロード失敗!(1)エラーコード:' .$errcode.'';
+ if($aibwm === true){
+ AIBlockWaterMark($uploadedFile['tmp_name'], $userid);
+ }
+ if(AMS3_CHKS == "true"){
+ $s3result = uploadAmazonS3($uploadedFile['tmp_name']);
+ }else{
+ // 新しいファイル名を生成(uniqid + 拡張子)
+ $newFilename = createUniqId() . '-'.$userid.'.' . $extension;
+ // 保存先のパスを生成
+ $uploadedPath = '../ueuseimages/' . $newFilename;
+ // ファイルを移動
+ $result = move_uploaded_file($uploadedFile['tmp_name'], __DIR__."/".$uploadedPath);
+
+ if ($result) {
+ $save_photo1 = $uploadedPath; // 保存されたファイルのパスを使用
+ } else {
+ $errnum = $uploadedFile['error'];
+ if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";}
+ if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";}
+ if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";}
+ if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";}
+ if($errnum === 6){$errcode = "TMP_FOLDER_NAI";}
+ if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";}
+ if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";}
+ $error_message[] = 'アップロード失敗!(1)エラーコード:' .$errcode.'';
+ }
+ }
+ if(isset($s3result)){
+ if($s3result == false){
+ $error_message[] = 'アップロード失敗!(1)エラーコード: S3ERROR';
+ }else{
+ $save_photo1 = $s3result; // S3に保存されたファイルのパスを使用
+ }
}
}else{
$error_message[] = "使用できない画像形式です。(SORRY_FILE_HITAIOU)";
@@ -1158,27 +1379,40 @@ function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$
if(!(empty($uploadedFile2['tmp_name']))){
if(check_mime($uploadedFile2['tmp_name'])){
// アップロードされたファイルの拡張子を取得
- $extension2 = strtolower(pathinfo($uploadedFile2['name'], PATHINFO_EXTENSION));
- // 新しいファイル名を生成(uniqid + 拡張子)
- $newFilename2 = createUniqId() . '-'.$userid.'.' . $extension2;
- // 保存先のパスを生成
- $uploadedPath2 = '../ueuseimages/' . $newFilename2;
- // EXIF削除
+ $extension2 = convert_mime(check_mime($uploadedFile2['tmp_name']));
delete_exif($extension2, $uploadedFile2['tmp_name']);
- // ファイルを移動
- $result2 = move_uploaded_file($uploadedFile2['tmp_name'], $uploadedPath2);
- if ($result2) {
- $save_photo2 = $uploadedPath2; // 保存されたファイルのパスを使用
- } else {
- $errnum = $uploadedFile2['error'];
- if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";}
- if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";}
- if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";}
- if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";}
- if($errnum === 6){$errcode = "TMP_FOLDER_NAI";}
- if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";}
- if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";}
- $error_message[] = 'アップロード失敗!(2)エラーコード:' .$errcode.'';
+ if($aibwm === true){
+ AIBlockWaterMark($uploadedFile2['tmp_name'], $userid);
+ }
+ if(AMS3_CHKS == "true"){
+ $s3result = uploadAmazonS3($uploadedFile2['tmp_name']);
+ }else{
+ // 新しいファイル名を生成(uniqid + 拡張子)
+ $newFilename2 = createUniqId() . '-'.$userid.'.' . $extension2;
+ // 保存先のパスを生成
+ $uploadedPath2 = '../ueuseimages/' . $newFilename2;
+ // ファイルを移動
+ $result2 = move_uploaded_file($uploadedFile2['tmp_name'], __DIR__."/".$uploadedPath2);
+ if ($result2) {
+ $save_photo2 = $uploadedPath2; // 保存されたファイルのパスを使用
+ } else {
+ $errnum = $uploadedFile2['error'];
+ if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";}
+ if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";}
+ if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";}
+ if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";}
+ if($errnum === 6){$errcode = "TMP_FOLDER_NAI";}
+ if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";}
+ if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";}
+ $error_message[] = 'アップロード失敗!(2)エラーコード:' .$errcode.'';
+ }
+ }
+ if(isset($s3result)){
+ if($s3result == false){
+ $error_message[] = 'アップロード失敗!(2)エラーコード: S3ERROR';
+ }else{
+ $save_photo2 = $s3result; // S3に保存されたファイルのパスを使用
+ }
}
}else{
$error_message[] = "使用できない画像形式です。(SORRY_FILE_HITAIOU)";
@@ -1200,27 +1434,40 @@ function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$
if(!(empty($uploadedFile3['tmp_name']))){
if(check_mime($uploadedFile3['tmp_name'])){
// アップロードされたファイルの拡張子を取得
- $extension3 = strtolower(pathinfo($uploadedFile3['name'], PATHINFO_EXTENSION));
- // 新しいファイル名を生成(uniqid + 拡張子)
- $newFilename3 = createUniqId() . '-'.$userid.'.' . $extension3;
- // 保存先のパスを生成
- $uploadedPath3 = '../ueuseimages/' . $newFilename3;
- // EXIF削除
+ $extension3 = convert_mime(check_mime($uploadedFile3['tmp_name']));
delete_exif($extension3, $uploadedFile3['tmp_name']);
- // ファイルを移動
- $result3 = move_uploaded_file($uploadedFile3['tmp_name'], $uploadedPath3);
- if ($result3) {
- $save_photo3 = $uploadedPath3; // 保存されたファイルのパスを使用
- } else {
- $errnum = $uploadedFile3['error'];
- if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";}
- if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";}
- if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";}
- if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";}
- if($errnum === 6){$errcode = "TMP_FOLDER_NAI";}
- if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";}
- if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";}
- $error_message[] = 'アップロード失敗!(3)エラーコード:' .$errcode.'';
+ if($aibwm === true){
+ AIBlockWaterMark($uploadedFile3['tmp_name'], $userid);
+ }
+ if(AMS3_CHKS == "true"){
+ $s3result = uploadAmazonS3($uploadedFile3['tmp_name']);
+ }else{
+ // 新しいファイル名を生成(uniqid + 拡張子)
+ $newFilename3 = createUniqId() . '-'.$userid.'.' . $extension3;
+ // 保存先のパスを生成
+ $uploadedPath3 = '../ueuseimages/' . $newFilename3;
+ // ファイルを移動
+ $result3 = move_uploaded_file($uploadedFile3['tmp_name'], __DIR__."/".$uploadedPath3);
+ if ($result3) {
+ $save_photo3 = $uploadedPath3; // 保存されたファイルのパスを使用
+ } else {
+ $errnum = $uploadedFile3['error'];
+ if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";}
+ if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";}
+ if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";}
+ if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";}
+ if($errnum === 6){$errcode = "TMP_FOLDER_NAI";}
+ if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";}
+ if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";}
+ $error_message[] = 'アップロード失敗!(3)エラーコード:' .$errcode.'';
+ }
+ }
+ if(isset($s3result)){
+ if($s3result == false){
+ $error_message[] = 'アップロード失敗!(3)エラーコード: S3ERROR';
+ }else{
+ $save_photo3 = $s3result; // S3に保存されたファイルのパスを使用
+ }
}
}else{
$error_message[] = "使用できない画像形式です。(SORRY_FILE_HITAIOU)";
@@ -1241,27 +1488,40 @@ function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$
if(!(empty($uploadedFile4['tmp_name']))){
if(check_mime($uploadedFile4['tmp_name'])){
// アップロードされたファイルの拡張子を取得
- $extension4 = strtolower(pathinfo($uploadedFile4['name'], PATHINFO_EXTENSION));
- // 新しいファイル名を生成(uniqid + 拡張子)
- $newFilename4 = createUniqId() . '-'.$userid.'.' . $extension4;
- // 保存先のパスを生成
- $uploadedPath4 = '../ueuseimages/' . $newFilename4;
- // EXIF削除
+ $extension4 = convert_mime(check_mime($uploadedFile4['tmp_name']));
delete_exif($extension4, $uploadedFile4['tmp_name']);
- // ファイルを移動
- $result4 = move_uploaded_file($uploadedFile4['tmp_name'], $uploadedPath4);
- if ($result4) {
- $save_photo4 = $uploadedPath4; // 保存されたファイルのパスを使用
- } else {
- $errnum = $uploadedFile4['error'];
- if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";}
- if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";}
- if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";}
- if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";}
- if($errnum === 6){$errcode = "TMP_FOLDER_NAI";}
- if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";}
- if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";}
- $error_message[] = 'アップロード失敗!(4)エラーコード:' .$errcode.'';
+ if($aibwm === true){
+ AIBlockWaterMark($uploadedFile4['tmp_name'], $userid);
+ }
+ if(AMS3_CHKS == "true"){
+ $s3result = uploadAmazonS3($uploadedFile4['tmp_name']);
+ }else{
+ // 新しいファイル名を生成(uniqid + 拡張子)
+ $newFilename4 = createUniqId() . '-'.$userid.'.' . $extension4;
+ // 保存先のパスを生成
+ $uploadedPath4 = '../ueuseimages/' . $newFilename4;
+ // ファイルを移動
+ $result4 = move_uploaded_file($uploadedFile4['tmp_name'], __DIR__."/".$uploadedPath4);
+ if ($result4) {
+ $save_photo4 = $uploadedPath4; // 保存されたファイルのパスを使用
+ } else {
+ $errnum = $uploadedFile4['error'];
+ if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";}
+ if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";}
+ if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";}
+ if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";}
+ if($errnum === 6){$errcode = "TMP_FOLDER_NAI";}
+ if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";}
+ if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";}
+ $error_message[] = 'アップロード失敗!(4)エラーコード:' .$errcode.'';
+ }
+ }
+ if(isset($s3result)){
+ if($s3result == false){
+ $error_message[] = 'アップロード失敗!(1)エラーコード: S3ERROR';
+ }else{
+ $save_photo4 = $s3result; // S3に保存されたファイルのパスを使用
+ }
}
}else{
$error_message[] = "使用できない画像形式です。(SORRY_FILE_HITAIOU)";
@@ -1279,26 +1539,37 @@ function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$
if(!(empty($uploadedVideo['tmp_name']))){
if(check_mime_video($uploadedVideo['tmp_name'])){
- // アップロードされたファイルの拡張子を取得
- $extensionVideo = strtolower(pathinfo($uploadedVideo['name'], PATHINFO_EXTENSION)); // 小文字に変換
- // 正しい拡張子の場合、新しいファイル名を生成
- $newFilenameVideo = createUniqId() . '-'.$userid.'.' . $extensionVideo;
- // 保存先のパスを生成
- $uploadedPathVideo = '../ueusevideos/' . $newFilenameVideo;
- // ファイルを移動
- $resultVideo = move_uploaded_file($uploadedVideo['tmp_name'], $uploadedPathVideo);
- if ($resultVideo) {
- $save_video1 = $uploadedPathVideo; // 保存されたファイルのパスを使用
- } else {
- $errnum = $uploadedVideo['error'];
- if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";}
- if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";}
- if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";}
- if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";}
- if($errnum === 6){$errcode = "TMP_FOLDER_NAI";}
- if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";}
- if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";}
- $error_message[] = 'アップロード失敗!(5)エラーコード:' .$errcode.'';
+ if(AMS3_CHKS == "true"){
+ $s3result = uploadAmazonS3($uploadedVideo['tmp_name']);
+ }else{
+ // アップロードされたファイルの拡張子を取得
+ $extensionVideo = convert_mime(check_mime_video($uploadedVideo['tmp_name']));
+ // 正しい拡張子の場合、新しいファイル名を生成
+ $newFilenameVideo = createUniqId() . '-'.$userid.'.' . $extensionVideo;
+ // 保存先のパスを生成
+ $uploadedPathVideo = '../ueusevideos/' . $newFilenameVideo;
+ // ファイルを移動
+ $resultVideo = move_uploaded_file($uploadedVideo['tmp_name'], __DIR__."/".$uploadedPathVideo);
+ if ($resultVideo) {
+ $save_video1 = $uploadedPathVideo; // 保存されたファイルのパスを使用
+ } else {
+ $errnum = $uploadedVideo['error'];
+ if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";}
+ if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";}
+ if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";}
+ if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";}
+ if($errnum === 6){$errcode = "TMP_FOLDER_NAI";}
+ if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";}
+ if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";}
+ $error_message[] = 'アップロード失敗!(5)エラーコード:' .$errcode.'';
+ }
+ }
+ if(isset($s3result)){
+ if($s3result == false){
+ $error_message[] = 'アップロード失敗!(5)エラーコード: S3ERROR';
+ }else{
+ $save_video1 = $s3result; // S3に保存されたファイルのパスを使用
+ }
}
} else {
$error_message[] = '対応していないファイル形式です!(SORRY_FILE_HITAIOU)';
@@ -1308,22 +1579,6 @@ function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$
}
}
- if($aibwm === true && !empty(AIBWM_CHK && AIBWM_CHK == "true")){
- require('../plugin/AIBlockWaterMark/aiblockwatermark.php');
- if(!($save_photo1 == "none")){
- AIBlockWaterMark($save_photo1, $userid);
- }
- if(!($save_photo2 == "none")){
- AIBlockWaterMark($save_photo2, $userid);
- }
- if(!($save_photo3 == "none")){
- AIBlockWaterMark($save_photo3, $userid);
- }
- if(!($save_photo4 == "none")){
- AIBlockWaterMark($save_photo4, $userid);
- }
- }
-
if(empty($error_message)) {
// 書き込み日時を取得
$datetime = date("Y-m-d H:i:s");
@@ -1494,35 +1749,48 @@ function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$
}
}else{
$error_message[] = '返信とリユーズを同時に行うことはできません。(ERROR)';
- return $error_message;
+ return [false, $error_message];
}
if( $res ) {
- return null;
+ return [true, $uniqid];
} else {
$error_message[] = "ユーズに失敗しました。(REGISTERED_DAME)";
- return $error_message;
+ return [false, $error_message];
}
// プリペアドステートメントを削除
$stmt = null;
}else{
actionLog($userid, "error", "send_ueuse", null, $error_message, 0);
- return $error_message;
+ return [false, $error_message];
}
}else{
actionLog($userid, "error", "send_ueuse", null, $error_message, 0);
- return $error_message;
+ return [false, $error_message];
}
}else{
$error_message[] = "投稿回数のレート制限を超過しています。(OVER_RATE_LIMIT)";
actionLog($userid, "error", "send_ueuse", null, $error_message, 0);
- return $error_message;
+ return [false, $error_message];
}
}
}
function delete_ueuse($uniqid, $userid, $account_id){
+ if(file_exists("../settings_admin/plugin_settings/amazons3_settings.php")){
+ require_once '../settings_admin/plugin_settings/amazons3_settings.php';
+ if(AMS3_CHKS == "true"){
+ if(file_exists("../plugin/aws/aws-autoloader.php")){
+ require_once '../plugin/aws/aws-autoloader.php';
+ }else{
+ actionLog(null, "error", "uploadAmazonS3", null, "AWS SDK for PHPが見つかりませんでした!", 4);
+ }
+ }
+ }else{
+ actionLog(null, "error", "uploadAmazonS3", null, "amazons3_settings.phpが見つかりませんでした!", 3);
+ }
+
if (safetext(isset($uniqid)) && safetext(isset($userid)) && safetext(isset($account_id))){
$postUserid = safetext($userid);
$postUniqid = safetext($uniqid);
@@ -1558,42 +1826,72 @@ function delete_ueuse($uniqid, $userid, $account_id){
$photo_and_video = $photo_query->fetch();
if(!($photo_and_video["photo1"] == "none")){
- $photoDelete1 = glob($photo_and_video["photo1"]); // 「-ユーザーID.拡張子」というパターンを検索
- foreach ($photoDelete1 as $photo1) {
- if (is_file($photo1)) {
- unlink($photo1);
+ if(filter_var($photo_and_video["photo1"], FILTER_VALIDATE_URL)){
+ if(AMS3_CHKS == "true"){
+ deleteAmazonS3($photo_and_video["photo1"]);
+ }
+ }else{
+ $photoDelete1 = glob($photo_and_video["photo1"]); // 「-ユーザーID.拡張子」というパターンを検索
+ foreach ($photoDelete1 as $photo1) {
+ if (is_file($photo1)) {
+ unlink($photo1);
+ }
}
}
}
if(!($photo_and_video["photo2"] == "none")){
- $photoDelete2 = glob($photo_and_video["photo2"]); // 「-ユーザーID.拡張子」というパターンを検索
- foreach ($photoDelete2 as $photo2) {
- if (is_file($photo2)) {
- unlink($photo2);
+ if(filter_var($photo_and_video["photo2"], FILTER_VALIDATE_URL)){
+ if(AMS3_CHKS == "true"){
+ deleteAmazonS3($photo_and_video["photo2"]);
+ }
+ }else{
+ $photoDelete2 = glob($photo_and_video["photo2"]); // 「-ユーザーID.拡張子」というパターンを検索
+ foreach ($photoDelete2 as $photo2) {
+ if (is_file($photo2)) {
+ unlink($photo2);
+ }
}
}
}
if(!($photo_and_video["photo3"] == "none")){
- $photoDelete3 = glob($photo_and_video["photo3"]); // 「-ユーザーID.拡張子」というパターンを検索
- foreach ($photoDelete3 as $photo3) {
- if (is_file($photo3)) {
- unlink($photo3);
+ if(filter_var($photo_and_video["photo3"], FILTER_VALIDATE_URL)){
+ if(AMS3_CHKS == "true"){
+ deleteAmazonS3($photo_and_video["photo3"]);
+ }
+ }else{
+ $photoDelete3 = glob($photo_and_video["photo3"]); // 「-ユーザーID.拡張子」というパターンを検索
+ foreach ($photoDelete3 as $photo3) {
+ if (is_file($photo3)) {
+ unlink($photo3);
+ }
}
}
}
if(!($photo_and_video["photo4"] == "none")){
- $photoDelete4 = glob($photo_and_video["photo4"]); // 「-ユーザーID.拡張子」というパターンを検索
- foreach ($photoDelete4 as $photo4) {
- if (is_file($photo4)) {
- unlink($photo4);
+ if(filter_var($photo_and_video["photo4"], FILTER_VALIDATE_URL)){
+ if(AMS3_CHKS == "true"){
+ deleteAmazonS3($photo_and_video["photo4"]);
+ }
+ }else{
+ $photoDelete4 = glob($photo_and_video["photo4"]); // 「-ユーザーID.拡張子」というパターンを検索
+ foreach ($photoDelete4 as $photo4) {
+ if (is_file($photo4)) {
+ unlink($photo4);
+ }
}
}
}
if(!($photo_and_video["video1"] == "none")){
- $videoDelete1 = glob($photo_and_video["video1"]); // 「-ユーザーID.拡張子」というパターンを検索
- foreach ($videoDelete1 as $video1) {
- if (is_file($video1)) {
- unlink($video1);
+ if(filter_var($photo_and_video["video1"], FILTER_VALIDATE_URL)){
+ if(AMS3_CHKS == "true"){
+ deleteAmazonS3($photo_and_video["video1"]);
+ }
+ }else{
+ $videoDelete1 = glob($photo_and_video["video1"]); // 「-ユーザーID.拡張子」というパターンを検索
+ foreach ($videoDelete1 as $video1) {
+ if (is_file($video1)) {
+ unlink($video1);
+ }
}
}
}
@@ -1603,6 +1901,8 @@ function delete_ueuse($uniqid, $userid, $account_id){
$result3 = $ruChkquery->fetch();
if($result3 > 0){
+ // トランザクション開始
+ $pdo->beginTransaction();
try {
// 削除クエリを実行
$rudeleteQuery = $pdo->prepare("DELETE FROM ueuse WHERE ruuniqid = :uniqid AND ueuse = ''");
@@ -1635,6 +1935,8 @@ function delete_ueuse($uniqid, $userid, $account_id){
changePopularity($pdo, $result["rpuniqid"], $userid, -3);
}
+ // トランザクション開始
+ $pdo->beginTransaction();
try {
// 削除クエリを実行
$deleteQuery = $pdo->prepare("DELETE FROM ueuse WHERE uniqid = :uniqid AND account = :userid");
@@ -1643,6 +1945,7 @@ function delete_ueuse($uniqid, $userid, $account_id){
$res = $deleteQuery->execute();
if ($res) {
+ $pdo->commit();
return [true, "削除に成功しました!"];
} else {
$pdo->rollBack();
@@ -1912,6 +2215,272 @@ function unblock_user($pdo, $to_userid, $userid){
return false;
}
}
+//--------------------アカウント削除--------------------
+function deleteUser($pdo, $userid, $step, $job_uniqid){
+ $userdata = getUserData($pdo, $userid);
+ if(empty($userdata)){
+ changeJob($pdo, $userid, $job_uniqid, "delete_account", "finished");
+ return false;
+ }else{
+ $userid = $userdata["userid"];
+ if($step == "stop_account"){
+ if(changeJob($pdo, $userid, $job_uniqid, "stop_account", "running")){
+ $newrole = "ice";
+ $newtoken = "ice";
+ $newadmin = "none";
+ // トランザクション開始
+ $pdo->beginTransaction();
+
+ try {
+ $stmt = $pdo->prepare("UPDATE account SET role = :role,token = :newtoken,admin = :newadmin WHERE userid = :userid");
+
+ $stmt->bindValue(':role', $newrole, PDO::PARAM_STR);
+ $stmt->bindValue(':newtoken', $newtoken, PDO::PARAM_STR);
+ $stmt->bindValue(':newadmin', $newadmin, PDO::PARAM_STR);
+
+ $stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
+
+ $res = $stmt->execute();
+
+ if ($res) {
+ $pdo->commit();
+
+ send_notification($userid, "uwuzu-fromsys", "🗑️アカウントの削除が開始されました🗑️", "アカウントの削除が開始されました!\n今後、アカウントのデータは順次削除されます。\n削除には時間がかかります。\n\nログアウトしてお待ち下さい。\n\nアカウントの復旧はできません。", "/others", "system");
+ if(changeJob($pdo, $userid, $job_uniqid, "delete_ueuse", "waiting")){
+ return true;
+ }else{
+ actionLog($userid, "error", "deleteAccount", null, "Job("+$job_uniqid+")のステータスをdelete_image-waitingに変更失敗", 3);
+ return false;
+ }
+ } else {
+ $pdo->rollBack();
+ actionLog($userid, "error", "deleteUser", $userid, "アカウントの削除前凍結に失敗しました", 4);
+ if(changeJob($pdo, $userid, $job_uniqid, "stop_account", "waiting")){
+ return true;
+ }else{
+ actionLog($userid, "error", "deleteAccount", null, "Job("+$job_uniqid+")のステータスをstop_account-waitingに変更失敗", 3);
+ return false;
+ }
+ }
+ } catch (Exception $e) {
+ $pdo->rollBack();
+ actionLog($userid, "error", "deleteUser", $userid, "iceError: ".$e, 4);
+ if(changeJob($pdo, $userid, $job_uniqid, "stop_account", "error")){
+ return true;
+ }else{
+ actionLog($userid, "error", "deleteAccount", null, "Job("+$job_uniqid+")のステータスをstop_account-errorに変更失敗", 3);
+ return false;
+ }
+ }
+ }
+
+ }
+
+ if($step == "delete_ueuse"){
+ if(changeJob($pdo, $userid, $job_uniqid, "delete_ueuse", "running")){
+ // ユーズを直近100件取得
+ $getUeuse_query = $pdo->prepare("SELECT * FROM ueuse WHERE account = :userid ORDER BY datetime DESC LIMIT 50");
+ $getUeuse_query->bindValue(':userid', $userid, PDO::PARAM_STR);
+ $getUeuse_query->execute();
+ $getUeuse = $getUeuse_query->fetchAll();
+
+ foreach ($getUeuse as $ueuse) {
+ delete_ueuse($ueuse["uniqid"], $userid, $userdata["loginid"]);
+ }
+
+ if(count($getUeuse) >= 50){
+ if(changeJob($pdo, $userid, $job_uniqid, "delete_ueuse", "waiting")){
+ return true;
+ }else{
+ actionLog($userid, "error", "deleteAccount", null, "Job("+$job_uniqid+")のステータスをdelete_ueuse-waitingに変更失敗", 3);
+ return false;
+ }
+ }else{
+ if(changeJob($pdo, $userid, $job_uniqid, "delete_image", "waiting")){
+ return true;
+ }else{
+ actionLog($userid, "error", "deleteAccount", null, "Job("+$job_uniqid+")のステータスをdelete_image-waitingに変更失敗", 3);
+ return false;
+ }
+ }
+ }
+ }
+
+ if($step == "delete_image"){
+ if(changeJob($pdo, $userid, $job_uniqid, "delete_image", "running")){
+ // ユーザーの画像を削除
+ $folderPath = "../ueuseimages/";
+ $filesToDelete = glob($folderPath . "*-$userid.*");
+ foreach ($filesToDelete as $file) {
+ if (is_file($file)) {
+ unlink($file);
+ }
+ }
+ // ユーザーの動画を削除
+ $folderPath2 = "../ueusevideos/";
+ $filesToDelete2 = glob($folderPath2 . "*-$userid.*");
+ foreach ($filesToDelete2 as $file2) {
+ if (is_file($file2)) {
+ unlink($file2);
+ }
+ }
+
+ if(changeJob($pdo, $userid, $job_uniqid, "delete_follow", "waiting")){
+ return true;
+ }else{
+ actionLog($userid, "error", "deleteAccount", null, "Job("+$job_uniqid+")のステータスをdelete_follow-waitingに変更失敗", 3);
+ return false;
+ }
+ }
+ }
+
+ if($step == "delete_follow"){
+ if(changeJob($pdo, $userid, $job_uniqid, "delete_follow", "running")){
+ // フォロー・フォロワー情報を削除したい全てのアカウントを取得
+ $flw_query = $pdo->prepare("SELECT *
+ FROM account
+ WHERE FIND_IN_SET(:userid, follow) > 0
+ OR FIND_IN_SET(:userid, follower) > 0;
+ ");
+ $flw_query->bindValue(':userid', $userid, PDO::PARAM_STR);
+ $flw_query->execute();
+ $flw_accounts = $flw_query->fetchAll();
+
+ foreach ($flw_accounts as $account) {
+ unfollow_user($pdo, $account['userid'], $userid);
+ unfollow_user($pdo, $userid, $account['userid']);
+ }
+
+ // ユーザーIDを削除したい全てのアカウントを取得
+ $blk_query = $pdo->prepare("SELECT *
+ FROM account
+ WHERE FIND_IN_SET(:userid, blocklist) > 0;
+ ");
+ $blk_query->bindValue(':userid', $userid, PDO::PARAM_STR);
+ $blk_query->execute();
+ $blk_accounts = $blk_query->fetchAll();
+
+ foreach ($blk_accounts as $account) {
+ unblock_user($pdo, $userid, $account['userid']);
+ }
+
+ //いいねを外したいすべてのユーズを取得
+ $fav_ueuse_query = $pdo->prepare("SELECT *
+ FROM ueuse
+ WHERE FIND_IN_SET(:userid, favorite) > 0;
+ ");
+ $fav_ueuse_query->bindValue(':userid', $userid, PDO::PARAM_STR);
+ $fav_ueuse_query->execute();
+ $fav_ueuse_ueuses = $fav_ueuse_query->fetchAll();
+ foreach ($fav_ueuse_ueuses as $ueuse) {
+ addFavorite($pdo, $ueuse['uniqid'], $userid);
+ }
+
+ if(changeJob($pdo, $userid, $job_uniqid, "delete_account", "waiting")){
+ return true;
+ }else{
+ actionLog($userid, "error", "deleteAccount", null, "Job("+$job_uniqid+")のステータスをdelete_account-waitingに変更失敗", 3);
+ return false;
+ }
+ }
+ }
+
+ if($step == "delete_account"){
+ if(file_exists("../settings_admin/plugin_settings/amazons3_settings.php")){
+ require_once '../settings_admin/plugin_settings/amazons3_settings.php';
+ if(AMS3_CHKS == "true"){
+ if(file_exists("../plugin/aws/aws-autoloader.php")){
+ require_once '../plugin/aws/aws-autoloader.php';
+ }else{
+ actionLog(null, "error", "uploadAmazonS3", null, "AWS SDK for PHPが見つかりませんでした!", 4);
+ }
+ }
+ }else{
+ actionLog(null, "error", "uploadAmazonS3", null, "amazons3_settings.phpが見つかりませんでした!", 3);
+ }
+
+ if(changeJob($pdo, $userid, $job_uniqid, "delete_account", "running")){
+ $usericonurl = $userdata["iconname"];
+ if(filter_var($usericonurl, FILTER_VALIDATE_URL)){
+ if(AMS3_CHKS == "true"){
+ deleteAmazonS3($usericonurl);
+ }
+ }else{
+ $folderPath3 = "../usericons/";
+ $filesToDelete3 = glob($folderPath3 . "*-$userid.*"); // 「-ユーザーID.拡張子」というパターンを検索
+ // ファイルを順に削除
+ foreach ($filesToDelete3 as $file3) {
+ if (is_file($file3)) {
+ unlink($file3); // ファイルを削除
+ }
+ }
+ }
+
+ $userheadurl = $userdata["headname"];
+ if(filter_var($userheadurl, FILTER_VALIDATE_URL)){
+ if(AMS3_CHKS == "true"){
+ deleteAmazonS3($userheadurl);
+ }
+ }else{
+ $folderPath4 = "../userheads/";
+ $filesToDelete4 = glob($folderPath4 . "*-$userid.*"); // 「-ユーザーID.拡張子」というパターンを検索
+ // ファイルを順に削除
+ foreach ($filesToDelete4 as $file4) {
+ if (is_file($file4)) {
+ unlink($file4);
+ }
+ }
+ }
+
+ $pdo->beginTransaction();
+ try {
+ // 投稿削除クエリを実行
+ $deleteQuery = $pdo->prepare("DELETE FROM ueuse WHERE account = :userid");
+ $deleteQuery->bindValue(':userid', $userid, PDO::PARAM_STR);
+ $res = $deleteQuery->execute();
+
+ // 通知削除クエリを実行(自分宛ての通知)
+ $deleteQuery = $pdo->prepare("DELETE FROM notification WHERE touserid = :touserid");
+ $deleteQuery->bindValue(':touserid', $userid, PDO::PARAM_STR);
+ $res = $deleteQuery->execute();
+
+ // 通知削除クエリを実行(自分からの通知)
+ $deleteQuery = $pdo->prepare("DELETE FROM notification WHERE fromuserid = :fromuserid");
+ $deleteQuery->bindValue(':fromuserid', $userid, PDO::PARAM_STR);
+ $res = $deleteQuery->execute();
+
+ // アカウント削除クエリを実行
+ $deleteQuery = $pdo->prepare("DELETE FROM account WHERE userid = :userid");
+ $deleteQuery->bindValue(':userid', $userid, PDO::PARAM_STR);
+ $res = $deleteQuery->execute();
+
+ if($res) {
+ // コミット
+ $pdo->commit();
+ changeJob($pdo, $userid, $job_uniqid, "delete_account", "finished");
+ actionLog($userid, "success", "deleteAccount", null, "アカウント削除に成功", 1);
+
+ return true;
+ } else {
+ // ロールバック
+ $pdo->rollBack();
+ actionLog($userid, "error", "deleteAccount", null, "アカウント削除に失敗", 3);
+ changeJob($pdo, $userid, $job_uniqid, "delete_account", "error");
+
+ return false;
+ }
+ } catch (Exception $e) {
+ // エラーが発生した時はロールバック
+ $pdo->rollBack();
+ actionLog($userid, "error", "deleteAccount", null, $e, 4);
+ changeJob($pdo, $userid, $job_uniqid, "delete_account", "error");
+
+ return false;
+ }
+ }
+ }
+ }
+}
function changePopularity($pdo, $uniqid, $userid, $change_range){
if (!(empty($pdo)) && !(empty($uniqid))){
if(is_numeric($change_range)){
@@ -2038,6 +2607,42 @@ function getUserData($pdo, $userid) {
$query->execute();
return $query->fetch();
}
+function getUeuseData($pdo, $uniqid) {
+ $query = $pdo->prepare("SELECT * FROM ueuse WHERE uniqid = :uniqid");
+ $query->bindValue(':uniqid', $uniqid, PDO::PARAM_STR);
+ $query->execute();
+ $ueuseDatas = $query->fetch();
+
+ if (empty($ueuseDatas)) {
+ return false;
+ }
+
+ //リプライ数取得
+ $rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid");
+ $rpQuery->bindValue(':rpuniqid', $ueuseDatas['uniqid']);
+ $rpQuery->execute();
+ $rpData = $rpQuery->fetch(PDO::FETCH_ASSOC);
+
+ if ($rpData){
+ $ueuseDatas['reply_count'] = $rpData['reply_count'];
+ }
+
+ //リユーズ数取得
+ $ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid");
+ $ruQuery->bindValue(':ruuniqid', $ueuseDatas['uniqid']);
+ $ruQuery->execute();
+ $ruData = $ruQuery->fetch(PDO::FETCH_ASSOC);
+
+ if ($ruData){
+ $ueuseDatas['reuse_count'] = $ruData['reuse_count'];
+ }
+
+ $fav = $ueuseDatas['favorite'];
+ $favIds = explode(',', $fav);
+ $ueuseDatas["favorite_conut"] = count($favIds)-1;
+
+ return $ueuseDatas;
+}
function actionLog($userid, $type, $place, $target, $content, $importance){
if(empty($userid)){
@@ -2146,10 +2751,130 @@ function actionLog($userid, $type, $place, $target, $content, $importance){
}
}
}
+
+function addJob($pdo, $userid, $job, $step){
+ $userid = getUserData($pdo, $userid)["userid"];
+ if(empty($userid)){
+ return false;
+ }
+ if(empty($job)){
+ return false;
+ }
+ if(empty($step)){
+ $step = "start";
+ }
+
+ if(!(empty($pdo))){
+ $uniqid = createUniqId();
+ $datetime = date('Y-m-d H:i:s');
+ $status = "waiting";
+
+ // トランザクション開始
+ $pdo->beginTransaction();
+
+ try {
+ // SQL作成
+ $stmt = $pdo->prepare("INSERT INTO jobs (uniqid, userid, job, step, status, datetime) VALUES (:uniqid, :userid, :job, :step, :status, :datetime)");
+
+ $stmt->bindParam(':uniqid', $uniqid, PDO::PARAM_STR);
+ $stmt->bindParam(':userid', $userid, PDO::PARAM_STR);
+ $stmt->bindParam(':job', $job, PDO::PARAM_STR);
+ $stmt->bindParam(':step', $step, PDO::PARAM_STR);
+ $stmt->bindParam(':status', $status, PDO::PARAM_STR);
+ $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR);
+ $res = $stmt->execute();
+ if($res){
+ $pdo->commit();
+ return true;
+ }else{
+ actionLog($userid, "error", "addJob", null, "Jobを追加できませんでした!", 3);
+ $pdo->rollBack();
+ return false;
+ }
+ } catch(Exception $e) {
+ actionLog($userid, "error", "addJob", null, $e, 4);
+ $pdo->rollBack();
+ return false;
+ }
+ }
+}
+
+function changeJob($pdo, $userid, $uniqid, $step, $status){
+ if(empty($uniqid)){
+ return false;
+ }
+ if(empty($step)){
+ $step = "start";
+ }
+ if(empty($status)){
+ $status = "waiting";
+ }
+ $status_list = ["waiting","running","finished","error"];
+ if(in_array($status, $status_list)){
+ if(!(empty($pdo))){
+ $pdo->beginTransaction();
+
+ try {
+ $updateQuery = $pdo->prepare("UPDATE jobs SET step = :step, status = :status WHERE uniqid = :uniqid");
+ $updateQuery->bindValue(':step', $step, PDO::PARAM_STR);
+ $updateQuery->bindValue(':status', $status, PDO::PARAM_STR);
+ $updateQuery->bindValue(':uniqid', $uniqid, PDO::PARAM_STR);
+ $res = $updateQuery->execute();
+
+ if($res){
+ $pdo->commit();
+ return true;
+ }else{
+ $pdo->rollBack();
+ actionLog($userid, "error", "is_OtherSettings", null, "ジョブを編集できませんでした", 3);
+ return false;
+ }
+ } catch(Exception $e) {
+ actionLog($userid, "error", "changeJob", null, $e, 4);
+ $pdo->rollBack();
+ return false;
+ }
+ }
+ }else{
+ actionLog($userid, "error", "changeJob", null, "不正なステータスです!", 3);
+ return false;
+ }
+}
+
+function getJob($pdo, $userid){
+ if(empty($userid)){
+ return false;
+ }
+
+ if(!(empty($pdo))){
+ $query = $pdo->prepare("SELECT * FROM jobs WHERE status = 'waiting' ORDER BY datetime ASC LIMIT 1");
+ $query->execute();
+ $job = $query->fetch(PDO::FETCH_ASSOC);
+
+ if($job){
+ return $job;
+ }else{
+ return false;
+ }
+ }
+}
+
function safetext($text){
// テキストの安全化
- return htmlspecialchars($text, ENT_QUOTES, 'UTF-8', false);
+ return htmlspecialchars(preg_replace('/[\x00-\x08\x0b\x0c\x0e-\x1f]/', '', $text), ENT_QUOTES, 'UTF-8', false);
}
+
+function to_array_safetext($value) {
+ foreach ($value as $key => $val) {
+ if (is_array($val)) {
+ $value[$key] = to_array_safetext($val);
+ } else {
+ $value[$key] = safetext($val);
+ }
+ }
+ return $value;
+}
+
function decode_yajirushi($postText){
$postText = str_replace('←', '←', $postText);
$postText = str_replace('↓', '↓', $postText);
diff --git a/function/get_customemoji.php b/function/get_customemoji.php
new file mode 100644
index 0000000..170da1c
--- /dev/null
+++ b/function/get_customemoji.php
@@ -0,0 +1,81 @@
+ false, 'error' => '認証に失敗しました。(AUTH_INVALID)']);
+ exit;
+ }
+
+ // データベースに接続
+ 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)) {
+ // カンマ区切りまたは1つのユーザーID文字列を処理
+ $emojis = array_unique(array_filter(explode(',', $emoji)));
+
+ $results = [];
+
+ if (count($emojis) > 0) {
+ // プレースホルダを作成
+ $placeholders = implode(',', array_fill(0, count($emojis), '?'));
+ $stmt = $pdo->prepare("SELECT emojifile, emojiname FROM emoji WHERE emojiname IN ($placeholders)");
+ $stmt->execute($emojis);
+
+ $fetched = [];
+ while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
+ $fetched[$row['emojiname']] = [
+ 'emojipath' => filter_var($row["emojifile"], FILTER_VALIDATE_URL) ? $row["emojifile"] : "../" . $row["emojifile"],
+ 'emojiname' => $row['emojiname']
+ ];
+ }
+
+ foreach ($emojis as $name) {
+ if (isset($fetched[$name])) {
+ $results[$name] = $fetched[$name];
+ } else {
+ $results[$name] = null;
+ }
+ }
+ }
+
+ echo json_encode([
+ "success" => true,
+ "emojis" => $results
+ ], JSON_UNESCAPED_UNICODE);
+ } else {
+ $item = array(
+ "success" => false,
+ "emojipath" => null,
+ "emojiname" => null,
+ );
+ echo json_encode($item, JSON_UNESCAPED_UNICODE);
+ }
+}else{
+ $item = array(
+ "success" => false,
+ "emojipath" => null,
+ "emojiname" => null,
+ );
+ echo json_encode($item, JSON_UNESCAPED_UNICODE);
+}
+?>
diff --git a/function/get_userid.php b/function/get_userid.php
new file mode 100644
index 0000000..b4ab878
--- /dev/null
+++ b/function/get_userid.php
@@ -0,0 +1,79 @@
+ false, 'error' => '認証に失敗しました。(AUTH_INVALID)']);
+ exit;
+ }
+
+ // データベースに接続
+ 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)) {
+ // カンマ区切りまたは1つのユーザーID文字列を処理
+ $usernames = array_unique(array_filter(explode(',', $get_account)));
+
+ $results = [];
+
+ if (count($usernames) > 0) {
+ // プレースホルダを作成
+ $placeholders = implode(',', array_fill(0, count($usernames), '?'));
+ $stmt = $pdo->prepare("SELECT userid, username FROM account WHERE userid IN ($placeholders)");
+ $stmt->execute($usernames);
+
+ $fetched = [];
+ while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
+ $fetched[$row['userid']] = [
+ 'userid' => $row['userid'],
+ 'username' => $row['username']
+ ];
+ }
+
+ foreach ($usernames as $name) {
+ if (isset($fetched[$name])) {
+ $results[$name] = $fetched[$name];
+ } else {
+ $results[$name] = null;
+ }
+ }
+ }
+
+ echo json_encode([
+ "success" => true,
+ "users" => $results
+ ], JSON_UNESCAPED_UNICODE);
+ } else {
+ echo json_encode([
+ "success" => false,
+ "users" => null
+ ], JSON_UNESCAPED_UNICODE);
+ }
+}else{
+ $item = array(
+ "success" => false,
+ "userid" => null,
+ "username" => null,
+ );
+ echo json_encode($item, JSON_UNESCAPED_UNICODE);
+}
+?>
diff --git a/function/reuse.php b/function/reuse.php
index 20cb3e5..d78611b 100644
--- a/function/reuse.php
+++ b/function/reuse.php
@@ -60,11 +60,11 @@ if (safetext(isset($_POST['uniqid'])) && safetext(isset($_POST['reusetext'])) &&
}
$ueuse_result = send_ueuse($userid,$rpUniqid,$ruUniqid,$reusetext,$photo1,$photo2,$photo3,$photo4,$video1,$nsfw_chk,$AIBWM);
- if($ueuse_result == null){
+ if($ueuse_result[0] == true){
echo json_encode(['success' => true]);
exit;
}else{
- echo json_encode(['success' => false, 'error' => $ueuse_result]);
+ echo json_encode(['success' => false, 'error' => $ueuse_result[1]]);
exit;
}
}else{
diff --git a/function/settings.php b/function/settings.php
new file mode 100644
index 0000000..3f1ce9a
--- /dev/null
+++ b/function/settings.php
@@ -0,0 +1,234 @@
+ 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();
+ }
+
+ $userid = safetext($_POST['userid']);
+ $loginid = safetext($_POST['account_id']);
+ $loginkey = safetext($_COOKIE['loginkey']);
+
+ $is_login = uwuzuUserLoginCheck($loginid, $loginkey, "user");
+ if ($is_login === false) {
+ echo json_encode(['success' => false, 'error' => '認証に失敗しました。(AUTH_INVALID)']);
+ exit;
+ }
+
+ $settings_type = safetext($_POST['settings_type']);
+
+ if($settings_type == "icon"){
+ if(isset($_FILES["data"])){
+ if (!(empty($_FILES['data']['name']))) {
+ $uploadedFile = $_FILES['data'];
+ if(check_mime($uploadedFile['tmp_name'])){
+ $extension = convert_mime(check_mime($uploadedFile['tmp_name']));
+ delete_exif($extension, $uploadedFile['tmp_name']);
+ resizeImage($uploadedFile['tmp_name'], 512, 512);
+
+ if(AMS3_CHKS == "true"){
+ $usericonurl = getUserData($pdo, $userid)["iconname"];
+ if(filter_var($usericonurl, FILTER_VALIDATE_URL)){
+ $s3delresult = deleteAmazonS3($usericonurl);
+ }else{
+ $s3delresult = true;
+ }
+ if($s3delresult == true){
+ $s3result = uploadAmazonS3($uploadedFile['tmp_name']);
+ }else{
+ $s3result = false;
+ }
+ }else{
+ if(check_mime($uploadedFile['tmp_name']) == "image/webp"){
+ $newFilename = createUniqId() . '-'.$userid.'.webp';
+ }else{
+ $newFilename = createUniqId() . '-'.$userid.'.' . $extension;
+ }
+ $uploadedPath = 'usericons/' . $newFilename;
+ $result = move_uploaded_file($uploadedFile['tmp_name'], '../'.$uploadedPath);
+
+ if ($result) {
+ $iconName = $uploadedPath; // 保存されたファイルのパスを使用
+ } else {
+ $errnum = $uploadedFile['error'];
+ if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";}
+ if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";}
+ if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";}
+ if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";}
+ if($errnum === 6){$errcode = "TMP_FOLDER_NAI";}
+ if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";}
+ if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";}
+ $error_message[] = 'アップロード失敗!(1)エラーコード:' .$errcode.'';
+ }
+ }
+ if(isset($s3result)){
+ if($s3result == false){
+ $error_message[] = 'アップロード失敗!(1)エラーコード: S3ERROR';
+ }else{
+ $iconName = $s3result; // S3に保存されたファイルのパスを使用
+ }
+ }
+ }else{
+ $error_message[] = "使用できない画像形式です。(FILE_UPLOAD_DEKINAKATTA)";
+ }
+ }else{
+ $error_message[] = 'アイコン画像を選択してください(PHOTO_SELECT_PLEASE)';
+ }
+
+ if(empty($error_message)) {
+ $currentIconPath = getUserData($pdo, $userid)["iconname"];
+
+ $pdo->beginTransaction();
+ try {
+ $stmt = $pdo->prepare("UPDATE account SET iconname = :iconname WHERE userid = :userid");
+ $stmt->bindValue(':iconname', $iconName, PDO::PARAM_STR);
+ $stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
+ $res = $stmt->execute();
+ $res = $pdo->commit();
+ } catch (Exception $e) {
+ $pdo->rollBack();
+ }
+
+ if ($res) {
+ if ($currentIconPath) {
+ unlink('../' . $currentIconPath);
+ }
+ echo json_encode(['success' => true]);
+ exit;
+ } else {
+ echo json_encode(['success' => false, 'error' => '更新に失敗しました']);
+ exit;
+ }
+
+ // プリペアドステートメントを削除
+ $stmt = null;
+ }else{
+ echo json_encode(['success' => false, 'error' => $error_message[0]]);
+ exit;
+ }
+ }
+ }
+
+ if($settings_type == "header"){
+ if(isset($_FILES["data"])){
+ if (!(empty($_FILES['data']['name']))) {
+ $uploadedFile = $_FILES['data'];
+ if(check_mime($uploadedFile['tmp_name'])){
+ $extension = pathinfo($uploadedFile['name'], PATHINFO_EXTENSION);
+ delete_exif($extension, $uploadedFile['tmp_name']);
+ resizeImage($uploadedFile['tmp_name'], 2048, 1024);
+
+ if(AMS3_CHKS == "true"){
+ $userheadurl = getUserData($pdo, $userid)["headname"];
+ if(filter_var($userheadurl, FILTER_VALIDATE_URL)){
+ $s3delresult = deleteAmazonS3($userheadurl);
+ }else{
+ $s3delresult = true;
+ }
+ if($s3delresult == true){
+ $s3result = uploadAmazonS3($uploadedFile['tmp_name']);
+ }else{
+ $s3result = false;
+ }
+ }else{
+ if(check_mime($uploadedFile['tmp_name']) == "image/webp"){
+ $newFilename = createUniqId() . '-'.$userid.'.webp';
+ }else{
+ $newFilename = createUniqId() . '-'.$userid.'.' . $extension;
+ }
+ $uploadedPath = 'userheads/' . $newFilename;
+ $result = move_uploaded_file($uploadedFile['tmp_name'], '../'.$uploadedPath);
+
+ if ($result) {
+ $headName = $uploadedPath; // 保存されたファイルのパスを使用
+ } else {
+ $errnum = $uploadedFile['error'];
+ if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";}
+ if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";}
+ if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";}
+ if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";}
+ if($errnum === 6){$errcode = "TMP_FOLDER_NAI";}
+ if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";}
+ if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";}
+ $error_message[] = 'アップロード失敗!(2)エラーコード:' .$errcode.'';
+ }
+ }
+ if(isset($s3result)){
+ if($s3result == false){
+ $error_message[] = 'アップロード失敗!(2)エラーコード: S3ERROR';
+ }else{
+ $headName = $s3result; // S3に保存されたファイルのパスを使用
+ }
+ }
+ }else{
+ $error_message[] = "使用できない画像形式です。(FILE_UPLOAD_DEKINAKATTA)";
+ }
+ }else{
+ $error_message[] = 'アイコン画像を選択してください(PHOTO_SELECT_PLEASE)';
+ }
+
+ if(empty($error_message)) {
+ $currentHeadPath = getUserData($pdo, $userid)["headname"];
+
+ $pdo->beginTransaction();
+ try {
+ $stmt = $pdo->prepare("UPDATE account SET headname = :headname WHERE userid = :userid");
+ $stmt->bindValue(':headname', $headName, PDO::PARAM_STR);
+ $stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
+ $res = $stmt->execute();
+ $res = $pdo->commit();
+ } catch (Exception $e) {
+ $pdo->rollBack();
+ }
+
+ if ($res) {
+ if ($currentHeadPath) {
+ unlink('../' . $currentHeadPath);
+ }
+ echo json_encode(['success' => true]);
+ exit;
+ } else {
+ echo json_encode(['success' => false, 'error' => '更新に失敗しました']);
+ exit;
+ }
+
+ // プリペアドステートメントを削除
+ $stmt = null;
+ }else{
+ echo json_encode(['success' => false, 'error' => $error_message[0]]);
+ exit;
+ }
+ }
+ }
+
+} else {
+ echo json_encode(['success' => false, 'error' => '必要なパラメータが提供されていません。']);
+ exit;
+}
+
+?>
\ No newline at end of file
diff --git a/function/ueuse.php b/function/ueuse.php
new file mode 100644
index 0000000..31391f3
--- /dev/null
+++ b/function/ueuse.php
@@ -0,0 +1,105 @@
+ 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) {
+ // 接続エラーのときエラー内容を取得する
+ actionLog($userid, "error", "ueuse", null, $e, 4);
+ }
+
+ $userid = safetext($_POST['userid']);
+
+ $ueuse = safetext($_POST['ueuse']);
+ $nsfw_chk = safetext($_POST['nsfw_chk']);
+ $loginid = safetext($_POST['account_id']);
+ $loginkey = safetext($_COOKIE['loginkey']);
+
+ $is_login = uwuzuUserLoginCheck($loginid, $loginkey, "user");
+ if ($is_login === false) {
+ echo json_encode(['success' => false, 'error' => '認証に失敗しました。(AUTH_INVALID)']);
+ exit;
+ }
+
+ //ユーザーの認証情報を取得
+ $query = $pdo->prepare('SELECT * FROM account WHERE userid = :userid limit 1');
+ $query->execute(array(':userid' => $userid));
+ $result2 = $query->fetch();
+ if($result2["loginid"] === $loginid){
+ if(!($result2["role"] == "ice")){
+ if(!(empty($result2["other_settings"]))){
+ $isAIBWM = val_OtherSettings("isAIBlockWaterMark", $result2["other_settings"]);
+ }else{
+ $isAIBWM = false;
+ }
+
+ if(isset($nsfw_chk) && $nsfw_chk == "true"){
+ $nsfw_chk = "true";
+ }else{
+ $nsfw_chk = "false";
+ }
+
+ if(isset($_FILES['upload_images'])){
+ $photo1 = $_FILES['upload_images'];
+ }else{
+ $photo1 = null;
+ }
+ if(isset($_FILES['upload_images2'])){
+ $photo2 = $_FILES['upload_images2'];
+ }else{
+ $photo2 = null;
+ }
+ if(isset($_FILES['upload_images3'])){
+ $photo3 = $_FILES['upload_images3'];
+ }else{
+ $photo3 = null;
+ }
+ if(isset($_FILES['upload_images4'])){
+ $photo4 = $_FILES['upload_images4'];
+ }else{
+ $photo4 = null;
+ }
+ if(isset($_FILES['upload_videos1'])){
+ $video1 = $_FILES['upload_videos1'];
+ }else{
+ $video1 = null;
+ }
+
+ if(isset($_POST['rpuniqid'])){
+ $rpUniqid = safetext($_POST['rpuniqid']);
+ }else{
+ $rpUniqid = "";
+ }
+
+ $ruUniqid = "";
+ $ueuse_result = send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$photo4,$video1,$nsfw_chk,$isAIBWM);
+
+ if($ueuse_result[0] == true){
+ echo json_encode(['success' => true]);
+ exit;
+ }else{
+ echo json_encode(['success' => false, 'error' => $ueuse_result[1]]);
+ exit;
+ }
+ }else{
+ echo json_encode(['success' => false, 'error' => 'お使いのアカウントではユーズができません。']);
+ exit;
+ }
+ }else{
+ echo json_encode(['success' => false, 'error' => 'ユーズに失敗しました。']);
+ exit;
+ }
+} else {
+ echo json_encode(['success' => false, 'error' => '必要なパラメータが提供されていません。']);
+ exit;
+}
+
+?>
\ No newline at end of file
diff --git a/home/index.php b/home/index.php
index 66e9328..5d52d4c 100644
--- a/home/index.php
+++ b/home/index.php
@@ -10,9 +10,6 @@ $serversettings = parse_ini_file($serversettings_file, true);
$mojisizefile = "../server/textsize.txt";
$mojisize = (int)safetext(file_get_contents($mojisizefile));
-//投稿及び返信レート制限↓(分):デフォで60件/分まで
-$max_ueuse_rate_limit = 60;
-
$banurldomainfile = "../server/banurldomain.txt";
$banurl_info = file_get_contents($banurldomainfile);
$banurl = preg_split("/\r\n|\n|\r/", $banurl_info);
@@ -87,51 +84,6 @@ if(isset($_GET['text'])) {
$ueuse = safetext($_COOKIE['ueuse']);
}
-//-------------------------------------------
-
-if( !empty($_POST['btn_submit']) ) {
- $settingsJsonQuery = $pdo->prepare("SELECT userid, other_settings FROM account WHERE userid = :userid");
- $settingsJsonQuery->bindValue(':userid', $userid);
- $settingsJsonQuery->execute();
- $settingsJson = $settingsJsonQuery->fetch();
- if(!(empty($settingsJson["other_settings"]))){
- $isAIBWM = val_OtherSettings("isAIBlockWaterMark", $settingsJson["other_settings"]);
- }else{
- $isAIBWM = false;
- }
-
- $ueuse = safetext($_POST['ueuse']);
-
- if(isset($_POST['nsfw_chk'])){
- $nsfw_chk = safetext($_POST['nsfw_chk']);
- }else{
- $nsfw_chk = "false";
- }
-
- $photo1 = $_FILES['upload_images'];
- $photo2 = $_FILES['upload_images2'];
- $photo3 = $_FILES['upload_images3'];
- $photo4 = $_FILES['upload_images4'];
- $video1 = $_FILES['upload_videos1'];
-
- $rpUniqid = "";
- $ruUniqid = "";
- $ueuse_result = send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$photo4,$video1,$nsfw_chk,$isAIBWM);
-
- if($ueuse_result == null){
- //一時保存していたユーズ内容の削除
- setcookie("ueuse", "", time() - 3600);
-
- $url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];
- header("Location:".$url."");
- exit;
- }else{
- $error_message = $ueuse_result;
- }
-}
-
-
-
require('../logout/logout.php');
@@ -148,6 +100,7 @@ $pdo = null;
+
+
@@ -230,7 +231,9 @@ $pdo = null;
$(document).ready(function() {
var userid = '';
var account_id = '';
+ view_ueuse_init(userid, account_id);
var pageNumber = 1;
+ var isLoading = false;
if(ueusetext.value){
$('#postContainer').empty();
@@ -252,8 +255,6 @@ $(document).ready(function() {
}
}
- var isLoading = false;
-
function loadPosts() {
if (isLoading) return;
isLoading = true;
@@ -264,18 +265,18 @@ $(document).ready(function() {
// 新しいキーワードで検索を実行
$.ajax({
- url: '../nextpage/searchpage.php', // PHPファイルへのパス
- method: 'GET',
- data: {page: pageNumber, keyword: keyword, userid: userid , account_id: account_id},
- dataType: 'html',
+ url: '../nextpage/searchtimeline.php',
+ method: 'POST',
+ data: { page: pageNumber, userid: userid, account_id: account_id, keyword: keyword },
+ dataType: 'json',
timeout: 300000,
success: function(response) {
- $('#postContainer').append(response);
- $("#loading").hide();
+ renderUeuses(response);
pageNumber++;
isLoading = false;
+ $("#loading").hide();
},
- error: function (xhr, textStatus, errorThrown) { // エラーと判定された場合
+ error: function(xhr, textStatus, errorThrown) {
isLoading = false;
$("#loading").hide();
$("#error").show();
diff --git a/server/uwuzuinfo.txt b/server/uwuzuinfo.txt
index 7a9b01e..d174d8c 100644
--- a/server/uwuzuinfo.txt
+++ b/server/uwuzuinfo.txt
@@ -1,4 +1,4 @@
uwuzu
-1.4.16
-2025/03/16
+1.5.0
+2025/05/03
daichimarukana,putonfps
\ No newline at end of file
diff --git a/server/uwuzurelease.txt b/server/uwuzurelease.txt
index 8e3aa7f..fd95d0d 100644
--- a/server/uwuzurelease.txt
+++ b/server/uwuzurelease.txt
@@ -1,6 +1,46 @@
## リリースノートだぜぇぇぇぇぇぇい!!!!!!!
ここにはuwuzuの更新情報を載せてくぜぇ~!(いやまてテンションおかしいだろ...)
+## Version 1.5.0 (Combeny)
+2025/05/03
+chg: 大幅にUIを改良しました!
+chg: ブックマークページ、フォロータイムラインを大幅に高速化しました!
+chg: すべてのタイムラインを高速化しました!
+chg: すべてのタイムラインの表示プログラムをサーバーサイドからクライアントサイドへ移行しました!
+chg: アカウント削除をジョブ機能を通じて行うようにしました!
+ これにより、低負荷でのアカウント削除が可能です。
+ アカウント削除を実行後は、削除を実行したアカウントにはログインしないでください。
+ アカウントの削除が並行で進んでいます。
+chg: ServiceWorkerの機能を更新しました!
+ これにより、uwuzuを開いた際の読み込みなどが短縮されます。
+ また、その他ページより行えるキャッシュクリアが確実に行われるようになります!
+chg: cssにダークモード時のボーダーカラーを追加しました。
+ color.cssに以下を追加してください。
+ "--dark-border-color: #252525;"(色はご自由で大丈夫です。)
+new: オブジェクトストレージに対応しました!利用するにはオブジェクトストレージプラグインを有効にする必要があります。
+new: ジョブ機能を実装しました!
+ この機能を使用するにはデータベースの更新が必要となります。
+ データベースに新規でjobsというテーブルを追加してください。
+ - sysid(int):AUTO_INCREMENT:システムID
+ - uniqid(varchar(256)):指定なし:ユニークID
+ - userid(varchar(512)):指定なし:実行ユーザーID
+ - job(varchar(1024)):指定なし:ジョブ名
+ - step(varchar(256)):指定なし:ステップ名
+ - status(varchar(256)):指定なし:ステータス
+ - datetime(datetime):指定なし:ジョブ作成日時
+new: ロードアベレージ上限超過による自動停止機能を実装しました!
+ db.phpに"define( 'STOP_LA', '[ロードアベレージ上限(int)]');"を追加することで、もしシステムのロードアベレージがそのロードアベレージを上回った際に、503を返し、一時的にサービスを停止します。
+ なお、この機能では、管理者向けページとログインページは停止されません。
+ 制限をかけない場合は、"-1"を設定してください。
+new: レートリミットの可変設定を実装しました!
+ db.phpに"define( 'RATE_LM', '[レートリミット(int)]');"を追加することで、そのレートリミットを超過した際にユーズができなくなります。
+ 制限をかけない場合は、"-1"を設定してください。
+new: サイトマップ自動設定機能を追加しました!
+ /api/sitemap-api.phpから使用できます。
+new: ユーズの送信の進捗状況などを表示する機能を追加しました!
+fix: 制御文字を投稿・表示できてしまう問題を修正しました。
+fix: 存在しないロールを参照してしまう問題を修正しました!
+
## Version 1.4.16 (Funium)
2025/03/16
fix: モバイル向けUIで、メニューが表示されなくなる問題を修正しました!
diff --git a/settings/index.php b/settings/index.php
index a6be35f..afed26f 100644
--- a/settings/index.php
+++ b/settings/index.php
@@ -101,6 +101,18 @@ if( !empty($pdo) ) {
}else{
$notification_settings_list = explode(',', $userData["notification_settings"]);
}
+
+ if(filter_var($userData['iconname'], FILTER_VALIDATE_URL)){
+ $userData['iconname'] = $userData['iconname'];
+ }else{
+ $userData['iconname'] = "../" . $userData['iconname'];
+ }
+
+ if(filter_var($userData['headname'], FILTER_VALIDATE_URL)){
+ $userData['headname'] = $userData['headname'];
+ }else{
+ $userData['headname'] = "../" . $userData['headname'];
+ }
}
@@ -347,207 +359,6 @@ if( !empty($_POST['pass_submit']) ) {
}
}
-
-if( !empty($_POST['logout']) ) {
- if (isset($_SERVER['HTTP_COOKIE'])) {
- $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
- foreach($cookies as $cookie) {
- $parts = explode('=', $cookie);
- $name = trim($parts[0]);
- setcookie($name, '', time()-1000);
- setcookie($name, '', time()-1000, '/');
- }
- }
- // リダイレクト先のURLへ転送する
- $url = '../index.php';
- header('Location: ' . $url, true, 303);
-
- // すべての出力を終了
- exit;
-}
-
-if( !empty($_POST['img1btn_submit']) ) {
-
- if (!empty($_FILES['image2s']['name'])) {
- // アップロードされたファイル情報
- $uploadedFile = $_FILES['image2s'];
-
- if(check_mime($uploadedFile['tmp_name'])){
- // アップロードされたファイルの拡張子を取得
- $extension = pathinfo($uploadedFile['name'], PATHINFO_EXTENSION);
-
- // EXIF削除
- delete_exif($extension, $uploadedFile['tmp_name']);
- // リサイズ
- resizeImage($uploadedFile['tmp_name'], 2048, 1024);
-
- if(check_mime($uploadedFile['tmp_name']) == "image/webp"){
- // 新しいファイル名を生成(uniqid + 拡張子)
- $newFilename = createUniqId() . '-'.$userid.'.webp';
- }else{
- // 新しいファイル名を生成(uniqid + 拡張子)
- $newFilename = createUniqId() . '-'.$userid.'.' . $extension;
- }
- // 保存先のパスを生成
- $uploadedPath = 'userheads/' . $newFilename;
-
- // ファイルを移動
- $result = move_uploaded_file($uploadedFile['tmp_name'], '../'.$uploadedPath);
-
- if ($result) {
- $headName = $uploadedPath; // 保存されたファイルのパスを使用
- } else {
- $errnum = $uploadedFile['error'];
- if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";}
- if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";}
- if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";}
- if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";}
- if($errnum === 6){$errcode = "TMP_FOLDER_NAI";}
- if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";}
- if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";}
- $error_message[] = 'アップロード失敗!(2)エラーコード:' .$errcode.'';
- }
- }else{
- $error_message[] = "使用できない画像形式です。(FILE_UPLOAD_DEKINAKATTA)";
- }
- }else{
- $error_message[] = 'ヘッダー画像を選択してください(PHOTO_SELECT_PLEASE)';
- }
-
-
- if( empty($error_message) ) {
- // トランザクション開始
- $pdo->beginTransaction();
-
- try {
-
- // SQL作成
- $stmt = $pdo->prepare("UPDATE account SET headname = :headname WHERE userid = :userid");
-
- // ヘッダー画像のバインド
- $stmt->bindValue(':headname', $headName, PDO::PARAM_STR);
-
- // ユーザーIDのバインド(WHERE句に必要)
- $stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
-
- // SQLクエリの実行
- $res = $stmt->execute();
-
- // コミット
- $res = $pdo->commit();
-
-
- } catch (Exception $e) {
-
- // エラーが発生した時はロールバック
- $pdo->rollBack();
- }
-
- if ($res) {
- $url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
- header("Location:".$url."");
- exit;
- } else {
- $error_message[] = '更新に失敗しました。(REGISTERED_DAME)';
- }
-
- // プリペアドステートメントを削除
- $stmt = null;
- }
-}
-
-
-if( !empty($_POST['img2btn_submit']) ) {
-
- if (!empty($_FILES['image']['name'])) {
- // アップロードされたファイル情報
- $uploadedFile = $_FILES['image'];
-
- if(check_mime($uploadedFile['tmp_name'])){
- // アップロードされたファイルの拡張子を取得
- $extension = pathinfo($uploadedFile['name'], PATHINFO_EXTENSION);
-
- // EXIF削除
- delete_exif($extension, $uploadedFile['tmp_name']);
- // リサイズ
- resizeImage($uploadedFile['tmp_name'], 512, 512);
-
- if(check_mime($uploadedFile['tmp_name']) == "image/webp"){
- // 新しいファイル名を生成(uniqid + 拡張子)
- $newFilename = createUniqId() . '-'.$userid.'.webp';
- }else{
- // 新しいファイル名を生成(uniqid + 拡張子)
- $newFilename = createUniqId() . '-'.$userid.'.' . $extension;
- }
- // 保存先のパスを生成
- $uploadedPath = 'usericons/' . $newFilename;
-
- // ファイルを移動
- $result = move_uploaded_file($uploadedFile['tmp_name'], '../'.$uploadedPath);
-
- if ($result) {
- $iconName = $uploadedPath; // 保存されたファイルのパスを使用
- } else {
- $errnum = $uploadedFile['error'];
- if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";}
- if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";}
- if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";}
- if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";}
- if($errnum === 6){$errcode = "TMP_FOLDER_NAI";}
- if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";}
- if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";}
- $error_message[] = 'アップロード失敗!(2)エラーコード:' .$errcode.'';
- }
- }else{
- $error_message[] = "使用できない画像形式です。(FILE_UPLOAD_DEKINAKATTA)";
- }
- }else{
- $error_message[] = 'アイコン画像を選択してください(PHOTO_SELECT_PLEASE)';
- }
-
- if( empty($error_message) ) {
- // トランザクション開始
- $pdo->beginTransaction();
-
- try {
-
- // SQL作成
- $stmt = $pdo->prepare("UPDATE account SET iconname = :iconname WHERE userid = :userid");
-
- // アイコン画像のバインド
- $stmt->bindValue(':iconname', $iconName, PDO::PARAM_STR);
-
- // ユーザーIDのバインド(WHERE句に必要)
- $stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
-
- // SQLクエリの実行
- $res = $stmt->execute();
-
- // コミット
- $res = $pdo->commit();
-
-
- } catch (Exception $e) {
-
- // エラーが発生した時はロールバック
- $pdo->rollBack();
- }
-
- if ($res) {
- $url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
- header("Location:".$url."");
- exit;
- } else {
- $error_message[] = '更新に失敗しました。(REGISTERED_DAME)';
- }
-
- // プリペアドステートメントを削除
- $stmt = null;
- }
-}
-
-require('../logout/logout.php');
-
if( !empty($_POST['auth_on_submit']) ) {
$_SESSION['userid'] = $userid;
// リダイレクト先のURLへ転送する
@@ -704,11 +515,11 @@ $pdo = null;
@@ -872,7 +678,7 @@ $pdo = null;
-
+
@@ -884,6 +690,10 @@ $pdo = null;