mirror of
https://github.com/Daichimarukana/uwuzu.git
synced 2026-06-04 19:14:41 +00:00
uwuzu v1.6.14 Hapuego
This commit is contained in:
+3
-33
@@ -133,38 +133,8 @@ if( !empty($pdo) ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if($backuplogin === true || uwuzu_password_verify($userbackupcode,$row["backupcode"])){
|
if($backuplogin === true || uwuzu_password_verify($userbackupcode,$row["backupcode"])){
|
||||||
$pdo->beginTransaction();
|
|
||||||
|
|
||||||
try {
|
|
||||||
$touserid = $userid;
|
|
||||||
$datetime = date("Y-m-d H:i:s");
|
|
||||||
$msg = "バックアップコードを使用しログインされました!\nバックアップコード変更のために二段階認証を再設定することを強くおすすめします。\nまた、もしバックアップコードを利用してログインした覚えがない場合は「その他」よりセッショントークンを再生成し、設定画面よりパスワードを変更し、二段階認証を再設定してください!\n\nログインした端末 : ".$device;
|
$msg = "バックアップコードを使用しログインされました!\nバックアップコード変更のために二段階認証を再設定することを強くおすすめします。\nまた、もしバックアップコードを利用してログインした覚えがない場合は「その他」よりセッショントークンを再生成し、設定画面よりパスワードを変更し、二段階認証を再設定してください!\n\nログインした端末 : ".$device;
|
||||||
$title = '🔴バックアップコード使用のお知らせ🔴';
|
send_notification($userid,"uwuzu-fromsys","🔴バックアップコード使用のお知らせ🔴",$msg,"/settings", "login");
|
||||||
$url = '/settings';
|
|
||||||
$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', safetext("uwuzu-fromsys"), PDO::PARAM_STR);
|
|
||||||
$stmt->bindParam(':touserid', safetext($touserid), PDO::PARAM_STR);
|
|
||||||
$stmt->bindParam(':msg', safetext($msg), PDO::PARAM_STR);
|
|
||||||
$stmt->bindParam(':url', safetext($url), PDO::PARAM_STR);
|
|
||||||
$stmt->bindParam(':userchk', safetext($userchk), PDO::PARAM_STR);
|
|
||||||
$stmt->bindParam(':title', safetext($title), PDO::PARAM_STR);
|
|
||||||
|
|
||||||
$stmt->bindParam(':datetime', safetext($datetime), PDO::PARAM_STR);
|
|
||||||
|
|
||||||
// SQLクエリの実行
|
|
||||||
$res = $stmt->execute();
|
|
||||||
|
|
||||||
// コミット
|
|
||||||
$res = $pdo->commit();
|
|
||||||
|
|
||||||
} catch(Exception $e) {
|
|
||||||
|
|
||||||
// エラーが発生した時はロールバック
|
|
||||||
$pdo->rollBack();
|
|
||||||
}
|
|
||||||
|
|
||||||
clearstatcache();
|
clearstatcache();
|
||||||
|
|
||||||
@@ -199,7 +169,7 @@ if( !empty($pdo) ) {
|
|||||||
$_SESSION['loginid'] = $userData["loginid"];
|
$_SESSION['loginid'] = $userData["loginid"];
|
||||||
$_SESSION['loginkey'] = $userLoginKey;
|
$_SESSION['loginkey'] = $userLoginKey;
|
||||||
|
|
||||||
$_SESSION['username'] = $username;
|
$_SESSION['username'] = $userData["username"];
|
||||||
$_SESSION['password'] = null;
|
$_SESSION['password'] = null;
|
||||||
$_SESSION["login_passtry"] = 0;
|
$_SESSION["login_passtry"] = 0;
|
||||||
|
|
||||||
@@ -276,7 +246,7 @@ if( !empty($pdo) ) {
|
|||||||
$_SESSION['loginid'] = $userData["loginid"];
|
$_SESSION['loginid'] = $userData["loginid"];
|
||||||
$_SESSION['loginkey'] = $userLoginKey;
|
$_SESSION['loginkey'] = $userLoginKey;
|
||||||
|
|
||||||
$_SESSION['username'] = $username;
|
$_SESSION['username'] = $userData["username"];
|
||||||
$_SESSION['password'] = null;
|
$_SESSION['password'] = null;
|
||||||
$_SESSION["login_passtry"] = 0;
|
$_SESSION["login_passtry"] = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ $stmt = null;
|
|||||||
$res = null;
|
$res = null;
|
||||||
$option = null;
|
$option = null;
|
||||||
|
|
||||||
|
$domain = $_SERVER['HTTP_HOST'];
|
||||||
|
|
||||||
session_name('uwuzu_s_id');
|
session_name('uwuzu_s_id');
|
||||||
session_set_cookie_params([
|
session_set_cookie_params([
|
||||||
'lifetime' => 0,
|
'lifetime' => 0,
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ if( !empty($pdo) ) {
|
|||||||
$_SESSION['loginid'] = $userData["loginid"];
|
$_SESSION['loginid'] = $userData["loginid"];
|
||||||
$_SESSION['loginkey'] = $userLoginKey;
|
$_SESSION['loginkey'] = $userLoginKey;
|
||||||
|
|
||||||
$_SESSION['username'] = $username;
|
$_SESSION['username'] = $userData["username"];
|
||||||
$_SESSION['password'] = null;
|
$_SESSION['password'] = null;
|
||||||
|
|
||||||
//ログイン失敗履歴のお掃除
|
//ログイン失敗履歴のお掃除
|
||||||
|
|||||||
+61
-11
@@ -36,16 +36,9 @@ body {
|
|||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
padding-top: 12px;
|
padding-top: 12px;
|
||||||
background-color: var(--background-color);
|
background-color: var(--background-color);
|
||||||
/* 画像を常に天地左右の中央に配置 */
|
|
||||||
background-position: center center;
|
background-position: center center;
|
||||||
|
|
||||||
/* 画像をタイル状に繰り返し表示しない */
|
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
|
|
||||||
/* コンテンツの高さが画像の高さより大きい時、動かないように固定 */
|
|
||||||
background-attachment: fixed;
|
background-attachment: fixed;
|
||||||
|
|
||||||
/* 表示するコンテナの大きさに基づいて、背景画像を調整 */
|
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1130,6 +1123,7 @@ main h1 {
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
font-family: var(--Text-fonts), sans-serif;
|
font-family: var(--Text-fonts), sans-serif;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ueuse .flebox a .u_name img {
|
.ueuse .flebox a .u_name img {
|
||||||
@@ -1143,7 +1137,28 @@ main h1 {
|
|||||||
border-radius: 0px;
|
border-radius: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ueuse .flebox a .status {
|
||||||
|
position: absolute;
|
||||||
|
left: calc(48px - 28px);
|
||||||
|
top: calc(48px - 16px);
|
||||||
|
width: 12px;
|
||||||
|
height: 12px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: #CCC;
|
||||||
|
border: solid 4px var(--tl-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.ueuse .flebox a .green {
|
||||||
|
background-color: #00cc4e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ueuse .flebox a .yellow {
|
||||||
|
background-color: #ffc400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ueuse .flebox a .gray {
|
||||||
|
background-color: #CCC;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.ueuse .flebox .idbox {
|
.ueuse .flebox .idbox {
|
||||||
@@ -1601,16 +1616,34 @@ main h1 {
|
|||||||
|
|
||||||
.ueuse .youtube_and_nicovideo_player {
|
.ueuse .youtube_and_nicovideo_player {
|
||||||
margin-top: 12px;
|
margin-top: 12px;
|
||||||
width: 100%;
|
width: calc(100% - 2px);
|
||||||
height: fit-content;
|
height: fit-content;
|
||||||
|
min-height: 152px;
|
||||||
|
background-color: var(--background-color);
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 10px;
|
||||||
|
border: solid 1px var(--border-color);
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ueuse .youtube_and_nicovideo_player p{
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
font-family: var(--Mono-fonts);
|
||||||
|
color: var(--text-color);
|
||||||
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ueuse .youtube_and_nicovideo_player iframe {
|
.ueuse .youtube_and_nicovideo_player iframe {
|
||||||
border: none;
|
border: none;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
max-height: 50dvh;
|
||||||
aspect-ratio: 16 / 9;
|
aspect-ratio: 16 / 9;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
border: 1px solid var(--border-color);
|
vertical-align: bottom;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ueuse .abi {
|
.ueuse .abi {
|
||||||
@@ -6792,6 +6825,7 @@ noscript .noscript_modal .inner .center_text p {
|
|||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
padding-top: 0px;
|
padding-top: 0px;
|
||||||
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.userleftbox {
|
.userleftbox {
|
||||||
@@ -7331,6 +7365,13 @@ noscript .noscript_modal .inner .center_text p {
|
|||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ueuse .youtube_and_nicovideo_player iframe {
|
||||||
|
max-height: 25dvh;
|
||||||
|
}
|
||||||
|
.youtube_and_nicovideo_player iframe[src*="spotify.com"] {
|
||||||
|
height: 152px;
|
||||||
|
}
|
||||||
|
|
||||||
.leftbox {
|
.leftbox {
|
||||||
display: block;
|
display: block;
|
||||||
border-radius: 17px;
|
border-radius: 17px;
|
||||||
@@ -8477,6 +8518,10 @@ noscript .noscript_modal .inner .center_text p {
|
|||||||
color: var(--main-color);
|
color: var(--main-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ueuse .flebox a .status {
|
||||||
|
border: solid 4px var(--dark-sub-color);
|
||||||
|
}
|
||||||
|
|
||||||
.ueuse p {
|
.ueuse p {
|
||||||
color: var(--dark-text-color);
|
color: var(--dark-text-color);
|
||||||
}
|
}
|
||||||
@@ -8765,8 +8810,13 @@ noscript .noscript_modal .inner .center_text p {
|
|||||||
background-color: var(--dark-sub-color);
|
background-color: var(--dark-sub-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.ueuse .youtube_and_nicovideo_player iframe {
|
.ueuse .youtube_and_nicovideo_player p{
|
||||||
border: 1px solid var(--dark-border-color);
|
color: var(--dark-text-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.ueuse .youtube_and_nicovideo_player {
|
||||||
|
background-color: var(--dark-background-color);
|
||||||
|
border: solid 1px var(--dark-border-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.userheader h2 {
|
.userheader h2 {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ require('../db.php');
|
|||||||
require("function.php");
|
require("function.php");
|
||||||
blockedIP($_SERVER['REMOTE_ADDR']);
|
blockedIP($_SERVER['REMOTE_ADDR']);
|
||||||
if (safetext(isset($_POST['uniqid'])) && safetext(isset($_POST['userid'])) && safetext(isset($_POST['account_id'])) && safetext(isset($_COOKIE['loginkey']))) {
|
if (safetext(isset($_POST['uniqid'])) && safetext(isset($_POST['userid'])) && safetext(isset($_POST['account_id'])) && safetext(isset($_COOKIE['loginkey']))) {
|
||||||
|
$userid = safetext($_POST['userid']);
|
||||||
try {
|
try {
|
||||||
$option = array(
|
$option = array(
|
||||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||||
@@ -16,8 +17,6 @@ if (safetext(isset($_POST['uniqid'])) && safetext(isset($_POST['userid'])) && sa
|
|||||||
actionLog($userid, "error", "ueuse", null, $e, 4);
|
actionLog($userid, "error", "ueuse", null, $e, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
$userid = safetext($_POST['userid']);
|
|
||||||
|
|
||||||
$uniqid = safetext($_POST['uniqid']);
|
$uniqid = safetext($_POST['uniqid']);
|
||||||
$loginid = safetext($_POST['account_id']);
|
$loginid = safetext($_POST['account_id']);
|
||||||
$loginkey = safetext($_COOKIE['loginkey']);
|
$loginkey = safetext($_COOKIE['loginkey']);
|
||||||
|
|||||||
+44
-7
@@ -1179,6 +1179,7 @@ function x1024($byte){
|
|||||||
}
|
}
|
||||||
function uwuzu_ver($select,$path){
|
function uwuzu_ver($select,$path){
|
||||||
$softwaredata = file_get_contents($path);
|
$softwaredata = file_get_contents($path);
|
||||||
|
$software_info = array();
|
||||||
|
|
||||||
$softwaredata = explode( "\n", $softwaredata );
|
$softwaredata = explode( "\n", $softwaredata );
|
||||||
$cnt = count( $softwaredata );
|
$cnt = count( $softwaredata );
|
||||||
@@ -3633,6 +3634,7 @@ function uwuzu_password_verify($password, $hash){
|
|||||||
//ユーザーのOther_Settings読み取り関数
|
//ユーザーのOther_Settings読み取り関数
|
||||||
function val_OtherSettings($dataname, $jsontext){
|
function val_OtherSettings($dataname, $jsontext){
|
||||||
$other_settings = json_decode($jsontext, true);
|
$other_settings = json_decode($jsontext, true);
|
||||||
|
$ret = false;
|
||||||
if(!(empty($other_settings[$dataname]))) {
|
if(!(empty($other_settings[$dataname]))) {
|
||||||
if(is_bool($other_settings[$dataname]) === true){
|
if(is_bool($other_settings[$dataname]) === true){
|
||||||
if($other_settings[$dataname] == true){
|
if($other_settings[$dataname] == true){
|
||||||
@@ -3653,6 +3655,7 @@ function val_OtherSettings($dataname, $jsontext){
|
|||||||
//ユーザーのOther_Settings追加関数
|
//ユーザーのOther_Settings追加関数
|
||||||
function val_AddOtherSettings($dataname, $data, $jsontext){
|
function val_AddOtherSettings($dataname, $data, $jsontext){
|
||||||
$other_settings = json_decode($jsontext, true);
|
$other_settings = json_decode($jsontext, true);
|
||||||
|
$ret = false;
|
||||||
if(empty($other_settings)){
|
if(empty($other_settings)){
|
||||||
$new_data = [$dataname=>$data];
|
$new_data = [$dataname=>$data];
|
||||||
$ret = json_encode($new_data);
|
$ret = json_encode($new_data);
|
||||||
@@ -3719,6 +3722,33 @@ function is_OtherSettings($pdo, $userid, $add = true){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getUserOnlineStatus(string $last_login_datetime, string $other_settings){
|
||||||
|
$isPublicOnlineStatus = val_OtherSettings("isPublicOnlineStatus", $other_settings);
|
||||||
|
if($isPublicOnlineStatus === true){
|
||||||
|
if (!(empty($last_login_datetime))) {
|
||||||
|
$lastLogin = new DateTime($last_login_datetime);
|
||||||
|
$now = new DateTime();
|
||||||
|
|
||||||
|
$interval = $now->diff($lastLogin);
|
||||||
|
|
||||||
|
$minutesPast = ($interval->days * 24 * 60) + ($interval->h * 60) + $interval->i;
|
||||||
|
|
||||||
|
if ($minutesPast <= 5) {
|
||||||
|
$OnlineStatus = "Online";
|
||||||
|
} elseif ($minutesPast <= 15) {
|
||||||
|
$OnlineStatus = "Away";
|
||||||
|
} else {
|
||||||
|
$OnlineStatus = "Offline";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$OnlineStatus = "Offline";
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$OnlineStatus = "Private";
|
||||||
|
}
|
||||||
|
return $OnlineStatus;
|
||||||
|
}
|
||||||
|
|
||||||
function GetActivityPubJson($url) {
|
function GetActivityPubJson($url) {
|
||||||
$ch = curl_init($url);
|
$ch = curl_init($url);
|
||||||
curl_setopt_array($ch, [
|
curl_setopt_array($ch, [
|
||||||
@@ -3824,16 +3854,18 @@ function GetActivityPubUser($userid, $domain) {
|
|||||||
function FormatUeuseItem(array $value, string $myblocklist, string $mybookmark, $pdo, string $userId): ?array {
|
function FormatUeuseItem(array $value, string $myblocklist, string $mybookmark, $pdo, string $userId): ?array {
|
||||||
if ($value["role"] === "ice") return null;
|
if ($value["role"] === "ice") return null;
|
||||||
|
|
||||||
|
if(isset($value["other_settings"])) {
|
||||||
|
$value["isAIBlock"] = val_OtherSettings("isAIBlock", $value["other_settings"]);
|
||||||
|
$value["OnlineStatus"] = getUserOnlineStatus($value["last_login_datetime"], $value["other_settings"]);
|
||||||
|
} else {
|
||||||
|
$value["isAIBlock"] = false;
|
||||||
|
$value["OnlineStatus"] = null;
|
||||||
|
}
|
||||||
|
|
||||||
$value['iconname'] = filter_var($value['iconname'], FILTER_VALIDATE_URL)
|
$value['iconname'] = filter_var($value['iconname'], FILTER_VALIDATE_URL)
|
||||||
? $value['iconname']
|
? $value['iconname']
|
||||||
: "../" . $value['iconname'];
|
: "../" . $value['iconname'];
|
||||||
|
|
||||||
if(isset($value["other_settings"])) {
|
|
||||||
$value["isAIBlock"] = val_OtherSettings("isAIBlock", $value["other_settings"]);
|
|
||||||
} else {
|
|
||||||
$value["isAIBlock"] = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$value = to_null($value);
|
$value = to_null($value);
|
||||||
$value = to_array_safetext($value);
|
$value = to_array_safetext($value);
|
||||||
$value["role"] = explode(',', $value["role"]);
|
$value["role"] = explode(',', $value["role"]);
|
||||||
@@ -3862,8 +3894,10 @@ function FormatUeuseItem(array $value, string $myblocklist, string $mybookmark,
|
|||||||
|
|
||||||
if(isset($reusedUserData["other_settings"])) {
|
if(isset($reusedUserData["other_settings"])) {
|
||||||
$reusedUserData["isAIBlock"] = val_OtherSettings("isAIBlock", $reusedUserData["other_settings"]);
|
$reusedUserData["isAIBlock"] = val_OtherSettings("isAIBlock", $reusedUserData["other_settings"]);
|
||||||
|
$reusedUserData["OnlineStatus"] = getUserOnlineStatus($reusedUserData["last_login_datetime"], $reusedUserData["other_settings"]);
|
||||||
} else {
|
} else {
|
||||||
$reusedUserData["isAIBlock"] = false;
|
$reusedUserData["isAIBlock"] = false;
|
||||||
|
$reusedUserData["OnlineStatus"] = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$reused = to_null($reused);
|
$reused = to_null($reused);
|
||||||
@@ -3889,6 +3923,7 @@ function FormatUeuseItem(array $value, string $myblocklist, string $mybookmark,
|
|||||||
"role" => $reusedUserData["role"],
|
"role" => $reusedUserData["role"],
|
||||||
"is_bot" => $reusedUserData["is_bot"],
|
"is_bot" => $reusedUserData["is_bot"],
|
||||||
"is_aiblock" => (bool)$reusedUserData["isAIBlock"],
|
"is_aiblock" => (bool)$reusedUserData["isAIBlock"],
|
||||||
|
"online_status" => $reusedUserData["OnlineStatus"],
|
||||||
],
|
],
|
||||||
"ueuse" => $reused["ueuse"],
|
"ueuse" => $reused["ueuse"],
|
||||||
"photo1" => $reused["photo1"],
|
"photo1" => $reused["photo1"],
|
||||||
@@ -3929,6 +3964,7 @@ function FormatUeuseItem(array $value, string $myblocklist, string $mybookmark,
|
|||||||
"role" => $value["role"],
|
"role" => $value["role"],
|
||||||
"is_bot" => $value["is_bot"],
|
"is_bot" => $value["is_bot"],
|
||||||
"is_aiblock" => (bool)$value["isAIBlock"],
|
"is_aiblock" => (bool)$value["isAIBlock"],
|
||||||
|
"online_status" => $value["OnlineStatus"],
|
||||||
],
|
],
|
||||||
"ueuse" => $value["ueuse"],
|
"ueuse" => $value["ueuse"],
|
||||||
"photo1" => $value["photo1"],
|
"photo1" => $value["photo1"],
|
||||||
@@ -4189,7 +4225,7 @@ function getDatasUeuse(PDO $pdo, array $messages): array {
|
|||||||
$users = [];
|
$users = [];
|
||||||
if (!empty($userIds)) {
|
if (!empty($userIds)) {
|
||||||
$placeholders = implode(',', array_fill(0, count($userIds), '?'));
|
$placeholders = implode(',', array_fill(0, count($userIds), '?'));
|
||||||
$stmt = $pdo->prepare("SELECT userid, username, profile, role, iconname, headname, sacinfo, other_settings FROM account WHERE userid IN ($placeholders)");
|
$stmt = $pdo->prepare("SELECT userid, username, profile, role, iconname, headname, sacinfo, other_settings, last_login_datetime FROM account WHERE userid IN ($placeholders)");
|
||||||
$stmt->execute($userIds);
|
$stmt->execute($userIds);
|
||||||
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
||||||
$users[$row['userid']] = $row;
|
$users[$row['userid']] = $row;
|
||||||
@@ -4226,6 +4262,7 @@ function getDatasUeuse(PDO $pdo, array $messages): array {
|
|||||||
$message['iconname'] = $userRow['iconname'] ?? ($message['iconname'] ?? null);
|
$message['iconname'] = $userRow['iconname'] ?? ($message['iconname'] ?? null);
|
||||||
$message['headname'] = $userRow['headname'] ?? ($message['headname'] ?? null);
|
$message['headname'] = $userRow['headname'] ?? ($message['headname'] ?? null);
|
||||||
$message['sacinfo'] = $userRow['sacinfo'] ?? ($message['sacinfo'] ?? null);
|
$message['sacinfo'] = $userRow['sacinfo'] ?? ($message['sacinfo'] ?? null);
|
||||||
|
$message['last_login_datetime'] = $userRow['last_login_datetime'] ?? ($message['last_login_datetime'] ?? null);
|
||||||
$message['other_settings'] = $userRow['other_settings'] ?? ($message['other_settings'] ?? null);
|
$message['other_settings'] = $userRow['other_settings'] ?? ($message['other_settings'] ?? null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ $banurldomainfile = "../server/banurldomain.txt";
|
|||||||
$banurl_info = file_get_contents($banurldomainfile);
|
$banurl_info = file_get_contents($banurldomainfile);
|
||||||
$banurl = preg_split("/\r\n|\n|\r/", $banurl_info);
|
$banurl = preg_split("/\r\n|\n|\r/", $banurl_info);
|
||||||
|
|
||||||
|
$domain = $_SERVER['HTTP_HOST'];
|
||||||
|
|
||||||
// 変数の初期化
|
// 変数の初期化
|
||||||
$datetime = array();
|
$datetime = array();
|
||||||
$user_name = null;
|
$user_name = null;
|
||||||
|
|||||||
Vendored
+2
-2
File diff suppressed because one or more lines are too long
+51
-11
@@ -421,6 +421,20 @@ async function YouTube_and_nicovideo_Links(postText) {
|
|||||||
|
|
||||||
let embeddedOnce = false;
|
let embeddedOnce = false;
|
||||||
|
|
||||||
|
const fetchOEmbed = (url, providerName, placeholderId, endpoint) => {
|
||||||
|
$.ajax({
|
||||||
|
url: `${endpoint}?url=${encodeURIComponent(url)}&format=json`,
|
||||||
|
method: 'GET',
|
||||||
|
dataType: 'json'
|
||||||
|
}).then(response => {
|
||||||
|
if (response && response.html) {
|
||||||
|
$(`#${placeholderId}`).html(response.html);
|
||||||
|
}
|
||||||
|
}).catch(() => {
|
||||||
|
$(`#${placeholderId}`).html(`<p style="font-size: 0.8rem;">Failed to load ${providerName}.</p>`);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
for (const url of urls) {
|
for (const url of urls) {
|
||||||
if (embeddedOnce) return;
|
if (embeddedOnce) return;
|
||||||
|
|
||||||
@@ -470,17 +484,19 @@ async function YouTube_and_nicovideo_Links(postText) {
|
|||||||
embedCode = `<div class="youtube_and_nicovideo_player"><iframe src="https://embed.nicovideo.jp/watch/${videoId}?from=${videoTime}" frameborder="0" allowfullscreen></iframe></div>`;
|
embedCode = `<div class="youtube_and_nicovideo_player"><iframe src="https://embed.nicovideo.jp/watch/${videoId}?from=${videoTime}" frameborder="0" allowfullscreen></iframe></div>`;
|
||||||
embeddedOnce = true;
|
embeddedOnce = true;
|
||||||
}
|
}
|
||||||
}else if (['soundcloud.com', 'on.soundcloud.com'].includes(host)) {
|
} else {
|
||||||
const oembedUrl = `https://soundcloud.com/oembed?format=json&maxheight=400&url=${encodeURIComponent(url)}`;
|
const isSoundCloud = ['soundcloud.com', 'on.soundcloud.com'].includes(host);
|
||||||
|
const isSpotify = host === 'open.spotify.com';
|
||||||
|
|
||||||
const response = await $.ajax({
|
if (isSoundCloud || isSpotify) {
|
||||||
url: oembedUrl,
|
const provider = isSoundCloud ? { name: 'SoundCloud', api: 'https://soundcloud.com/oembed' } : { name: 'Spotify', api: 'https://open.spotify.com/oembed' };
|
||||||
method: 'GET',
|
const placeholderId = `embed-${Math.random().toString(36).substring(2, 9)}`;
|
||||||
dataType: 'json'
|
|
||||||
});
|
|
||||||
|
|
||||||
if (response && response.html) {
|
embedCode = `<div id="${placeholderId}" class="youtube_and_nicovideo_player">
|
||||||
embedCode = `<div class="youtube_and_nicovideo_player">${response.html}</div>`;
|
<p>Loading ${provider.name}...</p>
|
||||||
|
</div>`;
|
||||||
|
|
||||||
|
fetchOEmbed(url, provider.name, placeholderId, provider.api);
|
||||||
embeddedOnce = true;
|
embeddedOnce = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -527,6 +543,22 @@ function formatSmartDate(datetimeStr) {
|
|||||||
return `${y}/${pad(m + 1)}/${pad(d)} ${hhmm}`;
|
return `${y}/${pad(m + 1)}/${pad(d)} ${hhmm}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getOnlineStatus(userdata) {
|
||||||
|
if (userdata["online_status"]){
|
||||||
|
if(userdata["online_status"] == "Online") {
|
||||||
|
return `<div class="status green" title="オンライン"></div>`;
|
||||||
|
}else if(userdata["online_status"] == "Away"){
|
||||||
|
return `<div class="status yellow" title="離席中"></div>`;
|
||||||
|
}else if(userdata["online_status"] == "Offline"){
|
||||||
|
return `<div class="status gray" title="オフライン"></div>`;
|
||||||
|
}else{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function getCheckIcon(userdata) {
|
function getCheckIcon(userdata) {
|
||||||
if (userdata["role"] && userdata["role"].includes("official")) {
|
if (userdata["role"] && userdata["role"].includes("official")) {
|
||||||
return `<div class="checkicon"><div class="check"></div></div>`;
|
return `<div class="checkicon"><div class="check"></div></div>`;
|
||||||
@@ -554,6 +586,7 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
|
|||||||
let check = "";
|
let check = "";
|
||||||
let bot = "";
|
let bot = "";
|
||||||
let AIBlock = "";
|
let AIBlock = "";
|
||||||
|
var online_status = "";
|
||||||
var reuse = "";
|
var reuse = "";
|
||||||
let contentHtml = "";
|
let contentHtml = "";
|
||||||
|
|
||||||
@@ -590,6 +623,7 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
|
|||||||
check = getCheckIcon(ueuse["userdata"]);
|
check = getCheckIcon(ueuse["userdata"]);
|
||||||
bot = getBotIcon(ueuse["userdata"]);
|
bot = getBotIcon(ueuse["userdata"]);
|
||||||
AIBlock = getAIBlockFlag(ueuse["userdata"]);
|
AIBlock = getAIBlockFlag(ueuse["userdata"]);
|
||||||
|
online_status = getOnlineStatus(ueuse["userdata"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ueuse["ueuse"].length > 0) {
|
if (ueuse["ueuse"].length > 0) {
|
||||||
@@ -657,6 +691,7 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
|
|||||||
check = getCheckIcon(ueuse["reuse"]["userdata"]);
|
check = getCheckIcon(ueuse["reuse"]["userdata"]);
|
||||||
bot = getBotIcon(ueuse["reuse"]["userdata"]);
|
bot = getBotIcon(ueuse["reuse"]["userdata"]);
|
||||||
AIBlock = getAIBlockFlag(ueuse["reuse"]["userdata"]);
|
AIBlock = getAIBlockFlag(ueuse["reuse"]["userdata"]);
|
||||||
|
online_status = getOnlineStatus(ueuse["reuse"]["userdata"]);
|
||||||
reuse = `<div class="ru">
|
reuse = `<div class="ru">
|
||||||
<a href="/@`+ ueuse["userdata"]["userid"] + `">
|
<a href="/@`+ ueuse["userdata"]["userid"] + `">
|
||||||
<img src="`+ ueuse["userdata"]["iconurl"] + `" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/icon_404.png'">
|
<img src="`+ ueuse["userdata"]["iconurl"] + `" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/icon_404.png'">
|
||||||
@@ -730,6 +765,7 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
|
|||||||
check = getCheckIcon(ueuse["userdata"]);
|
check = getCheckIcon(ueuse["userdata"]);
|
||||||
bot = getBotIcon(ueuse["userdata"]);
|
bot = getBotIcon(ueuse["userdata"]);
|
||||||
AIBlock = getAIBlockFlag(ueuse["userdata"]);
|
AIBlock = getAIBlockFlag(ueuse["userdata"]);
|
||||||
|
online_status = getOnlineStatus(ueuse["userdata"]);
|
||||||
|
|
||||||
if (selectedUniqid != null && selectedUniqid == ueuse["uniqid"]) {
|
if (selectedUniqid != null && selectedUniqid == ueuse["uniqid"]) {
|
||||||
reuse = `<div class="rp"><div class="here"></div><div class="totop"></div><p>一番上のユーズに返信</p></div>`;
|
reuse = `<div class="rp"><div class="here"></div><div class="totop"></div><p>一番上のユーズに返信</p></div>`;
|
||||||
@@ -775,7 +811,7 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
|
|||||||
<img src="`+ ueuse["userdata"]["iconurl"] + `" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/icon_404.png'">
|
<img src="`+ ueuse["userdata"]["iconurl"] + `" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/icon_404.png'">
|
||||||
</a>
|
</a>
|
||||||
<div class="u_name">
|
<div class="u_name">
|
||||||
<a href="/@`+ ueuse["userdata"]["userid"] + `">` + ueuse["userdata"]["username"] + `</a>
|
<a href="/@`+ ueuse["userdata"]["userid"] + `">` + await replaceCustomEmojis(ueuse["userdata"]["username"]) + `</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="idbox">
|
<div class="idbox">
|
||||||
<a href="/@`+ ueuse["userdata"]["userid"] + `">@` + ueuse["userdata"]["userid"] + `</a>
|
<a href="/@`+ ueuse["userdata"]["userid"] + `">@` + ueuse["userdata"]["userid"] + `</a>
|
||||||
@@ -795,6 +831,7 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
|
|||||||
check = getCheckIcon(ueuse["userdata"]);
|
check = getCheckIcon(ueuse["userdata"]);
|
||||||
bot = getBotIcon(ueuse["userdata"]);
|
bot = getBotIcon(ueuse["userdata"]);
|
||||||
AIBlock = getAIBlockFlag(ueuse["userdata"]);
|
AIBlock = getAIBlockFlag(ueuse["userdata"]);
|
||||||
|
online_status = getOnlineStatus(ueuse["userdata"]);
|
||||||
|
|
||||||
reuse = ``;
|
reuse = ``;
|
||||||
inyo = ``;
|
inyo = ``;
|
||||||
@@ -997,7 +1034,10 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
|
|||||||
<div class="ueuse" id="ueuse-`+ ueuse["uniqid"] + `">
|
<div class="ueuse" id="ueuse-`+ ueuse["uniqid"] + `">
|
||||||
`+ reuse + `
|
`+ reuse + `
|
||||||
<div class="flebox">
|
<div class="flebox">
|
||||||
<a href="/@`+ userid + `"><img src="` + iconurl + `" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/icon_404.png'"></a>
|
<a href="/@`+ userid + `">
|
||||||
|
<img src="` + iconurl + `" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/icon_404.png'">
|
||||||
|
`+ online_status +`
|
||||||
|
</a>
|
||||||
<a href="/@`+ userid + `"><div class="u_name">` + await replaceCustomEmojis(username) + `</div></a>
|
<a href="/@`+ userid + `"><div class="u_name">` + await replaceCustomEmojis(username) + `</div></a>
|
||||||
<div class="idbox">
|
<div class="idbox">
|
||||||
<a href="/@`+ userid + `">@` + userid + `</a>
|
<a href="/@`+ userid + `">@` + userid + `</a>
|
||||||
|
|||||||
+76
-111
@@ -114,7 +114,6 @@ if( !empty($_POST['btn_submit']) ) {
|
|||||||
} else {
|
} else {
|
||||||
$error_message[] = 'この招待コード(' . $invitationcode . ')は使えません。(INVITATION_CODE_DEAD)';
|
$error_message[] = 'この招待コード(' . $invitationcode . ')は使えません。(INVITATION_CODE_DEAD)';
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,119 +206,73 @@ if( !empty($_POST['btn_submit']) ) {
|
|||||||
if ($json_account_data == false) {
|
if ($json_account_data == false) {
|
||||||
$error_message[] = "アカウントの移行を最初からやり直してください。(MIGRATION_SORRY)";
|
$error_message[] = "アカウントの移行を最初からやり直してください。(MIGRATION_SORRY)";
|
||||||
} else {
|
} else {
|
||||||
//アイコン&ヘッダー
|
$iconName = "";
|
||||||
if (is_not_private_url("https://".$json_account_data["userdata"]["user_icon"]."/")) {
|
$headName = "";
|
||||||
$icondata = file_get_contents($json_account_data["userdata"]["user_icon"]);
|
|
||||||
$finfo = finfo_open(FILEINFO_MIME_TYPE);
|
|
||||||
$mime_type = finfo_buffer($finfo, $icondata);
|
|
||||||
$safe_img_mime = [
|
|
||||||
"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'
|
|
||||||
];
|
|
||||||
if(isset($safe_img_mime[$mime_type])){
|
|
||||||
$extension = $safe_img_mime[$mime_type];
|
|
||||||
$temp_file = tempnam(sys_get_temp_dir(), 'img');
|
|
||||||
file_put_contents($temp_file, $icondata);
|
|
||||||
|
|
||||||
|
// 処理対象の項目(アイコンとヘッダー)をループで回すとスッキリします
|
||||||
|
$targets = [
|
||||||
|
'user_icon' => ['dir' => 'usericons', 'size' => 512, 'ref' => &$iconName],
|
||||||
|
'user_header' => ['dir' => 'userheads', 'size' => 2048, 'ref' => &$headName]
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($targets as $key => $config) {
|
||||||
|
$img_url = $json_account_data["userdata"][$key] ?? '';
|
||||||
|
|
||||||
|
if (empty($img_url)) continue;
|
||||||
|
|
||||||
|
if (is_not_private_url($img_url)) {
|
||||||
|
$img_content = @file_get_contents($img_url);
|
||||||
|
|
||||||
|
if ($img_content === false) {
|
||||||
|
$error_message[] = "画像の取得に失敗しました。($key)";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 一時ファイル作成
|
||||||
|
$temp_file = tempnam(sys_get_temp_dir(), 'mig');
|
||||||
|
file_put_contents($temp_file, $img_content);
|
||||||
|
|
||||||
|
// MIMEチェックと拡張子変換(後半のコードのスタイルに合わせる)
|
||||||
|
$mime = check_mime($temp_file);
|
||||||
|
if ($mime) {
|
||||||
|
$extension = convert_mime($mime);
|
||||||
delete_exif($extension, $temp_file);
|
delete_exif($extension, $temp_file);
|
||||||
|
|
||||||
// リサイズ
|
// リサイズ(ヘッダーは 2048, アイコンは 512)
|
||||||
resizeImage($temp_file, 512, 512);
|
if ($key === 'user_header') {
|
||||||
|
|
||||||
if(check_mime($temp_file) == "image/webp"){
|
|
||||||
// 新しいファイル名を生成(uniqid + 拡張子)
|
|
||||||
$newFilename = createUniqId() . '-'.$new_userid.'.webp';
|
|
||||||
}else{
|
|
||||||
// 新しいファイル名を生成(uniqid + 拡張子)
|
|
||||||
$newFilename = createUniqId() . '-'.$new_userid.'.' . $extension;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 保存先のパスを生成
|
|
||||||
$uploadedPath = 'usericons/' . $newFilename;
|
|
||||||
|
|
||||||
// ファイルを移動
|
|
||||||
$result = copy($temp_file, "../".$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)エラーコード:' .$uploadedFile['error'].'';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
$error_message[] = '入力されたドメインに接続できませんでした。(BAD_REQUEST)';
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------
|
|
||||||
if (is_not_private_url("https://".$json_account_data["userdata"]["user_header"]."/")) {
|
|
||||||
$headdata = file_get_contents($json_account_data["userdata"]["user_header"]);
|
|
||||||
$finfo = finfo_open(FILEINFO_MIME_TYPE);
|
|
||||||
$mime_type = finfo_buffer($finfo, $headdata);
|
|
||||||
$safe_img_mime = [
|
|
||||||
"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'
|
|
||||||
];
|
|
||||||
if(isset($safe_img_mime[$mime_type])){
|
|
||||||
$extension = $safe_img_mime[$mime_type];
|
|
||||||
$temp_file = tempnam(sys_get_temp_dir(), 'img');
|
|
||||||
file_put_contents($temp_file, $headdata);
|
|
||||||
|
|
||||||
delete_exif($extension, $temp_file);
|
|
||||||
|
|
||||||
// リサイズ
|
|
||||||
resizeImage($temp_file, 2048, 1024);
|
resizeImage($temp_file, 2048, 1024);
|
||||||
|
|
||||||
if(check_mime($temp_file) == "image/webp"){
|
|
||||||
// 新しいファイル名を生成(uniqid + 拡張子)
|
|
||||||
$newFilename = createUniqId() . '-'.$new_userid.'.webp';
|
|
||||||
} else {
|
} else {
|
||||||
// 新しいファイル名を生成(uniqid + 拡張子)
|
resizeImage($temp_file, 512, 512);
|
||||||
$newFilename = createUniqId() . '-'.$new_userid.'.' . $extension;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 保存先のパスを生成
|
// S3アップロード対応
|
||||||
$uploadedPath = 'userheads/' . $newFilename;
|
if (defined('AMS3_CHKS') && AMS3_CHKS == "true") {
|
||||||
|
$s3result = uploadAmazonS3($temp_file);
|
||||||
// ファイルを移動
|
if ($s3result == false) {
|
||||||
$result = copy($temp_file, "../".$uploadedPath);
|
$error_message[] = "アップロード失敗!($key) エラーコード: S3ERROR";
|
||||||
|
|
||||||
if ($result) {
|
|
||||||
$headName = $uploadedPath; // 保存されたファイルのパスを使用
|
|
||||||
} else {
|
} else {
|
||||||
$errnum = $uploadedFile['error'];
|
$config['ref'] = $s3result;
|
||||||
if($errnum === 1){$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";}
|
}
|
||||||
if($errnum === 2){$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";}
|
} else {
|
||||||
if($errnum === 3){$errcode = "FILE_SUKOSHIDAKE_UPLOAD";}
|
// ローカル保存
|
||||||
if($errnum === 4){$errcode = "FILE_UPLOAD_DEKINAKATTA";}
|
$newFilename = createUniqId() . '-' . $new_userid . ($mime == "image/webp" ? '.webp' : '.' . $extension);
|
||||||
if($errnum === 6){$errcode = "TMP_FOLDER_NAI";}
|
$uploadedPath = $config['dir'] . '/' . $newFilename;
|
||||||
if($errnum === 7){$errcode = "FILE_KAKIKOMI_SIPPAI";}
|
|
||||||
if($errnum === 8){$errcode = "PHPINFO()_KAKUNIN";}
|
if (copy($temp_file, "../" . $uploadedPath)) {
|
||||||
$error_message[] = 'アップロード失敗!(2)エラーコード:' .$uploadedFile['error'].'';
|
$config['ref'] = $uploadedPath;
|
||||||
|
} else {
|
||||||
|
$error_message[] = "ファイルの保存に失敗しました。($key)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
$error_message[] = "使用できない画像形式です。($key)";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file_exists($temp_file)) unlink($temp_file);
|
||||||
} else {
|
} else {
|
||||||
$error_message[] = '入力されたドメインに接続できませんでした。(BAD_REQUEST)';
|
$error_message[] = '入力されたドメインに接続できませんでした。(BAD_REQUEST)';
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$query = $pdo->prepare('SELECT * FROM account WHERE userid = :userid limit 1');
|
$query = $pdo->prepare('SELECT * FROM account WHERE userid = :userid limit 1');
|
||||||
$query->execute(array(':userid' => $new_userid));
|
$query->execute(array(':userid' => $new_userid));
|
||||||
@@ -345,7 +298,7 @@ if( !empty($_POST['btn_submit']) ) {
|
|||||||
$error_message[] = 'IDは20文字以内で入力してください。(USERID_OVER_MAX_COUNT)';
|
$error_message[] = 'IDは20文字以内で入力してください。(USERID_OVER_MAX_COUNT)';
|
||||||
}
|
}
|
||||||
|
|
||||||
if(in_array(strtolower($userid), $banuserid) === true ){
|
if (in_array(strtolower($new_userid), $banuserid) === true) {
|
||||||
$error_message[] = 'そのIDは登録禁止になっています。(USERID_CONTAINS_PROHIBITED)';
|
$error_message[] = 'そのIDは登録禁止になっています。(USERID_CONTAINS_PROHIBITED)';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -356,7 +309,6 @@ if( !empty($_POST['btn_submit']) ) {
|
|||||||
if (!(preg_match("/^[a-zA-Z0-9_]+$/", $new_userid))) {
|
if (!(preg_match("/^[a-zA-Z0-9_]+$/", $new_userid))) {
|
||||||
$error_message[] = "IDは半角英数字で入力してください。(「_」は使用可能です。)(USERID_DONT_USE_WORD)";
|
$error_message[] = "IDは半角英数字で入力してください。(「_」は使用可能です。)(USERID_DONT_USE_WORD)";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// パスワードの入力チェック
|
// パスワードの入力チェック
|
||||||
if (empty($password)) {
|
if (empty($password)) {
|
||||||
@@ -519,7 +471,6 @@ if( !empty($_POST['btn_submit']) ) {
|
|||||||
} else {
|
} else {
|
||||||
$error_message[] = "このサーバーではアカウントの移行登録を受け入れていません。(MIGRATION_SORRY)";
|
$error_message[] = "このサーバーではアカウントの移行登録を受け入れていません。(MIGRATION_SORRY)";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// データベースの接続を閉じる
|
// データベースの接続を閉じる
|
||||||
@@ -528,6 +479,7 @@ $pdo = null;
|
|||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="ja">
|
<html lang="ja">
|
||||||
|
|
||||||
<head prefix="og:http://ogp.me/ns#">
|
<head prefix="og:http://ogp.me/ns#">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<link rel="stylesheet" href="/css/style.css">
|
<link rel="stylesheet" href="/css/style.css">
|
||||||
@@ -545,6 +497,7 @@ $pdo = null;
|
|||||||
<title>アカウントの移行登録 - <?php echo safetext($serversettings["serverinfo"]["server_name"]); ?></title>
|
<title>アカウントの移行登録 - <?php echo safetext($serversettings["serverinfo"]["server_name"]); ?></title>
|
||||||
</head>
|
</head>
|
||||||
<script src="/js/back.js"></script>
|
<script src="/js/back.js"></script>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
|
|
||||||
@@ -575,28 +528,38 @@ $pdo = null;
|
|||||||
<div>
|
<div>
|
||||||
<p>新しいユーザーID</p>
|
<p>新しいユーザーID</p>
|
||||||
<div class="p2">このサーバーで使用するユーザーIDを入力してください。</div>
|
<div class="p2">このサーバーで使用するユーザーIDを入力してください。</div>
|
||||||
<input id="new_userid" type="text" placeholder="" class="inbox" name="new_userid" value="<?php if( !empty($_SESSION['form_data']['new_userid']) ){ echo safetext($_SESSION['form_data']['new_userid']); } ?>">
|
<input id="new_userid" type="text" placeholder="" class="inbox" name="new_userid" value="<?php if (!empty($_SESSION['form_data']['new_userid'])) {
|
||||||
|
echo safetext($_SESSION['form_data']['new_userid']);
|
||||||
|
} ?>">
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p>新しいパスワード</p>
|
<p>新しいパスワード</p>
|
||||||
<div class="p2">このサーバーで使用するパスワードを入力してください。</div>
|
<div class="p2">このサーバーで使用するパスワードを入力してください。</div>
|
||||||
<input id="password" type="text" placeholder="" class="inbox" name="password" value="<?php if( !empty($_SESSION['form_data']['password']) ){ echo safetext($_SESSION['form_data']['password']); } ?>">
|
<input id="password" type="text" placeholder="" class="inbox" name="password" value="<?php if (!empty($_SESSION['form_data']['password'])) {
|
||||||
|
echo safetext($_SESSION['form_data']['password']);
|
||||||
|
} ?>">
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p>アカウント移行元のuwuzuサーバーのドメイン</p>
|
<p>アカウント移行元のuwuzuサーバーのドメイン</p>
|
||||||
<div class="p2">アカウント移行元のサーバードメインを入力してください。</div>
|
<div class="p2">アカウント移行元のサーバードメインを入力してください。</div>
|
||||||
<input id="moto_server_domain" type="text" placeholder="uwuzu.example.com" class="inbox" name="moto_server_domain" value="<?php if( !empty($_SESSION['form_data']['moto_server_domain']) ){ echo safetext($_SESSION['form_data']['moto_server_domain']); } ?>">
|
<input id="moto_server_domain" type="text" placeholder="uwuzu.example.com" class="inbox" name="moto_server_domain" value="<?php if (!empty($_SESSION['form_data']['moto_server_domain'])) {
|
||||||
|
echo safetext($_SESSION['form_data']['moto_server_domain']);
|
||||||
|
} ?>">
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<p>識別コード</p>
|
<p>識別コード</p>
|
||||||
<div class="p2">アカウント移行元のサーバーで発行された識別コードを入力してください。</div>
|
<div class="p2">アカウント移行元のサーバーで発行された識別コードを入力してください。</div>
|
||||||
<input id="moto_server_account_check" type="text" placeholder="" class="inbox" name="moto_server_account_check" value="<?php if( !empty($_SESSION['form_data']['moto_server_account_check']) ){ echo safetext($_SESSION['form_data']['moto_server_account_check']); } ?>">
|
<input id="moto_server_account_check" type="text" placeholder="" class="inbox" name="moto_server_account_check" value="<?php if (!empty($_SESSION['form_data']['moto_server_account_check'])) {
|
||||||
|
echo safetext($_SESSION['form_data']['moto_server_account_check']);
|
||||||
|
} ?>">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p>認証コード</p>
|
<p>認証コード</p>
|
||||||
<div class="p2">アカウント移行元のサーバーで発行された認証コードを入力してください。</div>
|
<div class="p2">アカウント移行元のサーバーで発行された認証コードを入力してください。</div>
|
||||||
<input id="moto_server_account_auth" type="text" placeholder="" class="inbox" name="moto_server_account_auth" value="<?php if( !empty($_SESSION['form_data']['moto_server_account_auth']) ){ echo safetext($_SESSION['form_data']['moto_server_account_auth']); } ?>">
|
<input id="moto_server_account_auth" type="text" placeholder="" class="inbox" name="moto_server_account_auth" value="<?php if (!empty($_SESSION['form_data']['moto_server_account_auth'])) {
|
||||||
|
echo safetext($_SESSION['form_data']['moto_server_account_auth']);
|
||||||
|
} ?>">
|
||||||
</div>
|
</div>
|
||||||
<?php if (!empty(H_CAPTCHA_ONOFF && H_CAPTCHA_ONOFF == "true")) { ?>
|
<?php if (!empty(H_CAPTCHA_ONOFF && H_CAPTCHA_ONOFF == "true")) { ?>
|
||||||
<div class="captcha_zone">
|
<div class="captcha_zone">
|
||||||
@@ -613,7 +576,9 @@ $pdo = null;
|
|||||||
<div>
|
<div>
|
||||||
<p>招待コード</p>
|
<p>招待コード</p>
|
||||||
<div class="p2">招待コードがないとこのサーバーには登録できません。</div>
|
<div class="p2">招待コードがないとこのサーバーには登録できません。</div>
|
||||||
<input id="invitationcode" type="text" placeholder="" class="inbox" name="invitationcode" value="<?php if( !empty($_SESSION['form_data']['invitationcode']) ){ echo safetext($_SESSION['form_data']['invitationcode']); } ?>">
|
<input id="invitationcode" type="text" placeholder="" class="inbox" name="invitationcode" value="<?php if (!empty($_SESSION['form_data']['invitationcode'])) {
|
||||||
|
echo safetext($_SESSION['form_data']['invitationcode']);
|
||||||
|
} ?>">
|
||||||
</div>
|
</div>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
|
|
||||||
@@ -632,7 +597,6 @@ $pdo = null;
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
function checkForm(inputElement) {
|
function checkForm(inputElement) {
|
||||||
var str = inputElement.value;
|
var str = inputElement.value;
|
||||||
while (str.match(/[^A-Za-z\d_]/)) {
|
while (str.match(/[^A-Za-z\d_]/)) {
|
||||||
@@ -654,4 +618,5 @@ window.addEventListener('DOMContentLoaded', function(){
|
|||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -8,6 +8,11 @@ $badpassfile = "server/badpass.txt";
|
|||||||
$badpass_info = file_get_contents($badpassfile);
|
$badpass_info = file_get_contents($badpassfile);
|
||||||
$badpass = preg_split("/\r\n|\n|\r/", $badpass_info);
|
$badpass = preg_split("/\r\n|\n|\r/", $badpass_info);
|
||||||
|
|
||||||
|
$domain = $_SERVER['HTTP_HOST'];
|
||||||
|
|
||||||
|
$serverinfofile = 'server/info.txt';
|
||||||
|
$serverinfo = file_get_contents($serverinfofile);
|
||||||
|
|
||||||
require('db.php');
|
require('db.php');
|
||||||
//関数呼び出し
|
//関数呼び出し
|
||||||
//- EXIF
|
//- EXIF
|
||||||
|
|||||||
@@ -42,6 +42,9 @@ $domain = $_SERVER['HTTP_HOST'];
|
|||||||
|
|
||||||
//------------------------
|
//------------------------
|
||||||
|
|
||||||
|
$serverinfofile = 'server/info.txt';
|
||||||
|
$serverinfo = file_get_contents($serverinfofile);
|
||||||
|
|
||||||
// データベースに接続
|
// データベースに接続
|
||||||
try {
|
try {
|
||||||
$option = array(
|
$option = array(
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){
|
|||||||
"software" => array(
|
"software" => array(
|
||||||
"name" => "uwuzu",
|
"name" => "uwuzu",
|
||||||
"version" => "".str_replace("\r", '', $uwuzuinfo[1])."",
|
"version" => "".str_replace("\r", '', $uwuzuinfo[1])."",
|
||||||
"homepage" => "https://docs.uwuzu.xyz/",
|
"homepage" => "https://docs.uwuzu.com/",
|
||||||
"repository" => "https://github.com/Daichimarukana/uwuzu",
|
"repository" => "https://github.com/Daichimarukana/uwuzu",
|
||||||
),
|
),
|
||||||
"protocols" => [
|
"protocols" => [
|
||||||
|
|||||||
@@ -130,21 +130,21 @@ if( !empty($_POST['migration_submit']) ) {
|
|||||||
if($Check_result["server_info"]["account_migration"] == "true"){
|
if($Check_result["server_info"]["account_migration"] == "true"){
|
||||||
$pdo->beginTransaction();
|
$pdo->beginTransaction();
|
||||||
try {
|
try {
|
||||||
$account = $userid;
|
$account = safetext($userid);
|
||||||
$migration_code = createUniqId();
|
$migration_code = safetext(createUniqId());
|
||||||
$encryption_key = random(32);
|
$encryption_key = random(32);
|
||||||
$encryption_ivkey = random(16);
|
$encryption_ivkey = random(16);
|
||||||
$datetime = date("Y-m-d H:i:s");
|
$datetime = date("Y-m-d H:i:s");
|
||||||
$domain = $server_domain;
|
$domain = safetext($server_domain);
|
||||||
|
|
||||||
$stmt = $pdo->prepare("INSERT INTO migration (account, domain, migration_code, encryption_key, encryption_ivkey, datetime) VALUES (:account, :domain, :migration_code, :encryption_key, :encryption_ivkey, :datetime)");
|
$stmt = $pdo->prepare("INSERT INTO migration (account, domain, migration_code, encryption_key, encryption_ivkey, datetime) VALUES (:account, :domain, :migration_code, :encryption_key, :encryption_ivkey, :datetime)");
|
||||||
|
|
||||||
$stmt->bindParam(':account', safetext($account), PDO::PARAM_STR);
|
$stmt->bindParam(':account', $account, PDO::PARAM_STR);
|
||||||
$stmt->bindParam(':domain', safetext($domain), PDO::PARAM_STR);
|
$stmt->bindParam(':domain', $domain, PDO::PARAM_STR);
|
||||||
$stmt->bindParam(':migration_code', safetext($migration_code), PDO::PARAM_STR);
|
$stmt->bindParam(':migration_code', $migration_code, PDO::PARAM_STR);
|
||||||
$stmt->bindParam(':encryption_key', safetext($encryption_key), PDO::PARAM_STR);
|
$stmt->bindParam(':encryption_key', $encryption_key, PDO::PARAM_STR);
|
||||||
$stmt->bindParam(':encryption_ivkey', safetext($encryption_ivkey), PDO::PARAM_STR);
|
$stmt->bindParam(':encryption_ivkey', $encryption_ivkey, PDO::PARAM_STR);
|
||||||
$stmt->bindParam(':datetime', safetext($datetime), PDO::PARAM_STR);
|
$stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR);
|
||||||
|
|
||||||
$res = $stmt->execute();
|
$res = $stmt->execute();
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -292,7 +292,7 @@ require('../logout/logout.php');
|
|||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
<h1>API</h1>
|
<h1>API</h1>
|
||||||
<p>APIの使用方法はdocs.uwuzu.xyzよりAPIドキュメントをご確認ください。</p>
|
<p>APIの使用方法はdocs.uwuzu.comよりAPIドキュメントをご確認ください。</p>
|
||||||
|
|
||||||
<?php if (empty($userData['token'])) { ?>
|
<?php if (empty($userData['token'])) { ?>
|
||||||
<p>以下のボタンよりアクセストークンを取得すると使用できます。<br>アクセストークンは一度発行すると作り直すまで再度確認はできません。また、絶対に他人に知られないように保護してください。<br>
|
<p>以下のボタンよりアクセストークンを取得すると使用できます。<br>アクセストークンは一度発行すると作り直すまで再度確認はできません。また、絶対に他人に知られないように保護してください。<br>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<p>JavaScriptを無効にしている状態での使用はできません。</p>
|
<p>JavaScriptを無効にしている状態での使用はできません。</p>
|
||||||
<p>詳細は下記のリンクよりご確認ください。</p>
|
<p>詳細は下記のリンクよりご確認ください。</p>
|
||||||
|
|
||||||
<a href="https://docs.uwuzu.xyz/docs/uwuzusupport" class="infobtn">詳細</a>
|
<a href="https://docs.uwuzu.com/docs/uwuzusupport" class="infobtn">詳細</a>
|
||||||
<div class="p2">JS_BLOCKED_ERROR</div>
|
<div class="p2">JS_BLOCKED_ERROR</div>
|
||||||
|
|
||||||
<div class="center_text">
|
<div class="center_text">
|
||||||
|
|||||||
@@ -117,7 +117,7 @@
|
|||||||
<div class="page" id="page8" style="display:none;">
|
<div class="page" id="page8" style="display:none;">
|
||||||
<h1>お疲れ様でした!</h1>
|
<h1>お疲れ様でした!</h1>
|
||||||
<p style="text-align: center;">チュートリアルは終了です!<br>
|
<p style="text-align: center;">チュートリアルは終了です!<br>
|
||||||
まだ、このチュートリアルで紹介できていないuwuzuの機能や使い方も多くあるので、もっとuwuzuについて知りたい方はぜひdocs.uwuzu.xyzをご覧ください。</p>
|
まだ、このチュートリアルで紹介できていないuwuzuの機能や使い方も多くあるので、もっとuwuzuについて知りたい方はぜひdocs.uwuzu.comをご覧ください。</p>
|
||||||
<div class="btm_area">
|
<div class="btm_area">
|
||||||
<div class="iro_btn backcolor" id="back">戻る</div>
|
<div class="iro_btn backcolor" id="back">戻る</div>
|
||||||
<div class="iro_btn" id="end">閉じる</div>
|
<div class="iro_btn" id="end">閉じる</div>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ $serversettings = parse_ini_file($serversettings_file, true);
|
|||||||
require('../db.php');
|
require('../db.php');
|
||||||
require("../function/function.php");
|
require("../function/function.php");
|
||||||
|
|
||||||
|
$domain = $_SERVER['HTTP_HOST'];
|
||||||
|
|
||||||
// 変数の初期化
|
// 変数の初期化
|
||||||
$datetime = array();
|
$datetime = array();
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ daichimarukanaと一緒に開発したいよ~って人は私のHPからメー
|
|||||||
|
|
||||||
## 9. ライセンス
|
## 9. ライセンス
|
||||||
UPULライセンスです!
|
UPULライセンスです!
|
||||||
UPULライセンスに関しては同梱されているUPUL_License.txtを確認するか、uwuzu.xyzより詳細をご確認ください。
|
UPULライセンスに関しては同梱されているUPUL_License.txtを確認するか、uwuzu.comより詳細をご確認ください。
|
||||||
|
|
||||||
## 10. 利用させていただいているライブラリなどのライセンス
|
## 10. 利用させていただいているライブラリなどのライセンス
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ Redistribution and use in source and binary forms, with or without modification,
|
|||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
なお、使わせていただいているコードは改変させていただいでおります。
|
なお、使わせていただいているコードは改変させていただいでおります。
|
||||||
|
|
||||||
### jQuery 3.7.1
|
### jQuery 4.0.0
|
||||||
MITライセンスで提供されているようです。
|
MITライセンスで提供されているようです。
|
||||||
詳細は以下のリンク先をご覧ください。
|
詳細は以下のリンク先をご覧ください。
|
||||||
https://jquery.com/license/
|
https://jquery.com/license/
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
uwuzu
|
uwuzu
|
||||||
1.6.13
|
1.6.14
|
||||||
2026/04/22
|
2026/05/04
|
||||||
daichimarukana,putonfps
|
daichimarukana,putonfps
|
||||||
@@ -1,6 +1,20 @@
|
|||||||
## リリースノートだぜぇぇぇぇぇぇい!!!!!!!
|
## リリースノートだぜぇぇぇぇぇぇい!!!!!!!
|
||||||
ここにはuwuzuの更新情報を載せてくぜぇ~!(いやまてテンションおかしいだろ...)
|
ここにはuwuzuの更新情報を載せてくぜぇ~!(いやまてテンションおかしいだろ...)
|
||||||
|
|
||||||
|
## Version 1.6.14 (Hapuego)
|
||||||
|
2026/05/04
|
||||||
|
fix: ホーム画面・ブックマークにて共有ボタンが正常に動作しなくなる恐れのある問題を修正しました!
|
||||||
|
fix: ログインやアカウント登録が正常にできなくなってしまう恐れのある問題を修正しました!
|
||||||
|
fix: 埋め込みを含むユーズを読み込んだ際のタイムラインの表示を高速化しました!
|
||||||
|
fix: アカウントの移行に関する処理を一部修正しました!
|
||||||
|
fix: 管理者向けページにてログの保存に失敗する恐れのある問題を修正しました。
|
||||||
|
fix: uwuzu.xyz宛のURLをuwuzu.comに変更しました!
|
||||||
|
fix: APIトークンの削除に関するエラーログの保存に失敗する恐れのある問題を修正しました!
|
||||||
|
chg: 一部UIを変更しました
|
||||||
|
chg: 同梱のjQueryをjQuery 4.0.0にアップデートしました!
|
||||||
|
new: Spotify埋め込みに対応しました!!!!
|
||||||
|
new: タイムラインへのオンラインステータス表示に対応しました!
|
||||||
|
|
||||||
## Version 1.6.13 (Hapuego)
|
## Version 1.6.13 (Hapuego)
|
||||||
2026/04/22
|
2026/04/22
|
||||||
fix: カスタム絵文字が表示されなくなる(使用できなくなる)問題を修正しました!
|
fix: カスタム絵文字が表示されなくなる(使用できなくなる)問題を修正しました!
|
||||||
|
|||||||
@@ -394,7 +394,7 @@ if( !empty($_POST['send_ban_submit']) ) {
|
|||||||
//------------
|
//------------
|
||||||
} else {
|
} else {
|
||||||
$error_message[] = 'アカウント削除に失敗しました。(ACCOUNT_DELETE_DAME)';
|
$error_message[] = 'アカウント削除に失敗しました。(ACCOUNT_DELETE_DAME)';
|
||||||
actionLog($userid, "error", "send_ban_submit", $userId2, $error_message[], 4);
|
actionLog($userid, "error", "send_ban_submit", $userId2, $error_message, 4);
|
||||||
}
|
}
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -88,7 +88,7 @@ if($errcode == "UNSUPPORTED_BROWSER"){
|
|||||||
<br>詳細は下記のリンクよりご確認ください。</p>
|
<br>詳細は下記のリンクよりご確認ください。</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href="https://docs.uwuzu.xyz/docs/uwuzusupport" class="infobtn">詳細</a>
|
<a href="https://docs.uwuzu.com/docs/uwuzusupport" class="infobtn">詳細</a>
|
||||||
|
|
||||||
<div class="maintext">
|
<div class="maintext">
|
||||||
<h3>エラー内容</h3>
|
<h3>エラー内容</h3>
|
||||||
|
|||||||
+23
-4
@@ -1,12 +1,31 @@
|
|||||||
{
|
{
|
||||||
"software": "uwuzu",
|
"software": "uwuzu",
|
||||||
"version": "1.6.13",
|
"version": "1.6.14",
|
||||||
"release_date": "2026/04/22",
|
"release_date": "2026/05/04",
|
||||||
"release_notes": "このアップデートには、カスタム絵文字の表示がされなくなる問題の修正が含まれます。\n詳細はリリースノートをご確認ください。",
|
"release_notes": "このアップデートには、Spotify埋め込み機能、タイムラインへのオンラインステータス表示の対応とユーズの共有に関するバグを始めとする諸々のバグ修正が含まれます。\n詳細はリリースノートをご確認ください。",
|
||||||
"notices": "アップデート前にデータのバックアップを行うことをおすすめします!",
|
"notices": "アップデート前にデータのバックアップを行うことをおすすめします!",
|
||||||
"files": {
|
"files": {
|
||||||
"overwrite": [
|
"overwrite": [
|
||||||
"/function/get_customemoji.php",
|
"/authlogin.php",
|
||||||
|
"/check.php",
|
||||||
|
"/new_select.php",
|
||||||
|
"/new.php",
|
||||||
|
"/unsupported.php",
|
||||||
|
"/bookmark/index.php",
|
||||||
|
"/css/home.css",
|
||||||
|
"/function/delete_apitoken.php",
|
||||||
|
"/function/function.php",
|
||||||
|
"/home/index.php",
|
||||||
|
"/js/view_function.js",
|
||||||
|
"/js/jquery-min.js",
|
||||||
|
"/migration/index.php",
|
||||||
|
"/nodeinfo/2.1/index.php",
|
||||||
|
"/others/account_migration.php",
|
||||||
|
"/others/index.php",
|
||||||
|
"/require/noscript_modal.php",
|
||||||
|
"/require/tutorial.php",
|
||||||
|
"/search/index.php",
|
||||||
|
"/settings_admin/userinfo.php",
|
||||||
"/server/uwuzuabout.txt",
|
"/server/uwuzuabout.txt",
|
||||||
"/server/uwuzuinfo.txt",
|
"/server/uwuzuinfo.txt",
|
||||||
"/server/uwuzurelease.txt"
|
"/server/uwuzurelease.txt"
|
||||||
|
|||||||
Reference in New Issue
Block a user