/// <summary> /// Adds a "grade" field to the search index /// </summary> /// <param name="doc"></param> /// <param name="metaField"></param> /// <param name="metaObject"></param> private void AddGradeFields(Document doc, MetaField metaField, System.Collections.Hashtable metaObject) { object val = MetaHelper.GetMetaFieldValue(metaField, metaObject[metaField.Name]); string[] grades = parseGradeRange(val.ToString()); if (grades.Length > 0) { //Add the smallest grade to the index and make it a number for sorting int gradeNumber = parseGradeName(grades[0]) + 1; //no negative numbers in the index doc.Add(new Field("GradeNumber", ConvertStringToSortable(gradeNumber.ToString()), Field.Store.YES, Field.Index.UN_TOKENIZED)); } foreach (string grade in grades) { doc.Add(new Field("Grade", grade, Field.Store.YES, Field.Index.UN_TOKENIZED)); } }
/// <summary> /// Creates the attributes. /// </summary> /// <param name="metaAttributes">The meta attributes.</param> /// <param name="row">The row.</param> public static void CreateAttributes(ItemAttributes metaAttributes, DataRow row) { ArrayList attributes = new ArrayList(); ArrayList files = new ArrayList(); ArrayList images = new ArrayList(); // Make sure we don't loose someone elses data if (metaAttributes != null && metaAttributes.Attribute != null) { foreach (ItemAttribute attr in metaAttributes.Attribute) { attributes.Add(attr); } } // Make sure we don't loose someone elses data if (metaAttributes != null && metaAttributes.Files != null && metaAttributes.Files.File != null) { foreach (ItemFile file in metaAttributes.Files.File) { files.Add(file); } } // Make sure we don't loose someone elses data if (metaAttributes != null && metaAttributes.Images != null) { //Changed this loop from a foreach to a for loop because metaAttributes.Image //was originally used but has been deprecated. metaAttributes.Images.Image //used instead for (int i = 0; i < metaAttributes.Images.Image.Length; i++) { images.Add(metaAttributes.Images.Image[i]); } } // Get meta class id int metaClassId = (int)row["MetaClassId"]; if (metaClassId == 0) { return; } // load list of MetaFields for MetaClass MetaClass metaClass = MetaHelper.LoadMetaClassCached(CatalogContext.MetaDataContext, metaClassId); if (metaClass == null) { return; } MetaFieldCollection mfs = metaClass.MetaFields; if (mfs == null) { return; } Hashtable hash = GetMetaFieldValues(row, metaClass, ref metaAttributes); /* * Hashtable hash = null; * * // try loading from serialized binary field first * if (row.Table.Columns.Contains(MetaObjectSerialized.SerializedFieldName) && row[MetaObjectSerialized.SerializedFieldName] != DBNull.Value) * { * IFormatter formatter = null; * try * { * formatter = new BinaryFormatter(); * MetaObjectSerialized metaObjSerialized = (MetaObjectSerialized)formatter.Deserialize(new MemoryStream((byte[])row[MetaObjectSerialized.SerializedFieldName])); * if (metaObjSerialized != null) * { * metaAttributes.CreatedBy = metaObjSerialized.CreatorId; * metaAttributes.CreatedDate = metaObjSerialized.Created; * metaAttributes.ModifiedBy = metaObjSerialized.ModifierId; * metaAttributes.ModifiedDate = metaObjSerialized.Modified; * hash = metaObjSerialized.GetValues(CatalogContext.MetaDataContext.Language); * } * } * finally * { * formatter = null; * } * } * * // Load from database * if (hash == null) * { * MetaObject metaObj = MetaObject.Load(CatalogContext.MetaDataContext, (int)row[0], metaClass); * if (metaObj != null) * { * metaAttributes.CreatedBy = metaObj.CreatorId; * metaAttributes.CreatedDate = metaObj.Created; * metaAttributes.ModifiedBy = metaObj.ModifierId; * metaAttributes.ModifiedDate = metaObj.Modified; * hash = metaObj.GetValues(); * } * } * */ if (hash == null) { return; } // fill in MetaField DataSet foreach (MetaField mf in mfs) { // skip system MetaFields if (!mf.IsUser) { continue; } // get meta field's value object value = null; if (hash.ContainsKey(mf.Name)) { value = MetaHelper.GetMetaFieldValue(mf, hash[mf.Name]); } // create row in dataset for current meta field switch (mf.DataType) { case MetaDataType.File: MetaFile metaFile = value as MetaFile; if (metaFile != null) { ItemFile file = new ItemFile(); file.ContentType = metaFile.ContentType; file.FileContents = metaFile.Buffer; file.FileName = metaFile.Name; file.Name = mf.Name; file.Type = mf.DataType.ToString(); file.FriendlyName = mf.FriendlyName; files.Add(file); } break; case MetaDataType.Image: case MetaDataType.ImageFile: string fileName = String.Format("{0}-{1}-{2}", metaClassId, (int)row[0], mf.Name); bool createThumbnail = false; int imageWidth = 0; int imageHeight = 0; int thumbWidth = 0; int thumbHeight = 0; bool thumbStretch = false; object createThumbnaleObj = mf.Attributes["CreateThumbnail"]; if (createThumbnaleObj != null && Boolean.Parse(createThumbnaleObj.ToString())) { createThumbnail = true; object var = mf.Attributes["AutoResize"]; if (var != null && Boolean.Parse(var.ToString())) { var = mf.Attributes["ImageHeight"]; if (var != null) { imageHeight = Int32.Parse(var.ToString()); } var = mf.Attributes["ImageWidth"]; if (var != null) { imageHeight = Int32.Parse(var.ToString()); } } var = mf.Attributes["CreateThumbnail"]; if (var != null && Boolean.Parse(var.ToString())) { var = mf.Attributes["ThumbnailHeight"]; if (var != null) { thumbHeight = Int32.Parse(var.ToString()); } var = mf.Attributes["ThumbnailWidth"]; if (var != null) { thumbWidth = Int32.Parse(var.ToString()); } var = mf.Attributes["StretchThumbnail"]; if (var != null && Boolean.Parse(var.ToString())) { thumbStretch = true; } } } //string[] val = MetaHelper.GetCachedImageUrl((MetaFile)hash[mf.Name], mf, fileName, createThumbnail, thumbHeight, thumbWidth, thumbStretch); string imageUrl = ImageService.RetrieveImageUrl(fileName); string imageThumbUrl = ImageService.RetrieveThumbnailImageUrl(fileName); //if (val != null) { Image attr = CreateImage(mf.Name, imageUrl); if (createThumbnail) { attr.ThumbnailUrl = imageThumbUrl; } if (imageHeight != 0) { attr.Height = imageHeight.ToString(); } if (imageWidth != 0) { attr.Width = imageWidth.ToString(); } if (thumbHeight != 0) { attr.ThumbnailHeight = thumbHeight.ToString(); } if (thumbWidth != 0) { attr.ThumbnailWidth = thumbWidth.ToString(); } images.Add(attr); } break; case MetaDataType.BigInt: case MetaDataType.Bit: case MetaDataType.Boolean: case MetaDataType.Char: case MetaDataType.Date: case MetaDataType.DateTime: case MetaDataType.Decimal: case MetaDataType.Email: case MetaDataType.Float: case MetaDataType.Int: case MetaDataType.Integer: case MetaDataType.LongHtmlString: case MetaDataType.LongString: case MetaDataType.Money: case MetaDataType.NChar: case MetaDataType.NText: case MetaDataType.Numeric: case MetaDataType.NVarChar: case MetaDataType.Real: case MetaDataType.ShortString: case MetaDataType.SmallDateTime: case MetaDataType.SmallInt: case MetaDataType.SmallMoney: case MetaDataType.Sysname: case MetaDataType.Text: case MetaDataType.Timestamp: case MetaDataType.TinyInt: case MetaDataType.UniqueIdentifier: case MetaDataType.URL: case MetaDataType.VarChar: case MetaDataType.Variant: case MetaDataType.DictionarySingleValue: case MetaDataType.EnumSingleValue: attributes.Add(ObjectHelper.CreateAttribute(mf.Name, mf.FriendlyName, mf.DataType.ToString(), new string[] { value == null ? String.Empty : value.ToString() })); break; case MetaDataType.EnumMultiValue: case MetaDataType.DictionaryMultiValue: attributes.Add(ObjectHelper.CreateAttribute(mf.Name, mf.FriendlyName, "string[]", (string[])value)); break; case MetaDataType.StringDictionary: MetaStringDictionary stringDictionary = value as MetaStringDictionary; ArrayList strvals = new ArrayList(); if (stringDictionary != null) { foreach (string key in stringDictionary.Keys) { strvals.Add(String.Format("{0};{1}", key, stringDictionary[key])); } } attributes.Add(ObjectHelper.CreateAttribute(mf.Name, mf.FriendlyName, "string[]", stringDictionary == null ? null : (string[])strvals.ToArray(typeof(string)))); break; default: break; } } metaAttributes.Attribute = (ItemAttribute[])attributes.ToArray(typeof(ItemAttribute)); metaAttributes.Files = new ItemFiles(); metaAttributes.Files.File = (ItemFile[])files.ToArray(typeof(ItemFile)); metaAttributes.Images = new Images(); metaAttributes.Images.Image = (Image[])images.ToArray(typeof(Image)); }
/// <summary> /// Adds the field. /// </summary> /// <param name="doc">The doc.</param> /// <param name="metaField">The meta field.</param> /// <param name="metaObject">The meta object.</param> protected virtual void AddField(Document doc, MetaField metaField, Hashtable metaObject) { if (metaField.AllowSearch) { Field.Store store = null; Field.Index index = null; if (metaField.Attributes["IndexStored"] != null) { if (metaField.Attributes["IndexStored"].Equals("true", StringComparison.OrdinalIgnoreCase)) { store = Field.Store.YES; } else { store = Field.Store.NO; } } if (metaField.Attributes["IndexField"] != null) { if (metaField.Attributes["IndexField"].Equals("tokenized", StringComparison.OrdinalIgnoreCase)) { index = Field.Index.TOKENIZED; } else { index = Field.Index.UN_TOKENIZED; } } object val = MetaHelper.GetMetaFieldValue(metaField, metaObject[metaField.Name]); //object val = metaObject[metaField]; string valString = String.Empty; if ( metaField.DataType == MetaDataType.BigInt || metaField.DataType == MetaDataType.Decimal || metaField.DataType == MetaDataType.Float || metaField.DataType == MetaDataType.Int || metaField.DataType == MetaDataType.Money || metaField.DataType == MetaDataType.Numeric || metaField.DataType == MetaDataType.SmallInt || metaField.DataType == MetaDataType.SmallMoney || metaField.DataType == MetaDataType.TinyInt ) { if (val != null) { valString = val.ToString(); if (!String.IsNullOrEmpty(valString)) { if (metaField.DataType == MetaDataType.Decimal) { doc.Add(new Field(metaField.Name, ConvertStringToSortable(Decimal.Parse(valString)), store == null ? Field.Store.NO : store, index == null ? Field.Index.UN_TOKENIZED : index)); } else { doc.Add(new Field(metaField.Name, ConvertStringToSortable(valString), store == null ? Field.Store.NO : store, index == null ? Field.Index.UN_TOKENIZED : index)); } } } } else if (val != null) { if (metaField.DataType == MetaDataType.DictionaryMultiValue) { foreach (string s in (string[])val) { doc.Add(new Field(metaField.Name, s == null ? String.Empty : s.ToLower(), store == null ? Field.Store.NO : store, index == null ? Field.Index.TOKENIZED : index)); doc.Add(new Field("_content", s == null ? String.Empty : s.ToString().ToLower(), store == null ? Field.Store.NO : store, index == null ? Field.Index.TOKENIZED : index)); } } else if (metaField.DataType == MetaDataType.StringDictionary) { MetaStringDictionary stringDictionary = val as MetaStringDictionary; ArrayList strvals = new ArrayList(); if (stringDictionary != null) { foreach (string key in stringDictionary.Keys) { string s = stringDictionary[key]; doc.Add(new Field(metaField.Name, s == null ? String.Empty : s.ToLower(), store == null ? Field.Store.NO : store, index == null ? Field.Index.TOKENIZED : index)); doc.Add(new Field("_content", s == null ? String.Empty : s.ToString().ToLower(), store == null ? Field.Store.NO : store, index == null ? Field.Index.TOKENIZED : index)); } } } else { doc.Add(new Field(metaField.Name, val == null ? String.Empty : val.ToString().ToLower(), store == null ? Field.Store.NO : store, index == null ? Field.Index.TOKENIZED : index)); doc.Add(new Field("_content", val == null ? String.Empty : val.ToString().ToLower(), store == null ? Field.Store.NO : store, index == null ? Field.Index.TOKENIZED : index)); } } } }