Update activitypub.extend.php

This commit is contained in:
Namhyeon Go 2022-07-04 12:39:22 +09:00 committed by GitHub
parent 3ada3cb6fa
commit c5d8777b80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -4,7 +4,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// ActivityPub implementation for GNUBOARD 5 // ActivityPub implementation for GNUBOARD 5
// Go Namhyeon <gnh1201@gmail.com> // Go Namhyeon <gnh1201@gmail.com>
// MIT License // MIT License
// 2022-07-04 (version 0.1.8) // 2022-07-04 (version 0.1.9-dev)
// References: // References:
// * https://www.w3.org/TR/activitypub/ // * https://www.w3.org/TR/activitypub/
@ -264,7 +264,7 @@ function activitypub_http_post($url, $rawdata, $access_token = '') {
return activitypub_json_decode($response, true); return activitypub_json_decode($response, true);
} }
function activitypub_publish_content($content, $id, $mb = array("mb_id" => ACTIVITYPUB_G5_USERNAME)) { function activitypub_publish_content($content, $id, $mb, $_object = array()) {
// 컨텐츠 파싱 // 컨텐츠 파싱
$terms = activitypub_parse_content($content); $terms = activitypub_parse_content($content);
@ -307,12 +307,12 @@ function activitypub_publish_content($content, $id, $mb = array("mb_id" => ACTIV
} }
// 전문 생성 // 전문 생성
$object = array( $object = array_merge(array(
"type" => "Note", "type" => "Note",
"id" => $id, "id" => $id,
"attributedTo" => activitypub_get_url("user", array("mb_id" => $mb['mb_id'])), "attributedTo" => activitypub_get_url("user", array("mb_id" => $mb['mb_id'])),
"content" => $content "content" => $content
); ), $_object);
// 외부로 보낼 전문 생성 // 외부로 보낼 전문 생성
$data = array( $data = array(
@ -963,27 +963,6 @@ class _GNUBOARD_ActivityPub {
} }
// 훅(Hook) 등록 // 훅(Hook) 등록
function _activitypub_hook_write_update($board, $wr_id) {
global $g5, $member;
// 본문 가져오기
$sql = "select wr_id, wr_content from {$g5['write_prefix']}{$board['bo_table']} where wr_id = '{$wr_id}'";
$row = sql_fetch($sql);
if (empty($row['wr_id'])) return;
// 글 전송하기
$data = activitypub_publish_content(
$row['wr_content'],
G5_BBS_URL . "/bbs/board.php?bo_table={$board['bo_table']}&wr_id={$row['wr_id']}"
);
// 현재 로그인되어 있으면, 로그인된 계정의 정보를 따름
if (!empty($member['mb_id'])) {
activitypub_add_activity("outbox", $data, $member);
} else {
activitypub_add_activity("outbox", $data, get_member(ACTIVITYPUB_G5_USERNAME));
}
}
function _activitypub_memo_form_update_after($member_list, $str_nick_list, $redirect_url, $me_memo) { function _activitypub_memo_form_update_after($member_list, $str_nick_list, $redirect_url, $me_memo) {
global $member; global $member;
@ -991,26 +970,85 @@ function _activitypub_memo_form_update_after($member_list, $str_nick_list, $redi
// 'apstreams' 계정이 있는지 확인 // 'apstreams' 계정이 있는지 확인
if (!in_array(ACTIVITYPUB_G5_USERNAME, $member_list['id'])) return; if (!in_array(ACTIVITYPUB_G5_USERNAME, $member_list['id'])) return;
// 현재 로그인되어 있으면, 로그인된 계정의 정보를 따름
if (!empty($member['mb_id'])) {
// 글 전송하기 // 글 전송하기
$data = activitypub_publish_content( $data = activitypub_publish_content(
$me_memo, $me_memo,
activitypub_get_url("user", array("mb_id" => $member['mb_id'])) activitypub_get_url("user", array("mb_id" => $member['mb_id'])),
$member
); );
// 현재 로그인되어 있으면, 로그인된 계정의 정보를 따름
if (!empty($member['mb_id'])) {
activitypub_add_activity("outbox", $data, $member); activitypub_add_activity("outbox", $data, $member);
} else { } else {
activitypub_add_activity("outbox", $data, get_member(ACTIVITYPUB_G5_USERNAME)); // 글 전송하기
$mb = get_member(ACTIVITYPUB_G5_USERNAME);
$data = activitypub_publish_content(
$me_memo,
activitypub_get_url("user", array("mb_id" => $mb['mb_id'])),
$mb
);
activitypub_add_activity("outbox", $data, $mb);
} }
} }
function _activitypub_write_update_after($board, $wr_id, $w, $qstr, $redirect_url) { function _activitypub_write_update_after($board, $wr_id, $w, $qstr, $redirect_url) {
_activitypub_hook_write_update($board, $wr_id); global $g5, $member;
// 본문 가져오기
$sql = "select wr_id, wr_content from {$g5['write_prefix']}{$board['bo_table']} where wr_id = '{$wr_id}'";
$row = sql_fetch($sql);
if (empty($row['wr_id'])) return;
// 현재 로그인되어 있으면, 로그인된 계정의 정보를 따름
if (!empty($member['mb_id'])) {
// 글 전송하기
$data = activitypub_publish_content(
$row['wr_content'],
G5_BBS_URL . "/bbs/board.php?bo_table={$board['bo_table']}&wr_id={$row['wr_id']}",
$member
);
activitypub_add_activity("outbox", $data, $member);
} else {
// 글 전송하기
$mb = get_member(ACTIVITYPUB_G5_USERNAME);
$data = activitypub_publish_content(
$row['wr_content'],
G5_BBS_URL . "/bbs/board.php?bo_table={$board['bo_table']}&wr_id={$row['wr_id']}",
$mb
);
activitypub_add_activity("outbox", $data, $mb);
}
} }
function _activitypub_comment_update_after($board, $wr_id, $w, $qstr, $redirect_url, $comment_id, $reply_array) { function _activitypub_comment_update_after($board, $wr_id, $w, $qstr, $redirect_url, $comment_id, $reply_array) {
_activitypub_hook_write_update($board, $wr_id); global $g5, $member;
// 본문(댓글) 가져오기
$sql = "select wr_id, wr_parent, wr_content from {$g5['write_prefix']}{$board['bo_table']} where wr_id = '{$comment_id}'";
$row = sql_fetch($sql);
if (empty($row['wr_id'])) return;
// 현재 로그인되어 있으면, 로그인된 계정의 정보를 따름
if (!empty($member['mb_id'])) {
// 글 전송하기
$data = activitypub_publish_content(
$row['wr_content'],
G5_BBS_URL . "/bbs/board.php?bo_table={$board['bo_table']}&wr_id={$row['wr_parent']}&c_id=" . $comment_id,
$member,
array("inReplyTo" => G5_BBS_URL . "/bbs/board.php?bo_table={$board['bo_table']}&wr_id={$row['wr_id']}")
);
activitypub_add_activity("outbox", $data, $member);
} else {
// 글 전송하기
$mb = get_member(ACTIVITYPUB_G5_USERNAME);
$data = activitypub_publish_content(
$row['wr_content'],
G5_BBS_URL . "/bbs/board.php?bo_table={$board['bo_table']}&wr_id={$row['wr_parent']}&c_id=" . $comment_id,
$mb,
array("inReplyTo" => G5_BBS_URL . "/bbs/board.php?bo_table={$board['bo_table']}&wr_id={$row['wr_id']}")
);
activitypub_add_activity("outbox", $data, $mb);
}
} }
add_event("write_update_after", "_activitypub_write_update_after", 0, 5); add_event("write_update_after", "_activitypub_write_update_after", 0, 5);