Last modified by Super Admin on 2026/04/05 18:59

From version Icon 44.1 Icon
edited by Super Admin
on 2026/03/13 00:18
Change comment: There is no comment for this version
To version Icon 46.1 Icon
edited by Super Admin
on 2026/03/13 14:24
Change comment: There is no comment for this version

Summary

Details

Icon Page properties
Content
... ... @@ -102,8 +102,12 @@
102 102  
103 103  ## --- 投稿固定/解除処理 ---
104 104  #set($pinAction = $!request.action)
105 -#if(($pinAction == 'pin' || $pinAction == 'unpin') && ($viewerAccountType == 'admin' || $viewerAccountType == 'verified') && $services.csrf.isTokenValid($request.form_token))
106 - #set($postObjNum = $mathtool.toInteger($!request.postObj))
105 +#if(($pinAction == 'pin' || $pinAction == 'unpin') && ($viewerAccountType == 'admin' || ($viewerAccountType == 'verified' && $viewerSchoolCode == $schoolCode)) && $services.csrf.isTokenValid($request.form_token))
106 + #set($pinPostObjStr = $!request.postObj)
107 + #if(!$pinPostObjStr.matches('^\d+$'))
108 + ## 不正な値 → 無視
109 + #else
110 + #set($postObjNum = $mathtool.toInteger($pinPostObjStr))
107 107   #set($postObj = $doc.getObject('SeitokaiCode.ActivityPostClass', $postObjNum))
108 108   #if($postObj)
109 109   #if($pinAction == 'pin')
... ... @@ -123,12 +123,15 @@
123 123   $response.sendRedirect($doc.getURL('view'))
124 124   #stop
125 125   #end
130 + #end## /matches
126 126  #end
127 127  
128 128  ## --- 特色ある活動 選定/解除処理 ---
129 129  #set($featAction = $!request.action)
130 -#if(($featAction == 'feature' || $featAction == 'unfeature') && ($viewerAccountType == 'admin' || $viewerAccountType == 'verified' || $viewerAccountType == 'referred') && $services.csrf.isTokenValid($request.form_token))
131 - #set($actObjNum = $mathtool.toInteger($!request.actObj))
135 +#if(($featAction == 'feature' || $featAction == 'unfeature') && ($viewerAccountType == 'admin' || (($viewerAccountType == 'verified' || $viewerAccountType == 'referred') && $viewerSchoolCode == $schoolCode)) && $services.csrf.isTokenValid($request.form_token))
136 + #set($featActObjStr = $!request.actObj)
137 + #if($featActObjStr.matches('^\d+$'))
138 + #set($actObjNum = $mathtool.toInteger($featActObjStr))
132 132   #set($actObj = $doc.getObject('SeitokaiCode.ActivityClass', $actObjNum))
133 133   #if($actObj)
134 134   #if($featAction == 'feature')
... ... @@ -160,6 +160,7 @@
160 160   $response.sendRedirect($doc.getURL('view'))
161 161   #stop
162 162   #end
170 + #end## /matches
163 163  #end
164 164  
165 165  ## --- ユーザー情報取得 ---
... ... @@ -238,7 +238,7 @@
238 238  ## --- ① 学校基本情報 + 連絡先(左右グリッド・折りたたみ対応) ---
239 239  <div class="school-info-grid">
240 240   <div class="school-info-card collapsed" id="card-basic-info">
241 - <h2 onclick="toggleInfoCard('card-basic-info')"><span><svg class="ico ico-md" viewBox="0 0 24 24"><path d="M4 19.5A2.5 2.5 0 016.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 014 19.5v-15A2.5 2.5 0 016.5 2z"/></svg> 学校基本情報</span><span class="collapse-toggle"><span class="collapse-label-open">たたむ</span><span class="collapse-label-closed">開く</span> <span class="collapse-arrow">▼</span></span></h2>
249 + <h2 role="button" tabindex="0" aria-expanded="false" onclick="toggleInfoCard('card-basic-info')" onkeydown="if(event.key==='Enter'||event.key===' '){event.preventDefault();toggleInfoCard('card-basic-info')}"><span><svg class="ico ico-md" viewBox="0 0 24 24"><path d="M4 19.5A2.5 2.5 0 016.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 014 19.5v-15A2.5 2.5 0 016.5 2z"/></svg> 学校基本情報</span><span class="collapse-toggle"><span class="collapse-label-open">たたむ</span><span class="collapse-label-closed">開く</span> <span class="collapse-arrow">▼</span></span></h2>
242 242   <table class="wiki-table school-info-table">
243 243   <tr><th>学校コード</th><td>$!escapetool.xml($!schoolCode)</td></tr>
244 244   <tr><th>学校名</th><td>$!escapetool.xml($!schoolName)</td></tr>
... ... @@ -258,7 +258,7 @@
258 258   </div>
259 259  
260 260   <div class="school-info-card collapsed" id="card-contact">
261 - <h2 onclick="toggleInfoCard('card-contact')"><span><svg class="ico ico-md" viewBox="0 0 24 24"><path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-6-6 19.79 19.79 0 01-3.07-8.67A2 2 0 014.11 2h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z"/></svg> 連絡先・SNS</span><span class="collapse-toggle"><span class="collapse-label-open">たたむ</span><span class="collapse-label-closed">開く</span> <span class="collapse-arrow">▼</span></span></h2>
269 + <h2 role="button" tabindex="0" aria-expanded="false" onclick="toggleInfoCard('card-contact')" onkeydown="if(event.key==='Enter'||event.key===' '){event.preventDefault();toggleInfoCard('card-contact')}"><span><svg class="ico ico-md" viewBox="0 0 24 24"><path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-6-6 19.79 19.79 0 01-3.07-8.67A2 2 0 014.11 2h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z"/></svg> 連絡先・SNS</span><span class="collapse-toggle"><span class="collapse-label-open">たたむ</span><span class="collapse-label-closed">開く</span> <span class="collapse-arrow">▼</span></span></h2>
262 262   <table class="wiki-table school-info-table">
263 263   <tr><th>問い合わせ先</th><td>#if($contactInfo && $contactInfo != '')$!escapetool.xml($contactInfo)#else<span class="text-placeholder">未登録</span>#end</td></tr>
264 264   <tr><th>生徒会Web</th><td>#if($seitokaiWebsite && $seitokaiWebsite != '')<a href="$!escapetool.xml($seitokaiWebsite)" target="_blank" rel="noopener"><svg class="ico" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M2 12h20"/><path d="M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z"/></svg> $!escapetool.xml($seitokaiWebsite)</a>#else<span class="text-placeholder">未登録</span>#end</td></tr>
... ... @@ -627,7 +627,7 @@
627 627  <div class="activity-thread" data-fiscal-year="$!escapetool.xml($actFY)">
628 628   <div class="activity-thread-header">
629 629   <div class="activity-thread-title">
630 - <h3 #if($actFeatured == '1')class="featured-title"#end>$!escapetool.xml($!actTitle) #if($actFeatured == '1')<svg class="ico ico-fixed-14" viewBox="0 0 24 24" fill="currentColor" stroke="none" class="ico-star-offset"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>#end</h3>
638 + <h3 #if($actFeatured == '1')class="featured-title"#end>$!escapetool.xml($!actTitle) #if($actFeatured == '1')<svg class="ico ico-fixed-14 ico-star-offset" viewBox="0 0 24 24" fill="currentColor" stroke="none"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/></svg>#end</h3>
631 631   <span class="activity-meta">$!escapetool.xml($!actCommittee) | $!escapetool.xml($!actPeriod) #if($actFY != 'unknown')| $!escapetool.xml($actFY)年度#end</span>
632 632   </div>
633 633   <div class="thread-meta-row">
... ... @@ -998,6 +998,9 @@
998 998   var card = document.getElementById(cardId);
999 999   if (!card) return;
1000 1000   card.classList.toggle('collapsed');
1009 + var isCollapsed = card.classList.contains('collapsed');
1010 + var h2 = card.querySelector('h2[role="button"]');
1011 + if (h2) h2.setAttribute('aria-expanded', !isCollapsed);
1001 1001  }
1002 1002  
1003 1003  // 投稿の編集(インライン編集フォームを開く)