From 3b2ab11bc9fdea480a4c155238f9fff9feb7c15d Mon Sep 17 00:00:00 2001
From: Claude '+n+' '+n+'
+ ");("undefined"!=typeof ffc_ajax&&Array.isArray(ffc_ajax.fieldTypes)&&ffc_ajax.fieldTypes.length?ffc_ajax.fieldTypes:[{value:"checkbox",label:"Checkbox"},{value:"date",label:"Date"},{value:"select",label:"Dropdown Select"},{value:"email",label:"Email"},{value:"number",label:"Number"},{value:"radio",label:"Radio Buttons"},{value:"text",label:"Text"},{value:"textarea",label:"Textarea"},{value:"embed",label:"Embed (Media)"},{value:"hidden",label:"Hidden Field"},{value:"info",label:"Info Block"}]).forEach(function(f){var n=e('').attr("data-type",f.value).text(f.label);n.on("click",function(){d(f.value),i.remove()}),t.append(e("").append(n))}),i.append(t);var c=f.offset();i.css({position:"absolute",top:c.top+f.outerHeight()+5+"px",left:c.left+"px"}),e("body").append(i),i.find(".ffc-field-type-option").first().trigger("focus"),setTimeout(function(){e(document).one("click",function(){i.remove()})},100)}(e(this))}),e(document).on("click.ffcFieldBuilder",".ffc-remove-field",function(f){f.preventDefault(),confirm(n().confirmDeleteField||"Remove this field?")&&e(this).closest(".ffc-field-row").fadeOut(300,function(){e(this).remove()})}),f.on("change",".ffc-field-type-selector",function(){c(e(this).closest(".ffc-field-row"),e(this).val())}),f.on("click",".ffc-choice-add",function(f){f.preventDefault();var i=o(e(this).siblings(".ffc-choice-list"),"");i&&i.find(".ffc-choice-input").trigger("focus")}),f.on("click",".ffc-choice-remove",function(f){f.preventDefault();var i=e(this).closest(".ffc-choice-row");i.siblings(".ffc-choice-row").length?i.remove():i.find(".ffc-choice-input").val("")}),f.on("keydown",".ffc-choice-input",function(f){if("Enter"===f.key){f.preventDefault();var i=o(e(this).closest(".ffc-choice-list"),"");i&&(i.insertAfter(e(this).closest(".ffc-choice-row")),i.find(".ffc-choice-input").trigger("focus"))}}),e.fn.sortable&&f.sortable({handle:".ffc-sort-handle",placeholder:"ffc-field-placeholder"}),a(f))},addField:d,applyType:c},f&&f.registerModule&&f.registerModule("Admin.FieldBuilder",f.version)}(jQuery,window.FFC);
+!function(e,f){"use strict";var i=["select","radio","checkbox"],t=["text","textarea"],c=["number","date"],n=0;function o(){return"undefined"!=typeof ffc_ajax&&ffc_ajax.strings?ffc_ajax.strings:{}}function l(){return e("#ffc_quiz_enabled").is(":checked")}function d(f,t){var c="info"===t,n="embed"===t,o=-1!==i.indexOf(t);f.find(".ffc-content-field").toggleClass("ffc-hidden",!c),f.find(".ffc-embed-field").toggleClass("ffc-hidden",!n),f.find(".ffc-hidden-value-field").toggleClass("ffc-hidden","hidden"!==t),f.find(".ffc-standard-row").toggleClass("ffc-hidden",c||n),f.find(".ffc-options-field").toggleClass("ffc-hidden",!o),f.find("[data-ffc-types]").each(function(){var f=String(e(this).attr("data-ffc-types")).split(" ");e(this).toggleClass("ffc-hidden",-1===f.indexOf(t))}),f.find(".ffc-type-desc").text(function(e){return("undefined"!=typeof ffc_ajax&&ffc_ajax.fieldTypeDescriptions?ffc_ajax.fieldTypeDescriptions:{})[e]||""}(t)),a(f)}function a(f){var n=String(f.find(".ffc-field-type-selector").val()||""),o=f.find(".ffc-field-quiz"),d=-1!==String(o.attr("data-ffc-quiz-types")||"").split(" ").indexOf(n),a=l()&&d,s=a&&o.find(".ffc-quiz-scored").is(":checked"),u=-1!==i.indexOf(n),h=u?String(o.find(".ffc-quiz-mode").val()):"",p=-1!==t.indexOf(n)&&"none"===o.find(".ffc-quiz-text").val();o.toggleClass("ffc-hidden",!a),o.find(".ffc-field-quiz-body").toggleClass("ffc-hidden",!s),f.find(".ffc-choice-quiz").each(function(){e(this).toggleClass("ffc-hidden",!(s&&u&&e(this).attr("data-ffc-quiz-mode")===h))}),o.find(".ffc-quiz-points-setting").toggleClass("ffc-hidden",u&&"points"===h||p),o.find('[data-ffc-quiz-help="correct"]').toggleClass("ffc-hidden",!(u&&"correct"===h)),o.find('[data-ffc-quiz-help="points"]').toggleClass("ffc-hidden",!(u&&"points"===h)),o.find('[data-ffc-quiz-help="range"]').toggleClass("ffc-hidden",-1===c.indexOf(n)),r(f)}function r(e){var f=e.find('input[name$="[max_select]"]');if(f.length&&f[0].setCustomValidity){var i=String(e.find(".ffc-field-type-selector").val()||""),t=parseInt(f.val(),10),c=e.find(".ffc-choice-correct-value").filter(function(){return"1"===this.value}).length,n="";"checkbox"===i&&l()&&e.find(".ffc-quiz-scored").is(":checked")&&"correct"===e.find(".ffc-quiz-mode").val()&&t>0&&t
");("undefined"!=typeof ffc_ajax&&Array.isArray(ffc_ajax.fieldTypes)&&ffc_ajax.fieldTypes.length?ffc_ajax.fieldTypes:[{value:"checkbox",label:"Checkbox"},{value:"date",label:"Date"},{value:"select",label:"Dropdown Select"},{value:"email",label:"Email"},{value:"number",label:"Number"},{value:"radio",label:"Radio Buttons"},{value:"text",label:"Text"},{value:"textarea",label:"Textarea"},{value:"embed",label:"Embed (Media)"},{value:"hidden",label:"Hidden Field"},{value:"info",label:"Info Block"}]).forEach(function(f){var c=e('').attr("data-type",f.value).text(f.label);c.on("click",function(){g(f.value),i.remove()}),t.append(e("").append(c))}),i.append(t);var c=f.offset();i.css({position:"absolute",top:c.top+f.outerHeight()+5+"px",left:c.left+"px"}),e("body").append(i),i.find(".ffc-field-type-option").first().trigger("focus"),setTimeout(function(){e(document).one("click",function(){i.remove()})},100)}(e(this))}),e(document).on("click.ffcFieldBuilder",".ffc-remove-field",function(f){f.preventDefault(),confirm(o().confirmDeleteField||"Remove this field?")&&e(this).closest(".ffc-field-row").fadeOut(300,function(){e(this).remove()})}),f.on("change",".ffc-field-type-selector",function(){d(e(this).closest(".ffc-field-row"),e(this).val())}),f.on("click",".ffc-choice-add",function(f){f.preventDefault();var i=h(e(this).siblings(".ffc-choice-list"),"");i&&i.find(".ffc-choice-input").trigger("focus")}),f.on("click",".ffc-choice-remove",function(f){f.preventDefault();var i=e(this).closest(".ffc-choice-row"),t=i.closest(".ffc-field-row");i.siblings(".ffc-choice-row").length?i.remove():(i.find(".ffc-choice-input").val(""),p(i)),r(t)}),f.on("change",".ffc-choice-correct-input",function(){e(this).closest(".ffc-choice-row").find(".ffc-choice-correct-value").val(this.checked?"1":"0"),r(e(this).closest(".ffc-field-row"))}),f.on("change",".ffc-quiz-scored, .ffc-quiz-mode, .ffc-quiz-text",function(){a(e(this).closest(".ffc-field-row"))}),f.on("input change",'input[name$="[max_select]"]',function(){r(e(this).closest(".ffc-field-row"))}),e(document).off("change.ffcFieldBuilder"),e(document).on("change.ffcFieldBuilder","#ffc_quiz_enabled",s),s(),f.on("keydown",".ffc-choice-input",function(f){if("Enter"===f.key){f.preventDefault();var i=h(e(this).closest(".ffc-choice-list"),"");i&&(i.insertAfter(e(this).closest(".ffc-choice-row")),i.find(".ffc-choice-input").trigger("focus"))}}),e.fn.sortable&&f.sortable({handle:".ffc-sort-handle",placeholder:"ffc-field-placeholder"}),v(f))},addField:g,applyType:d,refreshQuiz:s},f&&f.registerModule&&f.registerModule("Admin.FieldBuilder",f.version)}(jQuery,window.FFC);
//# sourceMappingURL=ffc-admin-field-builder.min.js.map
\ No newline at end of file
diff --git a/assets/js/ffc-admin.js b/assets/js/ffc-admin.js
index 76408be9a..84f144623 100644
--- a/assets/js/ffc-admin.js
+++ b/assets/js/ffc-admin.js
@@ -235,12 +235,8 @@
if (window.FFC && window.FFC.setRequiredWithin) {
window.FFC.setRequiredWithin($('.ffc-quiz-setting'), on);
}
- $('.ffc-options-field').each(function() {
- var $opts = $(this);
- if (!$opts.hasClass('ffc-hidden')) {
- $opts.find('.ffc-quiz-points').toggleClass('ffc-hidden', !on);
- }
- });
+ // The per-field quiz settings belong to the field builder,
+ // which listens to the same toggle (#1730).
}
$('#ffc_quiz_enabled').on('change', function() {
toggleQuizUI($(this).is(':checked'));
diff --git a/assets/js/ffc-admin.min.js b/assets/js/ffc-admin.min.js
index 2ac87b747..0b6ee1be1 100644
--- a/assets/js/ffc-admin.min.js
+++ b/assets/js/ffc-admin.min.js
@@ -1,2 +1,2 @@
-!function(e){"use strict";window.FFC=window.FFC||{},window.FFC.Admin=window.FFC.Admin||{},window.FFC.Admin.showNotification=function(n,t,i){t=t||"info",i=i||5e3,e(".ffc-admin-notification").remove();var r=("undefined"!=typeof ffc_ajax&&ffc_ajax.strings?ffc_ajax.strings:{}).dismiss||"Dismiss",s=e('
+
+
+
+
+ 'warning',
+ 'dismissible' => true,
+ 'paragraph_wrap' => false,
+ )
+ );
+ }
+
$missing_fields = get_transient( 'ffc_save_fields_error_' . get_current_user_id() );
if ( is_array( $missing_fields ) && ! empty( $missing_fields ) ) {
delete_transient( 'ffc_save_fields_error_' . get_current_user_id() );
diff --git a/includes/admin/class-ffc-form-editor-save-validator.php b/includes/admin/class-ffc-form-editor-save-validator.php
index 297394640..dfa2bf66c 100644
--- a/includes/admin/class-ffc-form-editor-save-validator.php
+++ b/includes/admin/class-ffc-form-editor-save-validator.php
@@ -57,6 +57,8 @@ class FormEditorSaveValidator {
'score',
'max_score',
'score_percent',
+ 'correct_count',
+ 'question_count',
);
/**
diff --git a/includes/core/class-ffc-form-field.php b/includes/core/class-ffc-form-field.php
index 582e59c88..dfe2600e4 100644
--- a/includes/core/class-ffc-form-field.php
+++ b/includes/core/class-ffc-form-field.php
@@ -276,7 +276,7 @@ public static function step( array $field ): string {
* @param string $type Field type.
* @param string $value Raw bound.
*/
- private static function bound( string $type, string $value ): string {
+ public static function bound( string $type, string $value ): string {
$value = trim( $value );
if ( '' === $value ) {
return '';
diff --git a/includes/core/class-ffc-quiz-question.php b/includes/core/class-ffc-quiz-question.php
new file mode 100644
index 000000000..d8c18efb1
--- /dev/null
+++ b/includes/core/class-ffc-quiz-question.php
@@ -0,0 +1,270 @@
+
+ */
+ public const SCORABLE_TYPES = array( 'select', 'radio', 'checkbox', 'text', 'textarea', 'number', 'date' );
+
+ /**
+ * Types a pre-#1730 form scored, and only with a points string.
+ *
+ * @var array
- {{score}}, {{max_score}}, {{score_percent}}
+ {{score}}, {{max_score}}, {{score_percent}}, {{correct_count}}, {{question_count}}