using System.Globalization; using System.Threading; using Microsoft.SharePoint; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.SharePoint.Utilities; using Taloyhtio.CondoAutomation.Utils; using Taloyhtio.CondoAutomation.Resources; namespace CondoAutomation.TestEnvironment { // Creates PMC artefacts (lists, groups, permission levels, etc) on standard site collection class Program { static void Main(string[] args) { if (args.Length != 1) { Console.WriteLine("Usage: exe "); return; } using (var site = new SPSite(args[0])) { var rootWeb = site.RootWeb; // set thread language to site language in order to use correct resources Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo((int)rootWeb.Language); var hallitustiedotteetList = rootWeb.GetListByTitleSafely(TaloyhtioPropertyManagersSite.List_BoardMembersReleases_Title); if (hallitustiedotteetList == null) { var hallitustiedotteetId = rootWeb.Lists.Add(TaloyhtioPropertyManagersSite.List_BoardMembersReleases_Title, string.Empty, SPListTemplateType.Announcements); for (int i = 0; i < 10; i++) { var newItem = rootWeb.Lists[hallitustiedotteetId].Items.Add(); newItem[SPBuiltInFieldId.Title] = "Test item hallitus " + i; newItem.Update(); } Console.WriteLine("'{0}' list is created and test items are added", TaloyhtioPropertyManagersSite.List_BoardMembersReleases_Title); } var asukastiedotteetList = rootWeb.GetListByTitleSafely(TaloyhtioPropertyManagersSite.List_TenantsReleases_Title); if (asukastiedotteetList == null) { var asukastiedotteetId = rootWeb.Lists.Add(TaloyhtioPropertyManagersSite.List_TenantsReleases_Title, string.Empty, SPListTemplateType.Announcements); for (int i = 0; i < 10; i++) { var newItem = rootWeb.Lists[asukastiedotteetId].Items.Add(); newItem[SPBuiltInFieldId.Title] = "Test item asukas" + i; newItem.Update(); } Console.WriteLine("'{0}' list is created and test items are added", TaloyhtioPropertyManagersSite.List_TenantsReleases_Title); } var osakastiedotteetList = rootWeb.GetListByTitleSafely(TaloyhtioPropertyManagersSite.List_LandlordsReleases_Title); if (osakastiedotteetList == null) { var osakastiedotteetId = rootWeb.Lists.Add(TaloyhtioPropertyManagersSite.List_LandlordsReleases_Title, string.Empty, SPListTemplateType.Announcements); for (int i = 0; i < 10; i++) { var newItem = rootWeb.Lists[osakastiedotteetId].Items.Add(); newItem[SPBuiltInFieldId.Title] = "Test item osakas" + i; newItem.Update(); } Console.WriteLine("'{0}' list is created and test items are added", TaloyhtioPropertyManagersSite.List_LandlordsReleases_Title); } var palstaWeb = rootWeb.GetSubWebSafely(TaloyhtioPropertyManagersSite.Web_Palsta_Title); if (palstaWeb == null) { palstaWeb = rootWeb.Webs.Add("lomakkeet", TaloyhtioPropertyManagersSite.Web_Palsta_Title, "", rootWeb.Language, "BLANKINTERNET#0", false, false); //palstaWeb = rootWeb.GetSubWebSafely(TaloyhtioPropertyManagersSite.Web_Palsta_Title); //palstaWeb.SetProperty("__InheritsMasterUrl", "true"); palstaWeb.MasterUrl = rootWeb.MasterUrl; palstaWeb.CustomMasterUrl = rootWeb.CustomMasterUrl; palstaWeb.Update(); Console.WriteLine("'{0}' sub web is created on pmc site", TaloyhtioPropertyManagersSite.Web_Palsta_Title); } var sitesList = rootWeb.GetListByTitleSafely(TaloyhtioPropertyManagersSite.List_SitesList_Title); if (sitesList == null) { createSitesList(rootWeb); Console.WriteLine("'{0}' list is created", TaloyhtioPropertyManagersSite.List_SitesList_Title); } var formsRedirectsList = palstaWeb.GetListByTitleSafely(TaloyhtioPropertyManagersSite.List_FormsRedirects_Title); if (formsRedirectsList == null) { createFormsRedirectsList(palstaWeb); Console.WriteLine("'{0}' list is created", TaloyhtioPropertyManagersSite.List_FormsRedirects_Title); } var propertyManagersGroup = SecurityHelper.GetPropertyManagerGroupSafely(rootWeb); if (propertyManagersGroup == null) { string groupName = SecurityHelper.GetPropertyManagerGroupName(rootWeb); SecurityHelper.EnsureSiteGroup(rootWeb, groupName); Console.WriteLine("'{0}' group is created", groupName); } var propertyManagerRoleDefinition = SecurityHelper.GetRoleDefinition(rootWeb.Site, TaloyhtioCondoSecurity.ManagerPermissionLevel); if (propertyManagerRoleDefinition == null) { createPMCPermissionLevel(rootWeb); Console.WriteLine("managerRoleDefinition is created"); } propertyManagerRoleDefinition = SecurityHelper.GetRoleDefinition(rootWeb.Site, TaloyhtioCondoSecurity.ManagerPermissionLevel); propertyManagersGroup = SecurityHelper.GetPropertyManagerGroupSafely(rootWeb); if (propertyManagerRoleDefinition != null && propertyManagersGroup != null) { SecurityHelper.AssignGroupRoleToSecurableObject(rootWeb, rootWeb, propertyManagerRoleDefinition, propertyManagersGroup); Console.WriteLine("Added '{0}' permissions for '{1}' group", TaloyhtioCondoSecurity.ManagerPermissionLevel, propertyManagersGroup.Name); } else { Console.WriteLine("WARNING: '{0}' permission level or Property managers group still not found. Permissions won't be added on root PMC site for Property managers group", TaloyhtioCondoSecurity.ManagerPermissionLevel); } var howzeeGroup = SecurityHelper.GetHowzeeGroupSafely(rootWeb); if (howzeeGroup == null) { string groupName = TaloyhtioCondoSecurity.HowzeeGroupName; SecurityHelper.EnsureSiteGroup(rootWeb, groupName); Console.WriteLine("'{0}' group is created", groupName); } var howzeeRoleDefinition = SecurityHelper.GetRoleDefinition(rootWeb.Site, TaloyhtioCondoSecurity.HowzeePermissionLevel); if (howzeeRoleDefinition == null) { createHowzeePermissionLevel(rootWeb); Console.WriteLine("howzeeRoleDefinition is created"); } howzeeRoleDefinition = SecurityHelper.GetRoleDefinition(rootWeb.Site, TaloyhtioCondoSecurity.HowzeePermissionLevel); howzeeGroup = SecurityHelper.GetHowzeeGroupSafely(rootWeb); if (howzeeRoleDefinition != null && howzeeGroup != null) { SecurityHelper.AssignGroupRoleToSecurableObject(rootWeb, rootWeb, howzeeRoleDefinition, howzeeGroup); Console.WriteLine("Added '{0}' permissions for '{1}' group", TaloyhtioCondoSecurity.HowzeePermissionLevel, howzeeGroup.Name); } else { Console.WriteLine("WARNING: '{0}' permission level or Howzee group still not found. Permissions won't be added on root PMC site for Howzee group", TaloyhtioCondoSecurity.HowzeePermissionLevel); } var boardMemberRoleDefinition = SecurityHelper.GetRoleDefinition(rootWeb.Site, TaloyhtioCondoSecurity.BoardMemberPermissionLevel); if (boardMemberRoleDefinition == null) { createBoardMemberPermissionLevel(rootWeb); Console.WriteLine("boardMemberRoleDefinition is created"); } // Taloyhtio.CondoSite.CustomAction var featureId = new Guid("4e3eeb3f-8cea-4a13-9d96-5bc974979c2a"); if (!site.Features.Any(f => f.DefinitionId == featureId)) { site.Features.Add(featureId); Console.WriteLine("Taloyhtio.CondoSite.CustomAction feature activated"); } // Taloyhtio.PMCRootSite.SiteElements featureId = new Guid("a82bd1bc-5f1d-4556-b600-c84eb1f63c04"); if (!rootWeb.Features.Any(f => f.DefinitionId == featureId)) { rootWeb.Features.Add(featureId); Console.WriteLine("Taloyhtio.PMCRootSite.SiteElements feature activated"); } // Taloyhtio.ControlPanel.Layouts featureId = new Guid("e9105304-c6b7-4a21-a8a0-3f8e87e967c4"); if (!site.Features.Any(f => f.DefinitionId == featureId)) { site.Features.Add(featureId); Console.WriteLine("Taloyhtio.ControlPanel.Layouts feature activated"); } // Taloyhtio.TilaaIlmoitaList featureId = new Guid("28612bce-9bf5-423f-94d4-481fea2b5b40"); if (!rootWeb.Features.Any(f => f.DefinitionId == featureId)) { rootWeb.Features.Add(featureId); Console.WriteLine("Taloyhtio.TilaaIlmoitaList feature activated"); } // Taloyhtio.SendDevelopmentIdea featureId = new Guid("70d87e82-df4d-48e6-9c03-3f8f2395fe77"); if (!rootWeb.Features.Any(f => f.DefinitionId == featureId)) { rootWeb.Features.Add(featureId); Console.WriteLine("Taloyhtio.SendDevelopmentIdea feature activated"); } // Taloyhtio.ToolsList featureId = new Guid("a0e3a0ce-f0f9-457b-810c-b09d56acf7e1"); if (!rootWeb.Features.Any(f => f.DefinitionId == featureId)) { rootWeb.Features.Add(featureId); Console.WriteLine("Taloyhtio.ToolsList feature activated"); } // Taloyhtio.AddonsList featureId = new Guid("ecf4686d-7379-4b4e-abe1-6e8801fb983a"); if (!rootWeb.Features.Any(f => f.DefinitionId == featureId)) { rootWeb.Features.Add(featureId); Console.WriteLine("Taloyhtio.AddonsList feature activated"); } var rootSite = site.WebApplication.Sites[0]; // Taloyhtio.ApuaList - on the root site of web application featureId = new Guid("a1faa2c4-57b5-4c31-8831-39927f61d894"); if (!rootSite.RootWeb.Features.Any(f => f.DefinitionId == featureId)) { rootSite.RootWeb.Features.Add(featureId); Console.WriteLine("Taloyhtio.ApuaList feature activated on the root site of web app"); } var akatemiaWeb = rootSite.RootWeb.Webs.FirstOrDefault(w => w.Url.ToLower().EndsWith("/akatemia")); if (akatemiaWeb == null) { akatemiaWeb = rootSite.RootWeb.Webs.Add("akatemia", "Taloyhtio.Info Akatemia", "", rootSite.RootWeb.Language, "BLANKINTERNET#0", false, false); Console.WriteLine("'{0}' sub web is created on the root site", akatemiaWeb.Url); } var taloyhtioTiedotaList = akatemiaWeb.GetListByTitleSafely(Constants.AdminNews.LIST_TITLE); if (taloyhtioTiedotaList == null) { createTaloyhtioTiedotaList(akatemiaWeb); Console.WriteLine("'{0}' list is created on '{1}' site", Constants.AdminNews.LIST_TITLE, akatemiaWeb.Url); } var hallitusakatemiaWeb = rootSite.RootWeb.Webs.FirstOrDefault(w => w.Url.ToLower().EndsWith("/hallitusakatemia")); if (hallitusakatemiaWeb == null) { hallitusakatemiaWeb = rootSite.RootWeb.Webs.Add("hallitusakatemia", "Taloyhtio.Info Akatemia", "", rootSite.RootWeb.Language, "BLANKINTERNET#0", false, false); Console.WriteLine("'{0}' sub web is created on the root site", hallitusakatemiaWeb.Url); } taloyhtioTiedotaList = hallitusakatemiaWeb.GetListByTitleSafely(Constants.AdminNews.LIST_TITLE); if (taloyhtioTiedotaList == null) { createTaloyhtioTiedotaList(hallitusakatemiaWeb); Console.WriteLine("'{0}' list is created on '{1}' site", Constants.AdminNews.LIST_TITLE, hallitusakatemiaWeb.Url); } var isakatemiaWeb = rootSite.RootWeb.Webs.FirstOrDefault(w => w.Url.ToLower().EndsWith("/isakatemia")); if (isakatemiaWeb == null) { isakatemiaWeb = rootSite.RootWeb.Webs.Add("isakatemia", "Taloyhtio.Info Akatemia", "", rootSite.RootWeb.Language, "BLANKINTERNET#0", false, false); Console.WriteLine("'{0}' sub web is created on the root site", isakatemiaWeb.Url); } taloyhtioTiedotaList = isakatemiaWeb.GetListByTitleSafely(Constants.AdminNews.LIST_TITLE); if (taloyhtioTiedotaList == null) { createTaloyhtioTiedotaList(isakatemiaWeb); Console.WriteLine("'{0}' list is created on '{1}' site", Constants.AdminNews.LIST_TITLE, isakatemiaWeb.Url); } } } private static void createSitesList(SPWeb rootWeb) { var listId = rootWeb.Lists.Add(TaloyhtioPropertyManagersSite.List_SitesList_Title, "", "SitesList", "00BFEA71-DE22-43B2-A848-C05709900100", // customlist (int)SPListTemplateType.GenericList, "100", SPListTemplate.QuickLaunchOptions.On); var list = rootWeb.Lists[listId]; //list.Fields.Add(TaloyhtioCondoSites.Field_CondoName_Title, SPFieldType.Text, true); var titleField = list.Fields[SPBuiltInFieldId.Title]; titleField.Title = TaloyhtioCondoSites.Field_CondoName_Title; titleField.Update(); list.Fields.Add(TaloyhtioCondoSites.Field_Url_Title, SPFieldType.URL, true); list.Fields.Add(TaloyhtioCondoSites.List_Sivustot_Responsible_User, SPFieldType.User, true); var urlField = list.Fields[TaloyhtioCondoSites.Field_Url_Title]; urlField.StaticName = Constants.Fields.URL_STATIC_NAME; urlField.Update(); list.Fields.Add(TaloyhtioCondoSites.Field_CondoType_Title, SPFieldType.MultiChoice, false); var condoTypeField = list.Fields[TaloyhtioCondoSites.Field_CondoType_Title] as SPFieldMultiChoice; condoTypeField.Choices.Add(TaloyhtioCondoSites.Choice_Apartment_Title); condoTypeField.Choices.Add(TaloyhtioCondoSites.Choice_Terrace_Title); condoTypeField.Choices.Add(TaloyhtioCondoSites.Choice_Other_Title); condoTypeField.Update(true); //SharepointUtils.AddFieldIntoDefaultView(list, headerTitleInternalName); } private static void createTaloyhtioTiedotaList(SPWeb rootWeb) { // var listId = rootWeb.Lists.Add(Constants.AdminNews.LIST_TITLE, "", // "TaloyhtioInfo tiedottaa", "00BFEA71-D1CE-42de-9C63-A44004CE0104", // announcementslist // (int)SPListTemplateType.Announcements, "100", SPListTemplate.QuickLaunchOptions.On); var listId = rootWeb.Lists.Add(Constants.AdminNews.LIST_TITLE, "", SPListTemplateType.Announcements); //var list = rootWeb.Lists[listId]; // var titleField = list.Fields[SPBuiltInFieldId.Title]; // titleField.Title = Constants.AdminNews.FIELD_TITLE; // titleField.Update(); // list.Fields.Add(Constants.AdminNews.FIELD_TEXT, SPFieldType.Note, false); // list.Fields.Add(Constants.AdminNews.FIELD_EXPIRY_DATE, SPFieldType.DateTime, false); } private static void createFormsRedirectsList(SPWeb palstaWeb) { var listId = palstaWeb.Lists.Add(TaloyhtioPropertyManagersSite.List_FormsRedirects_Title, "", "lists/lomakeohjaukset", "00BFEA71-DE22-43B2-A848-C05709900100", // customlist (int)SPListTemplateType.GenericList, "100", SPListTemplate.QuickLaunchOptions.On); var list = palstaWeb.Lists[listId]; //list.Fields.Add(TaloyhtioPropertyManagersSite.Field_Target_Title, SPFieldType.Text, true); var titleField = list.Fields[SPBuiltInFieldId.Title]; titleField.Title = TaloyhtioPropertyManagersSite.Field_Target_Title; titleField.Update(); list.Fields.Add(TaloyhtioPropertyManagersSite.Field_ServiceCompanyEmail_Title, SPFieldType.Text, false); list.Fields.Add(TaloyhtioPropertyManagersSite.Field_PMCEmail_Title, SPFieldType.Text, false); } private static void createPMCPermissionLevel(SPWeb web) { if (!web.HasUniqueRoleDefinitions) { web.RoleDefinitions.BreakInheritance(false, false); } var roleDefinition = new SPRoleDefinition(); roleDefinition.Name = TaloyhtioCondoSecurity.ManagerPermissionLevel; roleDefinition.BasePermissions = SPBasePermissions.AddListItems | SPBasePermissions.EditListItems | SPBasePermissions.DeleteListItems | SPBasePermissions.ViewListItems | SPBasePermissions.ManageSubwebs | SPBasePermissions.ManageWeb | SPBasePermissions.AddAndCustomizePages | SPBasePermissions.BrowseDirectories | SPBasePermissions.ViewPages | SPBasePermissions.EnumeratePermissions | SPBasePermissions.BrowseUserInfo | SPBasePermissions.Open | SPBasePermissions.ManagePersonalViews; web.RoleDefinitions.Add(roleDefinition); } private static void createBoardMemberPermissionLevel(SPWeb web) { if (!web.HasUniqueRoleDefinitions) { web.RoleDefinitions.BreakInheritance(false, false); } var roleDefinition = new SPRoleDefinition(); roleDefinition.Name = TaloyhtioCondoSecurity.BoardMemberPermissionLevel; roleDefinition.BasePermissions = SPBasePermissions.AddListItems | SPBasePermissions.DeleteListItems | SPBasePermissions.ViewListItems | SPBasePermissions.ViewFormPages | SPBasePermissions.ViewPages | SPBasePermissions.Open; web.RoleDefinitions.Add(roleDefinition); } private static void createHowzeePermissionLevel(SPWeb web) { if (!web.HasUniqueRoleDefinitions) { web.RoleDefinitions.BreakInheritance(false, false); } var roleDefinition = new SPRoleDefinition(); roleDefinition.Name = TaloyhtioCondoSecurity.HowzeePermissionLevel; roleDefinition.BasePermissions = SPBasePermissions.AddListItems | SPBasePermissions.DeleteListItems | SPBasePermissions.ViewListItems | SPBasePermissions.ViewFormPages | SPBasePermissions.ViewPages | SPBasePermissions.Open; web.RoleDefinitions.Add(roleDefinition); } } }