/// <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);
        }
Example #2
0
        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);
        }