Hide last authors
| author | version | line-number | content |
|---|---|---|---|
| |
1.1 | 1 | {{velocity}} |
| 2 | ## ===== 学校一覧ページ ===== | ||
| 3 | ## ソート: 更新順(デフォルト)/ 都道府県順 | ||
| 4 | ## カード形式で表示し、活動数・投稿数・最終更新日を表示 | ||
| 5 | |||
| |
23.1 | 6 | ## --- 閲覧者情報(非表示校フィルタ用) --- |
| 7 | #set($listViewerUser = $xcontext.user) | ||
| 8 | #set($isListAdmin = false) | ||
| 9 | #if($listViewerUser != 'XWiki.XWikiGuest') | ||
| 10 | #set($listViewerDoc = $xwiki.getDocument($listViewerUser)) | ||
| 11 | #set($listViewerAccountType = $!listViewerDoc.getValue('accountType')) | ||
| 12 | #if($listViewerAccountType == 'admin') | ||
| 13 | #set($isListAdmin = true) | ||
| 14 | #end | ||
| 15 | #end | ||
| 16 | |||
| |
1.1 | 17 | #set($sortParam = $!request.sort) |
| 18 | #if(!$sortParam || $sortParam == '') | ||
| 19 | #set($sortParam = 'updated') | ||
| 20 | #end | ||
| 21 | |||
| |
23.1 | 22 | ## ソート順に応じたXWQLクエリ(非表示校フィルタ付き) |
| 23 | #if($isListAdmin) | ||
| 24 | ## 管理者: 全校表示 | ||
| 25 | #if($sortParam == 'pref') | ||
| 26 | #set($query = $services.query.xwql("from doc.object(SeitokaiCode.SchoolClass) as school order by school.prefecture, school.schoolName")) | ||
| 27 | #else | ||
| 28 | #set($query = $services.query.xwql("from doc.object(SeitokaiCode.SchoolClass) as school order by doc.date desc")) | ||
| 29 | #end | ||
| |
1.1 | 30 | #else |
| |
23.1 | 31 | ## 一般: 非表示校を除外 |
| 32 | #if($sortParam == 'pref') | ||
| |
24.1 | 33 | #set($query = $services.query.xwql("from doc.object(SeitokaiCode.SchoolClass) as school where (school.hidden <> 1 or school.hidden is null) order by school.prefecture, school.schoolName")) |
| |
23.1 | 34 | #else |
| |
24.1 | 35 | #set($query = $services.query.xwql("from doc.object(SeitokaiCode.SchoolClass) as school where (school.hidden <> 1 or school.hidden is null) order by doc.date desc")) |
| |
23.1 | 36 | #end |
| |
1.1 | 37 | #end |
| 38 | #set($results = $query.execute()) | ||
| 39 | |||
| 40 | {{html clean="false"}} | ||
| |
32.1 | 41 | <h1 class="home-section-title">登録されている学校</h1> |
| |
11.1 | 42 | <div class="sort-header"> |
| 43 | <div class="school-count"> | ||
| |
1.1 | 44 | $results.size() 校が登録されています |
| 45 | </div> | ||
| |
11.1 | 46 | <div class="sort-toggle-group"> |
| |
1.1 | 47 | <a href="$doc.getURL('view', 'sort=updated')" |
| |
11.1 | 48 | class="sort-toggle #if($sortParam == 'updated')active#end"> |
| |
6.1 | 49 | <svg class="ico ico-fixed-14" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg> 更新順 |
| |
1.1 | 50 | </a> |
| 51 | <a href="$doc.getURL('view', 'sort=pref')" | ||
| |
11.1 | 52 | class="sort-toggle #if($sortParam == 'pref')active#end"> |
| |
6.1 | 53 | <svg class="ico ico-fixed-14" viewBox="0 0 24 24"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg> 都道府県順 |
| |
1.1 | 54 | </a> |
| |
32.1 | 55 | #if($listViewerUser != 'XWiki.XWikiGuest') |
| 56 | <a href="/bin/SeitokaiCode/CreateSchool" class="sort-toggle" style="margin-left:var(--sp-2); color:var(--primary); border-color:var(--primary);"> | ||
| 57 | <svg class="ico ico-fixed-14" viewBox="0 0 24 24"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></svg> 学校を追加 | ||
| 58 | </a> | ||
| 59 | #end | ||
| |
1.1 | 60 | </div> |
| 61 | </div> | ||
| 62 | {{/html}} | ||
| 63 | |||
| 64 | #if($results.size() > 0) | ||
| 65 | |||
| 66 | ## 都道府県順の場合、都道府県グループヘッダーを表示 | ||
| 67 | #set($currentPref = '') | ||
| 68 | |||
| 69 | {{html clean="false"}} | ||
| |
11.1 | 70 | <div class="school-card-grid"> |
| |
1.1 | 71 | #foreach($docName in $results) |
| 72 | #set($schoolDoc = $xwiki.getDocument($docName)) | ||
| 73 | #set($schoolObj = $schoolDoc.getObject('SeitokaiCode.SchoolClass')) | ||
| 74 | #if($schoolObj) | ||
| 75 | #set($sName = $!schoolObj.getValue('schoolName')) | ||
| 76 | #set($sPref = $!schoolObj.getValue('prefecture')) | ||
| 77 | #set($sCity = $!schoolObj.getValue('city')) | ||
| 78 | #set($sType = $!schoolObj.getValue('schoolType')) | ||
| 79 | #set($sEst = $!schoolObj.getValue('establishment')) | ||
| 80 | #set($sCoed = $!schoolObj.getValue('coeducation')) | ||
| 81 | #set($sSystem = $!schoolObj.getValue('schoolSystem')) | ||
| 82 | #set($lastUpdate = $datetool.format('yyyy/MM/dd', $schoolDoc.date)) | ||
| 83 | ## 活動数をカウント | ||
| 84 | #set($actCount = $schoolDoc.getObjects('SeitokaiCode.ActivityClass').size()) | ||
| 85 | ## 投稿数をカウント(全活動の投稿合計) | ||
| 86 | #set($postCount = $schoolDoc.getObjects('SeitokaiCode.ActivityPostClass').size()) | ||
| |
25.1 | 87 | ## 特色ある活動の数とタイトルを収集 |
| |
1.1 | 88 | #set($schoolActivities = $schoolDoc.getObjects('SeitokaiCode.ActivityClass')) |
| 89 | #set($featuredCount = 0) | ||
| |
25.1 | 90 | #set($featuredTitles = []) |
| |
1.1 | 91 | #if($schoolActivities) |
| 92 | #foreach($sa in $schoolActivities) | ||
| 93 | #if($!sa.getValue('featured') == '1') | ||
| 94 | #set($featuredCount = $featuredCount + 1) | ||
| |
25.1 | 95 | #set($discard = $featuredTitles.add($!sa.getValue('title'))) |
| |
1.1 | 96 | #end |
| 97 | #end | ||
| 98 | #end | ||
| 99 | |||
| 100 | ## 都道府県グループヘッダー(都道府県順の場合) | ||
| 101 | #if($sortParam == 'pref' && $sPref != $currentPref) | ||
| 102 | #set($currentPref = $sPref) | ||
| |
11.1 | 103 | <div class="pref-group-header"> |
| 104 | <span class="pref-group-label"><svg class="ico ico-fixed-16" viewBox="0 0 24 24"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg> $!escapetool.xml($currentPref)</span> | ||
| |
1.1 | 105 | </div> |
| 106 | #end | ||
| 107 | |||
| |
23.1 | 108 | #set($sHidden = $!schoolObj.getValue('hidden')) |
| 109 | <a href="$schoolDoc.getURL('view')" class="school-card #if($sHidden == 1)school-card-hidden#end"> | ||
| |
11.1 | 110 | <div class="school-card-body"> |
| 111 | <div class="school-card-header-row"> | ||
| 112 | <div class="school-card-name">$!escapetool.xml($sName)</div> | ||
| |
23.1 | 113 | #if($sHidden == 1) |
| 114 | <span class="badge-hidden">非表示</span> | ||
| 115 | #end | ||
| |
1.1 | 116 | #if($sEst) |
| |
11.1 | 117 | <span class="school-card-badge #if($sEst == '公立')public#elseif($sEst == '私立')private#else national#end">$!escapetool.xml($sEst)</span> |
| |
1.1 | 118 | #end |
| 119 | </div> | ||
| |
11.1 | 120 | <div class="school-card-meta"> |
| |
5.1 | 121 | $!escapetool.xml($sPref) $!escapetool.xml($sCity) |
| 122 | #if($sCoed) ・ $!escapetool.xml($sCoed)#end | ||
| |
22.1 | 123 | #if($sSystem && !$sSystem.isEmpty()) ・ #foreach($__sys in $sSystem)#if($foreach.count > 1)・#end$!escapetool.xml($__sys)#end#end |
| |
1.1 | 124 | </div> |
| |
28.1 | 125 | ## 特色ある活動タイトル |
| |
1.1 | 126 | #if($featuredCount > 0) |
| |
25.1 | 127 | <div class="school-card-featured-titles"> |
| 128 | #foreach($ft in $featuredTitles) | ||
| 129 | <span class="featured-title-item"><svg class="ico ico-fixed-12" 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> $!escapetool.xml($ft)</span> | ||
| 130 | #end | ||
| 131 | </div> | ||
| |
1.1 | 132 | #end |
| |
11.1 | 133 | <div class="school-card-stats"> |
| 134 | <span><svg class="ico ico-fixed-14" viewBox="0 0 24 24"><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> 活動 <span class="num">$actCount</span>件</span> | ||
| 135 | <span><svg class="ico ico-fixed-14" viewBox="0 0 24 24"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg> 投稿 <span class="num">$postCount</span>件</span> | ||
| 136 | <span><svg class="ico ico-fixed-14" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg> 更新 $lastUpdate</span> | ||
| |
1.1 | 137 | </div> |
| 138 | </div> | ||
| 139 | </a> | ||
| 140 | #end | ||
| 141 | #end | ||
| 142 | </div> | ||
| 143 | {{/html}} | ||
| 144 | |||
| 145 | #else | ||
| 146 | //まだ学校ページが登録されていません。// | ||
| 147 | |||
| 148 | [[学校ページを作成する>>SeitokaiCode.CreateSchool]] | ||
| 149 | #end | ||
| 150 | {{/velocity}} |