支援者♡限定記事対応
諏訪子 <suwako@076.moe>、2025-12-29 18:05
コミット 6a4ff9d9e5f5815b9da565061fcd46943492bedb
・親 c458eec
・ファイルを見る
6個のファイル、+47 -7
| @@ -0,0 +1,9 @@ | ||
| 1 | +title: 【新機能】支援者♡限定 | |
| 2 | +uuid: 6e7d1725-c9d3-4279-967c-39bfc37fea8e | |
| 3 | +author: 諏訪子 | |
| 4 | +date: 2025-12-29 08:43:27 | |
| 5 | +thumbnail: | |
| 6 | +thumborient: center | |
| 7 | +category: feature,subscriberonly | |
| 8 | +---- | |
| 9 | +これを見れば、モネロちゃんは貴方の事が大好き!!♡ |
| @@ -11,6 +11,7 @@ | ||
| 11 | 11 | $path = ROOT.$section; |
| 12 | 12 | $posts = []; |
| 13 | 13 | $isMember = $user !== NULL && $user->role !== \Roles::BANNED; |
| 14 | + $isPaywall = $user !== NULL && $user->role >= \Roles::SUBSCRIBER; | |
| 14 | 15 | $isStaff = $user !== NULL && $user->role & (\Roles::ADMIN | \Roles::STAFF); |
| 15 | 16 | |
| 16 | 17 | if (!is_dir($path)) return $posts; |
| @@ -46,6 +47,9 @@ | ||
| 46 | 47 | $preview = mb_substr(strip_tags($articleBody), 0, 50).'...'; |
| 47 | 48 | $slug = basename($file, '.md'); |
| 48 | 49 | if (isset($metadata['draft']) && !$isStaff) continue; |
| 50 | + $cannotPreview = (!$isMember && in_array('memberonly', $metadata['category'])) | |
| 51 | + || ((!$isPaywall && !$isStaff) && in_array('subscriberonly', $metadata['category'])) | |
| 52 | + || (!$isStaff && in_array('staffonly', $metadata['category'])); | |
| 49 | 53 | |
| 50 | 54 | $posts[] = [ |
| 51 | 55 | 'title' => $metadata['title'] ?? '', |
| @@ -54,7 +58,7 @@ | ||
| 54 | 58 | 'thumborient' => $metadata['thumborient'] ?? '', |
| 55 | 59 | 'category' => $metadata['category'] ?? [], |
| 56 | 60 | 'uuid' => $metadata['uuid'] ?? '', |
| 57 | - 'preview' => ((!$isMember && in_array('memberonly', $metadata['category'])) || (!$isStaff && in_array('staffonly', $metadata['category'])) ? '未許可' : $preview), | |
| 61 | + 'preview' => ($cannotPreview ? '未許可' : $preview), | |
| 58 | 62 | 'slug' => $slug, |
| 59 | 63 | ]; |
| 60 | 64 | } |
| @@ -114,6 +114,7 @@ | ||
| 114 | 114 | $auth = new Auth(); |
| 115 | 115 | $user = $auth->getLoggedInUser(); |
| 116 | 116 | $isMember = $user !== NULL && $user->role !== \Roles::BANNED; |
| 117 | + $isPaywall = $user !== NULL && $user->role >= \Roles::SUBSCRIBER; | |
| 117 | 118 | $isStaff = $user !== NULL && $user->role & (\Roles::ADMIN | \Roles::STAFF); |
| 118 | 119 | $tmpl->assign('user', $user); |
| 119 | 120 | |
| @@ -133,6 +134,7 @@ | ||
| 133 | 134 | } |
| 134 | 135 | |
| 135 | 136 | if (!$isMember && in_array('memberonly', $meta->category)) goto denyaccess; |
| 137 | + if ((!$isPaywall && !$isStaff) && in_array('subscriberonly', $meta->category)) goto denyaccess; | |
| 136 | 138 | if (!$isStaff && in_array('staffonly', $meta->category)) goto denyaccess; |
| 137 | 139 | if (isset($meta->draft) && !$isStaff) goto denyaccess; |
| 138 | 140 |
| @@ -1,8 +1,9 @@ | ||
| 1 | 1 | <?php |
| 2 | 2 | namespace Site\Controller; |
| 3 | 3 | |
| 4 | -use Site\Lib\Template; | |
| 5 | 4 | use Site\Controller\Mods; |
| 5 | +use Site\Lib\Auth; | |
| 6 | +use Site\Lib\Template; | |
| 6 | 7 | |
| 7 | 8 | class Notfound { |
| 8 | 9 | use Mods; |
| @@ -11,6 +12,11 @@ | ||
| 11 | 12 | try { |
| 12 | 13 | $tmpl = new Template('/'); |
| 13 | 14 | $pagetit = 'Not found'; |
| 15 | + | |
| 16 | + // ユーザー | |
| 17 | + $auth = new Auth(); | |
| 18 | + $user = $auth->getLoggedInUser(); | |
| 19 | + $tmpl->assign('user', $user); | |
| 14 | 20 | |
| 15 | 21 | $tmpl->assign('pagetit', $pagetit); |
| 16 | 22 | $tmpl->assign('curPage', '404'); |
| @@ -39,13 +39,29 @@ | ||
| 39 | 39 | unset($user->password); |
| 40 | 40 | unset($user->tokens); |
| 41 | 41 | $myself = $this->getUserData(); |
| 42 | - if ($myself->role & (\Roles::PLAYSTATIONNDA | \Roles::NINTENDONDA | \Roles::MEMBER | \Roles::BANNED)) { | |
| 43 | - unset($user->email); | |
| 44 | - } | |
| 42 | + if ($myself->id != $user->id && $myself->role < \Roles::STAFF) $user->email = '(秘密)'; | |
| 45 | 43 | $user->name = namecolor($user); |
| 46 | 44 | $user->regDate = date('Y年m月d日', $user->regDate); |
| 47 | 45 | $user->gender = $user->gender === \Gender::MALE ? '男' : ($user->gender === \Gender::FEMALE ? '女' : '不明'); |
| 48 | - $user->role = $user->role & (\Roles::ADMIN | \Roles::STAFF) ? '管理者' : ($user->role === \Roles::BANNED ? 'BANされた' : 'ユーザー'); | |
| 46 | + | |
| 47 | + switch (true) { | |
| 48 | + case ($user->role & \Roles::ADMIN): | |
| 49 | + $user->role = '管理者'; | |
| 50 | + break; | |
| 51 | + case ($user->role & \Roles::STAFF): | |
| 52 | + $user->role = '076スタジオの会社員'; | |
| 53 | + break; | |
| 54 | + case ($user->role & (\Roles::FSUBSCRIBER | \Roles::PSUBSCRIBER | \Roles::NSUBSCRIBER | \Roles::SUBSCRIBER)): | |
| 55 | + $user->role = '支援者♡'; | |
| 56 | + break; | |
| 57 | + case ($user->role & \Roles::BANNED): | |
| 58 | + $user->role = 'BANされた'; | |
| 59 | + break; | |
| 60 | + default: | |
| 61 | + $user->role = 'ユーザー'; | |
| 62 | + break; | |
| 63 | + } | |
| 64 | + | |
| 49 | 65 | $user->avatar = '/static/user/'.($user->avatar === '' ? 'noicon.png' : $user->username.'/'.$user->avatar); |
| 50 | 66 | $user->altName = $user->displayname ?: $user->username; |
| 51 | 67 | unset($user->username); |
| @@ -4,7 +4,7 @@ | ||
| 4 | 4 | <table> |
| 5 | 5 | <tbody> |
| 6 | 6 | <tr> |
| 7 | - <td rowspan="3"><img src="{{ $u->avatar }}" alt="{{ $u->altName }}" style="max-width: 100px; max-height: 100px; width: 100%; height: 100%;" /></td> | |
| 7 | + <td rowspan="4"><img src="{{ $u->avatar }}" alt="{{ $u->altName }}" style="max-width: 100px; max-height: 100px; width: 100%; height: 100%;" /></td> | |
| 8 | 8 | <td>登録日:{{ $u->regDate }}</td> |
| 9 | 9 | </tr> |
| 10 | 10 | <tr> |
| @@ -12,6 +12,9 @@ | ||
| 12 | 12 | </tr> |
| 13 | 13 | <tr> |
| 14 | 14 | <td>性別:{{ $u->gender }}</td> |
| 15 | + </tr> | |
| 16 | + <tr> | |
| 17 | + <td>メールアドレス:{{ $u->email }}</td> | |
| 15 | 18 | </tr> |
| 16 | 19 | </tbody> |
| 17 | 20 | </table> |