true,
'message' => false,
'magnet' => [],
'comments' => [],
];
// Yggdrasil connections only
if (!Valid::host($_SERVER['REMOTE_ADDR']))
{
$response->success = false;
$response->message = _('Yggdrasil connection required to enable resource features');
}
// Init session
else if (!$userId = $db->initUserId($_SERVER['REMOTE_ADDR'], USER_DEFAULT_APPROVED, time()))
{
$response->success = false;
$response->message = _('Could not init user session');
}
// Get user
else if (!$user = $db->getUser($userId))
{
$response->success = false;
$response->message = _('Could not init user info');
}
// Init magnet
else if (!$magnet = $db->getMagnet(isset($_GET['magnetId']) ? (int) $_GET['magnetId'] : 0))
{
$response->success = false;
$response->message = _('Magnet not found! Submit new magnet link by sending address to the search field.');
}
// On first visit, redirect user to the welcome page with access level question
else if (is_null($user->public) && !isset($_GET['rss']))
{
header(
sprintf('Location: %s/welcome.php', WEBSITE_URL)
);
}
// Request valid
else
{
// Get access info
$accessRead = ($user->address == $db->getUser($magnet->userId)->address || in_array($user->address, MODERATOR_IP_LIST) || ($magnet->public && $magnet->approved));
$accessEdit = ($user->address == $db->getUser($magnet->userId)->address || in_array($user->address, MODERATOR_IP_LIST));
// Update magnet viewed
if ($accessRead)
{
if ($magnetViewId = $db->addMagnetView($magnet->magnetId, $userId, time()))
{
// Push event to other nodes
if (API_EXPORT_ENABLED &&
API_EXPORT_PUSH_ENABLED &&
API_EXPORT_USERS_ENABLED &&
API_EXPORT_MAGNETS_ENABLED &&
API_EXPORT_MAGNET_VIEWS_ENABLED)
{
if (!$memoryApiExportPush = $memory->get('api.export.push'))
{
$memoryApiExportPush = [];
}
$memoryApiExportPush[] = (object)
[
'time' => time(),
'userId' => $user->userId,
'magnetId' => $magnet->magnetId,
'magnetViewId' => $magnetViewId
];
$memory->set('api.export.push', $memoryApiExportPush, 3600);
}
}
}
// Keywords
$keywords = [];
foreach ($db->findKeywordTopicByMagnetId($magnet->magnetId) as $keyword)
{
$keywords[] = $db->getKeywordTopic($keyword->keywordTopicId)->value;
}
$response->user = $user;
$response->magnet = (object)
[
'magnetId' => $magnet->magnetId,
'title' => $magnet->title ? htmlentities($magnet->title) : ($magnet->dn ? htmlentities($magnet->dn): false),
'preview' => $magnet->preview ? nl2br(
htmlentities(
$magnet->preview
)
) : false,
'description' => $magnet->description ? nl2br(
htmlentities(
$magnet->description
)
) : false,
'approved' => (bool) $magnet->approved,
'public' => (bool) $magnet->public,
'sensitive' => (bool) $magnet->sensitive,
'comments' => (bool) $magnet->comments,
'timeAdded' => $magnet->timeAdded ? Time::ago((int) $magnet->timeAdded) : false,
'timeUpdated' => $magnet->timeUpdated ? Time::ago((int) $magnet->timeUpdated) : false,
'keywords' => $keywords,
'comment' => (object)
[
'total' => $db->findMagnetCommentsTotalByMagnetId($magnet->magnetId),
'status' => $db->findMagnetCommentsTotal($magnet->magnetId, $userId),
],
'download' => (object)
[
'total' => $db->findMagnetDownloadsTotalByMagnetId($magnet->magnetId),
'status' => $db->findMagnetDownloadsTotal($magnet->magnetId, $userId),
],
'star' => (object)
[
'total' => $db->findMagnetStarsTotalByMagnetId($magnet->magnetId, true),
'status' => $db->findLastMagnetStarValue($magnet->magnetId, $userId),
],
'access' => (object)
[
'read' => $accessRead,
'edit' => $accessEdit,
],
'seeders' => $db->getMagnetToAddressTrackerSeedersSumByMagnetId($magnet->magnetId),
'completed' => $db->getMagnetToAddressTrackerCompletedSumByMagnetId($magnet->magnetId),
'leechers' => $db->getMagnetToAddressTrackerLeechersSumByMagnetId($magnet->magnetId),
'directs' => $db->getMagnetToAcceptableSourceTotalByMagnetId($magnet->magnetId),
];
}
if (isset($_GET['rss']) && isset($_GET['target']) && $_GET['target'] == 'comment' && $response->success) { ?>' . PHP_EOL ?>