mirror of
https://github.com/Daichimarukana/uwuzu.git
synced 2026-06-04 19:14:41 +00:00
uwuzu v1.6.0 Hapuego
This commit is contained in:
+176
-114
@@ -72,126 +72,167 @@ $notificationcount = $notiData['notification_count'];
|
||||
|
||||
|
||||
if (!empty($pdo)) {
|
||||
$uwuzuid2 = safetext(str_replace('@', '', $_GET['uwuzuid']));
|
||||
$uwuzuid = safetext(str_replace('@', '', $_GET['userid']));
|
||||
$is_local = true;
|
||||
|
||||
$uwuzuid = safetext(str_replace('@' . $domain, '', $uwuzuid2));
|
||||
|
||||
$userQuery = $pdo->prepare("SELECT username, userid, profile, role, follower, blocklist FROM account WHERE userid = :userid");
|
||||
$userQuery->bindValue(':userid', $uwuzuid);
|
||||
$userQuery->execute();
|
||||
$userData = $userQuery->fetch();
|
||||
if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){
|
||||
if(isset($_GET['domain'])){
|
||||
$activity_domain = safetext(str_replace('@', '', $_GET['domain']));
|
||||
|
||||
if(!($activity_domain == $domain)){
|
||||
$domain_response = GetActivityPubUser($uwuzuid, $activity_domain);
|
||||
if (empty($domain_response) || array_key_exists("error", $domain_response)) {
|
||||
$userData = null;
|
||||
} else {
|
||||
$userData = $domain_response;
|
||||
}
|
||||
//var_dump($domain_response);
|
||||
$is_local = false;
|
||||
}else{
|
||||
$activity_domain = $domain;
|
||||
$is_local = true;
|
||||
}
|
||||
}else{
|
||||
$activity_domain = $domain;
|
||||
}
|
||||
}else{
|
||||
$activity_domain = $domain;
|
||||
$is_local = true;
|
||||
}
|
||||
|
||||
if($is_local == true){
|
||||
$userQuery = $pdo->prepare("SELECT username, userid, profile, role, follower, blocklist FROM account WHERE userid = :userid");
|
||||
$userQuery->bindValue(':userid', $uwuzuid);
|
||||
$userQuery->execute();
|
||||
$userData = $userQuery->fetch();
|
||||
}
|
||||
|
||||
if (!empty($userData["userid"])) {
|
||||
if($is_local == true){
|
||||
$roles = array_filter(explode(',', $userData["role"])); // カンマで区切られたロールを配列に分割
|
||||
|
||||
$rerole = $pdo->prepare("SELECT follow, follower,blocklist, username, userid, password, mailadds, profile, iconname, headname, role, datetime, other_settings FROM account WHERE userid = :userid");
|
||||
|
||||
$roles = array_filter(explode(',', $userData["role"])); // カンマで区切られたロールを配列に分割
|
||||
|
||||
$rerole = $pdo->prepare("SELECT follow, follower,blocklist, username, userid, password, mailadds, profile, iconname, headname, role, datetime, other_settings FROM account WHERE userid = :userid");
|
||||
|
||||
$rerole->bindValue(':userid', $uwuzuid);
|
||||
// SQL実行
|
||||
$rerole->execute();
|
||||
|
||||
$userdata = $rerole->fetch();
|
||||
|
||||
$roleDataArray = array();
|
||||
|
||||
foreach ($roles as $roleId) {
|
||||
$rerole = $pdo->prepare("SELECT rolename, roleauth, rolecolor, roleeffect FROM role WHERE roleidname = :role");
|
||||
$rerole->bindValue(':role', $roleId);
|
||||
$rerole->bindValue(':userid', $uwuzuid);
|
||||
// SQL実行
|
||||
$rerole->execute();
|
||||
$roleDataArray[$roleId] = $rerole->fetch();
|
||||
}
|
||||
|
||||
$isAIBlock = val_OtherSettings("isAIBlock", $userdata["other_settings"]);
|
||||
$userdata = $rerole->fetch();
|
||||
|
||||
//-------フォロー数---------
|
||||
$follow = $userdata['follow']; // コンマで区切られたユーザーIDを含む変数
|
||||
$roleDataArray = array();
|
||||
|
||||
// コンマで区切って配列に分割し、要素数を数える
|
||||
$followIds = array_reverse(array_values(array_filter(explode(',', $follow))));
|
||||
$followCount = count($followIds);
|
||||
|
||||
$follow_on_me = array_search($userid, $followIds);
|
||||
|
||||
if ($follow_on_me !== false) {
|
||||
$follow_yes = "フォローされています"; // worldを含む:6
|
||||
} else {
|
||||
$follow_yes = ""; // worldを含む:6
|
||||
}
|
||||
|
||||
//-------フォロワー数---------
|
||||
$follower = $userdata['follower']; // コンマで区切られたユーザーIDを含む変数
|
||||
|
||||
// コンマで区切って配列に分割し、要素数を数える
|
||||
$followerIds = array_reverse(array_values(array_filter(explode(',', $follower))));
|
||||
$followerCount = count($followerIds);
|
||||
|
||||
$profileText = safetext($userData['profile']);
|
||||
|
||||
|
||||
$allueuse = $pdo->prepare("SELECT account FROM ueuse WHERE account = :userid");
|
||||
$allueuse->bindValue(':userid', $uwuzuid);
|
||||
$allueuse->execute();
|
||||
$ueuse_cnt = $allueuse->rowCount();
|
||||
|
||||
//-------フォロワー取得---------
|
||||
|
||||
$follower_userdata = array();
|
||||
if(!(empty($followerIds))){
|
||||
// フォロワーのユーザーIDを $follower_userids 配列に追加
|
||||
foreach ($followerIds as $follower_userid) {
|
||||
$follower_userids[] = $follower_userid;
|
||||
foreach ($roles as $roleId) {
|
||||
$rerole = $pdo->prepare("SELECT rolename, roleauth, rolecolor, roleeffect FROM role WHERE roleidname = :role");
|
||||
$rerole->bindValue(':role', $roleId);
|
||||
$rerole->execute();
|
||||
$roleDataArray[$roleId] = $rerole->fetch();
|
||||
}
|
||||
|
||||
// フォロワーのユーザー情報を取得
|
||||
$isAIBlock = val_OtherSettings("isAIBlock", $userdata["other_settings"]);
|
||||
|
||||
foreach ($follower_userids as $follower_userid) {
|
||||
$follower_userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, sacinfo FROM account WHERE userid = :userid");
|
||||
$follower_userQuery->bindValue(':userid', $follower_userid);
|
||||
$follower_userQuery->execute();
|
||||
$follower_userinfo = $follower_userQuery->fetch();
|
||||
//-------フォロー数---------
|
||||
$follow = $userdata['follow']; // コンマで区切られたユーザーIDを含む変数
|
||||
|
||||
if ($follower_userinfo) {
|
||||
// フォロワーのユーザー情報を $follower_userdata 配列に追加
|
||||
$follower_userdata[] = $follower_userinfo;
|
||||
// コンマで区切って配列に分割し、要素数を数える
|
||||
$followIds = array_reverse(array_values(array_filter(explode(',', $follow))));
|
||||
$followCount = count($followIds);
|
||||
|
||||
$follow_on_me = array_search($userid, $followIds);
|
||||
|
||||
if ($follow_on_me !== false) {
|
||||
$follow_yes = "フォローされています"; // worldを含む:6
|
||||
} else {
|
||||
$follow_yes = ""; // worldを含む:6
|
||||
}
|
||||
|
||||
//-------フォロワー数---------
|
||||
$follower = $userdata['follower']; // コンマで区切られたユーザーIDを含む変数
|
||||
|
||||
// コンマで区切って配列に分割し、要素数を数える
|
||||
$followerIds = array_reverse(array_values(array_filter(explode(',', $follower))));
|
||||
$followerCount = count($followerIds);
|
||||
|
||||
$profileText = safetext($userData['profile']);
|
||||
|
||||
|
||||
$allueuse = $pdo->prepare("SELECT account FROM ueuse WHERE account = :userid");
|
||||
$allueuse->bindValue(':userid', $uwuzuid);
|
||||
$allueuse->execute();
|
||||
$ueuse_cnt = $allueuse->rowCount();
|
||||
|
||||
//-------フォロワー取得---------
|
||||
|
||||
$follower_userdata = array();
|
||||
if(!(empty($followerIds))){
|
||||
// フォロワーのユーザーIDを $follower_userids 配列に追加
|
||||
foreach ($followerIds as $follower_userid) {
|
||||
$follower_userids[] = $follower_userid;
|
||||
}
|
||||
|
||||
// フォロワーのユーザー情報を取得
|
||||
|
||||
foreach ($follower_userids as $follower_userid) {
|
||||
$follower_userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, sacinfo FROM account WHERE userid = :userid");
|
||||
$follower_userQuery->bindValue(':userid', $follower_userid);
|
||||
$follower_userQuery->execute();
|
||||
$follower_userinfo = $follower_userQuery->fetch();
|
||||
|
||||
if ($follower_userinfo) {
|
||||
// フォロワーのユーザー情報を $follower_userdata 配列に追加
|
||||
$follower_userdata[] = $follower_userinfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-------フォロー取得---------
|
||||
//-------フォロー取得---------
|
||||
|
||||
$follow_userdata = array();
|
||||
$follow_userdata = array();
|
||||
|
||||
if(!(empty($followIds))){
|
||||
foreach ($followIds as $follow_userid) {
|
||||
$follow_userids[] = $follow_userid;
|
||||
}
|
||||
if(!(empty($followIds))){
|
||||
foreach ($followIds as $follow_userid) {
|
||||
$follow_userids[] = $follow_userid;
|
||||
}
|
||||
|
||||
foreach ($follow_userids as $follow_userid) {
|
||||
$follow_userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, sacinfo FROM account WHERE userid = :userid");
|
||||
$follow_userQuery->bindValue(':userid', $follow_userid);
|
||||
$follow_userQuery->execute();
|
||||
$follow_userinfo = $follow_userQuery->fetch();
|
||||
foreach ($follow_userids as $follow_userid) {
|
||||
$follow_userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, sacinfo FROM account WHERE userid = :userid");
|
||||
$follow_userQuery->bindValue(':userid', $follow_userid);
|
||||
$follow_userQuery->execute();
|
||||
$follow_userinfo = $follow_userQuery->fetch();
|
||||
|
||||
if ($follow_userinfo) {
|
||||
// フォロワーのユーザー情報を $follower_userdata 配列に追加
|
||||
$follow_userdata[] = $follow_userinfo;
|
||||
if ($follow_userinfo) {
|
||||
// フォロワーのユーザー情報を $follower_userdata 配列に追加
|
||||
$follow_userdata[] = $follow_userinfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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'];
|
||||
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'];
|
||||
}
|
||||
}elseif($userData != null){
|
||||
$userdata = $userData;
|
||||
$roles = array("user");
|
||||
foreach ($roles as $roleId) {
|
||||
$rerole = $pdo->prepare("SELECT rolename, roleauth, rolecolor, roleeffect FROM role WHERE roleidname = :role");
|
||||
$rerole->bindValue(':role', $roleId);
|
||||
$rerole->execute();
|
||||
$roleDataArray[$roleId] = $rerole->fetch();
|
||||
}
|
||||
$isAIBlock = false;
|
||||
$profileText = $userData["profile"];
|
||||
|
||||
$ueuse_cnt = "zero";
|
||||
$followCount = "zero";
|
||||
$followerCount = "zero";
|
||||
}
|
||||
|
||||
} else {
|
||||
$userData["userid"] = "none";
|
||||
$userData['username'] = "でふぉると";
|
||||
@@ -345,7 +386,7 @@ $pdo = null;
|
||||
<div class="icon">
|
||||
<img src="<?php echo safetext($userdata['iconname']); ?>">
|
||||
<h2><?php echo replaceProfileEmojiImages(safetext($userData['username'])); ?></h2>
|
||||
<p>@<?php echo safetext($userData['userid']); ?><!--<span>@<?php /*echo safetext($domain); */ ?></span>--></p>
|
||||
<p>@<?php echo safetext($userData['userid']); ?><?php if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){echo "<span>@".safetext($activity_domain)."</span>";} ?></p>
|
||||
</div>
|
||||
|
||||
<div class="roleboxes">
|
||||
@@ -389,6 +430,7 @@ $pdo = null;
|
||||
<?php } ?>
|
||||
|
||||
</div>
|
||||
<?php if($is_local == true){?>
|
||||
<div class="fzone">
|
||||
<div class="time">
|
||||
<p><?php echo date('Y年m月d日 H:i', strtotime($userdata['datetime'])); ?>からuwuzuを利用しています。</p>
|
||||
@@ -430,7 +472,7 @@ $pdo = null;
|
||||
</div>
|
||||
<?php } else { ?>
|
||||
|
||||
<?php if (!(in_array(safetext($userData['userid']), explode(",", $myblocklist)))) { ?>
|
||||
<?php if (!(in_array(safetext($userData['userid']), explode(",", $myblocklist)))) {?>
|
||||
<form method="post">
|
||||
<div class="follow">
|
||||
<?php
|
||||
@@ -440,8 +482,10 @@ $pdo = null;
|
||||
// フォロー済みの場合はフォロー解除ボタンを表示
|
||||
echo '<input type="button" id="openModalButton" class="fbtn_un" name="unfollow" value="フォロー解除">';
|
||||
} else {
|
||||
// 未フォローの場合はフォローボタンを表示
|
||||
echo '<input type="submit" class="fbtn" name="follow" value="フォロー">';
|
||||
if (!(safetext($userdata['role']) === "ice")) {
|
||||
// 未フォローの場合はフォローボタンを表示
|
||||
echo '<input type="submit" class="fbtn" name="follow" value="フォロー">';
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -459,6 +503,8 @@ $pdo = null;
|
||||
}; ?></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<?php if (!($role === "ice")) { ?>
|
||||
@@ -679,18 +725,24 @@ $pdo = null;
|
||||
$("#loading").show();
|
||||
$("#error").hide();
|
||||
var uwuzuid = '<?php echo $uwuzuid; ?>';
|
||||
var activity_domain = '<?php echo $activity_domain; ?>';
|
||||
if (mode == 'allueuse') {
|
||||
$.ajax({
|
||||
url: '../nextpage/usertimeline.php',
|
||||
method: 'POST',
|
||||
data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid,},
|
||||
data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid, activity_domain: activity_domain},
|
||||
dataType: 'json',
|
||||
timeout: 300000,
|
||||
success: function(response) {
|
||||
renderUeuses(response);
|
||||
pageNumber++;
|
||||
isLoading = false;
|
||||
$("#loading").hide();
|
||||
if(renderUeuses(response)){
|
||||
pageNumber++;
|
||||
isLoading = false;
|
||||
$("#loading").hide();
|
||||
}else{
|
||||
isLoading = false;
|
||||
$("#loading").hide();
|
||||
$("#error").show();
|
||||
}
|
||||
},
|
||||
error: function(xhr, textStatus, errorThrown) {
|
||||
isLoading = false;
|
||||
@@ -702,14 +754,19 @@ $pdo = null;
|
||||
$.ajax({
|
||||
url: '../nextpage/usermediatimeline.php',
|
||||
method: 'POST',
|
||||
data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid,},
|
||||
data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid, activity_domain: activity_domain},
|
||||
dataType: 'json',
|
||||
timeout: 300000,
|
||||
success: function(response) {
|
||||
renderUeuses(response);
|
||||
pageNumber++;
|
||||
isLoading = false;
|
||||
$("#loading").hide();
|
||||
if(renderUeuses(response)){
|
||||
pageNumber++;
|
||||
isLoading = false;
|
||||
$("#loading").hide();
|
||||
}else{
|
||||
isLoading = false;
|
||||
$("#loading").hide();
|
||||
$("#error").show();
|
||||
}
|
||||
},
|
||||
error: function(xhr, textStatus, errorThrown) {
|
||||
isLoading = false;
|
||||
@@ -721,14 +778,19 @@ $pdo = null;
|
||||
$.ajax({
|
||||
url: '../nextpage/userliketimeline.php',
|
||||
method: 'POST',
|
||||
data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid,},
|
||||
data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid, activity_domain: activity_domain},
|
||||
dataType: 'json',
|
||||
timeout: 300000,
|
||||
success: function(response) {
|
||||
renderUeuses(response);
|
||||
pageNumber++;
|
||||
isLoading = false;
|
||||
$("#loading").hide();
|
||||
if(renderUeuses(response)){
|
||||
pageNumber++;
|
||||
isLoading = false;
|
||||
$("#loading").hide();
|
||||
}else{
|
||||
isLoading = false;
|
||||
$("#loading").hide();
|
||||
$("#error").show();
|
||||
}
|
||||
},
|
||||
error: function(xhr, textStatus, errorThrown) {
|
||||
isLoading = false;
|
||||
|
||||
+92
-85
@@ -5,107 +5,114 @@ blockedIP($_SERVER['REMOTE_ADDR']);
|
||||
|
||||
$serversettings_file = "../../server/serversettings.ini";
|
||||
$serversettings = parse_ini_file($serversettings_file, true);
|
||||
if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){
|
||||
if (safetext($serversettings["serverinfo"]["server_activitypub"]) === "true") {
|
||||
header("Content-Type: application/activity+json; charset=utf-8");
|
||||
header("Access-Control-Allow-Origin: *");
|
||||
|
||||
$domain = $_SERVER['HTTP_HOST'];
|
||||
|
||||
require('../../db.php');
|
||||
|
||||
// データベースに接続
|
||||
try {
|
||||
$option = array(
|
||||
$pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, [
|
||||
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();
|
||||
http_response_code(500);
|
||||
echo json_encode(['error' => $e->getMessage()]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$user = safetext($_GET['actor']);
|
||||
$user = safetext($_GET['actor'] ?? '');
|
||||
$userid = str_replace('@', '', str_replace('@' . $domain, '', $user));
|
||||
$page = isset($_GET['page']) ? (int)$_GET['page'] : 0;
|
||||
$itemsPerPage = 10;
|
||||
$offset = ($page > 0 ? ($page - 1) : 0) * $itemsPerPage;
|
||||
|
||||
$userid = str_replace('@','', str_replace('@'.$domain.'', '', $user));
|
||||
if( !empty($pdo) ) {
|
||||
|
||||
$dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array(
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
|
||||
));
|
||||
$userQuery = $dbh->prepare("SELECT username, userid, profile, follower, iconname FROM account WHERE userid = :userid");
|
||||
$userQuery->bindValue(':userid', $userid);
|
||||
$userQuery->execute();
|
||||
$userData = $userQuery->fetch();
|
||||
$dbh = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
|
||||
]);
|
||||
|
||||
$messageQuery = $dbh->prepare("SELECT * FROM ueuse WHERE account = :userid AND rpuniqid = '' ORDER BY datetime DESC");
|
||||
$messageQuery->bindValue(':userid', $userid);
|
||||
$messageQuery->execute();
|
||||
$message_array = $messageQuery->fetchAll();
|
||||
|
||||
$messages = array();
|
||||
foreach ($message_array as $row) {
|
||||
$messages[] = $row;
|
||||
}
|
||||
$userQuery = $dbh->prepare("SELECT * FROM account WHERE userid = :userid");
|
||||
$userQuery->bindValue(':userid', $userid);
|
||||
$userQuery->execute();
|
||||
$userData = $userQuery->fetch();
|
||||
|
||||
if (!$userData) {
|
||||
echo json_encode(["type" => "user_not_found"]);
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!empty($userData)) {
|
||||
if (!empty($messages)) {
|
||||
$orderedItems = array();
|
||||
|
||||
foreach ($messages as $value) {
|
||||
$activity = array(
|
||||
"type" => "Create",
|
||||
"id" => "https://" . $domain . "/ueuse/activity/?ueuse=" . $value["uniqid"],
|
||||
"url" => "https://" . $domain . "/ueuse/activity/?ueuse=" . $value["uniqid"],
|
||||
"published" => date(DATE_ATOM, strtotime($value["datetime"])),
|
||||
"to" => [
|
||||
"https://www.w3.org/ns/activitystreams#Public",
|
||||
],
|
||||
"actor" => "https://" . $domain . "/actor/?actor=@" . $userid,
|
||||
"object" => array(
|
||||
"type" => "Note",
|
||||
"@context" => "https://www.w3.org/ns/activitystreams",
|
||||
"id" => "https://" . $domain . "/!" . $value["uniqid"],
|
||||
"url" => "https://" . $domain . "/!" . $value["uniqid"],
|
||||
"published" => date(DATE_ATOM, strtotime($value["datetime"])),
|
||||
"to" => [
|
||||
"https://www.w3.org/ns/activitystreams#Public",
|
||||
],
|
||||
"attributedTo" => "https://" . $domain . "/@" . $value["account"],
|
||||
"content" => "".nl2br($value["ueuse"])."",
|
||||
),
|
||||
);
|
||||
|
||||
$orderedItems[] = $activity;
|
||||
}
|
||||
|
||||
$item = array(
|
||||
"type" => "OrderedCollection",
|
||||
// 全投稿数取得
|
||||
$countQuery = $dbh->prepare("SELECT COUNT(*) as cnt FROM ueuse WHERE account = :userid AND rpuniqid = ''");
|
||||
$countQuery->bindValue(':userid', $userid);
|
||||
$countQuery->execute();
|
||||
$totalItems = (int)$countQuery->fetch()['cnt'];
|
||||
|
||||
if ($page === 0) {
|
||||
// OrderedCollection(firstのみ)
|
||||
echo json_encode([
|
||||
"@context" => "https://www.w3.org/ns/activitystreams",
|
||||
"id" => "https://{$domain}/user/outbox/?actor=@{$userid}",
|
||||
"type" => "OrderedCollection",
|
||||
"totalItems" => $totalItems,
|
||||
"first" => "https://{$domain}/user/outbox/?actor=@{$userid}&page=1"
|
||||
], JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
// ページ投稿取得
|
||||
$messageQuery = $dbh->prepare("SELECT * FROM ueuse WHERE account = :userid AND rpuniqid = '' ORDER BY datetime DESC LIMIT :offset, :limit");
|
||||
$messageQuery->bindValue(':userid', $userid);
|
||||
$messageQuery->bindValue(':offset', $offset, PDO::PARAM_INT);
|
||||
$messageQuery->bindValue(':limit', $itemsPerPage, PDO::PARAM_INT);
|
||||
$messageQuery->execute();
|
||||
$messages = $messageQuery->fetchAll();
|
||||
|
||||
$orderedItems = [];
|
||||
foreach ($messages as $value) {
|
||||
$id = $value["uniqid"];
|
||||
$url = "https://{$domain}/ueuse/activity/?id={$id}";
|
||||
$orderedItems[] = [
|
||||
"type" => "Create",
|
||||
"id" => $url,
|
||||
"url" => $url,
|
||||
"published" => date(DATE_ATOM, strtotime($value["datetime"])),
|
||||
"to" => ["https://www.w3.org/ns/activitystreams#Public"],
|
||||
"actor" => "https://{$domain}/actor/?actor=@{$userid}",
|
||||
"object" => [
|
||||
"type" => "Note",
|
||||
"@context" => "https://www.w3.org/ns/activitystreams",
|
||||
"id" => "https://" . $domain . "/user/outbox/?actor=@" . $userid . "&page=true",
|
||||
"summary" => "outbox of " . $userid,
|
||||
"totalItems" => count($messages),
|
||||
"orderedItems" => $orderedItems,
|
||||
);
|
||||
|
||||
echo json_encode($item, JSON_UNESCAPED_UNICODE);
|
||||
} else {
|
||||
$item = array(
|
||||
"type" => "item_not_found",
|
||||
);
|
||||
echo json_encode($item, JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
} else {
|
||||
$item = array(
|
||||
"type" => "user_not_found",
|
||||
);
|
||||
echo json_encode($item, JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
"id" => $url,
|
||||
"url" => $url,
|
||||
"published" => date(DATE_ATOM, strtotime($value["datetime"])),
|
||||
"to" => ["https://www.w3.org/ns/activitystreams#Public"],
|
||||
"attributedTo" => "https://{$domain}/@{$value["account"]}",
|
||||
"content" => preg_replace('/\r\n/i', "", nl2br($value["ueuse"])),
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
}else{
|
||||
// prev/next リンク
|
||||
$base_url = "https://{$domain}/user/outbox/?actor=@{$userid}";
|
||||
$prev_page = $page > 1 ? $base_url . "&page=" . ($page - 1) : null;
|
||||
$next_page = ($offset + $itemsPerPage < $totalItems) ? $base_url . "&page=" . ($page + 1) : null;
|
||||
|
||||
$response = [
|
||||
"@context" => "https://www.w3.org/ns/activitystreams",
|
||||
"id" => "{$base_url}&page={$page}",
|
||||
"type" => "OrderedCollectionPage",
|
||||
"partOf" => $base_url,
|
||||
"totalItems" => $totalItems,
|
||||
"orderedItems" => $orderedItems,
|
||||
];
|
||||
|
||||
if ($prev_page) $response["prev"] = $prev_page;
|
||||
if ($next_page) $response["next"] = $next_page;
|
||||
|
||||
echo json_encode($response, JSON_UNESCAPED_UNICODE);
|
||||
} else {
|
||||
header("HTTP/1.1 410 Gone");
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
||||
Reference in New Issue
Block a user