... |
... |
@@ -1,4 +1,7 @@ |
1 |
|
-{{groovy}} |
|
1 |
+{{groovy bindings="tags"}} |
|
2 |
+def includeTags = tags?.split(',')*.trim()*.toLowerCase().findAll { it } |
|
3 |
+def maxCount = 100 |
|
4 |
+ |
2 |
2 |
def hql = """ |
3 |
3 |
select doc.fullName |
4 |
4 |
from XWikiDocument doc, BaseObject obj |
... |
... |
@@ -7,7 +7,7 @@ |
7 |
7 |
order by doc.date desc |
8 |
8 |
""" |
9 |
9 |
|
10 |
|
-def docs = xwiki.search(hql, 100, 0) |
|
13 |
+def docs = xwiki.search(hql, maxCount, 0) |
11 |
11 |
def results = [] |
12 |
12 |
|
13 |
13 |
docs.each { docName -> |
... |
... |
@@ -18,9 +18,16 @@ |
18 |
18 |
def title = obj.getProperty("shortText1")?.value?.toString()?.trim() |
19 |
19 |
def summary = obj.getProperty("shortText2")?.value?.toString()?.trim() ?: obj.getProperty("longText1")?.value?.toString()?.trim() |
20 |
20 |
def externalURL = obj.getProperty("longText2")?.value?.toString()?.trim() |
|
24 |
+ def tagList = obj.getProperty("tags")?.value |
21 |
21 |
|
22 |
22 |
if (!title || !summary) return |
23 |
23 |
|
|
28 |
+ // Apply tag filter if tags are selected |
|
29 |
+ if (includeTags && tagList) { |
|
30 |
+ def docTags = tagList.collect { it.toString().toLowerCase() } |
|
31 |
+ if (!docTags.any { includeTags.contains(it) }) return |
|
32 |
+ } |
|
33 |
+ |
24 |
24 |
def isValidURL = externalURL?.startsWith("http://") || externalURL?.startsWith("https://") |
25 |
25 |
def linkTarget = isValidURL ? externalURL : "doc:${docName}" |
26 |
26 |
def safeTitle = title.replaceAll(/[\[\]\|]/, '').replaceAll(/\>\>/, '>>\u200B') |
... |
... |
@@ -48,7 +48,11 @@ |
48 |
48 |
} |
49 |
49 |
|
50 |
50 |
if (results.isEmpty()) { |
51 |
|
- println "⚠️ No incidents to display." |
|
61 |
+ if (includeTags) { |
|
62 |
+ println "⚠️ No incidents found with selected tag(s): ${tags}" |
|
63 |
+ } else { |
|
64 |
+ println "⚠️ No incidents to display." |
|
65 |
+ } |
52 |
52 |
} else { |
53 |
53 |
println results.join("\n\n") |
54 |
54 |
} |