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();
        }
Beispiel #4
0
        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);
			}
        }
Beispiel #5
0
        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;
        }
Beispiel #7
0
        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++;
            }
        }