Wiki source code of 2.2.1
Last modified by Wilton Risenhoover on 2020/01/11 23:49
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | This migration script will make visible all the forum entities (topics and answers) in order to make them visible to all the users (be able to search for a topic/answer). Also, the cryptic names (##Topic_1508480809329_23##) wich be replaced with the titles defined by the users. For more details, please see: https://jira.xwiki.org/browse/XAFORUM-144. | ||
2 | |||
3 | (F) - Forum | ||
4 | (T) - Topic | ||
5 | (A) - Answer | ||
6 | |||
7 | {{velocity}} | ||
8 | #set ($forumsQuery = "from doc.object(ForumCode.ForumClass) as forum where doc.fullName <> 'ForumCode.ForumTemplate'") | ||
9 | #set ($forums = $services.query.xwql($forumsQuery).execute()) | ||
10 | #set ($forumsToFix = []) | ||
11 | #foreach ($forum in $forums) | ||
12 | ## * $forum | ||
13 | #getTopics($forum) | ||
14 | #foreach ($topic in $topics) | ||
15 | #set ($topicDoc = $xwiki.getDocument($topic)) | ||
16 | #set ($topicName = $topicDoc.documentReference.lastSpaceReference.name) | ||
17 | ## The topic name should be like Topic_1508480809329_23 and have exactly 22 chars | ||
18 | #if ($topicDoc.isHidden() || $topicName.length() == 22) | ||
19 | #set ($discard = $forumsToFix.add($forum)) | ||
20 | #break | ||
21 | #end | ||
22 | #end | ||
23 | #end | ||
24 | #if ($request.confirm == 'true') | ||
25 | == Result == | ||
26 | #set ($logger = $services.logging.getLogger("com.xwiki.cloud.${doc.fullName}")) | ||
27 | #set ($discard = $logger.info('Migration 1 started...')) | ||
28 | #foreach ($forum in $forumsToFix) | ||
29 | #set ($forumDoc = $xwiki.getDocument($forum)) | ||
30 | 1. (F) [[$forumDoc.space>>$forumDoc.documentReference]] | ||
31 | #getTopics($forum) | ||
32 | #foreach($topic in $topics) | ||
33 | #set ($topicDoc = $xwiki.getDocument($topic)) | ||
34 | #set ($isTopicHidden = $topicDoc.isHidden()) | ||
35 | #set ($discard = $topicDoc.setHidden(false)) | ||
36 | #set ($discard = $topicDoc.save('Marked as visible.')) | ||
37 | ## Rename the topic | ||
38 | #set ($topicSource = $topicDoc.documentReference.lastSpaceReference) | ||
39 | #set ($topicName = $topicDoc.documentReference.lastSpaceReference.name) | ||
40 | #set ($newTopicSpaceReference = $services.model.createSpaceReference($topicDoc.title, $forumDoc.documentReference.parent)) | ||
41 | #set ($newTopicDocReference = $services.model.createDocumentReference('WebHome', $newTopicSpaceReference)) | ||
42 | #set ($newTopicDoc = $xwiki.getDocument($newTopicDocReference)) | ||
43 | #set ($discard = $services.refactoring.rename($topicSource, $topicDoc.title).join()) | ||
44 | 11. (T) [[$topicName>>$topicDoc.documentReference]] (is hidden: $isTopicHidden) -> [[$newTopicDoc.documentReference.lastSpaceReference.name>>$newTopicDoc.documentReference]] (is hidden: $topicDoc.isHidden()) | ||
45 | #getAnswers($newTopicDoc.fullName) | ||
46 | #foreach ($answer in $answers) | ||
47 | #set ($answerDoc = $xwiki.getDocument($answer)) | ||
48 | #set ($isAnswerHidden = $answerDoc.isHidden()) | ||
49 | #set ($answerObj = $answerDoc.getObject('ForumCode.AnswerClass')) | ||
50 | #set ($discard = $answerDoc.setHidden(false)) | ||
51 | #set ($discard = $answerDoc.save('Marked as visible.')) | ||
52 | ## Rename the answer | ||
53 | #set ($answerSource = $answerDoc.documentReference.lastSpaceReference) | ||
54 | #set ($title = $answerObj.getValue('description')) | ||
55 | ## Keep only 50 chars from the description to represent the answer's title | ||
56 | #if ($title.length() > 50) | ||
57 | #set ($title = "${title.substring(0,50)}...") | ||
58 | #end | ||
59 | #set ($newAnswerSpaceReference = $services.model.createSpaceReference($title, $topicDoc.documentReference.parent)) | ||
60 | #set ($newAnswerDocReference = $services.model.createDocumentReference('WebHome', $newAnswerSpaceReference)) | ||
61 | #set ($newAnswerDoc = $xwiki.getDocument($newAnswerDocReference)) | ||
62 | #set ($discard = $services.refactoring.rename($answerSource, $title).join()) | ||
63 | #set ($answerName = $answerDoc.documentReference.lastSpaceReference.name) | ||
64 | 111. (A) [[$answerName>>$answerDoc.documentReference]] (is hidden: $isAnswerHidden) - > [[$newAnswerDoc.documentReference.lastSpaceReference.name>>$newAnswerDoc.documentReference]] (is hidden: $answerDoc.isHidden()) | ||
65 | #end | ||
66 | #end | ||
67 | #end | ||
68 | #set ($discard = $logger.info('Migration complete.')) | ||
69 | #else | ||
70 | == Forums to migrate == | ||
71 | #foreach ($forum in $forumsToFix) | ||
72 | #set ($forumDoc = $xwiki.getDocument($forum)) | ||
73 | 1. (F) [[$forumDoc.space>>$forumDoc.documentReference]] | ||
74 | #getTopics($forum) | ||
75 | #foreach($topic in $topics) | ||
76 | #set ($topicDoc = $xwiki.getDocument($topic)) | ||
77 | #set ($topicName = $topicDoc.documentReference.lastSpaceReference.name) | ||
78 | 11. (T) [[$topicName>>$topicDoc.documentReference]] (is hidden: $topicDoc.isHidden()) | ||
79 | #getAnswers($topic) | ||
80 | #foreach ($answer in $answers) | ||
81 | #set ($answerDoc = $xwiki.getDocument($answer)) | ||
82 | #set ($answerName = $answerDoc.documentReference.lastSpaceReference.name) | ||
83 | 111. (A) [[$answerName>>$answerDoc.documentReference]] (is hidden: $answerDoc.isHidden()) | ||
84 | #end | ||
85 | #end | ||
86 | #end | ||
87 | #end | ||
88 | #macro(getTopics $forum) | ||
89 | #set ($forumDoc = $xwiki.getDocument($forum)) | ||
90 | #set ($topicsQuery = 'from doc.object(ForumCode.TopicClass) as topic where doc.space like :forumSpace') | ||
91 | #set ($topics = $services.query.xwql($topicsQuery).bindValue('forumSpace', "${forumDoc.space}.%").execute()) | ||
92 | #end | ||
93 | #macro(getAnswers $topic) | ||
94 | #set ($topicDoc = $xwiki.getDocument($topic)) | ||
95 | #set ($answersQuery = 'from doc.object(ForumCode.AnswerClass) as answer where doc.space like :topicSpace') | ||
96 | #set ($answers = $services.query.xwql($answersQuery).bindValue('topicSpace', "${topicDoc.space}.%").execute()) | ||
97 | #end | ||
98 | |||
99 | #if ("$!request.confirm" != 'true') | ||
100 | {{html}}<a href="$doc.getURL('view', 'confirm=true')" class='button'>Start</a>{{/html}} | ||
101 | #end | ||
102 | {{/velocity}} |