-
Notifications
You must be signed in to change notification settings - Fork 2
/
purge-trash.vm
119 lines (106 loc) · 5.01 KB
/
purge-trash.vm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
## Macro Name: purge-trash
## Visibility: Visible only to system administrators in the Macro Browser
## Macro Title: Purge Trash
## Description: Embed this in a page and view it to purge all trash in all spaces
## Categories: Administration
## Macro body: No
##
## Developed by: Sam Hall, Clement Martino and Pierre Lejeune
## License: MIT
## Source: https://github.com/Sam-Hall/purge-trash
## Date created: 01/09/2016
## Installed by:
## @param simulate:title=Simulate Only|type=boolean|required=true|desc=Don't actually purge anything|default=true
## @param limit:title=Limit|type=int|required=false|desc=Limit the max number of pages to purge (default 100)
## @param days:title=Days|type=int|required=false|desc=Define the period to keep documents (default 90)
#if($permissionHelper.isConfluenceAdministrator($action.remoteUser) == "true")
#set($containerManagerClass=$content.class.forName('com.atlassian.spring.container.ContainerManager'))
#set($getInstanceMethod=$containerManagerClass.getDeclaredMethod('getInstance',null))
#set($containerManager=$getInstanceMethod.invoke(null,null))
#set($containerContext=$containerManager.containerContext)
#set($Integer = 0)
#set($Long = $Integer.longValue())
#set($trashManager=$containerContext.getComponent('trashManager'))
#set($spaceManager=$containerContext.getComponent('spaceManager'))
#set($pageManager=$containerContext.getComponent('pageManager'))
#set($attachmentManager=$pageManager.getAttachmentManager())
#set($spaces = $spaceManager.getAllSpaces())
#set($spaceCount = 0)
#set($purgeCount = 0)
## Defaults
#if (!$paramsimulate)
#set ($paramsimulate="true")
#end
#if (!$paramlimit)
#set ($purgeLimit=100)
#else
#set ($purgeLimit=$Integer.parseInt($paramlimit))
#end
#if (!$paramdays)
#set ($purgeDays=90)
#else
#set ($purgeDays=$Integer.parseInt($paramdays))
#end
#set($delay = $purgeDays*24*3600*1000)
#set($today = $content.currentDate.time)
#set($date_limit = $today - $delay)
<b>Purge Trash invoked (simulate = $paramsimulate, limit = $purgeLimit, days = $purgeDays)</b><br/>
List format: <i>Date/time modified - ID: Page title</i>
<hr/>
#foreach($space in $spaces)
#set($spaceKey = $space.key)
#set($items = $trashManager.getNumberOfItemsInTrash($space))
#if ($items > 0 && $purgeCount < $purgeLimit)
<b>Found $items trash items in space: $spaceKey</b><br/>
#set($itemList = $trashManager.getTrashContents($space,0,$items))
<ul>
#foreach($item in $itemList)
#set($title = $item.getDisplayTitle())
#set($contentId = $item.getIdAsString())
#set($moddate = $item.getLastModificationDate())
<li>$moddate - $contentId: $title
#if ($moddate.time < $date_limit)
#if ($purgeCount < $purgeLimit)
#set($attachments = $attachmentManager.getLatestVersionsOfAttachments($item))
#set($attNameMap = {})
#set($dupes = "false")
#foreach($attachment in $attachments)
#set($attId = $attachment.getIdAsString())
#set($fname = $attachment.getDisplayTitle())
<div style="margin-left:20px"><span class="icon icon-file-unknown" title="File">File</span><i> $attId: $fname </i>
#if ($attNameMap.get($fname))
#set($dupes = "true")
<b style="color:red">DUPLICATE ATTACHMENT DETECTED</b>
#end
</div>
#set($void = $attNameMap.put($fname,"true"))
#end
#if ($dupes == "true")
<b style="color:red">CAN NOT PURGE ITEM - REMOVE DUPLICATE ATTACHMENTS</b>
#else
#if ($paramsimulate != "true")
#set($bool = $trashManager.purge($spaceKey, $Long.parseLong($contentId)))
#end
#if ($bool == "true" || $paramsimulate == "true")
#set($purgeCount = $purgeCount+1)
<b style="color:green">PURGED OK</b>
#if ($purgeCount >= $purgeLimit)
<b>-</b> <b style="color:blue">PURGE LIMIT REACHED</b>
#end
#end
#end
#end
#else
<b style="color:blue">TOO RECENT</b>
#end
</li>
#end
</ul>
#set($spaceCount = $spaceCount+1)
<hr/>
#end
#end
<b>Emptied $purgeCount trash items from $spaceCount spaces.</b><br/>
#else
<b>Purge Trash may only be performed by a Confluence Administrator.</b>
#end