public static PropertyType MakeNew(DataTypeDefinition dt, ContentType ct, string name, string alias) { //make sure that the alias starts with a letter if (string.IsNullOrEmpty(alias)) { throw new ArgumentNullException("alias"); } if (string.IsNullOrEmpty(name)) { throw new ArgumentNullException("name"); } if (!Char.IsLetter(alias[0])) { throw new ArgumentException("alias must start with a letter", "alias"); } PropertyType pt; try { // The method is synchronized, but we'll still look it up with an additional parameter (alias) using (var sqlHelper = Application.SqlHelper) sqlHelper.ExecuteNonQuery( "INSERT INTO cmsPropertyType (DataTypeId, ContentTypeId, alias, name) VALUES (@DataTypeId, @ContentTypeId, @alias, @name)", sqlHelper.CreateParameter("@DataTypeId", dt.Id), sqlHelper.CreateParameter("@ContentTypeId", ct.Id), sqlHelper.CreateParameter("@alias", alias), sqlHelper.CreateParameter("@name", name)); using (var sqlHelper = Application.SqlHelper) pt = new PropertyType(sqlHelper.ExecuteScalar <int>("SELECT MAX(id) FROM cmsPropertyType WHERE alias=@alias", sqlHelper.CreateParameter("@alias", alias))); } finally { // Clear cached items ApplicationContext.Current.ApplicationCache.RuntimeCache.ClearCacheByKeySearch(CacheKeys.PropertyTypeCacheKey); } return(pt); }
protected void AddCustomMemberType() { //Admin user var adminUser = new User(0); //So let's add it... var customMemberType = MemberType.MakeNew(adminUser, ConfigHelper.GetCWSMemberTypeAlias()); customMemberType.Text = ConfigHelper.GetCWSMemberTypeName(); customMemberType.Alias = ConfigHelper.GetCWSMemberTypeAlias(); //Our DataType's (Have to be verbose with namespace, due to conflict with Umbraco.Core.Models) var labelDataType = new umbraco.cms.businesslogic.datatype.DataTypeDefinition(LabelDataTypeID); var textstringDataType = new umbraco.cms.businesslogic.datatype.DataTypeDefinition(TextStringDataTypeID); var boolDataType = new umbraco.cms.businesslogic.datatype.DataTypeDefinition(BooleanDataTypeID); //Add the custom properties to our member type //Labels customMemberType.AddPropertyType(labelDataType, "resetGUID", "Reset GUID"); customMemberType.AddPropertyType(labelDataType, "emailVerifyGUID", "Email Verify GUID"); customMemberType.AddPropertyType(labelDataType, "numberOfLogins", "Number of Logins"); customMemberType.AddPropertyType(labelDataType, "lastLoggedIn", "Last logged in"); customMemberType.AddPropertyType(labelDataType, "numberOfProfileViews", "Number of Profile views"); customMemberType.AddPropertyType(labelDataType, "hostNameOfLastLogin", "Hostname of last login"); customMemberType.AddPropertyType(labelDataType, "IPofLastLogin", "IP of last login"); customMemberType.AddPropertyType(labelDataType, "profileURL", "Profile URL"); customMemberType.AddPropertyType(labelDataType, "joinedDate", "Joined Date"); //Booleans customMemberType.AddPropertyType(boolDataType, "hasVerifiedEmail", "Has Verified Email"); //Textsring customMemberType.AddPropertyType(textstringDataType, "description", "Description"); customMemberType.AddPropertyType(textstringDataType, "twitter", "Twitter"); customMemberType.AddPropertyType(textstringDataType, "linkedIn", "LinkedIn"); customMemberType.AddPropertyType(textstringDataType, "skype", "Skype"); //Save the changes customMemberType.Save(); }
protected void AddCustomMemberType() { //Admin user var adminUser = new User("admin"); //So let's add it... var customMemberType = MemberType.MakeNew(adminUser, "CWS-Member"); customMemberType.Text = "[CWS] Member"; customMemberType.Alias = "CWS-Member"; //Our DataType's (Have to be verbose with namespace, due to conflict with Umbraco.Core.Models) var labelDataType = new umbraco.cms.businesslogic.datatype.DataTypeDefinition(LabelDataTypeID); var textstringDataType = new umbraco.cms.businesslogic.datatype.DataTypeDefinition(TextStringDataTypeID); var boolDataType = new umbraco.cms.businesslogic.datatype.DataTypeDefinition(BooleanDataTypeID); //Add the custom properties to our member type //Labels customMemberType.AddPropertyType(labelDataType, "resetGUID", "Reset GUID"); customMemberType.AddPropertyType(labelDataType, "emailVerifyGUID", "Email Verify GUID"); customMemberType.AddPropertyType(labelDataType, "numberOfLogins", "Number of Logins"); customMemberType.AddPropertyType(labelDataType, "lastLoggedIn", "Last logged in"); customMemberType.AddPropertyType(labelDataType, "numberOfProfileViews", "Number of Profile views"); customMemberType.AddPropertyType(labelDataType, "hostNameOfLastLogin", "Hostname of last login"); customMemberType.AddPropertyType(labelDataType, "IPofLastLogin", "IP of last login"); customMemberType.AddPropertyType(labelDataType, "profileURL", "Profile URL"); customMemberType.AddPropertyType(labelDataType, "joinedDate", "Joined Date"); //Booleans customMemberType.AddPropertyType(boolDataType, "hasVerifiedEmail", "Has Verified Email"); //Textsring customMemberType.AddPropertyType(textstringDataType, "description", "Description"); customMemberType.AddPropertyType(textstringDataType, "twitter", "Twitter"); customMemberType.AddPropertyType(textstringDataType, "linkedIn", "LinkedIn"); customMemberType.AddPropertyType(textstringDataType, "skype", "Skype"); //Save the changes customMemberType.Save(); }
public void Publish() { CreatedPackage package = this; PackageInstance pack = package.Data; try { PublishEventArgs e = new PublishEventArgs(); package.FireBeforePublish(e); if (!e.Cancel) { int outInt = 0; //Path checking... string localPath = IOHelper.MapPath(SystemDirectories.Media + "/" + pack.Folder); if (!System.IO.Directory.Exists(localPath)) System.IO.Directory.CreateDirectory(localPath); //Init package file... createPackageManifest(); //Info section.. appendElement(utill.PackageInfo(pack, _packageManifest)); //Documents... int _contentNodeID = 0; if (!String.IsNullOrEmpty(pack.ContentNodeId) && int.TryParse(pack.ContentNodeId, out _contentNodeID)) { XmlNode documents = _packageManifest.CreateElement("Documents"); XmlNode documentSet = _packageManifest.CreateElement("DocumentSet"); XmlAttribute importMode = _packageManifest.CreateAttribute("importMode", ""); importMode.Value = "root"; documentSet.Attributes.Append(importMode); documents.AppendChild(documentSet); //load content from umbraco. cms.businesslogic.web.Document umbDocument = new Document(_contentNodeID); documentSet.AppendChild(umbDocument.ToXml(_packageManifest, pack.ContentLoadChildNodes)); appendElement(documents); } //Document types.. List<DocumentType> dtl = new List<DocumentType>(); XmlNode docTypes = _packageManifest.CreateElement("DocumentTypes"); foreach (string dtId in pack.Documenttypes) { if (int.TryParse(dtId, out outInt)) { DocumentType docT = new DocumentType(outInt); AddDocumentType(docT, ref dtl); } } foreach (DocumentType d in dtl) { docTypes.AppendChild(d.ToXml(_packageManifest)); } appendElement(docTypes); //Templates XmlNode templates = _packageManifest.CreateElement("Templates"); foreach (string templateId in pack.Templates) { if (int.TryParse(templateId, out outInt)) { Template t = new Template(outInt); templates.AppendChild(t.ToXml(_packageManifest)); } } appendElement(templates); //Stylesheets XmlNode stylesheets = _packageManifest.CreateElement("Stylesheets"); foreach (string ssId in pack.Stylesheets) { if (int.TryParse(ssId, out outInt)) { StyleSheet s = new StyleSheet(outInt); stylesheets.AppendChild(s.ToXml(_packageManifest)); } } appendElement(stylesheets); //Macros XmlNode macros = _packageManifest.CreateElement("Macros"); foreach (string macroId in pack.Macros) { if (int.TryParse(macroId, out outInt)) { macros.AppendChild(utill.Macro(int.Parse(macroId), true, localPath, _packageManifest)); } } appendElement(macros); //Dictionary Items XmlNode dictionaryItems = _packageManifest.CreateElement("DictionaryItems"); foreach (string dictionaryId in pack.DictionaryItems) { if (int.TryParse(dictionaryId, out outInt)) { Dictionary.DictionaryItem di = new Dictionary.DictionaryItem(outInt); dictionaryItems.AppendChild(di.ToXml(_packageManifest)); } } appendElement(dictionaryItems); //Languages XmlNode languages = _packageManifest.CreateElement("Languages"); foreach (string langId in pack.Languages) { if (int.TryParse(langId, out outInt)) { language.Language lang = new umbraco.cms.businesslogic.language.Language(outInt); languages.AppendChild(lang.ToXml(_packageManifest)); } } appendElement(languages); //Datatypes XmlNode dataTypes = _packageManifest.CreateElement("DataTypes"); foreach (string dtId in pack.DataTypes) { if (int.TryParse(dtId, out outInt)) { cms.businesslogic.datatype.DataTypeDefinition dtd = new umbraco.cms.businesslogic.datatype.DataTypeDefinition(outInt); dataTypes.AppendChild(dtd.ToXml(_packageManifest)); } } appendElement(dataTypes); //Files foreach (string fileName in pack.Files) { utill.AppendFileToManifest(fileName, localPath, _packageManifest); } //Load control on install... if (!string.IsNullOrEmpty(pack.LoadControl)) { XmlNode control = _packageManifest.CreateElement("control"); control.InnerText = pack.LoadControl; utill.AppendFileToManifest(pack.LoadControl, localPath, _packageManifest); appendElement(control); } //Actions if (!string.IsNullOrEmpty(pack.Actions)) { try { XmlDocument xd_actions = new XmlDocument(); xd_actions.LoadXml("<Actions>" + pack.Actions + "</Actions>"); XmlNode actions = xd_actions.DocumentElement.SelectSingleNode("."); if (actions != null) { actions = _packageManifest.ImportNode(actions, true).Clone(); appendElement(actions); } } catch { } } string manifestFileName = localPath + "/package.xml"; if (System.IO.File.Exists(manifestFileName)) System.IO.File.Delete(manifestFileName); _packageManifest.Save(manifestFileName); _packageManifest = null; //string packPath = Settings.PackagerRoot.Replace(System.IO.Path.DirectorySeparatorChar.ToString(), "/") + "/" + pack.Name.Replace(' ', '_') + "_" + pack.Version.Replace(' ', '_') + "." + Settings.PackageFileExtension; // check if there's a packages directory below media string packagesDirectory = SystemDirectories.Media + "/created-packages"; if (!System.IO.Directory.Exists(IOHelper.MapPath(packagesDirectory))) System.IO.Directory.CreateDirectory(IOHelper.MapPath(packagesDirectory)); string packPath = packagesDirectory + "/" + (pack.Name + "_" + pack.Version).Replace(' ', '_') + "." + Settings.PackageFileExtension; utill.ZipPackage(localPath, IOHelper.MapPath(packPath)); pack.PackagePath = packPath; if (pack.PackageGuid.Trim() == "") pack.PackageGuid = Guid.NewGuid().ToString(); package.Save(); //Clean up.. System.IO.File.Delete(localPath + "/package.xml"); System.IO.Directory.Delete(localPath, true); package.FireAfterPublish(e); } } catch (Exception ex) { LogHelper.Error<CreatedPackage>("An error occurred", ex); } }
public void Publish() { CreatedPackage package = this; PackageInstance pack = package.Data; try { PublishEventArgs e = new PublishEventArgs(); package.FireBeforePublish(e); if (!e.Cancel) { int outInt = 0; //Path checking... string localPath = IOHelper.MapPath(SystemDirectories.Media + "/" + pack.Folder); if (!System.IO.Directory.Exists(localPath)) { System.IO.Directory.CreateDirectory(localPath); } //Init package file... createPackageManifest(); //Info section.. appendElement(utill.PackageInfo(pack, _packageManifest)); //Documents... int _contentNodeID = 0; if (!String.IsNullOrEmpty(pack.ContentNodeId) && int.TryParse(pack.ContentNodeId, out _contentNodeID)) { XmlNode documents = _packageManifest.CreateElement("Documents"); XmlNode documentSet = _packageManifest.CreateElement("DocumentSet"); XmlAttribute importMode = _packageManifest.CreateAttribute("importMode", ""); importMode.Value = "root"; documentSet.Attributes.Append(importMode); documents.AppendChild(documentSet); //load content from umbraco. cms.businesslogic.web.Document umbDocument = new Document(_contentNodeID); documentSet.AppendChild(umbDocument.ToXml(_packageManifest, pack.ContentLoadChildNodes)); appendElement(documents); } //Document types.. List <DocumentType> dtl = new List <DocumentType>(); XmlNode docTypes = _packageManifest.CreateElement("DocumentTypes"); foreach (string dtId in pack.Documenttypes) { if (int.TryParse(dtId, out outInt)) { DocumentType docT = new DocumentType(outInt); AddDocumentType(docT, ref dtl); } } foreach (DocumentType d in dtl) { docTypes.AppendChild(d.ToXml(_packageManifest)); } appendElement(docTypes); //Templates XmlNode templates = _packageManifest.CreateElement("Templates"); foreach (string templateId in pack.Templates) { if (int.TryParse(templateId, out outInt)) { Template t = new Template(outInt); templates.AppendChild(t.ToXml(_packageManifest)); } } appendElement(templates); //Stylesheets XmlNode stylesheets = _packageManifest.CreateElement("Stylesheets"); foreach (string ssId in pack.Stylesheets) { if (int.TryParse(ssId, out outInt)) { StyleSheet s = new StyleSheet(outInt); stylesheets.AppendChild(s.ToXml(_packageManifest)); } } appendElement(stylesheets); //Macros XmlNode macros = _packageManifest.CreateElement("Macros"); foreach (string macroId in pack.Macros) { if (int.TryParse(macroId, out outInt)) { macros.AppendChild(utill.Macro(int.Parse(macroId), true, localPath, _packageManifest)); } } appendElement(macros); //Dictionary Items XmlNode dictionaryItems = _packageManifest.CreateElement("DictionaryItems"); foreach (string dictionaryId in pack.DictionaryItems) { if (int.TryParse(dictionaryId, out outInt)) { Dictionary.DictionaryItem di = new Dictionary.DictionaryItem(outInt); dictionaryItems.AppendChild(di.ToXml(_packageManifest)); } } appendElement(dictionaryItems); //Languages XmlNode languages = _packageManifest.CreateElement("Languages"); foreach (string langId in pack.Languages) { if (int.TryParse(langId, out outInt)) { language.Language lang = new umbraco.cms.businesslogic.language.Language(outInt); languages.AppendChild(lang.ToXml(_packageManifest)); } } appendElement(languages); //Datatypes XmlNode dataTypes = _packageManifest.CreateElement("DataTypes"); foreach (string dtId in pack.DataTypes) { if (int.TryParse(dtId, out outInt)) { cms.businesslogic.datatype.DataTypeDefinition dtd = new umbraco.cms.businesslogic.datatype.DataTypeDefinition(outInt); dataTypes.AppendChild(dtd.ToXml(_packageManifest)); } } appendElement(dataTypes); //Files foreach (string fileName in pack.Files) { utill.AppendFileToManifest(fileName, localPath, _packageManifest); } //Load control on install... if (!string.IsNullOrEmpty(pack.LoadControl)) { XmlNode control = _packageManifest.CreateElement("control"); control.InnerText = pack.LoadControl; utill.AppendFileToManifest(pack.LoadControl, localPath, _packageManifest); appendElement(control); } //Actions if (!string.IsNullOrEmpty(pack.Actions)) { try { XmlDocument xd_actions = new XmlDocument(); xd_actions.LoadXml("<Actions>" + pack.Actions + "</Actions>"); XmlNode actions = xd_actions.DocumentElement.SelectSingleNode("."); if (actions != null) { actions = _packageManifest.ImportNode(actions, true).Clone(); appendElement(actions); } } catch { } } string manifestFileName = localPath + "/package.xml"; if (System.IO.File.Exists(manifestFileName)) { System.IO.File.Delete(manifestFileName); } _packageManifest.Save(manifestFileName); _packageManifest = null; //string packPath = Settings.PackagerRoot.Replace(System.IO.Path.DirectorySeparatorChar.ToString(), "/") + "/" + pack.Name.Replace(' ', '_') + "_" + pack.Version.Replace(' ', '_') + "." + Settings.PackageFileExtension; // check if there's a packages directory below media string packagesDirectory = SystemDirectories.Media + "/created-packages"; if (!System.IO.Directory.Exists(IOHelper.MapPath(packagesDirectory))) { System.IO.Directory.CreateDirectory(IOHelper.MapPath(packagesDirectory)); } string packPath = packagesDirectory + "/" + (pack.Name + "_" + pack.Version).Replace(' ', '_') + "." + Settings.PackageFileExtension; utill.ZipPackage(localPath, IOHelper.MapPath(packPath)); pack.PackagePath = packPath; if (pack.PackageGuid.Trim() == "") { pack.PackageGuid = Guid.NewGuid().ToString(); } package.Save(); //Clean up.. System.IO.File.Delete(localPath + "/package.xml"); System.IO.Directory.Delete(localPath, true); package.FireAfterPublish(e); } } catch (Exception ex) { LogHelper.Error <CreatedPackage>("An error occurred", ex); } }
/// <summary> /// Adding a PropertyType to the ContentType, will add a new datafield/Property on all Documents of this Type. /// </summary> /// <param name="dt">The DataTypeDefinition of the PropertyType</param> /// <param name="Alias">The Alias of the PropertyType</param> /// <param name="Name">The userfriendly name</param> public PropertyType AddPropertyType(DataTypeDefinition dt, string Alias, string Name) { PropertyType pt = PropertyType.MakeNew(dt, this, Name, Alias); // Optimized call PopulatePropertyData(pt, Id); // Inherited content types (document types only) PopulateMasterContentTypes(pt, Id); // foreach (Content c in Content.getContentOfContentType(this)) // c.addProperty(pt,c.Version); // Remove from cache FlushFromCache(Id); return pt; }
private void SynchronizeMemberTypeProperties(Type typeMemberType, MemberType memberType) { int propertySortOrder = 0; foreach (PropertyInfo propInfo in typeMemberType.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) { DocumentTypePropertyAttribute propAttr = Util.GetAttribute <DocumentTypePropertyAttribute>(propInfo); if (propAttr == null) { continue; // skip this property - not part of a document type } // getting name and alias string propertyName; string propertyAlias; DocumentTypeManager.ReadPropertyNameAndAlias(propInfo, propAttr, out propertyName, out propertyAlias); if (HasObsoleteAttribute(propInfo)) { Util.DeletePropertyType(memberType, propertyAlias); continue; } if (propAttr.DefaultValue != null) { _hadDefaultValues = true; // at least one property has a default value } umbraco.cms.businesslogic.datatype.DataTypeDefinition dataTypeDefinition = GetDataTypeDefinition(typeMemberType, propAttr, propInfo); // getting property if already exists, or creating new if it not exists umbraco.cms.businesslogic.propertytype.PropertyType propertyType = memberType.PropertyTypes.FirstOrDefault(p => p.Alias == propertyAlias); if (propertyType == null) // if not exists, create it { memberType.AddPropertyType(dataTypeDefinition, propertyAlias, propertyName); propertyType = memberType.PropertyTypes.FirstOrDefault(p => p.Alias == propertyAlias); } //// Setting up the tab of this property. If tab doesn't exists, create it. if (!string.IsNullOrEmpty(propAttr.TabAsString) && propAttr.TabAsString.ToLower() != DocumentTypeDefaultValues.TabGenericProperties.ToLower()) { // try to find this tab umbraco.cms.businesslogic.propertytype.PropertyTypeGroup pg = memberType.PropertyTypeGroups.FirstOrDefault(x => x.Name == propAttr.TabAsString); if (pg == null) // if found { memberType.AddVirtualTab(propAttr.TabAsString); pg = memberType.PropertyTypeGroups.FirstOrDefault(x => x.Name == propAttr.TabAsString); } if (propAttr.TabOrder.HasValue) { pg.SortOrder = propAttr.TabOrder.Value; } propertyType.PropertyTypeGroup = pg.Id; } propertyType.Name = propertyName; propertyType.Mandatory = propAttr.Mandatory; propertyType.ValidationRegExp = propAttr.ValidationRegExp; propertyType.Description = propAttr.Description; propertyType.SortOrder = propertySortOrder; propertySortOrder++; } }