/// <summary> /// Recursively through all fields in a form to find fields of type ExternalMediaField and /// checks whether the media sources referred by them exist. Returns the list of URLs of media /// sources that does not exist. /// </summary> /// <param name="model">The form or field.</param> /// <returns></returns> public List <string> CheckMedia(CFXmlModel model) { List <string> errorneousMedia = new List <string>(); if (typeof(Form).IsAssignableFrom(model.GetType())) { Form form = model as Form; foreach (var child in form.Fields) { errorneousMedia.AddRange(CheckMedia(child)); } } else if (typeof(ExternalMediaField).IsAssignableFrom(model.GetType())) { if (!CheckMedia((model as ExternalMediaField).Source)) { errorneousMedia.Add((model as ExternalMediaField).Source); } } else if (typeof(CompositeFormField).IsAssignableFrom(model.GetType())) { CompositeFormField cfield = model as CompositeFormField; foreach (var child in cfield.Header) { errorneousMedia.AddRange(CheckMedia(child)); } foreach (var child in cfield.Fields) { errorneousMedia.AddRange(CheckMedia(child)); } foreach (var child in cfield.Footer) { errorneousMedia.AddRange(CheckMedia(child)); } } return(errorneousMedia); }
public CFDataFile GetFile(int id, string guid, bool checkInItems = true) { CFXmlModel model = Db.XmlModels.Find(id); if (model is CFDataFile && model.Guid == guid) { return(model as CFDataFile); } if (checkInItems && model is CFItem) { return((model as CFItem).Files.Where(f => f.Guid == guid).FirstOrDefault()); } if (typeof(AbstractForm).IsAssignableFrom(model.GetType())) { return((model as AbstractForm).Fields.SelectMany(m => m.Files).Where(m => m.DataFile.Guid == guid).FirstOrDefault().DataFile); } return(null); }