private void SetAvailableSubWebs(SPWebEventProperties properties) { SPWeb web = properties.Web; if (!web.AllProperties.ContainsKey("__WebTemplates")) { web.AllProperties.Add("__WebTemplates", ""); } web.AllowAllWebTemplates(); web.Update(); SPWebTemplateCollection existingLanguageNeutralTemplatesCollection = web.GetAvailableCrossLanguageWebTemplates(); SPWebTemplateCollection existingLanguageSpecificTemplatesCollection = web.GetAvailableWebTemplates(web.Language); Collection <SPWebTemplate> newLanguageNeutralTemplatesCollection = new Collection <SPWebTemplate>(); Collection <SPWebTemplate> newLanguageSpecificTemplatesCollection = new Collection <SPWebTemplate>(); foreach (SPWebTemplate existingTemplate in existingLanguageNeutralTemplatesCollection) { if (existingTemplate.DisplayCategory.Contains("WebSite")) { newLanguageNeutralTemplatesCollection.Add(existingTemplate); } } foreach (SPWebTemplate existingTemplate in existingLanguageSpecificTemplatesCollection) { if (existingTemplate.DisplayCategory.Contains("WebSite")) { newLanguageSpecificTemplatesCollection.Add(existingTemplate); } } if (newLanguageNeutralTemplatesCollection.Count != 0) { web.SetAvailableCrossLanguageWebTemplates(newLanguageNeutralTemplatesCollection); } if (newLanguageSpecificTemplatesCollection.Count != 0) { web.SetAvailableWebTemplates(newLanguageSpecificTemplatesCollection, web.Language); } web.Update(); }
/// <summary> /// Runs the specified command. /// </summary> /// <param name="command">The command.</param> /// <param name="keyValues">The key values.</param> /// <param name="output">The output.</param> /// <returns></returns> public override int Execute(string command, StringDictionary keyValues, out string output) { output = string.Empty; SPBinaryParameterValidator.Validate("template", Params["template"].Value, "allowalltemplates", (Params["allowalltemplates"].UserTypedIn ? "true" : Params["allowalltemplates"].Value)); string url = Params["url"].Value.TrimEnd('/'); string templateName = Params["template"].Value; bool resetAllSubsites = Params["resetallsubsites"].UserTypedIn; using (SPSite site = new SPSite(url)) { using (SPWeb web = site.AllWebs[Utilities.GetServerRelUrlFromFullUrl(url)]) { uint lcid = web.Language; bool localeProvided = Params["lcid"].UserTypedIn; if (localeProvided) { lcid = uint.Parse(Params["lcid"].Value); } bool exists = false; #if MOSS PublishingWeb pubweb = PublishingWeb.GetPublishingWeb(web); if (Params["allowalltemplates"].UserTypedIn) { pubweb.AllowAllWebTemplates(resetAllSubsites); pubweb.Update(); return((int)ErrorCodes.NoError); } SPWebTemplateCollection existingLanguageNeutralTemplatesCollection = pubweb.GetAvailableCrossLanguageWebTemplates(); SPWebTemplateCollection existingLanguageSpecificTemplatesCollection = pubweb.GetAvailableWebTemplates(lcid); #else if (Params["allowalltemplates"].UserTypedIn) { web.AllowAllWebTemplates(); web.Update(); return((int)ErrorCodes.NoError); } SPWebTemplateCollection existingLanguageNeutralTemplatesCollection = web.GetAvailableCrossLanguageWebTemplates(); SPWebTemplateCollection existingLanguageSpecificTemplatesCollection = web.GetAvailableWebTemplates(lcid); #endif Collection <SPWebTemplate> newLanguageNeutralTemplatesCollection = new Collection <SPWebTemplate>(); Collection <SPWebTemplate> newLanguageSpecificTemplatesCollection = new Collection <SPWebTemplate>(); foreach (SPWebTemplate existingTemplate in existingLanguageNeutralTemplatesCollection) { if (existingTemplate.Name == templateName && !localeProvided) { exists = true; continue; } newLanguageNeutralTemplatesCollection.Add(existingTemplate); } foreach (SPWebTemplate existingTemplate in existingLanguageSpecificTemplatesCollection) { if (existingTemplate.Name == templateName && localeProvided) { exists = true; continue; } newLanguageSpecificTemplatesCollection.Add(existingTemplate); } if (!exists) { output = "Template is not assigned."; return((int)ErrorCodes.GeneralError); } if (newLanguageSpecificTemplatesCollection.Count == 0 && newLanguageNeutralTemplatesCollection.Count == 0) { output = "There must be at least one template available."; return((int)ErrorCodes.GeneralError); } #if MOSS pubweb.SetAvailableCrossLanguageWebTemplates(newLanguageNeutralTemplatesCollection, resetAllSubsites); pubweb.SetAvailableWebTemplates(newLanguageSpecificTemplatesCollection, lcid, resetAllSubsites); #else web.SetAvailableCrossLanguageWebTemplates(newLanguageNeutralTemplatesCollection); web.SetAvailableWebTemplates(newLanguageSpecificTemplatesCollection, lcid); #endif } } return((int)ErrorCodes.NoError); }
/// <summary> /// Runs the specified command. /// </summary> /// <param name="command">The command.</param> /// <param name="keyValues">The key values.</param> /// <param name="output">The output.</param> /// <returns></returns> public override int Execute(string command, StringDictionary keyValues, out string output) { output = string.Empty; SPBinaryParameterValidator.Validate("template", Params["template"].Value, "allowalltemplates", (Params["allowalltemplates"].UserTypedIn ? "true" : Params["allowalltemplates"].Value)); string url = Params["url"].Value.TrimEnd('/'); string templateName = Params["template"].Value; bool resetAllSubsites = Params["resetallsubsites"].UserTypedIn; using (SPSite site = new SPSite(url)) { using (SPWeb web = site.AllWebs[Utilities.GetServerRelUrlFromFullUrl(url)]) { uint lcid = web.Language; if (!string.IsNullOrEmpty(keyValues["lcid"])) { lcid = uint.Parse(keyValues["lcid"]); } bool localeProvided = keyValues.ContainsKey("lcid"); #if MOSS PublishingWeb pubweb = PublishingWeb.GetPublishingWeb(web); if (Params["allowalltemplates"].UserTypedIn) { pubweb.AllowAllWebTemplates(resetAllSubsites); pubweb.Update(); return((int)ErrorCodes.NoError); } #else if (Params["allowalltemplates"].UserTypedIn) { web.AllowAllWebTemplates(); web.Update(); return((int)ErrorCodes.NoError); } #endif SPWebTemplateCollection templateColl; if (localeProvided) { templateColl = web.GetAvailableWebTemplates(lcid); } else { templateColl = web.GetAvailableCrossLanguageWebTemplates(); } bool exists; try { exists = (templateColl[templateName] != null); } catch (ArgumentException) { exists = false; } if (exists && !web.AllWebTemplatesAllowed) { output = "Template is already installed."; return((int)ErrorCodes.GeneralError); } Collection <SPWebTemplate> list = new Collection <SPWebTemplate>(); if (!web.AllWebTemplatesAllowed) { foreach (SPWebTemplate existingTemplate in templateColl) { list.Add(existingTemplate); } } SPWebTemplate newTemplate = GetWebTemplate(site, lcid, templateName); if (newTemplate == null) { output = "Template not found."; return((int)ErrorCodes.GeneralError); } else { list.Add(newTemplate); } #if MOSS if (!localeProvided) { pubweb.SetAvailableCrossLanguageWebTemplates(list, resetAllSubsites); } else { pubweb.SetAvailableWebTemplates(list, lcid, resetAllSubsites); } #else if (!localeProvided) { web.SetAvailableCrossLanguageWebTemplates(list); } else { web.SetAvailableWebTemplates(list, lcid); } #endif } } return((int)ErrorCodes.NoError); }