@@ -76,12 +76,20 @@ component {
76
76
* @autodoc true
77
77
* @id.hint ID of the form item's form you wish to get
78
78
*/
79
- public array function getFormItemDefaultFields ( required string id ) {
79
+ public array function getFormItemDefaultFields (
80
+ required string id
81
+ , boolean withPageNumber = false
82
+ ) {
80
83
var fields = [ " id" , " item_type" , " configuration" , " form" ];
84
+
81
85
if ( isV2Form ( formid = arguments .id ) ) {
82
86
ArrayAppend ( fields , " question" );
83
87
}
84
88
89
+ if ( arguments .withPageNumber ) {
90
+ ArrayAppend ( fields , " count( case when item_type = 'page' then 1 end) over ( order by sort_order rows between unbounded preceding and current row ) as page_number" );
91
+ }
92
+
85
93
return fields ;
86
94
}
87
95
@@ -92,16 +100,20 @@ component {
92
100
* @id.hint ID of the form whose sections and items you wish to get
93
101
* @itemTypes.hint Optional array of item types with which to filter the returned form items
94
102
*/
95
- public array function getFormItems ( required string id , array itemTypes = [] ) {
103
+ public array function getFormItems (
104
+ required string id
105
+ , array itemTypes = []
106
+ , numeric pageNumber = 0
107
+ ) {
96
108
var result = [];
97
109
var items = $getPresideObject ( " formbuilder_formitem" ).selectData (
98
- filter = { form = arguments .id }
110
+ selectFields = getFormItemDefaultFields ( id = arguments .id , withPageNumber = $helpers .isTrue ( arguments .pageNumber ) )
111
+ , filter = { form = arguments .id }
99
112
, orderBy = " sort_order"
100
- , selectFields = getFormItemDefaultFields ( id = arguments .id )
101
113
);
102
114
103
- for ( var item in items ) {
104
- if ( ! itemTypes . len ( ) || itemTypes . findNoCase ( item .item_type ) ) {
115
+ for ( var item in items ) {
116
+ if ( ( arguments . pageNumber == 0 || arguments . pageNumber == item . page_number ) && ( ! ArrayLen ( itemTypes ) || ArrayFindNoCase ( itemTypes , item .item_type ) ) ) {
105
117
var preparedItem = {
106
118
id = item .id
107
119
, formId = item .form
@@ -687,13 +699,13 @@ component {
687
699
* @formId.hint The ID of the form you wish to retrieve stored values for
688
700
*
689
701
*/
690
- public struct function getTempStoredSubmission ( required string formId ) {
702
+ public struct function getTempStoredSubmission ( required string formId , boolean clearSubmission = false ) {
691
703
var tempStorageKey = " temp_formbuilder_submission_#formId #" ;
692
704
var submission = _getSessionStorage ().getVar ( tempStorageKey , StructNew () );
693
705
694
-
695
- _getSessionStorage ().deleteVar ( tempStorageKey );
696
-
706
+ if ( arguments . clearSubmission ) {
707
+ _getSessionStorage ().deleteVar ( tempStorageKey );
708
+ }
697
709
698
710
return submission ;
699
711
}
@@ -714,18 +726,22 @@ component {
714
726
, struct configuration = {}
715
727
, any validationResult = " "
716
728
) {
729
+ var formPersistData = $getRequestContext ().getCollectionWithoutSystemVars ();
730
+ arguments .configuration .formPagesCount = countFormPages ( formId = arguments .formId );
731
+ arguments .configuration .formPageNumber = arguments .configuration .formPagesCount ? ( formPersistData .formPageNumber ?: 1 ) : 0 ;
732
+
717
733
var formConfiguration = getForm ( id = arguments .formId );
718
- var items = getFormItems ( id = arguments .formId );
734
+ var items = getFormItems ( id = arguments .formId , pageNumber = arguments . configuration . formPageNumber );
719
735
var renderedItems = CreateObject ( " java" , " java.lang.StringBuffer" );
720
736
var coreLayoutArgs = Duplicate ( arguments .configuration );
721
737
var coreLayoutViewlet = " formbuilder.core.formLayout" ;
722
738
var formLayoutArgs = Duplicate ( arguments .configuration );
723
739
var formLayoutViewlet = _getFormBuilderRenderingService ().getFormLayoutViewlet ( layout = arguments .layout );
724
740
var idPrefixForFields = _createIdPrefix ( formId = arguments .formId );
725
741
726
- for ( var item in items ) {
742
+ for ( var item in items ) {
727
743
var config = Duplicate ( item .configuration );
728
- var fieldName = config .name ?: CreateUUId ();
744
+ var fieldName = config .name ?: CreateUUID ();
729
745
730
746
config .id = idPrefixForFields & fieldName ;
731
747
@@ -745,16 +761,16 @@ component {
745
761
coreLayoutArgs .renderedItems = renderedItems .toString ();
746
762
coreLayoutArgs .id = idPrefixForFields ;
747
763
coreLayoutArgs .formItems = items ;
764
+
748
765
for ( var f in formConfiguration ) {
749
766
coreLayoutArgs .configuration = f ;
750
767
}
751
768
752
- formLayoutArgs .renderedForm = $renderViewlet (
769
+ formLayoutArgs .renderedForm = $renderViewlet (
753
770
event = coreLayoutViewlet
754
771
, args = coreLayoutArgs
755
772
);
756
773
757
-
758
774
return $renderViewlet (
759
775
event = formLayoutViewlet
760
776
, args = formLayoutArgs
@@ -2163,6 +2179,13 @@ component {
2163
2179
);
2164
2180
}
2165
2181
2182
+ public numeric function countFormPages ( required string formId ) {
2183
+ return $getPresideObject ( " formbuilder_formitem" ).selectData (
2184
+ filter = { form = arguments .formId , item_type = " page" }
2185
+ , recordCountOnly = true
2186
+ );
2187
+ }
2188
+
2166
2189
public boolean function updateUsesGlobalQuestions () {
2167
2190
try {
2168
2191
if ( $isFeatureEnabled ( " formbuilder2" ) ) {
0 commit comments