Taylohtio/CondoAutomation/CondoAutomation.TestEnviron.../Program.cs

396 lines
20 KiB
C#

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 <site_collection_url>");
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);
}
}
}