예제 #1
0
        /// <summary>
        /// Gets Form controls that implement IFormPageBreak interface from "Body" placeholder
        /// </summary>
        private static IList <FormDraftControl> GetPageBreakControls(FormDraft form)
        {
            var behaviorResolver = ObjectFactory.Resolve <IControlBehaviorResolver>();

            IList <FormDraftControl> orderedControls = new List <FormDraftControl>();
            var bodyControls = form.Controls.Where(c => c.PlaceHolder == "Body").ToList();
            var siblingId    = Guid.Empty;

            while (bodyControls.Count > 0)
            {
                var currentControl = bodyControls.FirstOrDefault(c => c.SiblingId == siblingId);
                if (currentControl == null)
                {
                    break;
                }

                bodyControls.Remove(currentControl);
                siblingId = currentControl.Id;

                orderedControls.Add(currentControl);
            }

            IList <FormDraftControl> pageBreakControls = new List <FormDraftControl>();

            foreach (var control in orderedControls.Where(c => c.IsLayoutControl == false))
            {
                var controlType = TypeResolutionService.ResolveType(behaviorResolver.GetBehaviorObjectType(control), false);
                if (controlType != null && controlType.ImplementsInterface(typeof(IFormPageBreak)))
                {
                    pageBreakControls.Add(control);
                }
            }
            return(pageBreakControls);
        }
예제 #2
0
        public IControlsContainer GetControlsContainer(Guid id)
        {
            Guid currentUserId = SecurityManager.GetCurrentUserId();

            FormDraft formDraft = FManager.GetDrafts().Where(d => d.ParentForm.Id == id && d.Owner == currentUserId && d.IsTempDraft).SingleOrDefault <FormDraft>();

            if (formDraft != null)
            {
                return(formDraft);
            }

            return(FManager.GetForm(id));
        }
예제 #3
0
        private void AppendFormControlsToPlaceholder(string formName, IList <Control> formControls, FormsManager formManager, FormDraft master, string containerId)
        {
            if (formControls != null && formControls.Any())
            {
                Guid siblingId       = Guid.Empty;
                int  controlsCounter = 0;
                foreach (var control in formControls)
                {
                    controlsCounter++;
                    control.ID = string.Format(CultureInfo.InvariantCulture, formName + "_" + containerId + "_C" + controlsCounter.ToString(CultureInfo.InvariantCulture).PadLeft(3, '0'));
                    var formControl = formManager.CreateControl <FormDraftControl>(control, containerId);

                    formControl.SiblingId = siblingId;
                    formControl.Caption   = ObjectFactory.Resolve <IControlBehaviorResolver>().GetBehaviorObject(control).GetType().Name;
                    siblingId             = formControl.Id;
                    master.Controls.Add(formControl);
                    formControl.SetPersistanceStrategy();
                }
            }
        }
예제 #4
0
        /// <summary>
        /// Persists modified SerializedPages property
        /// </summary>
        private void SaveProperties(FormDraftControl controlData, FormsManager manager, FormDraft form)
        {
            WcfPropertyManager propManager = new WcfPropertyManager();
            object             formControl = manager.LoadControl(controlData);

            string parentPropertyPath = null;
            var    property           = propManager.GetProperties(formControl, controlData, -1, parentPropertyPath).Where(p => p.PropertyName == "SerializedPages").FirstOrDefault();

            if (property != null)
            {
                property.PropertyValue = this.Model.SerializedPages;

                ControlPropertyService service = new ControlPropertyService();
                service.SaveProperties(new WcfControlProperty[] { property }, controlData.Id.ToString(), null, form.Id.ToString(), "Form");
            }
        }