The method installs the module in Sitefinity system.
public override void Install(SiteInitializer initializer)
{
base.Install(initializer);
IModule productsModule;
SystemManager.ApplicationModules.TryGetValue(ProductsModule.ModuleName, out productsModule);
string resourceAssembly = this.GetType().Assembly.FullName;
string customTemplatesArea = "Products module SDK sample";
string friendlyWidgetName = "Products module sample widget";
initializer.RegisterControlTemplate(MasterListView.titlesOnlyLayoutTemplateName, typeof(MasterListView).FullName, ProductsDefinitions.FrontendTitlesOnlyListViewName, null, customTemplatesArea, Presentation.AspNetTemplate, friendlyControlName: friendlyWidgetName);
initializer.RegisterControlTemplate(MasterListView.titlesDatesLayoutTemplateName, typeof(MasterListView).FullName, ProductsDefinitions.FrontendTitlesDatesListViewName, null, customTemplatesArea, Presentation.AspNetTemplate, friendlyControlName: friendlyWidgetName);
initializer.RegisterControlTemplate(MasterListView.titlesDatesSummariesLayoutTemplateName, typeof(MasterListView).FullName, ProductsDefinitions.FrontendTitlesDatesSummariesListViewName, null, customTemplatesArea, Presentation.AspNetTemplate, friendlyControlName: friendlyWidgetName);
initializer.RegisterControlTemplate(MasterListView.titlesDatesContentsLayoutTemplateName, typeof(MasterListView).FullName, ProductsDefinitions.FrontendTitlesDatesContentsListViewName, null, customTemplatesArea, Presentation.AspNetTemplate, friendlyControlName: friendlyWidgetName);
initializer.RegisterControlTemplate(ProductDetailsView.layoutTemplateName, typeof(ProductDetailsView).FullName, ProductsDefinitions.FrontendFullProductItemDetailViewName, null, customTemplatesArea, Presentation.AspNetTemplate, resourceAssembly, friendlyWidgetName);
this.InstallCustomPermissions(initializer);
this.InstallCustomWorkflow(initializer);
this.InstallCustomVirtualPaths(initializer);
this.InstallCustomTaxonomies(initializer);
}
private void InstallCustomVirtualPaths(SiteInitializer initializer)
{
var virtualPathConfig = initializer.Context.GetConfig<VirtualPathSettingsConfig>();
ConfigManager.Executed += new EventHandler<ExecutedEventArgs>(ConfigManager_Executed);
var productsModuleVirtualPathConfig = new VirtualPathElement(virtualPathConfig.VirtualPaths)
{
VirtualPath = ProductsModule.ProductsVirtualPath + "*",
ResolverName = "EmbeddedResourceResolver",
ResourceLocation = "ProductsModule"
};
if (!virtualPathConfig.VirtualPaths.ContainsKey(ProductsModule.ProductsVirtualPath + "*"))
virtualPathConfig.VirtualPaths.Add(productsModuleVirtualPathConfig);
}
private void ConfigManager_Executed(object sender, Telerik.Sitefinity.Data.ExecutedEventArgs args)
{
if (args.CommandName == "SaveSection")
{
var section = args.CommandArguments as VirtualPathSettingsConfig;
if (section != null)
{
// Reset the VirtualPathManager whenever we save the VirtualPathConfig section.
// This is needed so that our prefixes for the widget templates in the module assembly are taken into account.
VirtualPathManager.Reset();
}
}
}
private void InstallCustomWorkflow(SiteInitializer initializer)
{
var workflowConfig = initializer.Context.GetConfig<WorkflowConfig>();
if (!workflowConfig.Workflows.ContainsKey(typeof(ProductItem).FullName))
{
workflowConfig.Workflows.Add(
new WorkflowElement(workflowConfig.Workflows)
{
ContentType = typeof(ProductItem).FullName,
ServiceUrl = WorkflowRelativeUrl,
Title = "ModuleTitle",
ResourceClassId = typeof(ProductsResources).Name
});
initializer.InstallEmbeddedVirtualPath(WorkflowRelativeUrl, WorkflowEmbeddedPath, typeof(ProductsModule).Assembly);
}
}
private void InstallCustomPermissions(SiteInitializer initializer)
{
SecurityConfig securityConfig = initializer.Context.GetConfig<SecurityConfig>();
ConfigElementDictionary<string, Telerik.Sitefinity.Security.Configuration.Permission> permissionSetConfig = securityConfig.Permissions;
ConfigElementDictionary<string, CustomPermissionsDisplaySettingsConfig> CustomPermissionsDisplaySettings = securityConfig.CustomPermissionsDisplaySettings;
//Add the set
if (!permissionSetConfig.ContainsKey(ProductsConstants.Security.PermissionSetName))
{
var productsPermissionSet = new Telerik.Sitefinity.Security.Configuration.Permission(permissionSetConfig)
{
Name = ProductsConstants.Security.PermissionSetName,
Title = "ProductsPermissions",
Description = "ProductsPermissionsDescription",
ResourceClassId = typeof(ProductsResources).Name
};
permissionSetConfig.Add(productsPermissionSet);
productsPermissionSet.Actions.Add(new SecurityAction(productsPermissionSet.Actions)
{
Name = ProductsConstants.Security.View,
Type = SecurityActionTypes.View,
Title = "ViewProducts",
Description = "ViewProductsDescription",
ResourceClassId = typeof(ProductsResources).Name
});
productsPermissionSet.Actions.Add(new SecurityAction(productsPermissionSet.Actions)
{
Name = ProductsConstants.Security.Create,
Type = SecurityActionTypes.Create,
Title = "CreateProducts",
Description = "CreateProductsDescription",
ResourceClassId = typeof(ProductsResources).Name
});
productsPermissionSet.Actions.Add(new SecurityAction(productsPermissionSet.Actions)
{
Name = ProductsConstants.Security.Modify,
Type = SecurityActionTypes.Modify,
Title = "ModifyProducts",
Description = "ModifyProductsDescription",
ResourceClassId = typeof(ProductsResources).Name
});
productsPermissionSet.Actions.Add(new SecurityAction(productsPermissionSet.Actions)
{
Name = ProductsConstants.Security.Delete,
Type = SecurityActionTypes.Delete,
Title = "DeleteProducts",
Description = "DeleteProductsDescription",
ResourceClassId = typeof(ProductsResources).Name
});
productsPermissionSet.Actions.Add(new SecurityAction(productsPermissionSet.Actions)
{
Name = ProductsConstants.Security.ChangeOwner,
Type = SecurityActionTypes.ChangeOwner,
Title = "ChangeProductsOwner",
Description = "ChangeProductsOwnerDescription",
ResourceClassId = typeof(ProductsResources).Name
});
productsPermissionSet.Actions.Add(new SecurityAction(productsPermissionSet.Actions)
{
Name = ProductsConstants.Security.ChangePermissions,
Type = SecurityActionTypes.ChangePermissions,
Title = "ChangeProductsPermissions",
Description = "ChangeProductsPermissionsDescription",
ResourceClassId = typeof(ProductsResources).Name
});
}
//Custom UI views
if (!CustomPermissionsDisplaySettings.ContainsKey(ProductsConstants.Security.PermissionSetName))
{
var productsCustomSet = new CustomPermissionsDisplaySettingsConfig(CustomPermissionsDisplaySettings)
{
SetName = ProductsConstants.Security.PermissionSetName
};
CustomPermissionsDisplaySettings.Add(productsCustomSet);
var productsCustomActions = new SecuredObjectCustomPermissionSet(productsCustomSet.SecuredObjectCustomPermissionSets) { TypeName = typeof(ProductItem).FullName };
productsCustomSet.SecuredObjectCustomPermissionSets.Add(productsCustomActions);
var blogCreateAction = new CustomSecurityAction(productsCustomActions.CustomSecurityActions)
{
Name = ProductsConstants.Security.Create,
ShowActionInList = false,
Title = string.Empty,
ResourceClassId = string.Empty
};
productsCustomActions.CustomSecurityActions.Add(blogCreateAction);
var blogModifyAction = new CustomSecurityAction(productsCustomActions.CustomSecurityActions)
{
Name = ProductsConstants.Security.Modify,
ShowActionInList = true,
Title = "ModifyThisProduct",
ResourceClassId = typeof(ProductsResources).Name
};
productsCustomActions.CustomSecurityActions.Add(blogModifyAction);
var blogViewAction = new CustomSecurityAction(productsCustomActions.CustomSecurityActions)
{
Name = ProductsConstants.Security.View,
ShowActionInList = true,
Title = "ViewThisProduct",
ResourceClassId = typeof(ProductsResources).Name
};
productsCustomActions.CustomSecurityActions.Add(blogViewAction);
var blogDeleteAction = new CustomSecurityAction(productsCustomActions.CustomSecurityActions)
{
Name = ProductsConstants.Security.Delete,
ShowActionInList = true,
Title = "DeleteThisProduct",
ResourceClassId = typeof(ProductsResources).Name
};
productsCustomActions.CustomSecurityActions.Add(blogDeleteAction);
var blogChangeOwnerAction = new CustomSecurityAction(productsCustomActions.CustomSecurityActions)
{
Name = ProductsConstants.Security.ChangeOwner,
ShowActionInList = true,
Title = "ChangeOwnerOfThisProduct",
ResourceClassId = typeof(ProductsResources).Name
};
productsCustomActions.CustomSecurityActions.Add(blogChangeOwnerAction);
var blogChangePermissionsAction = new CustomSecurityAction(productsCustomActions.CustomSecurityActions)
{
Name = ProductsConstants.Security.ChangePermissions,
ShowActionInList = true,
Title = "ChangePermissionsOfThisProduct",
ResourceClassId = typeof(ProductsResources).Name
};
productsCustomActions.CustomSecurityActions.Add(blogChangePermissionsAction);
}
}
protected void InstallCustomTaxonomies(SiteInitializer initializer)
{
//installs the default Tags and Category taxonomies
this.InstallTaxonomy(initializer, typeof(ProductItem));
var metaMan = initializer.Context.MetadataManager;
var taxMan = initializer.TaxonomyManager;
var flatTaxonomy = this.CreateTaxonomy<FlatTaxonomy>(initializer, "Colors", ColorsTaxonomyId, "Color");
var taxon1 = initializer.TaxonomyManager.CreateTaxon<FlatTaxon>();
taxon1.Title = "Red";
taxon1.Name = "Red";
var taxon2 = initializer.TaxonomyManager.CreateTaxon<FlatTaxon>();
taxon2.Title = "Blue";
taxon2.Name = "Blue";
flatTaxonomy.Taxa.Add(taxon1);
flatTaxonomy.Taxa.Add(taxon2);
var type = metaMan.GetMetaType(typeof(ProductItem));
if (type == null)
{
type = metaMan.CreateMetaType(typeof(ProductItem));
}
if (!type.Fields.ToList().Any(fld => fld.FieldName == "Colors"))
{
var field = metaMan.CreateMetafield("Colors");
field.TaxonomyProvider = taxMan.Provider.Name;
field.TaxonomyId = ColorsTaxonomyId;
field.IsSingleTaxon = false;
type.Fields.Add(field);
}
if (!type.Fields.ToList().Any(fld => fld.FieldName == "ProductImage"))
{
type.Fields.Add(ContentLinksExtensions.CreateContentLinkField("ProductImage", "OpenAccessDataProvider", metaMan, RelationshipType.OneToOne));
}
}
private TTaxonomy CreateTaxonomy<TTaxonomy>(SiteInitializer initializer, string taxonomyName, Guid taxonomyId, string taxonName) where TTaxonomy : class, ITaxonomy
{
var taxMan = initializer.TaxonomyManager;
var taxonomy = taxMan.GetTaxonomies<TTaxonomy>().FirstOrDefault(t => t.Name == taxonomyName);
if (taxonomy == null)
{
taxonomy = taxMan.CreateTaxonomy<TTaxonomy>(taxonomyId);
taxonomy.Name = taxonomyName;
taxonomy.Title = taxonomyName;
taxonomy.TaxonName = taxonName;
((ISecuredObject)taxonomy).CanInheritPermissions = true;
((ISecuredObject)taxonomy).InheritsPermissions = true;
((ISecuredObject)taxonomy).SupportedPermissionSets = new string[] { SecurityConstants.Sets.Taxonomies.SetName };
}
return taxonomy;
}
In the Install method you register custom permissions, workflows, virtual paths and taxonomies.