using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using Microsoft.SharePoint; using Taloyhtio.CompanyAutomation.Utils; using Taloyhtio.CompanyAutomation.Resources; namespace CompanyAutomation.TestEnvironment { 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 culture is needed for changing list title // see https://sharepoint.stackexchange.com/questions/146330/rename-list-with-powershell-sp2013 var ci = new CultureInfo((int)rootWeb.Language); Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture = ci; var hallitustiedotteetList = rootWeb.GetListByTitleSafely("Hallitustiedotteet"); if (hallitustiedotteetList == null) { var hallitustiedotteetId = rootWeb.Lists.Add("Hallitustiedotteet", 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("'Hallitustiedotteet' list is created and test items are added"); } var asukastiedotteetList = rootWeb.GetListByTitleSafely("Asiakastiedotteet"); if (asukastiedotteetList == null) { var asukastiedotteetId = rootWeb.Lists.Add("Asukastiedotteet", 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(); } var list = rootWeb.Lists[asukastiedotteetId]; list.Title = "Asiakastiedotteet"; list.Update(); Console.WriteLine("'Asiakastiedotteet' list is created and test items are added"); } var sitesList = rootWeb.GetListByTitleSafely(TaloyhtioCompanyAutomation.List_SitesList_Title); if (sitesList == null) { createSitesList(rootWeb); Console.WriteLine("'{0}' list is created", TaloyhtioCompanyAutomation.List_SitesList_Title); } var contactsList = rootWeb.GetListByTitleSafely("Yhteystiedot"); if (contactsList == null) { rootWeb.Lists.Add("Yhteystiedot", string.Empty, SPListTemplateType.Contacts); Console.WriteLine("'Yhteystiedot' list is created and test items are added"); } var palstaWeb = rootWeb.GetSubWebSafely("Tilitoimiston palsta"); if (palstaWeb == null) { rootWeb.Webs.Add("lomakkeet", "Tilitoimiston palsta", "", 1035, "BLANKINTERNET#0", false, false); Console.WriteLine("'Tilitoimiston palsta' sub web is created on pmc site"); } var accountingCompanyGroup = SecurityHelper.GetAccountingCompanyGroupSafely(rootWeb); if (accountingCompanyGroup == null) { string groupName = SecurityHelper.GetAccountCompanyGroupName(rootWeb); SecurityHelper.EnsureSiteGroup(rootWeb, groupName); Console.WriteLine("'{0}' group is created", groupName); } var accountingCompanyRoleDefinition = SecurityHelper.GetRoleDefinition(site, TaloyhtioCompanyAutomation.PermissionLevel_AccountingCompany_Name); if (accountingCompanyRoleDefinition == null) { createAccountingCompanyPermissionLevel(rootWeb); Console.WriteLine("'{0}' permission level is created", TaloyhtioCompanyAutomation.PermissionLevel_AccountingCompany_Name); } accountingCompanyGroup = SecurityHelper.GetAccountingCompanyGroupSafely(rootWeb); accountingCompanyRoleDefinition = SecurityHelper.GetRoleDefinition(site, TaloyhtioCompanyAutomation.PermissionLevel_AccountingCompany_Name); if (accountingCompanyGroup != null && accountingCompanyRoleDefinition != null) { SecurityHelper.AssignGroupRoleToSecurableObject(rootWeb, rootWeb, accountingCompanyRoleDefinition, accountingCompanyGroup); Console.WriteLine("Granted '{0}' permission level to '{1}' group", TaloyhtioCompanyAutomation.PermissionLevel_AccountingCompany_Name, accountingCompanyGroup.Name); } var howzeeGroup = SecurityHelper.GetHowzeeGroupSafely(rootWeb); if (howzeeGroup == null) { string groupName = TaloyhtioCompanyAutomation.Group_Howzee_Name; SecurityHelper.EnsureSiteGroup(rootWeb, groupName); Console.WriteLine("'{0}' group is created", groupName); } var howzeeRoleDefinition = SecurityHelper.GetRoleDefinition(site, TaloyhtioCompanyAutomation.PermissionLevel_Howzee_Name); if (howzeeRoleDefinition == null) { createHowzeePermissionLevel(rootWeb); Console.WriteLine("'{0}' permission level is created", TaloyhtioCompanyAutomation.PermissionLevel_Howzee_Name); } howzeeGroup = SecurityHelper.GetHowzeeGroupSafely(rootWeb); howzeeRoleDefinition = SecurityHelper.GetRoleDefinition(site, TaloyhtioCompanyAutomation.PermissionLevel_Howzee_Name); if (howzeeGroup != null && howzeeRoleDefinition != null) { SecurityHelper.AssignGroupRoleToSecurableObject(rootWeb, rootWeb, howzeeRoleDefinition, howzeeGroup, false); Console.WriteLine("Granted '{0}' permission level to '{1}' group", TaloyhtioCompanyAutomation.PermissionLevel_Howzee_Name, howzeeGroup.Name); } } } private static void createAccountingCompanyPermissionLevel(SPWeb web) { if (!web.HasUniqueRoleDefinitions) { web.RoleDefinitions.BreakInheritance(false, false); } var roleDefinition = new SPRoleDefinition(); roleDefinition.Name = TaloyhtioCompanyAutomation.PermissionLevel_AccountingCompany_Name; roleDefinition.BasePermissions = SPBasePermissions.AddListItems | SPBasePermissions.EditListItems | SPBasePermissions.DeleteListItems | SPBasePermissions.ViewListItems | SPBasePermissions.ApproveItems | SPBasePermissions.OpenItems | SPBasePermissions.ViewVersions | SPBasePermissions.DeleteVersions | SPBasePermissions.ViewFormPages | SPBasePermissions.AddAndCustomizePages | SPBasePermissions.BrowseDirectories | SPBasePermissions.ViewPages | SPBasePermissions.BrowseUserInfo | SPBasePermissions.UseRemoteAPIs | 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 = TaloyhtioCompanyAutomation.PermissionLevel_Howzee_Name; roleDefinition.BasePermissions = SPBasePermissions.ManageLists | SPBasePermissions.CancelCheckout | SPBasePermissions.AddListItems | SPBasePermissions.EditListItems | SPBasePermissions.DeleteListItems | SPBasePermissions.ViewListItems | SPBasePermissions.ApproveItems | SPBasePermissions.OpenItems | SPBasePermissions.ViewVersions | SPBasePermissions.DeleteVersions | SPBasePermissions.CreateAlerts | SPBasePermissions.ViewFormPages | SPBasePermissions.ManagePermissions | SPBasePermissions.ViewUsageData | SPBasePermissions.ManageSubwebs | SPBasePermissions.ManageWeb | SPBasePermissions.AddAndCustomizePages | SPBasePermissions.ApplyThemeAndBorder | SPBasePermissions.ApplyStyleSheets | SPBasePermissions.CreateGroups | SPBasePermissions.BrowseDirectories | SPBasePermissions.ViewPages | SPBasePermissions.EnumeratePermissions | SPBasePermissions.BrowseUserInfo | SPBasePermissions.ManageAlerts | SPBasePermissions.UseRemoteAPIs | SPBasePermissions.UseClientIntegration | SPBasePermissions.Open | SPBasePermissions.EditMyUserInfo | SPBasePermissions.ManagePersonalViews | SPBasePermissions.AddDelPrivateWebParts | SPBasePermissions.UpdatePersonalWebParts; web.RoleDefinitions.Add(roleDefinition); } private static void createSitesList(SPWeb rootWeb) { var listId = rootWeb.Lists.Add( TaloyhtioCompanyAutomation.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(TaloyhtioCompanyAutomation.Field_CompanyName_Title, SPFieldType.Text, true); var titleField = list.Fields[SPBuiltInFieldId.Title]; titleField.Title = TaloyhtioCompanyAutomation.Field_CompanyName_Title; titleField.Update(); list.Fields.Add(TaloyhtioCompanyAutomation.Field_Accountant_Title, SPFieldType.User, false); list.Fields.Add(TaloyhtioCompanyAutomation.Field_Url_Title, SPFieldType.URL, true); var urlField = list.Fields[TaloyhtioCompanyAutomation.Field_Url_Title]; urlField.StaticName = Constants.Fields.URL_STATIC_NAME; urlField.Update(); list.Fields.Add(TaloyhtioCompanyAutomation.Field_MostPopularSite_Title, SPFieldType.Boolean, false); list.Fields.Add("Omistaja", SPFieldType.User, false); var view = list.DefaultView; view.ViewFields.Add(list.Fields[TaloyhtioCompanyAutomation.Field_Url_Title]); view.ViewFields.Add("Omistaja"); view.ViewFields.Add(list.Fields[TaloyhtioCompanyAutomation.Field_Accountant_Title]); view.Update(); } } }