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.module.DefaultModuleVersionHandler;
38 import info.magnolia.module.InstallContext;
39 import info.magnolia.module.delta.AddPermissionTask;
40 import info.magnolia.module.delta.AddRoleToUserTask;
41 import info.magnolia.module.delta.ArrayDelegateTask;
42 import info.magnolia.module.delta.BootstrapSingleModuleResource;
43 import info.magnolia.module.delta.DeltaBuilder;
44 import info.magnolia.module.delta.MoveNodeTask;
45 import info.magnolia.module.delta.NodeExistsDelegateTask;
46 import info.magnolia.module.delta.PropertyExistsDelegateTask;
47 import info.magnolia.module.delta.RemoveNodeWoChildren;
48 import info.magnolia.module.delta.RemoveNodesTask;
49 import info.magnolia.module.delta.RemovePermissionTask;
50 import info.magnolia.module.delta.RemovePropertyTask;
51 import info.magnolia.module.delta.SetPropertyTask;
52 import info.magnolia.module.delta.Task;
53 import info.magnolia.module.delta.WarnTask;
54 import info.magnolia.module.forum.DefaultForumManager;
55 import info.magnolia.repository.RepositoryConstants;
56 import info.magnolia.ui.admincentral.setup.AppLauncherReorderingTask;
57 import info.magnolia.ui.admincentral.setup.AppLauncherReorderingTask.Order;
58 import info.magnolia.ui.contentapp.setup.for5_3.ContentAppMigrationTask;
59 import info.magnolia.ui.dialog.setup.migration.ControlMigratorsRegistry;
60 import info.magnolia.ui.framework.setup.SetWritePermissionForActionsTask;
61
62 import java.util.ArrayList;
63 import java.util.Arrays;
64 import java.util.List;
65
66 import javax.inject.Inject;
67 import javax.jcr.ImportUUIDBehavior;
68
69
70
71
72 public class ForumModuleVersionHandler extends DefaultModuleVersionHandler {
73
74 protected static final String FORUM_APP_ACTIONS = "/modules/forum/apps/forum/subApps/browser/actions/";
75 private final AddRoleToUserTask grantAllToSuperuser = new AddRoleToUserTask("Grant all forum permissions to superuser", "superuser", DefaultForumManager.ROLE_FORUM_ALL_ADMIN);
76
77 private final Task removeObsoleteConfiguration = new ArrayDelegateTask("Removing custom-security-config from 4.5 which is no more working/supported by M5",
78 new RemoveNodesTask("Remove obsolete configuration", RepositoryConstants.CONFIG, Arrays.asList(
79 "/modules/forum/trees/forum",
80 "/modules/adminInterface/config/securityConfiguration/repositories/forum"
81 ), false),
82 new NodeExistsDelegateTask("Remove deprecated tree if exists", "/modules/forum/trees",
83 new RemoveNodeWoChildren("Remove deprecated tree", "/modules/forum/trees"))
84 );
85
86 private final Task fixObsoletePermissions = new ArrayDelegateTask("Fix obsolete permissions which are not supported",
87 new RemovePermissionTask("", DefaultForumManager.ROLE_FORUM_ALL_USER, DefaultForumManager.FORUM_WORKSPACE, "/*", Permission.WRITE),
88 new RemovePermissionTask("", DefaultForumManager.ROLE_FORUM_ALL_ADMIN, DefaultForumManager.FORUM_WORKSPACE, "/*", 111L),
89 new RemovePermissionTask("", DefaultForumManager.ROLE_FORUM_ALL_MODERATOR, DefaultForumManager.FORUM_WORKSPACE, "/*", 79L),
90
91 new AddPermissionTask("", DefaultForumManager.ROLE_FORUM_ALL_USER, DefaultForumManager.FORUM_WORKSPACE, "/*", Permission.ALL, false),
92 new AddPermissionTask("", DefaultForumManager.ROLE_FORUM_ALL_ADMIN, DefaultForumManager.FORUM_WORKSPACE, "/*", Permission.ALL, false),
93 new AddPermissionTask("", DefaultForumManager.ROLE_FORUM_ALL_MODERATOR, DefaultForumManager.FORUM_WORKSPACE, "/*", Permission.ALL, false)
94 );
95
96 @Inject
97 public ForumModuleVersionHandler(ControlMigratorsRegistry controlMigratorsRegistry) {
98
99 ForumDialogMigrationTask dialogMigrationTask = new ForumDialogMigrationTask("forum");
100 controlMigratorsRegistry.register("checkboxSwitch", dialogMigrationTask.new ForumCheckBoxSwitchControlMigrator());
101 controlMigratorsRegistry.register("info.magnolia.module.forum.admin.dialog.NodeNameControl", dialogMigrationTask.new RemoveControlMigrator());
102 controlMigratorsRegistry.register("info.magnolia.module.forum.admin.dialog.ReferenceControl", dialogMigrationTask.new ForumEditControlMigrator());
103 controlMigratorsRegistry.register("uuidLink", dialogMigrationTask.new ForumLinkControlMigrator());
104
105 register(DeltaBuilder.checkPrecondition("1.3", "3.0"));
106
107 register(DeltaBuilder.update("3.0.1", "")
108 .addTask(new PropertyExistsDelegateTask("Rename property", "", RepositoryConstants.CONFIG, "/modules/forum/dialogs/forumEdit/tabForum/allowsNestingMessages", "checked",
109 new ArrayDelegateTask("",
110 new RemovePropertyTask("", "", RepositoryConstants.CONFIG, "/modules/forum/dialogs/forumEdit/tabForum/allowsNestingMessages", "checked"),
111 new SetPropertyTask("", RepositoryConstants.CONFIG, "/modules/forum/dialogs/forumEdit/tabForum/allowsNestingMessages", "selected", Boolean.FALSE)
112 )
113 )));
114
115 register(DeltaBuilder.update("3.3", "")
116 .addTask(new WarnTask(String.format("Roles '%s' and '%s' aren't used anymore.", DefaultForumManager.ROLE_FORUM_BASE, DefaultForumManager.ROLE_FORUM_MODERATOR_BASE),
117 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.",
118 DefaultForumManager.ROLE_FORUM_BASE, DefaultForumManager.ROLE_FORUM_MODERATOR_BASE)))
119
120
121 .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))
122
123
124
125 .addTask(moveExistingApps("/modules/forum/apps_old"))
126
127 .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))
128 .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))
129
130 .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))
131 .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))
132 .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))
133 .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))
134
135 .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))
136 .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))
137 .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))
138 .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))
139
140
141
142 .addTask(dialogMigrationTask)
143
144 .addTask(new BootstrapSingleModuleResource("Bootstrap dialog addForum.", "Bootstrap dialog addForum.", "dialogs/config.modules.forum.dialogs.forumAdd.xml", ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW))
145 .addTask(new BootstrapSingleModuleResource("Bootstrap dialog threadNewUIA.", "Bootstrapping dialog threadNewUIA.", "dialogs/config.modules.forum.dialogs.threadNewUIA.xml", ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW))
146
147
148 .addTask(new BootstrapSingleModuleResource("Bootstrap activation command.", "Bootstraping activation command.", "commands/forum/config.modules.forum.commands.forum.activate.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW))
149
150 .addTask(removeObsoleteConfiguration)
151 .addTask(fixObsoletePermissions));
152
153 register(DeltaBuilder.update("3.4", "")
154 .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))
155 .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))
156 .addTask(new ContentAppMigrationTask("/modules/forum"))
157 .addTask(new AppLauncherReorderingTask("forum", "edit", Order.AFTER, "assets"))
158 );
159 register(DeltaBuilder.update("3.4.1", "")
160 .addTask(new SetWritePermissionForActionsTask(FORUM_APP_ACTIONS, new String[] { "addForum", "deleteForum", "lockForum", "unlockForum", "createThread", "confirmDeleteForum", "confirmDeleteThread", "deleteThread", "editThread", "editForum",
161 "editMessage", "confirmDeleteMessage", "deleteMessage", "validateMessage", "invalidateMessage", "lockThread", "unlockThread", "activate", "deactivate" }))
162 .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)));
163
164 }
165
166 @Override
167 protected List<Task> getExtraInstallTasks(InstallContext installContext) {
168 final List<Task> tasks = new ArrayList<Task>();
169 tasks.add(grantAllToSuperuser);
170 tasks.add(new AppLauncherReorderingTask("forum", "edit", Order.AFTER, "assets"));
171 return tasks;
172 }
173
174
175
176
177 private Task moveExistingApps(String dest) {
178 String src = "/modules/forum/apps";
179 Task moveAppsTask = new MoveNodeTask("Move " + src + " to " + dest, "Moving " + src + " to " + dest, RepositoryConstants.CONFIG, src, dest, false);
180 Task checkNodeTask = new NodeExistsDelegateTask("Check if " + src + " exists.", "Check if " + src + " exists.", RepositoryConstants.CONFIG, "/modules/forum/apps", moveAppsTask);
181 return checkNodeTask;
182 }
183
184 }