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.templatingkit.setup;
35
36 import info.magnolia.cms.core.Content;
37 import info.magnolia.cms.util.ContentUtil;
38 import info.magnolia.jcr.util.NodeTypes;
39 import info.magnolia.module.DefaultModuleVersionHandler;
40 import info.magnolia.module.InstallContext;
41 import info.magnolia.module.delta.AbstractRepositoryTask;
42 import info.magnolia.module.delta.ArrayDelegateTask;
43 import info.magnolia.module.delta.BootstrapSingleResource;
44 import info.magnolia.module.delta.CheckAndModifyPropertyValueTask;
45 import info.magnolia.module.delta.CheckOrCreatePropertyTask;
46 import info.magnolia.module.delta.CopyNodeTask;
47 import info.magnolia.module.delta.CreateNodePathTask;
48 import info.magnolia.module.delta.CreateNodeTask;
49 import info.magnolia.module.delta.DeltaBuilder;
50 import info.magnolia.module.delta.IsModuleInstalledOrRegistered;
51 import info.magnolia.module.delta.ModuleDependencyBootstrapTask;
52 import info.magnolia.module.delta.NodeExistsDelegateTask;
53 import info.magnolia.module.delta.OrderNodeAfterTask;
54 import info.magnolia.module.delta.PartialBootstrapTask;
55 import info.magnolia.module.delta.PropertyExistsDelegateTask;
56 import info.magnolia.module.delta.RemovePropertiesTask;
57 import info.magnolia.module.delta.RemovePropertyTask;
58 import info.magnolia.module.delta.SetPropertyTask;
59 import info.magnolia.module.delta.Task;
60 import info.magnolia.module.delta.TaskExecutionException;
61 import info.magnolia.module.delta.WarnTask;
62 import info.magnolia.module.model.Version;
63 import info.magnolia.module.site.setup.DefaultSiteExistsDelegateTask;
64 import info.magnolia.module.templatingkit.setup.for2_7.ReorderSTKAppsTask;
65 import info.magnolia.repository.RepositoryConstants;
66
67 import java.util.ArrayList;
68 import java.util.Arrays;
69 import java.util.List;
70
71 import javax.jcr.ImportUUIDBehavior;
72 import javax.jcr.Node;
73 import javax.jcr.RepositoryException;
74
75
76
77
78 public class STKModuleVersionHandler extends DefaultModuleVersionHandler {
79
80 private final Task setStkSiteAsActiveInSiteModule = new NodeExistsDelegateTask("Set STK site as an active site if possible", "/modules/standard-templating-kit/config/site",
81 new ArrayDelegateTask("",
82 new NodeExistsDelegateTask("Check if any site already exists", "/modules/site/config/site",
83 new PropertyExistsDelegateTask("Check extends property and update or create it", "/modules/site/config/site", "extends",
84 new CheckAndModifyPropertyValueTask("/modules/site/config/site", "extends", "/modules/travel-demo/config/travel", "/modules/standard-templating-kit/config/site"),
85 new DefaultSiteExistsDelegateTask("", "",
86 new SetPropertyTask(RepositoryConstants.CONFIG, "/modules/site/config/site", "extends", "/modules/standard-templating-kit/config/site"))),
87 new ArrayDelegateTask("",
88 new CreateNodeTask("Create site node", "/modules/site/config", "site", NodeTypes.ContentNode.NAME),
89 new SetPropertyTask(RepositoryConstants.CONFIG, "/modules/site/config/site", "extends", "/modules/standard-templating-kit/config/site"))),
90 new CheckOrCreatePropertyTask("Set correct site class for stk site", "/modules/standard-templating-kit/config/site", "class", "info.magnolia.module.templatingkit.sites.Site"),
91 new CheckOrCreatePropertyTask("Set correct class for stk prototype", "/modules/standard-templating-kit/config/site/templates/prototype", "class", "info.magnolia.module.templatingkit.templates.pages.STKPage")));
92
93 public STKModuleVersionHandler() {
94
95 register(DeltaBuilder.checkPrecondition("3.0", "3.1"));
96
97 register(DeltaBuilder.update("3.0.1", "")
98 .addTask(new NodeExistsDelegateTask("Update 'tabLogin' in dialog 'stkPURLoginForm'", "/modules/standard-templating-kit/dialogs/components/pur/stkPURLoginForm",
99 new BootstrapSingleResource("", "", "/mgnl-bootstrap/standard-templating-kit/dialogs/components/pur/config.modules.standard-templating-kit.dialogs.components.pur.stkPURLoginForm.xml", ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING)))
100
101 .addTask(new PropertyExistsDelegateTask("Update template 'stkPURAuthSubmit'", "/modules/standard-templating-kit/templates/components/pur/stkPURAuthSubmit", "modelClass",
102 new RemovePropertyTask("", "/modules/standard-templating-kit/templates/components/pur/stkPURAuthSubmit", "modelClass")))
103 .addTask(new PropertyExistsDelegateTask("Update template 'stkPURNotAuthSubmit'", "/modules/standard-templating-kit/templates/components/pur/stkPURNotAuthSubmit", "modelClass",
104 new RemovePropertyTask("", "/modules/standard-templating-kit/templates/components/pur/stkPURNotAuthSubmit", "modelClass")))
105 .addTask(new PropertyExistsDelegateTask("Update template 'stkPURIntranet'", "/modules/standard-templating-kit/templates/components/pur/stkPURIntranet", "modelClass",
106 new RemovePropertyTask("", "/modules/standard-templating-kit/templates/components/pur/stkPURIntranet", "modelClass")))
107
108 .addTask(new PropertyExistsDelegateTask("Update template 'stkPURLoginForm'", "/modules/standard-templating-kit/templates/components/pur/stkPURLoginForm", "modelClass",
109 new RemovePropertyTask("", "/modules/standard-templating-kit/templates/components/pur/stkPURLoginForm", "modelClass")))
110
111 .addTask(new NodeExistsDelegateTask("Update template 'stkPURPasswordChangeForm'", "/modules/standard-templating-kit/templates/components/pur/stkPURPasswordChangeForm",
112 new CheckAndModifyPropertyValueTask("/modules/standard-templating-kit/templates/components/pur/stkPURPasswordChangeForm", "modelClass",
113 "info.magnolia.module.publicuserregistration.frontend.action.RegistrationModel", "info.magnolia.module.form.templates.components.FormModel")))
114 .addTask(new NodeExistsDelegateTask("Update template 'stkPURPasswordForm'", "/modules/standard-templating-kit/templates/components/pur/stkPURPasswordForm",
115 new CheckAndModifyPropertyValueTask("/modules/standard-templating-kit/templates/components/pur/stkPURPasswordForm", "modelClass",
116 "info.magnolia.module.publicuserregistration.frontend.action.RegistrationModel", "info.magnolia.module.form.templates.components.FormModel")))
117 .addTask(new NodeExistsDelegateTask("Update template 'stkPURRegistrationForm'", "/modules/standard-templating-kit/templates/components/pur/stkPURRegistrationForm",
118 new CheckAndModifyPropertyValueTask("/modules/standard-templating-kit/templates/components/pur/stkPURRegistrationForm", "modelClass",
119 "info.magnolia.module.publicuserregistration.frontend.action.RegistrationModel", "info.magnolia.module.form.templates.components.FormModel")))
120 .addTask(new NodeExistsDelegateTask("Update template 'stkPURUpdateForm'", "/modules/standard-templating-kit/templates/components/pur/stkPURUpdateForm",
121 new CheckAndModifyPropertyValueTask("/modules/standard-templating-kit/templates/components/pur/stkPURUpdateForm", "modelClass",
122 "info.magnolia.module.publicuserregistration.frontend.action.RegistrationModel", "info.magnolia.module.form.templates.components.FormModel")))
123
124 .addTask(new NodeExistsDelegateTask("Add new double-opt-in form template", "/modules/standard-templating-kit/templates/components/pur/stkPURDoubleOptInForm", null,
125 new BootstrapSingleResource("", "", "/mgnl-bootstrap/standard-templating-kit/templates/components/pur/config.modules.standard-templating-kit.templates.components.pur.stkPURDoubleOptInForm.xml")))
126 .addTask(new NodeExistsDelegateTask("Add new double-opt-in form dialog", "/modules/standard-templating-kit/dialogs/components/pur/stkPURDoubleOptInForm", null,
127 new BootstrapSingleResource("", "", "/mgnl-bootstrap/standard-templating-kit/dialogs/components/pur/config.modules.standard-templating-kit.dialogs.components.pur.stkPURDoubleOptInForm.xml")))
128 .addTask(new NodeExistsDelegateTask("Add new double-opt-in form to component availability of PUR page template", "/modules/standard-templating-kit/templates/pages/stkPublicUserRegistration/areas/main/areas/content/availableComponents/stkPURDoubleOptInForm", null,
129 new PartialBootstrapTask("", "/mgnl-bootstrap/standard-templating-kit/templates/pages/config.modules.standard-templating-kit.templates.pages.stkPublicUserRegistration.xml",
130 "/stkPublicUserRegistration/areas/main/areas/content/availableComponents/stkPURDoubleOptInForm")))
131
132 .addTask(new RemovePropertiesTask("Remove legacy properties from configuration", RepositoryConstants.CONFIG, Arrays.asList(
133 "/modules/standard-templating-kit/dialogs/generic/controls/inheritable/selected",
134 "/modules/standard-templating-kit/dialogs/generic/controls/hideInNav/selected",
135 "/modules/standard-templating-kit/dialogs/generic/teasers/hideTeaserImage/selected",
136 "/modules/standard-templating-kit/dialogs/generic/teasers/highlighted/selected",
137 "/modules/standard-templating-kit/dialogs/functional/stkRedirect/form/tabs/tabRedirect/fields/hideInNav/selected",
138 "/modules/standard-templating-kit/dialogs/components/teasers/stkTeaserEventsList/form/tabs/tabTeaser/fields/showAbstract/selected",
139 "/modules/standard-templating-kit/dialogs/components/teasers/stkTeaserNewsList/form/tabs/tabTeaser/fields/hideTeaserImage/selected",
140 "/modules/standard-templating-kit/dialogs/components/features/stkEventsOverview/form/tabs/tabTeaser/fields/showAbstract/selected",
141 "/modules/standard-templating-kit/dialogs/components/features/stkFAQ/form/tabs/tabMain/fields/useIndex/selected",
142 "/modules/standard-templating-kit/dialogs/components/features/stkNewsOverview/form/tabs/tabTeaser/fields/hideTeaserImage/selected",
143 "/modules/standard-templating-kit/dialogs/components/features/stkSiteMap/form/tabs/tabMain/fields/showSiteMapRoot/selected",
144
145 "/modules/standard-templating-kit/dialogs/components/features/stkFAQ/form/tabs/tabMain/fields/indexString/lineSemi",
146 "/modules/standard-templating-kit/dialogs/components/features/stkSiteMap/form/tabs/tabMain/fields/link/lineSemi",
147
148 "/modules/standard-templating-kit/dialogs/pages/home/stkHomeProperties/form/tabs/tabMain/fields/searchUUID/labelDescription",
149 "/modules/standard-templating-kit/dialogs/components/features/stkSiteMap/form/tabs/tabMain/fields/link/labelDescription",
150 "/modules/standard-templating-kit/dialogs/components/features/stkSiteMap/form/tabs/tabMain/fields/showSiteMapRoot/labelDescription",
151 "/modules/standard-templating-kit/dialogs/components/features/stkFAQ/form/tabs/tabMain/fields/indexString/labelDescription",
152 "/modules/standard-templating-kit/dialogs/components/features/stkFAQ/form/tabs/tabMain/fields/useIndex/labelDescription",
153
154 "/modules/standard-templating-kit/dialogs/components/teasers/stkTeaserContact/form/tabs/tabTeaser/fields/contact/tree",
155
156 "/modules/standard-templating-kit/dialogs/pages/home/stkHomeProperties/form/tabs/tabMain/fields/searchUUID/path",
157
158 "/modules/standard-templating-kit/dialogs/components/features/stkSiteMap/form/tabs/tabMain/fields/titleToUse/cols"
159 ), true))
160 );
161 }
162
163 @Override
164 protected List<Task> getExtraInstallTasks(InstallContext ctx) {
165 final List<Task> tasks = new ArrayList<>();
166 tasks.addAll(super.getExtraInstallTasks(ctx));
167 tasks.add(new InstallSTKResourcesTask());
168
169
170 tasks.add(new AbstractRepositoryTask("Order templates", "") {
171 @Override
172 protected void doExecute(InstallContext ctx) throws RepositoryException, TaskExecutionException {
173 Node templatesNodes = ctx.getConfigJCRSession().getNode("/modules/standard-templating-kit/templates/pages");
174 Content templatesContent = ContentUtil.asContent(templatesNodes);
175 ContentUtil.orderNodes(templatesContent, new String[]{"stkHome", "stkSection", "stkArticle", "stkLargeArticle", "stkNews", "stkEvent", "stkImageGallery", "stkFAQ", "stkForm", "stkSearchResult", "stkSiteMap", "stkRedirect"});
176 }
177 });
178
179 tasks.add(new RemoveETKParagraphs());
180
181 tasks.add(new WarnTask("SMTP Configuration", "Please set the config: /modules/mail/config/smtp to a valid smtp configuration"));
182 tasks.add(new IsModuleInstalledOrRegistered("Use of commenting module", "Use of commenting module by default in STK", "commenting",
183 new CheckAndModifyPropertyValueTask("", "", RepositoryConstants.CONFIG, "/modules/standard-templating-kit/config/site/templates/prototype/areas/main/areas/comments/availableComponents/stkComments", "id", "standard-templating-kit:components/features/stkComments", "commenting:components/comments")));
184 tasks.add(new STKLegacyUiToMagnolia5AppProviderTask("Provide STK with a Magnolia 5 UI", "Turns legacy UI into a Magnolia 5 browser app."));
185 tasks.add(new OrderNodeAfterTask("STK AppLauncher group ordering", "Moves the stk app group after the tools group", RepositoryConstants.CONFIG, "/modules/ui-admincentral/config/appLauncherLayout/groups/stk", "tools"));
186 tasks.add(new ReorderSTKAppsTask());
187 tasks.add(new ModuleDependencyBootstrapTask("contacts"));
188 tasks.add(new ModuleDependencyBootstrapTask("categorization"));
189 tasks.add(setStkSiteAsActiveInSiteModule);
190 tasks.add(new IsModuleInstalledOrRegistered("Configure STK site for multisite", "multisite",
191 new NodeExistsDelegateTask("Check if stk can be moved to the multisite", "/modules/standard-templating-kit/config/site",
192 new ArrayDelegateTask("", "",
193 new NodeExistsDelegateTask("Check for default site", "Check whether default site already exists or not - if no, site from stk will be copied to multisite", RepositoryConstants.CONFIG, "/modules/multisite/config/sites/default",
194 new WarnTask("Default already site exists", "Default site already exists. No actions will be taken."),
195 new ArrayDelegateTask("", "",
196 new CreateNodePathTask("", "/modules/multisite/config/sites/", NodeTypes.ContentNode.NAME),
197 new CopyNodeTask("Default site configuration", "Copy the configuration of the STK site", "config", "/modules/standard-templating-kit/config/site", "/modules/multisite/config/sites/default", false),
198 new ModuleDependencyBootstrapTask("multisite"),
199 new CheckOrCreatePropertyTask("Add class property to legacy site", "/modules/multisite/config/sites/default", "class", "info.magnolia.module.templatingkit.sites.Site"),
200 new SetPropertyTask("config", "/modules/multisite/config/sites/default", "label", "Default"))),
201 new NodeExistsDelegateTask("", "/modules/multisite/config/sites/fallback",
202 new NodeExistsDelegateTask("", "/modules/multisite/config/sites/default",
203 new PropertyExistsDelegateTask("name", "/modules/multisite/config/sites/fallback", "extends",
204 new CheckAndModifyPropertyValueTask("/modules/multisite/config/sites/fallback", "extends", "../travel", "../default"),
205 new SetPropertyTask(RepositoryConstants.CONFIG, "/modules/multisite/config/sites/fallback", "extends", "../default"))))))));
206 tasks.add(new AddSTKRolesToRelevantAppsTask());
207 return tasks;
208 }
209
210 @Override
211 protected List<Task> getDefaultUpdateTasks(Version forVersion) {
212 final List<Task> tasks = new ArrayList<>();
213 tasks.addAll(super.getDefaultUpdateTasks(forVersion));
214 return tasks;
215 }
216 }