Changes for page 学校ページ テンプレート
Last modified by Super Admin on 2026/04/05 18:59
From version
6.1
edited by Super Admin
on 2026/03/06 15:39
on 2026/03/06 15:39
Change comment:
There is no comment for this version
To version 1.1
edited by Super Admin
on 2026/03/05 22:05
on 2026/03/05 22:05
Change comment:
There is no comment for this version
Summary
Details
- Page properties
-
- Content
-
... ... @@ -228,10 +228,6 @@ 228 228 ## 役割バッジ 229 229 #if($authorUserRole == 'student') 230 230 <span class="badge badge-role-student"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 10l-10-5L2 10l10 5 10-5z"/><path d="M6 12v5c0 1.66 2.69 3 6 3s6-1.34 6-3v-5"/></svg> 生徒</span> 231 - #set($authorIsOfficer = $!lastAuthorDoc.getValue('isOfficer')) 232 - #if($authorIsOfficer == 'true') 233 - <span class="badge badge-role-officer"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg> 役員</span> 234 - #end 235 235 #elseif($authorUserRole == 'teacher') 236 236 <span class="badge badge-role-teacher"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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> 237 237 #elseif($authorUserRole == 'graduate') ... ... @@ -249,7 +249,7 @@ 249 249 #elseif($authorUserStatus == 'transferred') 250 250 <span class="badge badge-status-transferred"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"/><polyline points="1 20 1 14 7 14"/><path d="M3.51 9a9 9 0 0114.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0020.49 15"/></svg> 転校済み</span> 251 251 #end 252 - <span class="badge-info">最終編集: $ !escapetool.xml($authorDisplayName) ($xwiki.formatDate($doc.date, "yyyy/MM/dd"))</span>248 + <span class="badge-info">最終編集: $escapetool.xml($authorDisplayName) ($xwiki.formatDate($doc.date, "yyyy/MM/dd"))</span> 253 253 </div> 254 254 {{/html}} 255 255 ... ... @@ -260,20 +260,20 @@ 260 260 <div class="school-info-card mobile-collapse" id="card-basic-info"> 261 261 <h2 onclick="toggleInfoCard('card-basic-info')"><span><svg class="ico" style="width:1.1em;height:1.1em;vertical-align:-0.15em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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> 262 262 <table class="wiki-table school-info-table"> 263 - <tr><th>学校コード</th><td>$ !escapetool.xml($!schoolCode)</td></tr>264 - <tr><th>学校名</th><td>$ !escapetool.xml($!schoolName)</td></tr>265 - <tr><th>所在地</th><td>$ !escapetool.xml($!prefecture) #if($city && $city != '')$!escapetool.xml($city)#end</td></tr>259 + <tr><th>学校コード</th><td>$escapetool.xml($!schoolCode)</td></tr> 260 + <tr><th>学校名</th><td>$escapetool.xml($!schoolName)</td></tr> 261 + <tr><th>所在地</th><td>$escapetool.xml($!prefecture) #if($city && $city != '')$escapetool.xml($city)#end</td></tr> 266 266 <tr><th>学級数・生徒数</th><td>#if($classCount && $classCount != '')${classCount}学級#end #if($studentCount && $studentCount != '')/ 約${studentCount}名#end</td></tr> 267 - <tr><th>共学・別学</th><td>$ !escapetool.xml($!coeducation)</td></tr>268 - <tr><th>設置者</th><td>$ !escapetool.xml($!establishment)</td></tr>269 - <tr><th>学校種</th><td>$ !escapetool.xml($!schoolLevel)</td></tr>270 - <tr><th>課程</th><td>$ !escapetool.xml($!schoolSystem)</td></tr>271 - <tr><th>公式サイト</th><td>#if($website && $website != '')<a href="$ !escapetool.xml($website)" target="_blank" rel="noopener">$!escapetool.xml($website)</a>#else<span style="color:#9ca3af;">未登録</span>#end</td></tr>263 + <tr><th>共学・別学</th><td>$escapetool.xml($!coeducation)</td></tr> 264 + <tr><th>設置者</th><td>$escapetool.xml($!establishment)</td></tr> 265 + <tr><th>学校種</th><td>$escapetool.xml($!schoolLevel)</td></tr> 266 + <tr><th>課程</th><td>$escapetool.xml($!schoolSystem)</td></tr> 267 + <tr><th>公式サイト</th><td>#if($website && $website != '')<a href="$escapetool.xml($website)" target="_blank" rel="noopener">$escapetool.xml($website)</a>#else<span style="color:#9ca3af;">未登録</span>#end</td></tr> 272 272 </table> 273 273 #set($infoEditDate = $!doc.getValue('lastInfoEditedDate')) 274 274 #set($infoEditBy = $!doc.getValue('lastInfoEditedBy')) 275 275 #if($infoEditDate && $infoEditDate != '') 276 - <div class="info-last-updated"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z"/></svg> 基本情報の最終更新: $ !escapetool.xml($infoEditBy) — $!escapetool.xml($infoEditDate)</div>272 + <div class="info-last-updated"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z"/></svg> 基本情報の最終更新: $escapetool.xml($infoEditBy) — $escapetool.xml($infoEditDate)</div> 277 277 #end 278 278 </div> 279 279 ... ... @@ -280,12 +280,12 @@ 280 280 <div class="school-info-card mobile-collapse" id="card-contact"> 281 281 <h2 onclick="toggleInfoCard('card-contact')"><span><svg class="ico" style="width:1.1em;height:1.1em;vertical-align:-0.15em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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> 282 282 <table class="wiki-table school-info-table"> 283 - <tr><th>問い合わせ先</th><td>#if($contactInfo && $contactInfo != '')$ !escapetool.xml($contactInfo)#else<span style="color:#9ca3af;">未登録</span>#end</td></tr>284 - <tr><th>生徒会Web</th><td>#if($seitokaiWebsite && $seitokaiWebsite != '')<a href="$ !escapetool.xml($seitokaiWebsite)" target="_blank" rel="noopener"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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 style="color:#9ca3af;">未登録</span>#end</td></tr>285 - <tr><th>X (Twitter)</th><td>#if($seitokaiTwitter && $seitokaiTwitter != '')<a href="https://x.com/$ !escapetool.url($seitokaiTwitter)" target="_blank" rel="noopener">𝕏 @$!escapetool.xml($seitokaiTwitter)</a>#else<span style="color:#9ca3af;">未登録</span>#end</td></tr>286 - <tr><th>Instagram</th><td>#if($seitokaiInstagram && $seitokaiInstagram != '')<a href="https://instagram.com/$ !escapetool.url($seitokaiInstagram)" target="_blank" rel="noopener"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 19a2 2 0 01-2 2H3a2 2 0 01-2-2V8a2 2 0 012-2h4l2-3h6l2 3h4a2 2 0 012 2z"/><circle cx="12" cy="13" r="4"/></svg> @$!escapetool.xml($seitokaiInstagram)</a>#else<span style="color:#9ca3af;">未登録</span>#end</td></tr>287 - <tr><th>YouTube</th><td>#if($seitokaiYoutube && $seitokaiYoutube != '')<a href="$ !escapetool.xml($seitokaiYoutube)" target="_blank" rel="noopener"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="5 3 19 12 5 21 5 3"/></svg> YouTubeチャンネル</a>#else<span style="color:#9ca3af;">未登録</span>#end</td></tr>288 - <tr><th>その他SNS</th><td>#if($seitokaiOtherSns && $seitokaiOtherSns != '')$ !escapetool.xml($seitokaiOtherSns)#else<span style="color:#9ca3af;">未登録</span>#end</td></tr>279 + <tr><th>問い合わせ先</th><td>#if($contactInfo && $contactInfo != '')$escapetool.xml($contactInfo)#else<span style="color:#9ca3af;">未登録</span>#end</td></tr> 280 + <tr><th>生徒会Web</th><td>#if($seitokaiWebsite && $seitokaiWebsite != '')<a href="$escapetool.xml($seitokaiWebsite)" target="_blank" rel="noopener"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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 style="color:#9ca3af;">未登録</span>#end</td></tr> 281 + <tr><th>X (Twitter)</th><td>#if($seitokaiTwitter && $seitokaiTwitter != '')<a href="https://x.com/$escapetool.url($seitokaiTwitter)" target="_blank" rel="noopener">𝕏 @$escapetool.xml($seitokaiTwitter)</a>#else<span style="color:#9ca3af;">未登録</span>#end</td></tr> 282 + <tr><th>Instagram</th><td>#if($seitokaiInstagram && $seitokaiInstagram != '')<a href="https://instagram.com/$escapetool.url($seitokaiInstagram)" target="_blank" rel="noopener"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 19a2 2 0 01-2 2H3a2 2 0 01-2-2V8a2 2 0 012-2h4l2-3h6l2 3h4a2 2 0 012 2z"/><circle cx="12" cy="13" r="4"/></svg> @$escapetool.xml($seitokaiInstagram)</a>#else<span style="color:#9ca3af;">未登録</span>#end</td></tr> 283 + <tr><th>YouTube</th><td>#if($seitokaiYoutube && $seitokaiYoutube != '')<a href="$escapetool.xml($seitokaiYoutube)" target="_blank" rel="noopener"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="5 3 19 12 5 21 5 3"/></svg> YouTubeチャンネル</a>#else<span style="color:#9ca3af;">未登録</span>#end</td></tr> 284 + <tr><th>その他SNS</th><td>#if($seitokaiOtherSns && $seitokaiOtherSns != '')$escapetool.xml($seitokaiOtherSns)#else<span style="color:#9ca3af;">未登録</span>#end</td></tr> 289 289 </table> 290 290 </div> 291 291 </div> ... ... @@ -315,7 +315,7 @@ 315 315 #if($orgChartImage && $orgChartImage != '') 316 316 <div style="margin-bottom:12px;"><img src="$doc.getAttachmentURL($orgChartImage)" alt="組織図" style="max-width:100%; border-radius:8px;" /></div> 317 317 #end 318 - #if($orgChart && $orgChart != '')$ !escapetool.xml($orgChart)#end314 + #if($orgChart && $orgChart != '')$escapetool.xml($orgChart)#end 319 319 </div> 320 320 </div> 321 321 #else ... ... @@ -333,12 +333,12 @@ 333 333 <div class="tag-container"> 334 334 #set($daIdx = 1) 335 335 #foreach($da in $dailyActivities.split(",")) 336 - <span class="tag tag-accent">${daIdx}. $ !escapetool.xml($da.trim())</span>332 + <span class="tag tag-accent">${daIdx}. $escapetool.xml($da.trim())</span> 337 337 #set($daIdx = $daIdx + 1) 338 338 #end 339 339 </div> 340 340 #if($dailyActivitiesNote && $dailyActivitiesNote.trim() != '') 341 - <div class="free-note">$ !escapetool.xml($dailyActivitiesNote)</div>337 + <div class="free-note">$escapetool.xml($dailyActivitiesNote)</div> 342 342 #end 343 343 </div> 344 344 </div> ... ... @@ -350,16 +350,16 @@ 350 350 <div class="card-inner"> 351 351 <div class="info-row"> 352 352 <span class="info-label">役員選挙</span> 353 - <span class="info-value">$ !escapetool.xml($!electionExists)</span>349 + <span class="info-value">$escapetool.xml($!electionExists)</span> 354 354 </div> 355 355 #if($electionType && $electionType != '') 356 356 <div class="info-row"> 357 357 <span class="info-label">直近の選挙方式</span> 358 - <span class="info-value">$ !escapetool.xml($!electionType)</span>354 + <span class="info-value">$escapetool.xml($!electionType)</span> 359 359 </div> 360 360 #end 361 361 #if($electionNote && $electionNote.trim() != '') 362 - <div class="free-note">$ !escapetool.xml($electionNote)</div>358 + <div class="free-note">$escapetool.xml($electionNote)</div> 363 363 #end 364 364 </div> 365 365 </div> ... ... @@ -373,10 +373,10 @@ 373 373 <div class="card-inner"> 374 374 <div class="info-row"> 375 375 <span class="info-label">役員定例会の頻度</span> 376 - <span class="info-value">$ !escapetool.xml($!meetingFrequency)</span>372 + <span class="info-value">$escapetool.xml($!meetingFrequency)</span> 377 377 </div> 378 378 #if($regularActivitiesNote && $regularActivitiesNote.trim() != '') 379 - <div class="free-note">$ !escapetool.xml($regularActivitiesNote)</div>375 + <div class="free-note">$escapetool.xml($regularActivitiesNote)</div> 380 380 #end 381 381 </div> 382 382 </div> ... ... @@ -400,7 +400,7 @@ 400 400 <span class="info-value"> 401 401 <div class="selection-display"> 402 402 #foreach($bp in $budgetProcess.split(",")) 403 - <span class="selection-item">$ !escapetool.xml($bp.trim())</span>399 + <span class="selection-item">$escapetool.xml($bp.trim())</span> 404 404 #end 405 405 </div> 406 406 </span> ... ... @@ -409,13 +409,13 @@ 409 409 #if($studentFee && $studentFee != '') 410 410 <div class="info-row"> 411 411 <span class="info-label">生徒会費(年額)</span> 412 - <span class="info-value">$ !escapetool.xml($!studentFee)</span>408 + <span class="info-value">$escapetool.xml($!studentFee)</span> 413 413 </div> 414 414 #end 415 415 #if($budgetScale && $budgetScale != '') 416 416 <div class="info-row"> 417 417 <span class="info-label">予算規模</span> 418 - <span class="info-value">$ !escapetool.xml($!budgetScale)</span>414 + <span class="info-value">$escapetool.xml($!budgetScale)</span> 419 419 </div> 420 420 #end 421 421 #if($budgetAllocation && $budgetAllocation != '') ... ... @@ -424,7 +424,7 @@ 424 424 <span class="info-value"> 425 425 <div class="selection-display"> 426 426 #foreach($ba in $budgetAllocation.split(",")) 427 - <span class="selection-item">$ !escapetool.xml($ba.trim())</span>423 + <span class="selection-item">$escapetool.xml($ba.trim())</span> 428 428 #end 429 429 </div> 430 430 </span> ... ... @@ -431,7 +431,7 @@ 431 431 </div> 432 432 #end 433 433 #if($budgetNote && $budgetNote.trim() != '') 434 - <div class="free-note">$ !escapetool.xml($budgetNote)</div>430 + <div class="free-note">$escapetool.xml($budgetNote)</div> 435 435 #end 436 436 </div> 437 437 </div> ... ... @@ -454,7 +454,7 @@ 454 454 <div class="card-inner"> 455 455 <div class="info-row"> 456 456 <span class="info-label">見直しの有無(3年以内)</span> 457 - <span class="info-value"><span class="tag tag-primary" style="font-size:0.9em;">$ !escapetool.xml($!ruleReviewStatus)</span></span>453 + <span class="info-value"><span class="tag tag-primary" style="font-size:0.9em;">$escapetool.xml($!ruleReviewStatus)</span></span> 458 458 </div> 459 459 #if($ruleReviewContent && $ruleReviewContent != '') 460 460 <div class="info-row"> ... ... @@ -462,7 +462,7 @@ 462 462 <span class="info-value"> 463 463 <div class="selection-display"> 464 464 #foreach($rc in $ruleReviewContent.split(",")) 465 - <span class="selection-item">$ !escapetool.xml($rc.trim())</span>461 + <span class="selection-item">$escapetool.xml($rc.trim())</span> 466 466 #end 467 467 </div> 468 468 </span> ... ... @@ -474,7 +474,7 @@ 474 474 <span class="info-value"> 475 475 <div class="selection-display"> 476 476 #foreach($rp in $ruleReviewProposer.split(",")) 477 - <span class="selection-item">$ !escapetool.xml($rp.trim())</span>473 + <span class="selection-item">$escapetool.xml($rp.trim())</span> 478 478 #end 479 479 </div> 480 480 </span> ... ... @@ -486,7 +486,7 @@ 486 486 <span class="info-value"> 487 487 <div class="selection-display"> 488 488 #foreach($ri in $ruleReviewImplementer.split(",")) 489 - <span class="selection-item">$ !escapetool.xml($ri.trim())</span>485 + <span class="selection-item">$escapetool.xml($ri.trim())</span> 490 490 #end 491 491 </div> 492 492 </span> ... ... @@ -495,7 +495,7 @@ 495 495 #if($ruleReviewSystem && $ruleReviewSystem != '') 496 496 <div class="info-row"> 497 497 <span class="info-label">見直しの仕組み</span> 498 - <span class="info-value">$ !escapetool.xml($!ruleReviewSystem)</span>494 + <span class="info-value">$escapetool.xml($!ruleReviewSystem)</span> 499 499 </div> 500 500 #end 501 501 </div> ... ... @@ -514,7 +514,7 @@ 514 514 #end 515 515 #if($canViewChallenges) 516 516 <h2 class="section-title">生徒会の課題意識 #if($visibilityChallenges != 'public')<span class="visibility-badge visibility-${visibilityChallenges}">#if($visibilityChallenges == 'members')<svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 00-3-3.87"/><path d="M16 3.13a4 4 0 010 7.75"/></svg> 登録者限定#else<svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 20h20"/><path d="M5 20V10l7-5 7 5v10"/><path d="M9 20v-5h6v5"/></svg> 校内限定#end</span>#end</h2> 517 -<div class="challenge-text">$ !escapetool.xml($challenges)</div>513 +<div class="challenge-text">$escapetool.xml($challenges)</div> 518 518 #else 519 519 <div class="visibility-restricted-notice"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0110 0v4"/></svg> 課題情報は #if($visibilityChallenges == 'members')登録ユーザー#else校内メンバー#end のみ閲覧可能です</div> 520 520 #end ... ... @@ -525,7 +525,7 @@ 525 525 {{/html}} 526 526 527 527 ## --- ⑩ 活動報告一覧(スレッド型・年度タブ付き) --- 528 -= 活動報告 = 524 += <svg class="ico" style="width:1.1em;height:1.1em;vertical-align:-0.15em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg> 活動報告 = 529 529 530 530 ## --- 投稿者ステータス凡例(折りたたみ) --- 531 531 {{html clean="false"}} ... ... @@ -627,11 +627,11 @@ 627 627 #set($discard = $threadPosts.addAll($normalPosts)) 628 628 629 629 {{html clean="false"}} 630 -<div class="activity-thread" data-fiscal-year="$ !escapetool.xml($actFY)">626 +<div class="activity-thread" data-fiscal-year="$escapetool.xml($actFY)"> 631 631 <div class="activity-thread-header"> 632 632 <div class="activity-thread-title"> 633 - <h3 #if($actFeatured == '1')class="featured-title"#end>$ !escapetool.xml($!actTitle) #if($actFeatured == '1')<svg style="width:14px;height:14px;vertical-align:-1px;margin-left:4px;" 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>634 - <span class="activity-meta">$ !escapetool.xml($!actCommittee) | $!escapetool.xml($!actPeriod) #if($actFY != 'unknown')| $!escapetool.xml($actFY)年度#end</span>629 + <h3 #if($actFeatured == '1')class="featured-title"#end>$escapetool.xml($!actTitle) #if($actFeatured == '1')<svg style="width:14px;height:14px;vertical-align:-1px;margin-left:4px;" 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> 630 + <span class="activity-meta">$escapetool.xml($!actCommittee) | $escapetool.xml($!actPeriod) #if($actFY != 'unknown')| $escapetool.xml($actFY)年度#end</span> 635 635 </div> 636 636 <div style="display:flex;align-items:center;gap:8px;"> 637 637 <span class="thread-post-count">${threadPosts.size()}件の投稿</span> ... ... @@ -653,26 +653,6 @@ 653 653 #set($postGrade = $!post.getValue('authorGrade')) 654 654 #set($postSchoolCode = $!post.getValue('authorSchoolCode')) 655 655 #set($postDate = $post.getValue('createdDate')) 656 - ## 論理削除チェック 657 - #set($postDeleted = $!post.getValue('deleted')) 658 - #if($postDeleted == 1 || $postDeleted == '1') 659 - #if($viewerAccountType == 'admin') 660 - <div class="thread-post thread-post-deleted" style="opacity:0.5;border:2px dashed #9ca3af;"> 661 - <div style="padding:10px 16px;font-size:0.85em;color:var(--text-light);"> 662 - <svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"/><path d="M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6m3 0V4a2 2 0 012-2h4a2 2 0 012 2v2"/></svg> 663 - <strong>投稿者により削除済み</strong>($!post.getValue('deletedAt')) 664 - <div style="margin-top:4px;font-size:0.92em;color:var(--text-mid);">$!escapetool.xml($!postContent)</div> 665 - </div> 666 - </div> 667 - #else 668 - <div class="thread-post thread-post-deleted" style="opacity:0.6;"> 669 - <div style="padding:12px 16px;font-size:0.88em;color:var(--text-light);font-style:italic;"> 670 - <svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"/><path d="M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6m3 0V4a2 2 0 012-2h4a2 2 0 012 2v2"/></svg> 671 - この投稿は削除されました 672 - </div> 673 - </div> 674 - #end 675 - #else 676 676 ## 通報による非表示チェック 677 677 #set($postHidden = $!post.getValue('hidden')) 678 678 #if($postHidden == 1 || $postHidden == '1') ... ... @@ -680,8 +680,8 @@ 680 680 <div class="thread-post" style="opacity:0.5;border:2px dashed #dc2626;"> 681 681 <div style="padding:10px 16px;font-size:0.85em;color:#dc2626;"> 682 682 <svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> 683 - <strong>通報により非表示中</strong>(理由: $ !escapetool.xml($!post.getValue('hiddenReason')))684 - <div style="margin-top:4px;font-size:0.92em;color:var(--text-mid);">$ !escapetool.xml($!postContent)</div>659 + <strong>通報により非表示中</strong>(理由: $escapetool.xml($!post.getValue('hiddenReason'))) 660 + <div style="margin-top:4px;font-size:0.92em;color:var(--text-mid);">$escapetool.xml($!postContent)</div> 685 685 </div> 686 686 </div> 687 687 #end ... ... @@ -719,9 +719,9 @@ 719 719 #set($postAuthorRef = $!post.getValue('authorRef')) 720 720 <span class="thread-post-author"> 721 721 #if($postAuthorRef && $postAuthorRef != '') 722 - <a href="$xwiki.getURL('SeitokaiCode.UserProfile', 'view', "user=${escapetool.url($postAuthorRef)}")">$ !escapetool.xml($!postAuthor)</a>698 + <a href="$xwiki.getURL('SeitokaiCode.UserProfile', 'view', "user=${escapetool.url($postAuthorRef)}")">$escapetool.xml($!postAuthor)</a> 723 723 #else 724 - $ !escapetool.xml($!postAuthor)700 + $escapetool.xml($!postAuthor) 725 725 #end 726 726 </span> 727 727 <span class="author-badge"> ... ... @@ -748,10 +748,6 @@ 748 748 #end 749 749 #if($postUserRole == 'student') 750 750 <span class="badge badge-role-student" style="font-size:0.75em;padding:1px 7px;"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 10l-10-5L2 10l10 5 10-5z"/><path d="M6 12v5c0 1.66 2.69 3 6 3s6-1.34 6-3v-5"/></svg> 生徒</span> 751 - #set($postIsOfficer = $!post.getValue('authorIsOfficer')) 752 - #if($postIsOfficer == 'true') 753 - <span class="badge badge-role-officer" style="font-size:0.75em;padding:1px 7px;"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg> 役員</span> 754 - #end 755 755 #elseif($postUserRole == 'teacher') 756 756 <span class="badge badge-role-teacher" style="font-size:0.75em;padding:1px 7px;"><svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><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> 757 757 #elseif($postUserRole == 'graduate') ... ... @@ -762,13 +762,9 @@ 762 762 #end 763 763 </span> 764 764 <span class="thread-post-date">$!postDate</span> 765 - #set($postEdited = $!post.getValue('edited')) 766 - #if($postEdited == 1 || $postEdited == '1') 767 - <span class="post-edited-label">(編集済み)</span> 768 - #end 769 769 </div> 770 770 <div class="thread-post-body"> 771 - $ !escapetool.xml($!postContent)739 + $escapetool.xml($!postContent) 772 772 #set($postImages = $!post.getValue('images')) 773 773 #if($postImages && $postImages.trim() != '') 774 774 <div class="post-images"> ... ... @@ -782,7 +782,7 @@ 782 782 #if($imgName != '') 783 783 <div class="post-image-item"> 784 784 <a href="$doc.getAttachmentURL($imgName)" target="_blank"> 785 - <img src="$doc.getAttachmentURL($imgName)" alt="$ !escapetool.xml($imgName)" loading="lazy"/>753 + <img src="$doc.getAttachmentURL($imgName)" alt="$escapetool.xml($imgName)" loading="lazy"/> 786 786 </a> 787 787 </div> 788 788 #end ... ... @@ -813,7 +813,7 @@ 813 813 #set($displayName = $fName.replaceFirst('file_\d{14}_\d+_', '')) 814 814 #end 815 815 <div class="post-file-item"> 816 - <a href="$doc.getAttachmentURL($fName)" target="_blank" download="$ !escapetool.xml($displayName)">784 + <a href="$doc.getAttachmentURL($fName)" target="_blank" download="$escapetool.xml($displayName)"> 817 817 #if($fIcon == 'pdf')<svg class="ico" style="width:1.1em;height:1.1em;vertical-align:-0.15em;color:${fColor};" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"/><polyline points="14 2 14 8 20 8"/><path d="M9 15v-2h1.5a1.5 1.5 0 010 3H9"/></svg> 818 818 #elseif($fIcon == 'word')<svg class="ico" style="width:1.1em;height:1.1em;vertical-align:-0.15em;color:${fColor};" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"/><polyline points="14 2 14 8 20 8"/><path d="M8 15l1.5-5 1.5 5 1.5-5 1.5 5"/></svg> 819 819 #elseif($fIcon == 'excel')<svg class="ico" style="width:1.1em;height:1.1em;vertical-align:-0.15em;color:${fColor};" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="8" y1="13" x2="16" y2="13"/><line x1="8" y1="17" x2="16" y2="17"/><line x1="12" y1="13" x2="12" y2="17"/></svg> ... ... @@ -820,7 +820,7 @@ 820 820 #elseif($fIcon == 'ppt')<svg class="ico" style="width:1.1em;height:1.1em;vertical-align:-0.15em;color:${fColor};" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"/><polyline points="14 2 14 8 20 8"/><rect x="8" y="12" width="8" height="6" rx="1"/></svg> 821 821 #else<svg class="ico" style="width:1.1em;height:1.1em;vertical-align:-0.15em;color:${fColor};" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z"/><polyline points="14 2 14 8 20 8"/></svg> 822 822 #end 823 - <span class="post-file-name">$ !escapetool.xml($displayName)</span>791 + <span class="post-file-name">$escapetool.xml($displayName)</span> 824 824 </a> 825 825 </div> 826 826 #end ... ... @@ -847,34 +847,18 @@ 847 847 #end 848 848 </div> 849 849 #end 850 - ## 編集・削除ボタン(投稿者本人 or 管理者) 851 - #set($postAuthorRef = $!post.getValue('authorRef')) 852 - #set($postObjNumED = $post.number) 853 - #if($xcontext.user == $postAuthorRef || $viewerAccountType == 'admin') 854 - <div class="post-edit-actions" style="margin-top:6px;display:flex;gap:8px;"> 855 - #if($xcontext.user == $postAuthorRef) 856 - <button type="button" class="btn-post-edit" onclick="openEditPost(this, '${doc.fullName}', $postObjNumED, '$!escapetool.javascript($!postContent)')" title="この投稿を編集"> 857 - <svg style="width:13px;height:13px;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z"/></svg> 編集 858 - </button> 859 - #end 860 - <button type="button" class="btn-post-delete" onclick="confirmDeletePost('${doc.fullName}', $postObjNumED, '${services.csrf.getToken()}')" title="この投稿を削除"> 861 - <svg style="width:13px;height:13px;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"/><path d="M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6m3 0V4a2 2 0 012-2h4a2 2 0 012 2v2"/></svg> 削除 862 - </button> 863 - </div> 864 - #end 865 865 </div> 866 866 </div> 867 867 #end## /canViewPost 868 868 #end## /postHidden 869 - #end## /postDeleted 870 870 #end 871 871 872 872 #if($xcontext.user != "XWiki.XWikiGuest") 873 873 <div class="thread-add-post"> 874 - <a href="/xwiki/bin/view/SeitokaiCode/ActivityPostForm?schoolPage=${doc.fullName}&activityIndex=${actIdx}&schoolCode=$ !escapetool.url($schoolCode)&postType=report" class="btn-thread-add">826 + <a href="/xwiki/bin/view/SeitokaiCode/ActivityPostForm?schoolPage=${doc.fullName}&activityIndex=${actIdx}&schoolCode=$escapetool.url($schoolCode)&postType=report" class="btn-thread-add"> 875 875 + 活動報告を追加 876 876 </a> 877 - <a href="/xwiki/bin/view/SeitokaiCode/ActivityPostForm?schoolPage=${doc.fullName}&activityIndex=${actIdx}&schoolCode=$ !escapetool.url($schoolCode)&postType=comment" class="btn-thread-comment">829 + <a href="/xwiki/bin/view/SeitokaiCode/ActivityPostForm?schoolPage=${doc.fullName}&activityIndex=${actIdx}&schoolCode=$escapetool.url($schoolCode)&postType=comment" class="btn-thread-comment"> 878 878 <svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg> コメントを書く 879 879 </a> 880 880 </div> ... ... @@ -896,7 +896,7 @@ 896 896 #if($xcontext.user != "XWiki.XWikiGuest") 897 897 {{html clean="false"}} 898 898 <div class="activity-add-section"> 899 - <a href="/xwiki/bin/view/SeitokaiCode/ActivityForm?schoolPage=${doc.fullName}&schoolCode=$ !escapetool.url($schoolCode)" class="btn btn-primary btn-add-activity">851 + <a href="/xwiki/bin/view/SeitokaiCode/ActivityForm?schoolPage=${doc.fullName}&schoolCode=$escapetool.url($schoolCode)" class="btn btn-primary btn-add-activity"> 900 900 <svg class="ico" style="width:1em;height:1em;vertical-align:-0.125em;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></svg> 活動を追加 901 901 </a> 902 902 </div> ... ... @@ -914,7 +914,7 @@ 914 914 現在のページ: <strong>${pageFiscalYear}年度</strong> 915 915 #set($lyud = $!doc.getValue('lastYearUpdateDate')) 916 916 #if($lyud && $lyud != '') 917 - | 最終年度更新: $ !escapetool.xml($lyud) ($!escapetool.xml($!doc.getValue('lastYearUpdateBy')))869 + | 最終年度更新: $escapetool.xml($lyud) ($escapetool.xml($!doc.getValue('lastYearUpdateBy'))) 918 918 #end 919 919 </div> 920 920 ... ... @@ -1025,71 +1025,6 @@ 1025 1025 card.classList.toggle('collapsed'); 1026 1026 card.classList.remove('mobile-collapse'); 1027 1027 } 1028 - 1029 -// 投稿の編集(インライン編集フォームを開く) 1030 -function openEditPost(btn, schoolPage, postObjNum, currentContent) { 1031 - var postEl = btn.closest('.thread-post'); 1032 - if (!postEl) return; 1033 - // 既存の編集フォームがあれば閉じる 1034 - var existing = postEl.querySelector('.post-edit-form'); 1035 - if (existing) { existing.remove(); return; } 1036 - var bodyEl = postEl.querySelector('.thread-post-body'); 1037 - if (!bodyEl) return; 1038 - var form = document.createElement('div'); 1039 - form.className = 'post-edit-form'; 1040 - form.innerHTML = '<textarea id="editContent_' + postObjNum + '">' + currentContent.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>') + '</textarea>' + 1041 - '<div class="post-edit-form-actions">' + 1042 - '<button type="button" class="btn-cancel-edit" onclick="this.closest(\'.post-edit-form\').remove()">キャンセル</button>' + 1043 - '<button type="button" class="btn-save" onclick="saveEditPost(\'' + schoolPage + '\', ' + postObjNum + ')">保存</button>' + 1044 - '</div>'; 1045 - bodyEl.parentNode.insertBefore(form, bodyEl.nextSibling); 1046 - form.querySelector('textarea').focus(); 1047 -} 1048 - 1049 -// 投稿の編集を保存 1050 -function saveEditPost(schoolPage, postObjNum) { 1051 - var textarea = document.getElementById('editContent_' + postObjNum); 1052 - if (!textarea) return; 1053 - var newContent = textarea.value.trim(); 1054 - if (!newContent) { alert('投稿内容を入力してください'); return; } 1055 - var csrfEl = document.querySelector('input[name="form_token"]'); 1056 - var csrfToken = csrfEl ? csrfEl.value : ''; 1057 - var xhr = new XMLHttpRequest(); 1058 - xhr.open('GET', '/xwiki/bin/view/SeitokaiCode/EditPost?outputSyntax=plain&schoolPage=' + encodeURIComponent(schoolPage) + '&postObj=' + postObjNum + '&newContent=' + encodeURIComponent(newContent) + '&form_token=' + encodeURIComponent(csrfToken), true); 1059 - xhr.onload = function() { 1060 - try { 1061 - var res = JSON.parse(xhr.responseText); 1062 - if (res.success) { 1063 - showToast('投稿を更新しました', 'success'); 1064 - setTimeout(function() { location.reload(); }, 800); 1065 - } else { 1066 - alert('編集に失敗しました: ' + (res.error || '')); 1067 - } 1068 - } catch(e) { alert('編集に失敗しました'); } 1069 - }; 1070 - xhr.onerror = function() { alert('通信エラーが発生しました'); }; 1071 - xhr.send(); 1072 -} 1073 - 1074 -// 投稿の削除(確認ダイアログ付き) 1075 -function confirmDeletePost(schoolPage, postObjNum, token) { 1076 - if (!confirm('この投稿を削除しますか?\\n削除後は「この投稿は削除されました」と表示されます。')) return; 1077 - var xhr = new XMLHttpRequest(); 1078 - xhr.open('GET', '/xwiki/bin/view/SeitokaiCode/DeletePost?outputSyntax=plain&schoolPage=' + encodeURIComponent(schoolPage) + '&postObj=' + postObjNum + '&form_token=' + encodeURIComponent(token), true); 1079 - xhr.onload = function() { 1080 - try { 1081 - var res = JSON.parse(xhr.responseText); 1082 - if (res.success) { 1083 - showToast('投稿を削除しました', 'success'); 1084 - setTimeout(function() { location.reload(); }, 800); 1085 - } else { 1086 - alert('削除に失敗しました: ' + (res.error || '')); 1087 - } 1088 - } catch(e) { alert('削除に失敗しました'); } 1089 - }; 1090 - xhr.onerror = function() { alert('通信エラーが発生しました'); }; 1091 - xhr.send(); 1092 -} 1093 1093 </script> 1094 1094 {{/html}} 1095 1095 {{/velocity}}