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 package info.magnolia.module.forum.setup;
35
36 import info.magnolia.cms.security.Permission;
37 import info.magnolia.i18nsystem.setup.RemoveHardcodedI18nPropertiesFromDialogsTask;
38 import info.magnolia.module.DefaultModuleVersionHandler;
39 import info.magnolia.module.InstallContext;
40 import info.magnolia.module.delta.AbstractCondition;
41 import info.magnolia.module.delta.AddPermissionTask;
42 import info.magnolia.module.delta.AddRoleToUserTask;
43 import info.magnolia.module.delta.ArrayDelegateTask;
44 import info.magnolia.module.delta.BootstrapSingleModuleResource;
45 import info.magnolia.module.delta.CheckAndModifyPropertyValueTask;
46 import info.magnolia.module.delta.Condition;
47 import info.magnolia.module.delta.DeltaBuilder;
48 import info.magnolia.module.delta.IsModuleInstalledOrRegistered;
49 import info.magnolia.module.delta.ModuleDependencyBootstrapTask;
50 import info.magnolia.module.delta.MoveNodeTask;
51 import info.magnolia.module.delta.NodeExistsDelegateTask;
52 import info.magnolia.module.delta.OrderNodeToFirstPositionTask;
53 import info.magnolia.module.delta.PartialBootstrapTask;
54 import info.magnolia.module.delta.PropertyExistsDelegateTask;
55 import info.magnolia.module.delta.RemoveNodeWoChildren;
56 import info.magnolia.module.delta.RemoveNodesTask;
57 import info.magnolia.module.delta.RemovePermissionTask;
58 import info.magnolia.module.delta.RemovePropertiesTask;
59 import info.magnolia.module.delta.RemovePropertyTask;
60 import info.magnolia.module.delta.SetPropertyTask;
61 import info.magnolia.module.delta.Task;
62 import info.magnolia.module.delta.WarnTask;
63 import info.magnolia.module.forum.DefaultForumManager;
64 import info.magnolia.repository.RepositoryConstants;
65 import info.magnolia.ui.admincentral.setup.AppLauncherReorderingTask;
66 import info.magnolia.ui.admincentral.setup.AppLauncherReorderingTask.Order;
67 import info.magnolia.ui.contentapp.setup.for5_3.ContentAppMigrationTask;
68 import info.magnolia.ui.dialog.setup.migration.ControlMigratorsRegistry;
69 import info.magnolia.ui.framework.setup.AddIsPublishedRuleToAllDeactivateActionsTask;
70 import info.magnolia.ui.framework.setup.SetWritePermissionForActionsTask;
71
72 import java.util.ArrayList;
73 import java.util.Arrays;
74 import java.util.List;
75
76 import javax.inject.Inject;
77 import javax.jcr.ImportUUIDBehavior;
78
79
80
81
82 public class ForumModuleVersionHandler extends DefaultModuleVersionHandler {
83
84 protected static final String FORUM_APP_ACTIONS = "/modules/forum/apps/forum/subApps/browser/actions/";
85 private final AddRoleToUserTask grantAllToSuperuser = new AddRoleToUserTask("Grant all forum permissions to superuser", "superuser", DefaultForumManager.ROLE_FORUM_ALL_ADMIN);
86
87 private final Task removeObsoleteConfiguration = new ArrayDelegateTask("Removing custom-security-config from 4.5 which is no more working/supported by M5",
88 new RemoveNodesTask("Remove obsolete configuration", RepositoryConstants.CONFIG, Arrays.asList(
89 "/modules/forum/trees/forum",
90 "/modules/adminInterface/config/securityConfiguration/repositories/forum"
91 ), false),
92 new NodeExistsDelegateTask("Remove deprecated tree if exists", "/modules/forum/trees",
93 new RemoveNodeWoChildren("Remove deprecated tree", "/modules/forum/trees"))
94 );
95
96 private final Task fixObsoletePermissions = new ArrayDelegateTask("Fix obsolete permissions which are not supported",
97 new RemovePermissionTask("", DefaultForumManager.ROLE_FORUM_ALL_USER, DefaultForumManager.FORUM_WORKSPACE, "/*", Permission.WRITE),
98 new RemovePermissionTask("", DefaultForumManager.ROLE_FORUM_ALL_ADMIN, DefaultForumManager.FORUM_WORKSPACE, "/*", 111L),
99 new RemovePermissionTask("", DefaultForumManager.ROLE_FORUM_ALL_MODERATOR, DefaultForumManager.FORUM_WORKSPACE, "/*", 79L),
100
101 new AddPermissionTask("", DefaultForumManager.ROLE_FORUM_ALL_USER, DefaultForumManager.FORUM_WORKSPACE, "/*", Permission.ALL, false),
102 new AddPermissionTask("", DefaultForumManager.ROLE_FORUM_ALL_ADMIN, DefaultForumManager.FORUM_WORKSPACE, "/*", Permission.ALL, false),
103 new AddPermissionTask("", DefaultForumManager.ROLE_FORUM_ALL_MODERATOR, DefaultForumManager.FORUM_WORKSPACE, "/*", Permission.ALL, false)
104 );
105
106 @Inject
107 public ForumModuleVersionHandler(ControlMigratorsRegistry controlMigratorsRegistry) {
108
109 ForumDialogMigrationTask dialogMigrationTask = new ForumDialogMigrationTask("forum");
110 controlMigratorsRegistry.register("checkboxSwitch", dialogMigrationTask.new ForumCheckBoxSwitchControlMigrator());
111 controlMigratorsRegistry.register("info.magnolia.module.forum.admin.dialog.NodeNameControl", dialogMigrationTask.new RemoveControlMigrator());
112 controlMigratorsRegistry.register("info.magnolia.module.forum.admin.dialog.ReferenceControl", dialogMigrationTask.new ForumEditControlMigrator());
113 controlMigratorsRegistry.register("uuidLink", dialogMigrationTask.new ForumLinkControlMigrator());
114
115 register(DeltaBuilder.checkPrecondition("1.3", "3.0"));
116
117 register(DeltaBuilder.update("3.0.1", "")
118 .addTask(new PropertyExistsDelegateTask("Rename property", "", RepositoryConstants.CONFIG, "/modules/forum/dialogs/forumEdit/tabForum/allowsNestingMessages", "checked",
119 new ArrayDelegateTask("",
120 new RemovePropertyTask("", "", RepositoryConstants.CONFIG, "/modules/forum/dialogs/forumEdit/tabForum/allowsNestingMessages", "checked"),
121 new SetPropertyTask("", RepositoryConstants.CONFIG, "/modules/forum/dialogs/forumEdit/tabForum/allowsNestingMessages", "selected", Boolean.FALSE)
122 )
123 )));
124
125 register(DeltaBuilder.update("3.3", "")
126 .addTask(new WarnTask(String.format("Roles '%s' and '%s' aren't used anymore.", DefaultForumManager.ROLE_FORUM_BASE, DefaultForumManager.ROLE_FORUM_MODERATOR_BASE),
127 String.format("The roles '%s and '%s' aren't used anymore in the forum module. Check your users and groups; you may want to remove theses roles from users and groups and delete them.",
128 DefaultForumManager.ROLE_FORUM_BASE, DefaultForumManager.ROLE_FORUM_MODERATOR_BASE)))
129
130
131 .addTask(new BootstrapSingleModuleResource("Bootstrap appLaucnher-layout conf.", "Bootstraping the applauncher-layout config.", "config.modules.ui-admincentral.config.appLauncherLayout.groups.edit.apps.forum.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW))
132
133
134
135 .addTask(moveExistingApps("/modules/forum/apps_old"))
136
137 .addTask(new BootstrapSingleModuleResource("Bootstrap apps into forum.", "Bootstrapping the apps into the forum conf.", "apps/config.modules.forum.apps.forum.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW))
138 .addTask(new BootstrapSingleModuleResource("Bootstrap subApp-folder.", "Bootstrapping subApp-folder into forum conf.", "apps/config.modules.forum.apps.forum.subApps.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW))
139
140 .addTask(new BootstrapSingleModuleResource("Bootstrap subApp browser (rootNode).", "Bootstrapping browser-subApp-rootNode into forum conf.", "apps/config.modules.forum.apps.forum.subApps.browser.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW))
141 .addTask(new BootstrapSingleModuleResource("Bootstrap actionbar for browser-subApp.", "Bootstrapping actionbar for browser-subApp.", "apps/config.modules.forum.apps.forum.subApps.browser.actionbar.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW))
142 .addTask(new BootstrapSingleModuleResource("Bootstrap actions for browser-subApp.", "Bootstrapping action for browser-subApp.", "apps/config.modules.forum.apps.forum.subApps.browser.actions.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW))
143 .addTask(new BootstrapSingleModuleResource("Bootstrap workbench for browser-subApp.", "Bootstrapping workbench for browser-subApp.", "apps/config.modules.forum.apps.forum.subApps.browser.workbench.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW))
144
145 .addTask(new BootstrapSingleModuleResource("Bootstrap subApp moderation (rootNode).", "Bootstrapping moderation-subApprootNode into forum conf.", "apps/config.modules.forum.apps.forum.subApps.moderation.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW))
146 .addTask(new BootstrapSingleModuleResource("Bootstrap actionbar for moderation-subApp.", "Bootstrapping actionbar for moderation-subApp.", "apps/config.modules.forum.apps.forum.subApps.moderation.actionbar.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW))
147 .addTask(new BootstrapSingleModuleResource("Bootstrap actions for moderation-subApp.", "Bootstrapping action for moderation-subApp.", "apps/config.modules.forum.apps.forum.subApps.moderation.actions.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW))
148 .addTask(new BootstrapSingleModuleResource("Bootstrap workbench for moderation-subApp.", "Bootstrapping workbench for moderation-subApp.", "apps/config.modules.forum.apps.forum.subApps.moderation.workbench.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW))
149
150
151
152 .addTask(dialogMigrationTask)
153
154 .addTask(new BootstrapSingleModuleResource("Bootstrap dialog addForum.", "Bootstrap dialog addForum.", "dialogs/config.modules.forum.dialogs.forumAdd.xml", ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW))
155 .addTask(new BootstrapSingleModuleResource("Bootstrap dialog threadNewUIA.", "Bootstrapping dialog threadNewUIA.", "dialogs/config.modules.forum.dialogs.threadNewUIA.xml", ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW))
156
157
158 .addTask(new ModuleDependencyBootstrapTask("activation"))
159
160 .addTask(removeObsoleteConfiguration)
161 .addTask(fixObsoletePermissions));
162
163 register(DeltaBuilder.update("3.4", "")
164 .addTask(new BootstrapSingleModuleResource("Bootstrap browser sub-app content connector.", "Bootstrapping browser sub-app content connector into forum conf.", "apps/config.modules.forum.apps.forum.subApps.browser.contentConnector.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW))
165 .addTask(new BootstrapSingleModuleResource("Bootstrap moderation sub-app content connector.", "Bootstrapping moderation sub-app content connector into forum conf.", "apps/config.modules.forum.apps.forum.subApps.moderation.contentConnector.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW))
166 .addTask(new ContentAppMigrationTask("/modules/forum"))
167 .addTask(new AppLauncherReorderingTask("forum", "edit", Order.AFTER, "assets")));
168 register(DeltaBuilder.update("3.4.1", "")
169 .addTask(new SetWritePermissionForActionsTask(FORUM_APP_ACTIONS, new String[] { "addForum", "deleteForum", "lockForum", "unlockForum", "createThread", "confirmDeleteForum", "confirmDeleteThread", "deleteThread", "editThread", "editForum",
170 "editMessage", "confirmDeleteMessage", "deleteMessage", "validateMessage", "invalidateMessage", "lockThread", "unlockThread", "activate", "deactivate" }))
171 .addTask(new BootstrapSingleModuleResource("Bootstrap actions for moderation-subApp.", "Bootstrapping action for moderation-subApp.", "apps/config.modules.forum.apps.forum.subApps.moderation.actions.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW)));
172
173 register(DeltaBuilder.update("3.4.2", "")
174 .addTask(new RemoveNodesTask("Remove old forum roles when migration from 4.5 to 5.3", "Remove old forum roles when migration from 4.5 to 5.3", RepositoryConstants.USER_ROLES, Arrays.asList(
175 "/forum-base",
176 "/forum-moderator-base",
177 "/forum-pagecomments-admin",
178 "/forum-pagecomments-moderator"), true)));
179
180 register(DeltaBuilder.update("3.4.4", "")
181 .addTask(new NodeExistsDelegateTask("Add missing 'required' property", "Sets 'required' property of 'messageEdit/form/tabs/tabMain/fields/author' to 'true'", RepositoryConstants.CONFIG, "/modules/forum/dialogs/messageEdit/form/tabs/tabMain/fields/author",
182 new SetPropertyTask("", RepositoryConstants.CONFIG, "/modules/forum/dialogs/messageEdit/form/tabs/tabMain/fields/author", "required", "true")))
183 .addTask(new NodeExistsDelegateTask("Add missing 'required' property", "Sets 'required' property of 'messageEdit/form/tabs/tabMain/fields/content' to 'true'", RepositoryConstants.CONFIG, "/modules/forum/dialogs/messageEdit/form/tabs/tabMain/fields/content",
184 new SetPropertyTask("", RepositoryConstants.CONFIG, "/modules/forum/dialogs/messageEdit/form/tabs/tabMain/fields/content", "required", "true")))
185 .addTask(new NodeExistsDelegateTask("Add missing 'required' property", "Sets 'required' property of 'messageEdit/form/tabs/tabMetadata/fields/creationDate' to 'true'", RepositoryConstants.CONFIG, "/modules/forum/dialogs/messageEdit/form/tabs/tabMetadata/fields/creationDate",
186 new SetPropertyTask("", RepositoryConstants.CONFIG, "/modules/forum/dialogs/messageEdit/form/tabs/tabMetadata/fields/creationDate", "required", "true")))
187 .addTask(new RemoveHardcodedI18nPropertiesFromDialogsTask("forum"))
188 .addTask(new NodeExistsDelegateTask("Change Creation Date column to use 'creationDate' rather than 'created' JCR property", "Change Creation Date column of forum app to use 'creationDate' rather than 'created' JCR property", RepositoryConstants.CONFIG, "/modules/forum/apps/forum/subApps/browser/workbench/contentViews/list/columns/creation",
189 new SetPropertyTask("", RepositoryConstants.CONFIG, "/modules/forum/apps/forum/subApps/browser/workbench/contentViews/list/columns/creation", "propertyName", "creationDate")))
190 .addTask(new NodeExistsDelegateTask("Change Creation Date column to use 'creationDate' rather than 'created' JCR property", "Change Creation Date column of forum app to use 'creationDate' rather than 'created' JCR property", RepositoryConstants.CONFIG, "/modules/forum/apps/forum/subApps/moderation/workbench/contentViews/list/columns/creation",
191 new SetPropertyTask("", RepositoryConstants.CONFIG, "/modules/forum/apps/forum/subApps/moderation/workbench/contentViews/list/columns/creation", "propertyName", "creationDate")))
192 .addTask(new NodeExistsDelegateTask("Make Creation Date property read only", "Make Creation Date property read only in forum app dialog", RepositoryConstants.CONFIG, "/modules/forum/dialogs/messageEdit/form/tabs/tabMetadata/fields/creationDate",
193 new SetPropertyTask("", RepositoryConstants.CONFIG, "/modules/forum/dialogs/messageEdit/form/tabs/tabMetadata/fields/creationDate", "readOnly", "true")))
194 .addTask(new NodeExistsDelegateTask("Make Author property read only", "Make Author property read only in forum app dialog", RepositoryConstants.CONFIG, "/modules/forum/dialogs/messageEdit/form/tabs/tabMain/fields/author",
195 new SetPropertyTask("", RepositoryConstants.CONFIG, "/modules/forum/dialogs/messageEdit/form/tabs/tabMain/fields/author", "readOnly", "true")))
196 .addTask(new NodeExistsDelegateTask("Make InReplyTo property read only", "Make InReplyTo property read only in forum app dialog", RepositoryConstants.CONFIG, "/modules/forum/dialogs/messageEdit/form/tabs/tabMain/fields/inReplyTo",
197 new SetPropertyTask("", RepositoryConstants.CONFIG, "/modules/forum/dialogs/messageEdit/form/tabs/tabMain/fields/inReplyTo", "readOnly", "true")))
198 .addTask(new PartialBootstrapTask("Bootstrap 'addMessage' action for browser subApp", "", "/mgnl-bootstrap/forum/apps/config.modules.forum.apps.forum.subApps.browser.actions.xml", "actions/addMessage"))
199 .addTask(new PartialBootstrapTask("Bootstrap 'addMessage' configuration for editActions group of thread in browser subApp", "", "/mgnl-bootstrap/forum/apps/config.modules.forum.apps.forum.subApps.browser.actionbar.xml", "actionbar/sections/thread/groups/editActions/items/addMessage"))
200 .addTask(new PartialBootstrapTask("Bootstrap 'addMessage' configuration for editActions group of message in browser subApp", "", "/mgnl-bootstrap/forum/apps/config.modules.forum.apps.forum.subApps.browser.actionbar.xml", "actionbar/sections/message/groups/editActions/items/addMessage"))
201 .addTask(new PartialBootstrapTask("Bootstrap 'addMessage' action for moderation subApp", "", "/mgnl-bootstrap/forum/apps/config.modules.forum.apps.forum.subApps.moderation.actions.xml", "actions/addMessage"))
202 .addTask(new PartialBootstrapTask("Bootstrap 'addMessage' configuration for editActions group of message in moderation subApp", "", "/mgnl-bootstrap/forum/apps/config.modules.forum.apps.forum.subApps.moderation.actionbar.xml", "actionbar/sections/message/groups/editActions/items/addMessage"))
203 .addTask(new BootstrapSingleModuleResource("Bootstrap 'messageAdd' dialog configuration", "", "dialogs/config.modules.forum.dialogs.messageAdd.xml"))
204 .addTask(new NodeExistsDelegateTask("Order 'addMessage' action to the first position for browser subApp", "", RepositoryConstants.CONFIG, "/modules/forum/apps/forum/subApps/browser/actions/addMessage",
205 new OrderNodeToFirstPositionTask("", "modules/forum/apps/forum/subApps/browser/actions/addMessage")))
206 .addTask(new NodeExistsDelegateTask("Order 'addMessage' action to the first position for editActions group of thread in browser subApp", "", RepositoryConstants.CONFIG, "/modules/forum/apps/forum/subApps/browser/actionbar/sections/thread/groups/editActions/items/addMessage",
207 new OrderNodeToFirstPositionTask("", "modules/forum/apps/forum/subApps/browser/actionbar/sections/thread/groups/editActions/items/addMessage")))
208 .addTask(new NodeExistsDelegateTask("Order 'addMessage' action to the first position for editActions group of message in browser subApp", "", RepositoryConstants.CONFIG, "/modules/forum/apps/forum/subApps/browser/actionbar/sections/message/groups/editActions/items/addMessage",
209 new OrderNodeToFirstPositionTask("", "modules/forum/apps/forum/subApps/browser/actionbar/sections/message/groups/editActions/items/addMessage")))
210 .addTask(new NodeExistsDelegateTask("Order 'addMessage' action to the first position for moderation subApp", "", RepositoryConstants.CONFIG, "/modules/forum/apps/forum/subApps/moderation/actions/addMessage",
211 new OrderNodeToFirstPositionTask("", "modules/forum/apps/forum/subApps/moderation/actions/addMessage")))
212 .addTask(new NodeExistsDelegateTask("Order 'addMessage' action to the first position for editActions group of message in moderation subApp", "", RepositoryConstants.CONFIG, "/modules/forum/apps/forum/subApps/moderation/actionbar/sections/message/groups/editActions/items/addMessage",
213 new OrderNodeToFirstPositionTask("", "modules/forum/apps/forum/subApps/moderation/actionbar/sections/message/groups/editActions/items/addMessage")))
214 .addTask(new NodeExistsDelegateTask("Order 'messageAdd' dialog to the first position", "", RepositoryConstants.CONFIG, "/modules/forum/dialogs/messageAdd",
215 new OrderNodeToFirstPositionTask("", "modules/forum/dialogs/messageAdd")))
216 .addTask(new RemoveNodesTask("Remove obsolete configuration", RepositoryConstants.CONFIG, Arrays.asList("/modules/forum/pages/forumModeration"), false)));
217
218 register(DeltaBuilder.update("3.4.5", "")
219 .addTask(new AddIsPublishedRuleToAllDeactivateActionsTask("", "/modules/forum/apps/")));
220
221 register(DeltaBuilder.update("3.6", "")
222 .addTask(new RemoveNodesTask("Remove adminInterface-legacy unused ACLs", RepositoryConstants.USER_ROLES,
223 Arrays.asList(
224 "/forum_ALL-admin/acl_uri/0",
225 "/forum_ALL-user/acl_uri/0",
226 "/forum_ALL-moderator/acl_uri/0"), true)));
227
228 register(DeltaBuilder.update("3.6.1", "")
229 .addTask(new RemovePropertiesTask("Remove properties that are not used anymore", RepositoryConstants.CONFIG, Arrays.asList(
230 "/modules/forum/templates/components/threadView/allowedParameters",
231 "/modules/forum/templates/components/threadReply/allowedParameters",
232 "/modules/forum/templates/components/threadList/allowedParameters",
233 "/modules/forum/templates/components/threadNew/allowedParameters",
234 "/modules/forum/dialogs/messageEdit/form/tabs/tabMain/fields/author/tree",
235 "/modules/forum/dialogs/messageEdit/form/tabs/tabMain/fields/inReplyTo/editable",
236 "/modules/forum/dialogs/messageEdit/form/tabs/tabMain/fields/inReplyTo/tree",
237 "/modules/forum/dialogs/forumAdd/form/tabs/tabMain/fields/allowsNestingMessages/selected",
238 "/modules/forum/dialogs/forumEdit/form/tabs/tabMain/fields/allowsNestingMessages/selected",
239 "/modules/forum/apps/forum/subApps/browser/actions/editForum/nodeType",
240 "/modules/forum/apps/forum/subApps/browser/actions/editForum/appName",
241 "/modules/forum/apps/forum/chooseDialog/field/path",
242 "/modules/forum/apps/forum/subApps/browser/actions/editMessage/nodeType",
243 "/modules/forum/apps/forum/subApps/browser/actions/editMessage/appName",
244 "/modules/forum/apps/forum/subApps/browser/actions/editMessage/subAppId",
245 "/modules/forum/apps/forum/subApps/browser/actions/editThread/nodeType",
246 "/modules/forum/apps/forum/subApps/browser/actions/editThread/appName"
247 ), false))
248 );
249
250 register(DeltaBuilder.update("3.7", "")
251 .addTask(new IsModuleInstalledOrRegistered("Use PublicationCommand when publishing-core installed.", "publishing-core",
252 new NodeExistsDelegateTask("Use PublicationCommand instead of ActivationCommand when publishing-core is installed.", "/modules/forum/commands/forum/activate",
253 new CheckAndModifyPropertyValueTask("/modules/forum/commands/forum/activate", "class", "info.magnolia.module.activation.commands.ActivationCommand", "info.magnolia.publishing.command.PublicationCommand"))))
254 );
255 }
256
257 @Override
258 protected List<Task> getExtraInstallTasks(InstallContext installContext) {
259 final List<Task> tasks = new ArrayList<Task>();
260 tasks.add(grantAllToSuperuser);
261 tasks.add(new AppLauncherReorderingTask("forum", "edit", Order.AFTER, "assets"));
262 tasks.add(new NodeExistsDelegateTask("Order 'messageAdd' dialog to the first position", "", RepositoryConstants.CONFIG, "/modules/forum/dialogs/messageAdd", new OrderNodeToFirstPositionTask("", "modules/forum/dialogs/messageAdd")));
263 tasks.add(new ModuleDependencyBootstrapTask("publishing-core"));
264 tasks.add(new ModuleDependencyBootstrapTask("activation"));
265 return tasks;
266 }
267
268
269
270
271 private Task moveExistingApps(String dest) {
272 String src = "/modules/forum/apps";
273 Task moveAppsTask = new MoveNodeTask("Move " + src + " to " + dest, "Moving " + src + " to " + dest, RepositoryConstants.CONFIG, src, dest, false);
274 Task checkNodeTask = new NodeExistsDelegateTask("Check if " + src + " exists.", "Check if " + src + " exists.", RepositoryConstants.CONFIG, "/modules/forum/apps", moveAppsTask);
275 return checkNodeTask;
276 }
277
278 @Override
279 protected List<Condition> getInstallConditions() {
280 List<Condition> conditions = new ArrayList<>();
281 conditions.add(new PublishingOrActivationInstalledCondition());
282 return conditions;
283 }
284
285 private class PublishingOrActivationInstalledCondition extends AbstractCondition {
286
287 public PublishingOrActivationInstalledCondition() {
288 super("Publishing or Activation module is installed condition.", "Forum module requires Publishing(recommended) or Activation module installed.");
289 }
290
291 @Override
292 public boolean check(InstallContext installContext) {
293 return installContext.isModuleRegistered("publishing-core") || installContext.isModuleRegistered("activation");
294 }
295 }
296
297 }