/// <summary> /// Setups the specified context. /// </summary> /// <param name="db">The db.</param> public void Initialise(Database db) { if (_setupComplete || _setupProcessing) { return; } lock (_setupLock) { try { if (_setupComplete || _setupProcessing) { return; } Sitecore.Diagnostics.Log.Info("Started CodeFirst setup " + db.Name, this); _setupProcessing = true; var manager = new DataManager(db); var context = new CallContext(manager, db.GetDataProviders().Count()); var sqlProvider = GetSqlProvider(db); var glassFolder = GetGlassTemplateFolder(sqlProvider, context); if (CurrentContext != null) { foreach (var cls in TypeConfigurations.Where(x => x.Value.CodeFirst)) { var templateDefinition = sqlProvider.GetItemDefinition(cls.Value.TemplateId, context); if (templateDefinition == ItemDefinition.Empty || templateDefinition == null) { var containingFolder = GetTemplateFolder(cls.Key.Namespace, glassFolder, sqlProvider, context); templateDefinition = CreateTemplateItem(db, cls.Value, cls.Key, sqlProvider, containingFolder, context); } BaseTemplateChecks(templateDefinition, cls.Value, db); //initialize sections and children foreach (ID sectionId in GetChildIDsTemplate(cls.Value, templateDefinition, context, sqlProvider)) { GetChildIDsSection(SectionTable.First(s => s.SectionId == sectionId), context, sqlProvider); } } if (Settings.GetBoolSetting("AutomaticallyRemoveDeletedTemplates", true)) { RemoveDeletedClasses(glassFolder, sqlProvider, context); } ClearCaches(db); } Sitecore.Diagnostics.Log.Info("Finished CodeFirst setup " + db.Name, this); } catch (Exception ex) { Sitecore.Diagnostics.Log.Error("CodeFirst error " + ex.Message, ex, this); throw; } finally { _setupComplete = true; } } }
public void Setup(CallContext context) { if (_setupComplete || _setupProcessing) { return; } lock (_setupLock) { if (_setupComplete || _setupProcessing) { return; } _setupProcessing = true; global::Sitecore.Diagnostics.Log.Info("Started CodeFirst setup", this); var providers = Factory.GetDatabase("master").GetDataProviders(); var provider = providers.FirstOrDefault(x => !(x is GlassDataProvider)); var templateFolder = provider.GetItemDefinition(TemplateFolderId, context); var glassFolder = provider.GetItemDefinition(GlassFolderId, context); if (glassFolder == ItemDefinition.Empty || glassFolder == null) { provider.CreateItem(GlassFolderId, "GlassTemplates", FolderTemplateId, templateFolder, context); glassFolder = provider.GetItemDefinition(GlassFolderId, context); } foreach (var cls in Context.StaticContext.Classes.Where(x => x.Value.ClassAttribute.CodeFirst)) { var clsTemplate = provider.GetItemDefinition(new ID(cls.Value.TemplateId), context); if (clsTemplate == ItemDefinition.Empty || clsTemplate == null) { //setup folders IEnumerable <string> namespaces = cls.Key.Namespace.Split('.'); namespaces = namespaces.SkipWhile(x => x != "Templates").Skip(1); ItemDefinition containing = glassFolder; var children = provider.GetChildIDs(containing, context); foreach (var ns in namespaces) { ItemDefinition found = null; foreach (ID child in children) { if (!ID.IsNullOrEmpty(child)) { var childDef = provider.GetItemDefinition(child, context); if (childDef.Name == ns) { found = childDef; } } } if (found == null) { ID newId = ID.NewID; provider.CreateItem(newId, ns, FolderTemplateId, containing, context); found = provider.GetItemDefinition(newId, context); } containing = found; } //create the template in Sitecore string templateName = cls.Value.ClassAttribute.TemplateName; if (string.IsNullOrEmpty(templateName)) { templateName = cls.Key.Name; } provider.CreateItem(new ID(cls.Value.TemplateId), templateName, TemplateTemplateId, containing, context); clsTemplate = provider.GetItemDefinition(new ID(cls.Value.TemplateId), context); //Assign the base template var templateItem = Factory.GetDatabase("master").GetItem(clsTemplate.ID); using (new SecurityDisabler()) { templateItem.Editing.BeginEdit(); templateItem["__Base template"] = "{1930BBEB-7805-471A-A3BE-4858AC7CF696}"; templateItem.Editing.EndEdit(); } } BaseTemplateChecks(clsTemplate, provider, context, cls.Value); //initialize sections and children foreach (ID sectionId in this.GetChildIDsTemplate(cls.Value, clsTemplate, context)) { this.GetChildIDsSection(SectionTable.First(s => s.SectionId == sectionId), context); } } if (global::Sitecore.Configuration.Settings.GetBoolSetting("AutomaticallyRemoveDeletedTemplates", true)) { RemoveDeletedClasses(glassFolder, provider, context); } global::Sitecore.Diagnostics.Log.Info("Finished CodeFirst setup", this); _setupComplete = true; } }
/// <summary> /// Setups the specified context. /// </summary> /// <param name="db">The db.</param> public void Initialise(Database db) { var manager = new DataManager(db); var context = new CallContext(manager, db.GetDataProviders().Count()); lock (_setupLock) { try { if (_setupComplete) return; global::Sitecore.Diagnostics.Log.Info("Started CodeFirst setup", this); var sqlProvider = GetSqlProvider(db); var glassFolder = GetGlassTemplateFolder(sqlProvider, context); if (Context.Contexts.Keys.Any(x => x == ContextName)) { var glsContext = Context.Contexts[ContextName]; _typeConfigurations = glsContext.TypeConfigurations .Where(x => x.Value is SitecoreTypeConfiguration) .ToDictionary(x => x.Key, x => x.Value as SitecoreTypeConfiguration); foreach (var cls in _typeConfigurations.Where(x => x.Value.CodeFirst)) { var templateDefinition = sqlProvider.GetItemDefinition(cls.Value.TemplateId, context); if (templateDefinition == ItemDefinition.Empty || templateDefinition == null) { var containingFolder = GetTemplateFolder(cls.Key.Namespace, glassFolder, sqlProvider, context); templateDefinition = CreateTemplateItem(db, cls.Value, cls.Key, sqlProvider, containingFolder, context); } BaseTemplateChecks(templateDefinition, sqlProvider, context, cls.Value); //initialize sections and children foreach (ID sectionId in this.GetChildIDsTemplate(cls.Value, templateDefinition, context)) { this.GetChildIDsSection(SectionTable.First(s => s.SectionId == sectionId), context); } } if (global::Sitecore.Configuration.Settings.GetBoolSetting( "AutomaticallyRemoveDeletedTemplates", true)) RemoveDeletedClasses(glassFolder, sqlProvider, context); global::Sitecore.Diagnostics.Log.Info("Finished CodeFirst setup", this); } ClearCaches(db); } finally { _setupComplete = true; } } }
/// <summary> /// Setups the specified context. /// </summary> /// <param name="context">The context.</param> public void Initialise(Database db) { var manager = new DataManager(db); var context = new CallContext(manager, db.GetDataProviders().Count()); lock (_setupLock) { try { if (_setupComplete) { return; } global::Sitecore.Diagnostics.Log.Info("Started CodeFirst setup", this); var providers = db.GetDataProviders(); var provider = providers.FirstOrDefault(x => !(x is GlassDataProvider)); var templateFolder = provider.GetItemDefinition(TemplateFolderId, context); var glassFolder = provider.GetItemDefinition(GlassFolderId, context); if (glassFolder == ItemDefinition.Empty || glassFolder == null) { provider.CreateItem(GlassFolderId, "GlassTemplates", FolderTemplateId, templateFolder, context); } if (Context.Contexts.Keys.Any(x => x == ContextName)) { var glsContext = Context.Contexts[ContextName]; _typeConfigurations = glsContext.TypeConfigurations .Where(x => x.Value is SitecoreTypeConfiguration) .ToDictionary(x => x.Key, x => x.Value as SitecoreTypeConfiguration); foreach (var cls in _typeConfigurations.Where(x => x.Value.CodeFirst)) { var clsTemplate = provider.GetItemDefinition(cls.Value.TemplateId, context); if (clsTemplate == ItemDefinition.Empty || clsTemplate == null) { //setup folders IEnumerable <string> namespaces = cls.Key.Namespace.Split('.'); namespaces = namespaces.SkipWhile(x => x != "Templates").Skip(1); ItemDefinition containing = glassFolder; foreach (var ns in namespaces) { var children = provider.GetChildIDs(containing, context); ItemDefinition found = null; foreach (ID child in children) { if (!ID.IsNullOrEmpty(child)) { var childDef = provider.GetItemDefinition(child, context); if (childDef.Name == ns) { found = childDef; } } } if (found == null) { ID newId = ID.NewID; provider.CreateItem(newId, ns, FolderTemplateId, containing, context); found = provider.GetItemDefinition(newId, context); } containing = found; } //create the template in Sitecore string templateName = cls.Value.TemplateName; if (string.IsNullOrEmpty(templateName)) { templateName = cls.Key.Name; } provider.CreateItem(cls.Value.TemplateId, templateName, TemplateTemplateId, containing, context); clsTemplate = provider.GetItemDefinition(cls.Value.TemplateId, context); //Assign the base template var templateItem = Factory.GetDatabase("master").GetItem(clsTemplate.ID); using (new SecurityDisabler()) { templateItem.Editing.BeginEdit(); templateItem["__Base template"] = "{1930BBEB-7805-471A-A3BE-4858AC7CF696}"; templateItem.Editing.EndEdit(); } } BaseTemplateChecks(clsTemplate, provider, context, cls.Value); //initialize sections and children foreach (ID sectionId in this.GetChildIDsTemplate(cls.Value, clsTemplate, context)) { this.GetChildIDsSection(SectionTable.First(s => s.SectionId == sectionId), context); } } if (global::Sitecore.Configuration.Settings.GetBoolSetting( "AutomaticallyRemoveDeletedTemplates", true)) { RemoveDeletedClasses(glassFolder, provider, context); } global::Sitecore.Diagnostics.Log.Info("Finished CodeFirst setup", this); } db.Caches.DataCache.Clear(); db.Caches.ItemCache.Clear(); db.Caches.ItemPathsCache.Clear(); db.Caches.StandardValuesCache.Clear(); db.Caches.PathCache.Clear(); } finally { _setupComplete = true; } } }