Merge pull request #647 from creative-commoners/pulls/5.0/ss4-compat
API Upgrade for SS4 compatibility
|
@ -1,9 +1,5 @@
|
|||
inherit: true
|
||||
|
||||
tools:
|
||||
external_code_coverage:
|
||||
timeout: 1800 # 30 minute delay to allow for coverage reporting taking ages!
|
||||
|
||||
checks:
|
||||
php:
|
||||
code_rating: true
|
||||
|
|
42
.travis.yml
|
@ -1,33 +1,33 @@
|
|||
# See https://github.com/silverstripe/silverstripe-travis-support for setup details
|
||||
|
||||
sudo: false
|
||||
|
||||
language: php
|
||||
|
||||
env:
|
||||
global:
|
||||
- COMPOSER_ROOT_VERSION=4.0.x-dev
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- php: 5.3
|
||||
env: DB=MYSQL CORE_RELEASE=3.4
|
||||
- php: 5.4
|
||||
env: DB=MYSQL CORE_RELEASE=3.5
|
||||
- php: 5.6
|
||||
env: DB=MYSQL CORE_RELEASE=3
|
||||
- php: 5.6
|
||||
env: DB=MYSQL CORE_RELEASE=3.5 SECUREASSETS=1
|
||||
env: DB=MYSQL PHPCS_TEST=1 PHPUNIT_TEST=1
|
||||
- php: 7.0
|
||||
env: DB=MYSQL PHPUNIT_TEST=1
|
||||
- php: 7.1
|
||||
env: DB=MYSQL CORE_RELEASE=3.6
|
||||
env: DB=MYSQL PHPUNIT_COVERAGE_TEST=1
|
||||
|
||||
before_script:
|
||||
- git clone git://github.com/silverstripe/silverstripe-travis-support.git ~/travis-support
|
||||
- "if [ \"$SECUREASSETS\" = \"\" ]; then php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss; fi"
|
||||
- "if [ \"$SECUREASSETS\" = \"1\" ]; then php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss --require silverstripe/secureassets; fi"
|
||||
- cd ~/builds/ss
|
||||
# Init PHP
|
||||
- phpenv rehash
|
||||
- phpenv config-rm xdebug.ini
|
||||
- echo 'memory_limit = 2048M' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
|
||||
|
||||
# Install composer dependencies
|
||||
- composer install --prefer-dist
|
||||
- composer require --prefer-dist --no-update silverstripe/recipe-cms:1.0.x-dev silverstripe-themes/simple:~3.2
|
||||
- composer update
|
||||
|
||||
script:
|
||||
- vendor/bin/phpunit --coverage-clover coverage.clover userforms/tests
|
||||
- if [[ $PHPUNIT_TEST ]]; then vendor/bin/phpunit; fi
|
||||
- if [[ $PHPUNIT_COVERAGE_TEST ]]; then phpdbg -qrr vendor/bin/phpunit --coverage-clover=coverage.xml; fi
|
||||
- if [[ $PHPCS_TEST ]]; then vendor/bin/phpcs code/ tests/; fi
|
||||
|
||||
after_success:
|
||||
- mv coverage.clover ~/build/$TRAVIS_REPO_SLUG/
|
||||
- cd ~/build/$TRAVIS_REPO_SLUG
|
||||
- wget https://scrutinizer-ci.com/ocular.phar
|
||||
- php ocular.phar code-coverage:upload --format=php-clover coverage.clover
|
||||
- if [[ $PHPUNIT_COVERAGE_TEST ]]; then bash <(curl -s https://codecov.io/bash) -f coverage.xml; fi
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
mappings:
|
||||
SecureEditableFileField: SilverStripe\UserForms\Extension\SecureEditableFileField
|
||||
UserFormFieldEditorExtension: SilverStripe\UserForms\Extension\UserFormFieldEditorExtension
|
||||
UserFormValidator: SilverStripe\UserForms\Extension\UserFormValidator
|
||||
GridFieldAddClassesButton: SilverStripe\UserForms\Form\GridFieldAddClassesButton
|
||||
UserForm: SilverStripe\UserForms\Form\UserForm
|
||||
UserFormsGridFieldFilterHeader: SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader
|
||||
UserFormsCheckboxSetField: SilverStripe\UserForms\FormField\UserFormsCheckboxSetField
|
||||
UserFormsCompositeField: SilverStripe\UserForms\FormField\UserFormsCompositeField
|
||||
UserFormsFieldContainer: SilverStripe\UserForms\FormField\UserFormsFieldContainer
|
||||
UserFormsFieldList: SilverStripe\UserForms\FormField\UserFormsFieldList
|
||||
UserFormsGroupField: SilverStripe\UserForms\FormField\UserFormsGroupField
|
||||
UserFormsStepField: SilverStripe\UserForms\FormField\UserFormsStepField
|
||||
EditableCustomRule: SilverStripe\UserForms\Model\EditableCustomRule
|
||||
UserDefinedForm: SilverStripe\UserForms\Model\UserDefinedForm
|
||||
UserDefinedFormController: SilverStripe\UserForms\Model\UserDefinedFormController
|
||||
EditableCheckbox: SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox
|
||||
EditableCheckboxGroupField: SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField
|
||||
EditableCountryDropdownField: SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField
|
||||
EditableDateField: SilverStripe\UserForms\Model\EditableFormField\EditableDateField
|
||||
EditableDateField_FormField: SilverStripe\UserForms\Model\EditableFormField\EditableDateField\FormField
|
||||
EditableDropdown: SilverStripe\UserForms\Model\EditableFormField\EditableDropdown
|
||||
EditableEmailField: SilverStripe\UserForms\Model\EditableFormField\EditableEmailField
|
||||
EditableFieldGroup: SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup
|
||||
EditableFieldGroupEnd: SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd
|
||||
EditableFileField: SilverStripe\UserForms\Model\EditableFormField\EditableFileField
|
||||
EditableFormField: SilverStripe\UserForms\Model\EditableFormField
|
||||
EditableFormFieldValidator: SilverStripe\UserForms\Model\EditableFormField\Validator
|
||||
EditableFormHeading: SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading
|
||||
EditableFormStep: SilverStripe\UserForms\Model\EditableFormField\EditableFormStep
|
||||
EditableLiteralField: SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField
|
||||
EditableMemberListField: SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField
|
||||
EditableMultipleOptionField: SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField
|
||||
EditableNumericField: SilverStripe\UserForms\Model\EditableFormField\EditableNumericField
|
||||
EditableOption: SilverStripe\UserForms\Model\EditableFormField\EditableOption
|
||||
EditableRadioField: SilverStripe\UserForms\Model\EditableFormField\EditableRadioField
|
||||
EditableTextField: SilverStripe\UserForms\Model\EditableFormField\EditableTextField
|
||||
UserDefinedForm_EmailRecipient: SilverStripe\UserForms\Model\Recipient\EmailRecipient
|
||||
UserDefinedForm_EmailRecipientCondition: SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition
|
||||
UserFormRecipientItemRequest: SilverStripe\UserForms\Model\Recipient\UserFormRecipientItemRequest
|
||||
SubmittedFileField: SilverStripe\UserForms\Model\Submission\SubmittedFileField
|
||||
SubmittedForm: SilverStripe\UserForms\Model\Submission\SubmittedForm
|
||||
SubmittedFormField: SilverStripe\UserForms\Model\Submission\SubmittedFormField
|
||||
DisambiguationSegmentFieldModifier: SilverStripe\UserForms\Modifier\DisambiguationSegmentFieldModifier
|
||||
UnderscoreSegmentFieldModifier: SilverStripe\UserForms\Modifier\UnderscoreSegmentFieldModifier
|
||||
UserFormsColumnCleanTask: SilverStripe\UserForms\Task\UserFormsColumnCleanTask
|
||||
UserFormTest: SilverStripe\UserForms\Tests\Form\UserFormTest
|
||||
UserFormsCheckboxSetFieldTest: SilverStripe\UserForms\Tests\FormField\UserFormsCheckboxSetFieldTest
|
||||
EditableCustomRuleTest: SilverStripe\UserForms\Tests\Model\EditableCustomRuleTest
|
||||
UserDefinedFormControllerTest: SilverStripe\UserForms\Tests\Model\UserDefinedFormControllerTest
|
||||
UserDefinedFormTest: SilverStripe\UserForms\Tests\Model\UserDefinedFormTest
|
||||
EditableDropdownTest: SilverStripe\UserForms\Tests\Model\EditableFormField\EditableDropdownTest
|
||||
EditableFileFieldTest: SilverStripe\UserForms\Tests\Model\EditableFormField\EditableFileFieldTest
|
||||
EditableFormFieldTest: SilverStripe\UserForms\Tests\Model\EditableFormFieldTest
|
||||
EditableLiteralFieldTest: SilverStripe\UserForms\Tests\Model\EditableFormField\EditableLiteralFieldTest
|
||||
SecureEditableFileFieldTest: SilverStripe\UserForms\Tests\Model\EditableFormField\SecureEditableFileFieldTest
|
||||
UserDefinedForm_EmailRecipientConditionTest: SilverStripe\UserForms\Tests\Model\Recipient\EmailRecipientConditionTest
|
|
@ -1,7 +1 @@
|
|||
<?php
|
||||
|
||||
if (!defined('USERFORMS_DIR')) {
|
||||
define('USERFORMS_DIR', basename(__DIR__));
|
||||
}
|
||||
|
||||
Deprecation::notification_version('3.0', 'userforms');
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
---
|
||||
Name: userformslegacy
|
||||
---
|
||||
SilverStripe\ORM\DatabaseAdmin:
|
||||
classname_value_remapping:
|
||||
EditableCheckbox: SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox
|
||||
EditableCheckboxGroupField: SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField
|
||||
EditableCountryDropdownField: SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField
|
||||
EditableDateField: SilverStripe\UserForms\Model\EditableFormField\EditableDateField
|
||||
EditableDropdown: SilverStripe\UserForms\Model\EditableFormField\EditableDropdown
|
||||
EditableEmailField: SilverStripe\UserForms\Model\EditableFormField\EditableEmailField
|
||||
EditableFieldGroup: SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup
|
||||
EditableFieldGroupEnd: SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd
|
||||
EditableFileField: SilverStripe\UserForms\Model\EditableFormField\EditableFileField
|
||||
EditableFormHeading: SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading
|
||||
EditableFormStep: SilverStripe\UserForms\Model\EditableFormField\EditableFormStep
|
||||
EditableLiteralField: SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField
|
||||
EditableMemberListField: SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField
|
||||
EditableMultipleOptionField: SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField
|
||||
EditableNumericField: SilverStripe\UserForms\Model\EditableFormField\EditableNumericField
|
||||
EditableOption: SilverStripe\UserForms\Model\EditableFormField\EditableOption
|
||||
EditableRadioField: SilverStripe\UserForms\Model\EditableFormField\EditableRadioField
|
||||
EditableTextField: SilverStripe\UserForms\Model\EditableFormField\EditableTextField
|
||||
EmailRecipient: SilverStripe\UserForms\Model\Recipient\EmailRecipient
|
||||
EmailRecipientCondition: SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition
|
||||
SubmittedFileField: SilverStripe\UserForms\Model\Submission\SubmittedFileField
|
||||
SubmittedForm: SilverStripe\UserForms\Model\Submission\SubmittedForm
|
||||
SubmittedFormField: SilverStripe\UserForms\Model\Submission\SubmittedFormField
|
||||
EditableCustomRule: SilverStripe\UserForms\Model\EditableCustomRule
|
||||
EditableFormField: SilverStripe\UserForms\Model\EditableFormField
|
||||
UserDefinedForm: SilverStripe\UserForms\Model\UserDefinedForm
|
|
@ -2,6 +2,6 @@
|
|||
Name: userformsroutes
|
||||
After: framework/routes#coreroutes
|
||||
---
|
||||
Director:
|
||||
SilverStripe\Control\Director:
|
||||
rules:
|
||||
'UserDefinedForm_Controller//$Action' : 'UserDefinedForm_Controller'
|
||||
UserDefinedFormController//$Action: SilverStripe\UserForms\Model\UserDefinedFormController
|
||||
|
|
|
@ -3,14 +3,13 @@ Name: userformssecurity
|
|||
Only:
|
||||
ModuleExists: secureassets
|
||||
---
|
||||
EditableFileField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
extensions:
|
||||
- SecureEditableFileField
|
||||
|
||||
- SilverStripe\UserForms\Extension\SecureEditableFileField
|
||||
---
|
||||
Name: userformsnosecurity
|
||||
Except:
|
||||
ModuleExists: secureassets
|
||||
---
|
||||
EditableFileField:
|
||||
hidden: true
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
hidden: true
|
||||
|
|
75
changelog.md
|
@ -1,75 +0,0 @@
|
|||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## [4.0.1]
|
||||
|
||||
* Fixing validation for CheckboxSet field
|
||||
|
||||
## [4.0.0]
|
||||
|
||||
* API Use core validation for form submission (major change)
|
||||
* Update translations
|
||||
* Add empty space before classes
|
||||
* Updated the output to provide spacing between userform-given classes
|
||||
* fixed indentation
|
||||
* When using the "are you sure?" plugin ensure the form immediately submits.
|
||||
* By default, new form fields should be shown
|
||||
* Added route for UserDefinedForm_Controller
|
||||
* Move templates to more usual location
|
||||
* API Implement option sorting
|
||||
* Make sorting of options possible
|
||||
* NEW Allow translation of tab names
|
||||
* DOCS update the docs to remove bad feature list
|
||||
* Change IFNULL to COALESE for MSSQL Compatibility
|
||||
* Change CSV field export order to match form order
|
||||
* Correcting issue #439, where date pickers were no longer functioning.
|
||||
* Add permission tests for editing fix
|
||||
* fixes late extensions binding
|
||||
* BUG fixing bug that prevents non-admin users from editing user defined form fields.
|
||||
* Implementing the "are you sure?" plugin to display a confirmation message when navigating away from a partially completed form.
|
||||
* Translation fixes
|
||||
* Add sitetree icon
|
||||
|
||||
## [3.1.1]
|
||||
|
||||
* Added standard editor config
|
||||
* Added standard code of conduct
|
||||
* Add placeholder to Numeric and Email fields
|
||||
* Updated license year
|
||||
* Fix call log() function on instance of UserFormsUpgradeService
|
||||
* Minor:fixed userforms class name specificity
|
||||
* Update translations
|
||||
* Remove redundant file
|
||||
|
||||
## [3.1.0]
|
||||
|
||||
* Add 3.0.3 changelog
|
||||
* Update translations
|
||||
* BUG Prevent subsequent write being triggered in onAfterWrite()
|
||||
* MINOR: Fix for styling of step navigation
|
||||
* MINOR: New email object for each recipient
|
||||
* removed isCheckboxGroup check and replace
|
||||
* Remove '[' and ']' from jQuery selector for checkbox groups
|
||||
* ENHANCEMENT: Add 'HideLabel' field for EditableLiteralField objects
|
||||
* adding some spaces for better readability
|
||||
* Making requirements clearer
|
||||
* Add 3.0.2 changelog
|
||||
|
||||
## [3.0.2]
|
||||
|
||||
* Fix Casting to integer to prevent potential SQL injection.
|
||||
|
||||
## [3.0.1]
|
||||
|
||||
* Made userforms a supported module
|
||||
* Fix code coverage
|
||||
* Update documentation to include requirements
|
||||
* Fix DisplayRule versioning
|
||||
* Fix duplication of forms with groups
|
||||
|
||||
## [3.0.0]
|
||||
|
||||
* Changelog added.
|
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 525 B |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 15 KiB |
|
@ -1 +1,235 @@
|
|||
!function(e){function t(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=3)}([function(e,t){e.exports=jQuery},function(e,t,n){"use strict";var i=n(0),o=n.n(i),r=this;o.a.entwine("ss",function(){var e=null;o()(".uf-field-editor tbody").entwine({onmatch:function(){var t=0,n=0,i=0,s=o()(".uf-field-editor .ss-gridfield-buttonrow").addClass("sticky-buttons"),c=o()(".cms-content-header.north").height()+parseInt(o()(".sticky-buttons").css("padding-top"),10),u=o()(".uf-field-editor");r._super(),r.find(".ss-gridfield-item").each(function(){switch(o()(r).data("class")){case"EditableFormStep":return void(i=0);case"EditableFieldGroup":n=++i;break;case"EditableFieldGroupEnd":n=i--;break;default:n=i}for(o()(r).toggleClass("infieldgroup",n>0),t=1;t<=5;t++)o()(r).toggleClass("infieldgroup-level-"+t,n>=t)}),e=setInterval(function(){var e=u.offset().top;s.width("100%"),e>c||0===e?s.removeClass("sticky-buttons"):s.addClass("sticky-buttons")},300)},onunmatch:function(){r._super(),clearInterval(e)}}),o()(".uf-field-editor .ss-gridfield-buttonrow .action").entwine({onclick:function(e){r._super(e),r.trigger("addnewinline")}}),o()(".uf-field-editor").entwine({onmatch:function(){r._super(),r.on("addnewinline",function(){r.one("reload",function(){var e=r.find(".ss-gridfield-item").last(),t=null;"EditableFieldGroupEnd"===e.attr("data-class")?(t=e,t.prev().find(".col-Title input").focus(),e=t.add(t.prev()),t.css("visibility","hidden")):e.find(".col-Title input").focus(),e.addClass("flashBackground"),o()(".cms-content-fields").scrollTop(o()(".cms-content-fields")[0].scrollHeight),t&&t.css("visibility","visible")})})},onummatch:function(){r._super()}})})},function(e,t,n){"use strict";var i=n(0),o=n.n(i),r=this;o()(document).ready(function(){var e=o()('input[name="SendPlain"]'),t={updateFormatSpecificFields:function(){var t=e.is(":checked");o()(".field.toggle-html-only")[t?"hide":"show"](),o()(".field.toggle-plain-only")[t?"show":"hide"]()}};o.a.entwine("udf.recipient",function(){o()("#Form_ItemEditForm").entwine({onmatch:function(){t.updateFormatSpecificFields()},onunmatch:function(){r._super()}}),e.entwine({onchange:function(){t.updateFormatSpecificFields()}})})})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(1),n(2)}]);
|
||||
/******/ (function(modules) { // webpackBootstrap
|
||||
/******/ // The module cache
|
||||
/******/ var installedModules = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/
|
||||
/******/ // Check if module is in cache
|
||||
/******/ if(installedModules[moduleId]) {
|
||||
/******/ return installedModules[moduleId].exports;
|
||||
/******/ }
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = installedModules[moduleId] = {
|
||||
/******/ i: moduleId,
|
||||
/******/ l: false,
|
||||
/******/ exports: {}
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||||
/******/
|
||||
/******/ // Flag the module as loaded
|
||||
/******/ module.l = true;
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/ }
|
||||
/******/
|
||||
/******/
|
||||
/******/ // expose the modules object (__webpack_modules__)
|
||||
/******/ __webpack_require__.m = modules;
|
||||
/******/
|
||||
/******/ // expose the module cache
|
||||
/******/ __webpack_require__.c = installedModules;
|
||||
/******/
|
||||
/******/ // identity function for calling harmony imports with the correct context
|
||||
/******/ __webpack_require__.i = function(value) { return value; };
|
||||
/******/
|
||||
/******/ // define getter function for harmony exports
|
||||
/******/ __webpack_require__.d = function(exports, name, getter) {
|
||||
/******/ if(!__webpack_require__.o(exports, name)) {
|
||||
/******/ Object.defineProperty(exports, name, {
|
||||
/******/ configurable: false,
|
||||
/******/ enumerable: true,
|
||||
/******/ get: getter
|
||||
/******/ });
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||||
/******/ __webpack_require__.n = function(module) {
|
||||
/******/ var getter = module && module.__esModule ?
|
||||
/******/ function getDefault() { return module['default']; } :
|
||||
/******/ function getModuleExports() { return module; };
|
||||
/******/ __webpack_require__.d(getter, 'a', getter);
|
||||
/******/ return getter;
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Object.prototype.hasOwnProperty.call
|
||||
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
||||
/******/
|
||||
/******/ // __webpack_public_path__
|
||||
/******/ __webpack_require__.p = "";
|
||||
/******/
|
||||
/******/ // Load entry module and return exports
|
||||
/******/ return __webpack_require__(__webpack_require__.s = 2);
|
||||
/******/ })
|
||||
/************************************************************************/
|
||||
/******/ ([
|
||||
/* 0 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
|
||||
|
||||
window.jQuery.entwine('ss', function ($) {
|
||||
var stickyHeaderInterval = null;
|
||||
|
||||
$('.uf-field-editor .ss-gridfield-items').entwine({
|
||||
onmatch: function onmatch() {
|
||||
var i = 0;
|
||||
var thisLevel = 0;
|
||||
var depth = 0;
|
||||
var $buttonrow = $('.uf-field-editor .ss-gridfield-buttonrow').addClass('sticky-buttons');
|
||||
var navHeight = $('.cms-content-header.north').first().height() + parseInt($('.sticky-buttons').css('padding-top'), 10);
|
||||
var fieldEditor = $('.uf-field-editor');
|
||||
|
||||
this._super();
|
||||
|
||||
this.find('.ss-gridfield-item').each(function (i, el) {
|
||||
switch ($(el).data('class')) {
|
||||
case 'SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFormStep':
|
||||
{
|
||||
depth = 0;
|
||||
return;
|
||||
}
|
||||
case 'SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroup':
|
||||
{
|
||||
thisLevel = ++depth;
|
||||
break;
|
||||
}
|
||||
case 'SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroupEnd':
|
||||
{
|
||||
thisLevel = depth--;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
thisLevel = depth;
|
||||
}
|
||||
}
|
||||
|
||||
$(el).toggleClass('infieldgroup', thisLevel > 0);
|
||||
for (i = 1; i <= 5; i++) {
|
||||
$(el).toggleClass('infieldgroup-level-' + i, thisLevel >= i);
|
||||
}
|
||||
});
|
||||
|
||||
stickyHeaderInterval = setInterval(function () {
|
||||
var offsetTop = fieldEditor.offset().top;
|
||||
$buttonrow.width('100%');
|
||||
if (offsetTop > navHeight || offsetTop === 0) {
|
||||
$buttonrow.removeClass('sticky-buttons');
|
||||
} else {
|
||||
$buttonrow.addClass('sticky-buttons');
|
||||
}
|
||||
}, 300);
|
||||
},
|
||||
onunmatch: function onunmatch() {
|
||||
this._super();
|
||||
|
||||
clearInterval(stickyHeaderInterval);
|
||||
}
|
||||
});
|
||||
|
||||
$('.uf-field-editor .ss-gridfield-buttonrow .action').entwine({
|
||||
onclick: function onclick(e) {
|
||||
this._super(e);
|
||||
|
||||
this.trigger('addnewinline');
|
||||
}
|
||||
});
|
||||
|
||||
$('.uf-field-editor').entwine({
|
||||
onmatch: function onmatch() {
|
||||
var _this = this;
|
||||
|
||||
this._super();
|
||||
|
||||
this.on('addnewinline', function () {
|
||||
_this.one('reload', function () {
|
||||
var $newField = _this.find('.ss-gridfield-item').last();
|
||||
var $groupEnd = null;
|
||||
if ($newField.attr('data-class') === 'SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroupEnd') {
|
||||
$groupEnd = $newField;
|
||||
$groupEnd.prev().find('.col-Title input').focus();
|
||||
$newField = $groupEnd.add($groupEnd.prev());
|
||||
$groupEnd.css('visibility', 'hidden');
|
||||
} else {
|
||||
$newField.find('.col-Title input').focus();
|
||||
}
|
||||
|
||||
$newField.addClass('flashBackground');
|
||||
$('.cms-content-fields').scrollTop($('.cms-content-fields')[0].scrollHeight);
|
||||
if ($groupEnd) {
|
||||
$groupEnd.css('visibility', 'visible');
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
onummatch: function onummatch() {
|
||||
this._super();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/***/ }),
|
||||
/* 1 */
|
||||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(3);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
||||
var _this = this;
|
||||
|
||||
|
||||
|
||||
__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.entwine('ss', function () {
|
||||
var recipient = {
|
||||
updateFormatSpecificFields: function updateFormatSpecificFields() {
|
||||
var sendPlainChecked = __WEBPACK_IMPORTED_MODULE_0_jquery___default()('input[name="SendPlain"]').is(':checked');
|
||||
|
||||
__WEBPACK_IMPORTED_MODULE_0_jquery___default()('.field.toggle-html-only')[sendPlainChecked ? 'hide' : 'show']();
|
||||
__WEBPACK_IMPORTED_MODULE_0_jquery___default()('.field.toggle-plain-only')[sendPlainChecked ? 'show' : 'hide']();
|
||||
}
|
||||
};
|
||||
|
||||
__WEBPACK_IMPORTED_MODULE_0_jquery___default()('#Form_ItemEditForm .EmailRecipientForm').entwine({
|
||||
onmatch: function onmatch() {
|
||||
recipient.updateFormatSpecificFields();
|
||||
},
|
||||
|
||||
onunmatch: function onunmatch() {
|
||||
_this._super();
|
||||
}
|
||||
});
|
||||
|
||||
__WEBPACK_IMPORTED_MODULE_0_jquery___default()('#Form_ItemEditForm .EmailRecipientForm input[name="SendPlain"]').entwine({
|
||||
onchange: function onchange() {
|
||||
recipient.updateFormatSpecificFields();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/***/ }),
|
||||
/* 2 */
|
||||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bundles_FieldEditor_js__ = __webpack_require__(0);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bundles_FieldEditor_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_bundles_FieldEditor_js__);
|
||||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_bundles_Recipient_js__ = __webpack_require__(1);
|
||||
|
||||
|
||||
|
||||
|
||||
/***/ }),
|
||||
/* 3 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
module.exports = jQuery;
|
||||
|
||||
/***/ })
|
||||
/******/ ]);
|
||||
//# sourceMappingURL=userforms-cms.js.map
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"sources":["webpack:///webpack/bootstrap 0725b68c82e72a079f59","webpack:///./client/src/bundles/FieldEditor.js","webpack:///./client/src/bundles/Recipient.js","webpack:///./client/src/bundles/bundle-cms.js","webpack:///external \"jQuery\""],"names":["window","jQuery","entwine","$","stickyHeaderInterval","onmatch","i","thisLevel","depth","$buttonrow","addClass","navHeight","first","height","parseInt","css","fieldEditor","_super","find","each","el","data","toggleClass","setInterval","offsetTop","offset","top","width","removeClass","onunmatch","clearInterval","onclick","e","trigger","on","one","$newField","last","$groupEnd","attr","prev","focus","add","scrollTop","scrollHeight","onummatch","recipient","updateFormatSpecificFields","sendPlainChecked","is","onchange"],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;;AC5DAA,OAAOC,MAAP,CAAcC,OAAd,CAAsB,IAAtB,EAA4B,UAACC,CAAD,EAAO;AACjC,MAAIC,uBAAuB,IAA3B;;AAEAD,IAAE,sCAAF,EAA0CD,OAA1C,CAAkD;AAChDG,WADgD,qBACtC;AACR,UAAIC,IAAI,CAAR;AACA,UAAIC,YAAY,CAAhB;AACA,UAAIC,QAAQ,CAAZ;AACA,UAAMC,aAAaN,EAAE,0CAAF,EAA8CO,QAA9C,CAAuD,gBAAvD,CAAnB;AACA,UAAMC,YAAYR,EAAE,2BAAF,EAA+BS,KAA/B,GAAuCC,MAAvC,KACdC,SAASX,EAAE,iBAAF,EAAqBY,GAArB,CAAyB,aAAzB,CAAT,EAAkD,EAAlD,CADJ;AAEA,UAAMC,cAAcb,EAAE,kBAAF,CAApB;;AAEA,WAAKc,MAAL;;AAGA,WAAKC,IAAL,CAAU,oBAAV,EAAgCC,IAAhC,CAAqC,UAACb,CAAD,EAAIc,EAAJ,EAAW;AAC9C,gBAAQjB,EAAEiB,EAAF,EAAMC,IAAN,CAAW,OAAX,CAAR;AACE,eAAK,qEAAL;AAA4E;AAC1Eb,sBAAQ,CAAR;AACA;AACD;AACD,eAAK,uEAAL;AAA8E;AAC5ED,0BAAY,EAAEC,KAAd;AACA;AACD;AACD,eAAK,0EAAL;AAAiF;AAC/ED,0BAAYC,OAAZ;AACA;AACD;AACD;AAAS;AACPD,0BAAYC,KAAZ;AACD;AAfH;;AAkBAL,UAAEiB,EAAF,EAAME,WAAN,CAAkB,cAAlB,EAAkCf,YAAY,CAA9C;AACA,aAAKD,IAAI,CAAT,EAAYA,KAAK,CAAjB,EAAoBA,GAApB,EAAyB;AACvBH,YAAEiB,EAAF,EAAME,WAAN,yBAAwChB,CAAxC,EAA6CC,aAAaD,CAA1D;AACD;AACF,OAvBD;;AA0BAF,6BAAuBmB,YAAY,YAAM;AACvC,YAAMC,YAAYR,YAAYS,MAAZ,GAAqBC,GAAvC;AACAjB,mBAAWkB,KAAX,CAAiB,MAAjB;AACA,YAAIH,YAAYb,SAAZ,IAAyBa,cAAc,CAA3C,EAA8C;AAC5Cf,qBAAWmB,WAAX,CAAuB,gBAAvB;AACD,SAFD,MAEO;AACLnB,qBAAWC,QAAX,CAAoB,gBAApB;AACD;AACF,OARsB,EAQpB,GARoB,CAAvB;AASD,KAhD+C;AAiDhDmB,aAjDgD,uBAiDpC;AACV,WAAKZ,MAAL;;AAEAa,oBAAc1B,oBAAd;AACD;AArD+C,GAAlD;;AAyDAD,IAAE,kDAAF,EAAsDD,OAAtD,CAA8D;AAC5D6B,WAD4D,mBACpDC,CADoD,EACjD;AACT,WAAKf,MAAL,CAAYe,CAAZ;;AAEA,WAAKC,OAAL,CAAa,cAAb;AACD;AAL2D,GAA9D;;AAQA9B,IAAE,kBAAF,EAAsBD,OAAtB,CAA8B;AAC5BG,WAD4B,qBAClB;AAAA;;AACR,WAAKY,MAAL;;AAIA,WAAKiB,EAAL,CAAQ,cAAR,EAAwB,YAAM;AAC5B,cAAKC,GAAL,CAAS,QAAT,EAAmB,YAAM;AAEvB,cAAIC,YAAY,MAAKlB,IAAL,CAAU,oBAAV,EAAgCmB,IAAhC,EAAhB;AACA,cAAIC,YAAY,IAAhB;AACA,cAAIF,UAAUG,IAAV,CAAe,YAAf,MAAiC,0EAArC,EAAiH;AAC/GD,wBAAYF,SAAZ;AACAE,sBAAUE,IAAV,GAAiBtB,IAAjB,CAAsB,kBAAtB,EAA0CuB,KAA1C;AACAL,wBAAYE,UAAUI,GAAV,CAAcJ,UAAUE,IAAV,EAAd,CAAZ;AACAF,sBAAUvB,GAAV,CAAc,YAAd,EAA4B,QAA5B;AACD,WALD,MAKO;AACLqB,sBAAUlB,IAAV,CAAe,kBAAf,EAAmCuB,KAAnC;AACD;;AAEDL,oBAAU1B,QAAV,CAAmB,iBAAnB;AACAP,YAAE,qBAAF,EAAyBwC,SAAzB,CAAmCxC,EAAE,qBAAF,EAAyB,CAAzB,EAA4ByC,YAA/D;AACA,cAAIN,SAAJ,EAAe;AACbA,sBAAUvB,GAAV,CAAc,YAAd,EAA4B,SAA5B;AACD;AACF,SAlBD;AAmBD,OApBD;AAqBD,KA3B2B;AA4B5B8B,aA5B4B,uBA4BhB;AACV,WAAK5B,MAAL;AACD;AA9B2B,GAA9B;AAgCD,CApGD,E;;;;;;;;;;;ACAA;;AAEA,8CAAAd,CAAED,OAAF,CAAU,IAAV,EAAgB,YAAM;AACpB,MAAM4C,YAAY;AAEhBC,gCAA4B,sCAAM;AAChC,UAAMC,mBAAmB,8CAAA7C,CAAE,yBAAF,EAA6B8C,EAA7B,CAAgC,UAAhC,CAAzB;;AAEA9C,MAAA,8CAAAA,CAAE,yBAAF,EAA6B6C,mBAAmB,MAAnB,GAA4B,MAAzD;AACA7C,MAAA,8CAAAA,CAAE,0BAAF,EAA8B6C,mBAAmB,MAAnB,GAA4B,MAA1D;AACD;AAPe,GAAlB;;AAUA7C,EAAA,8CAAAA,CAAE,wCAAF,EAA4CD,OAA5C,CAAoD;AAClDG,aAAS,mBAAM;AACbyC,gBAAUC,0BAAV;AACD,KAHiD;;AAKlDlB,eAAW,qBAAM;AACf,YAAKZ,MAAL;AACD;AAPiD,GAApD;;AAUAd,EAAA,8CAAAA,CAAE,gEAAF,EAAoED,OAApE,CAA4E;AAC1EgD,cAAU,oBAAM;AACdJ,gBAAUC,0BAAV;AACD;AAHyE,GAA5E;AAKD,CA1BD,E;;;;;;;;;;;;ACLA;;;;;;;ACDA,wB","file":"js/userforms-cms.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0725b68c82e72a079f59","/**\n * form builder behaviour.\n */\n\nwindow.jQuery.entwine('ss', ($) => {\n let stickyHeaderInterval = null;\n\n $('.uf-field-editor .ss-gridfield-items').entwine({\n onmatch() {\n let i = 0;\n let thisLevel = 0;\n let depth = 0;\n const $buttonrow = $('.uf-field-editor .ss-gridfield-buttonrow').addClass('sticky-buttons');\n const navHeight = $('.cms-content-header.north').first().height()\n + parseInt($('.sticky-buttons').css('padding-top'), 10);\n const fieldEditor = $('.uf-field-editor');\n\n this._super();\n\n // Loop through all rows and set necessary styles\n this.find('.ss-gridfield-item').each((i, el) => {\n switch ($(el).data('class')) {\n case 'SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFormStep': {\n depth = 0;\n return;\n }\n case 'SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFieldGroup': {\n thisLevel = ++depth;\n break;\n }\n case 'SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFieldGroupEnd': {\n thisLevel = depth--;\n break;\n }\n default: {\n thisLevel = depth;\n }\n }\n\n $(el).toggleClass('infieldgroup', thisLevel > 0);\n for (i = 1; i <= 5; i++) {\n $(el).toggleClass(`infieldgroup-level-${i}`, thisLevel >= i);\n }\n });\n\n // Make sure gridfield buttons stick to top of page when user scrolls down\n stickyHeaderInterval = setInterval(() => {\n const offsetTop = fieldEditor.offset().top;\n $buttonrow.width('100%');\n if (offsetTop > navHeight || offsetTop === 0) {\n $buttonrow.removeClass('sticky-buttons');\n } else {\n $buttonrow.addClass('sticky-buttons');\n }\n }, 300);\n },\n onunmatch() {\n this._super();\n\n clearInterval(stickyHeaderInterval);\n },\n });\n\n // When new fields are added.\n $('.uf-field-editor .ss-gridfield-buttonrow .action').entwine({\n onclick(e) {\n this._super(e);\n\n this.trigger('addnewinline');\n },\n });\n\n $('.uf-field-editor').entwine({\n onmatch() {\n this._super();\n\n // When the 'Add field' button is clicked set a one time listener.\n // When the GridField is reloaded focus on the newly added field.\n this.on('addnewinline', () => {\n this.one('reload', () => {\n // If fieldgroup, focus on the start marker\n let $newField = this.find('.ss-gridfield-item').last();\n let $groupEnd = null;\n if ($newField.attr('data-class') === 'SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFieldGroupEnd') {\n $groupEnd = $newField;\n $groupEnd.prev().find('.col-Title input').focus();\n $newField = $groupEnd.add($groupEnd.prev());\n $groupEnd.css('visibility', 'hidden');\n } else {\n $newField.find('.col-Title input').focus();\n }\n\n $newField.addClass('flashBackground');\n $('.cms-content-fields').scrollTop($('.cms-content-fields')[0].scrollHeight);\n if ($groupEnd) {\n $groupEnd.css('visibility', 'visible');\n }\n });\n });\n },\n onummatch() {\n this._super();\n },\n });\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/bundles/FieldEditor.js","/**\n * Email recipient behaviour.\n */\n\nimport $ from 'jquery';\n\n$.entwine('ss', () => {\n const recipient = {\n // Some fields are only visible when HTML email are being sent.\n updateFormatSpecificFields: () => {\n const sendPlainChecked = $('input[name=\"SendPlain\"]').is(':checked');\n\n $('.field.toggle-html-only')[sendPlainChecked ? 'hide' : 'show']();\n $('.field.toggle-plain-only')[sendPlainChecked ? 'show' : 'hide']();\n },\n };\n\n $('#Form_ItemEditForm .EmailRecipientForm').entwine({\n onmatch: () => {\n recipient.updateFormatSpecificFields();\n },\n\n onunmatch: () => {\n this._super();\n },\n });\n\n $('#Form_ItemEditForm .EmailRecipientForm input[name=\"SendPlain\"]').entwine({\n onchange: () => {\n recipient.updateFormatSpecificFields();\n },\n });\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/bundles/Recipient.js","// Used for CMS form fields\nimport 'bundles/FieldEditor.js';\nimport 'bundles/Recipient.js';\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/bundles/bundle-cms.js","module.exports = jQuery;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jQuery\"\n// module id = 3\n// module chunks = 0"],"sourceRoot":""}
|
|
@ -1 +1,2 @@
|
|||
@-webkit-keyframes flash-background{0%{background-color:#fff}10%{background-color:#dcfedd}70%{background-color:#dcfedd}}@-o-keyframes flash-background{0%{background-color:#fff}10%{background-color:#dcfedd}70%{background-color:#dcfedd}}@keyframes flash-background{0%{background-color:#fff}10%{background-color:#dcfedd}70%{background-color:#dcfedd}}.uf-field-editor{padding-bottom:0}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item{height:46px}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item,.uf-field-editor table.ss-gridfield-table .ss-gridfield-item:hover{background:#fff}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item td{border-right-width:0;border-top:1px solid #999}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item td:last-child{border-right-width:1px}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item .handle{min-height:46px}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item.flash-background{-webkit-animation:flash-background 2s linear;-o-animation:flash-background 2s linear;animation:flash-background 2s linear}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item.ui-sortable-placeholder{height:50px}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item.infieldgroup,.uf-field-editor table.ss-gridfield-table .ss-gridfield-item.infieldgroup:hover{background:#f2f9fd}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item.infieldgroup td{border-bottom:0;border-top:1px solid #999}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item.infieldgroup .col-reorder,.uf-field-editor table.ss-gridfield-table .ss-gridfield-item.infieldgroup .handle{background:#bee0f8;border-top:0}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item.infieldgroup.infieldgroup-level-2 .col-reorder,.uf-field-editor table.ss-gridfield-table .ss-gridfield-item.infieldgroup.infieldgroup-level-2 .handle{background:#99cef4;border-top:0}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item.infieldgroup.infieldgroup-level-3 .col-reorder,.uf-field-editor table.ss-gridfield-table .ss-gridfield-item.infieldgroup.infieldgroup-level-3 .handle{background:#89bef4;border-top:0}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item[data-class=EditableFormStep],.uf-field-editor table.ss-gridfield-table .ss-gridfield-item[data-class=EditableFormStep]:hover{background:#dae2e7}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item[data-class=EditableFormStep] label{font-weight:700;color:#000;font-size:1.1em}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item[data-class=EditableFormStep] td{border-top:1px solid #a6b6c1}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item[data-class=EditableFormStep]+.ss-gridfield-item td{border-top:1px solid #dae2e7}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item[data-class=EditableFieldGroup] td,.uf-field-editor table.ss-gridfield-table .ss-gridfield-item[data-class=EditableFormStep]+.ss-gridfield-item[data-class=EditableFieldGroup] td{border-top:1px solid #a8d7f5}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item[data-class=EditableFieldGroup] label{font-weight:700;color:#444}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item[data-class=EditableFieldGroupEnd] td{border-bottom:1px solid #a8d7f5}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item[data-class=EditableFieldGroupEnd]+.ss-gridfield-item[data-class=EditableFieldGroupEnd]{border-top:0}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item[data-class=EditableFieldGroupEnd] .col-buttons .action{display:none}.uf-field-editor table.ss-gridfield-table .ss-gridfield-item[data-class=EditableFieldGroupEnd] label{color:#777}.uf-field-editor .sticky-buttons{position:fixed;top:40px;z-index:2;background:#999;-webkit-box-shadow:0 12px -4px #999;box-shadow:0 12px -4px #999;padding:12px;margin-left:-12px}.uf-field-editor .sticky-buttons button.action{margin-bottom:0}.uf-field-editor .sticky-buttons~.ss-gridfield-table{margin-top:40px}
|
||||
.uf-field-editor{padding-bottom:0}.uf-field-editor .grid-field__table .ss-gridfield-item{height:46px}.uf-field-editor .grid-field__table .ss-gridfield-item,.uf-field-editor .grid-field__table .ss-gridfield-item:hover{background:#fff}.uf-field-editor .grid-field__table .ss-gridfield-item td{border-right-width:0;border-top:1px solid #999}.uf-field-editor .grid-field__table .ss-gridfield-item td:last-child{border-right-width:1px}.uf-field-editor .grid-field__table .ss-gridfield-item .handle{min-height:46px}.uf-field-editor .grid-field__table .ss-gridfield-item.flash-background{-webkit-animation:flash-background 2s linear;-o-animation:flash-background 2s linear;animation:flash-background 2s linear}.uf-field-editor .grid-field__table .ss-gridfield-item.ui-sortable-placeholder{height:50px}.uf-field-editor .grid-field__table .ss-gridfield-item .form-group{padding:0}.uf-field-editor .grid-field__table .ss-gridfield-item .form-group:after{border-bottom:0}.uf-field-editor .grid-field__table .ss-gridfield-item .form-group .form__field-label{-webkit-box-flex:1;-webkit-flex:auto;flex:auto;max-width:100%}.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup,.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup:hover{background:#f2f9fd}.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup td{border-bottom:0;border-top:1px solid #999}.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup .col-reorder,.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup .handle{background:#bee0f8;border-top:0}.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup.infieldgroup-level-2 .col-reorder,.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup.infieldgroup-level-2 .handle{background:#99cef4;border-top:0}.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup.infieldgroup-level-3 .col-reorder,.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup.infieldgroup-level-3 .handle{background:#89bef4;border-top:0}.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFormStep],.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFormStep]:hover{background:#f6f7f8}.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFormStep] label{font-weight:700;color:#000;font-size:1.1em}.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFormStep] td{border-top:1px solid #a6b6c1}.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFormStep]+.ss-gridfield-item td{border-top:1px solid #f6f7f8}.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroup] td,.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFormStep]+.ss-gridfield-item[data-class=SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroup] td{border-top:1px solid #a8d7f5}.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroup] .form__field-label{font-weight:700}.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroupEnd] td{border-bottom:1px solid #a8d7f5}.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroupEnd]+.ss-gridfield-item[data-class=SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroupEnd]{border-top:0}.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroupEnd] .col-buttons .action{display:none}.uf-field-editor .sticky-buttons{position:fixed;top:73px;z-index:2;background:#f6f7f8;border-bottom:1px solid #e5e8eb;padding:12px;margin-left:-12px}.uf-field-editor .sticky-buttons button.action{margin-bottom:0}.uf-field-editor .sticky-buttons~.ss-gridfield-table{margin-top:73px}
|
||||
/*# sourceMappingURL=userforms-cms.css.map*/
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"sources":["webpack:///./client/src/styles/userforms-cms.scss?61a4","webpack:///./bundle-cms.scss?b4af"],"names":[],"mappings":"AAAA,iBACE,iBCCD,uDDKK,YCDL,oHDKO,gBCAP,0DDIO,qBACA,0BCAP,qEDGS,uBCCT,+DDIO,gBCAP,wEDIO,0HCAP,+EDIO,YCAP,mEDIO,UCAP,yEDGS,gBCCT,sFDGS,+CACA,eCCT,8IDOO,mBCFP,uEDMO,gBACA,0BCFP,6JDOO,mBACA,aCFP,uMDQS,mBACA,aCHT,uMDUS,mBACA,aCLT,oRDaO,mBCRP,6IDYO,gBACA,WACA,gBCRP,0IDYO,6BCRP,6JDYO,6BCRP,2XDkBO,6BCVP,4JDcO,gBCVP,+IDgBO,gCCZP,oPDgBO,aCZP,iKDgBO,aCZP,iCDkBG,eACA,SACA,UACA,mBACA,gCAEA,aACA,kBCfH,+CDkBK,gBCdL,qDDkBK","file":"styles/userforms-cms.css","sourcesContent":[".uf-field-editor {\n padding-bottom: 0;\n\n // Row styles\n .grid-field__table {\n // Standard rows\n .ss-gridfield-item {\n height: $height-base;\n\n &,\n &:hover {\n background: $body-bg;\n }\n\n td {\n border-right-width: 0;\n border-top: 1px solid $gray-light;\n\n &:last-child {\n border-right-width: 1px;\n }\n }\n\n .handle {\n min-height: $height-base;\n }\n\n &.flash-background {\n animation: flash-background 2s linear;\n }\n\n &.ui-sortable-placeholder {\n height: $placeholder-height;\n }\n\n .form-group {\n padding: 0;\n\n &:after {\n border-bottom: 0;\n }\n\n .form__field-label {\n flex: auto;\n max-width: 100%;\n }\n }\n }\n\n .ss-gridfield-item.infieldgroup {\n &,\n &:hover {\n background: $blue-light;\n }\n\n td {\n border-bottom: 0;\n border-top: 1px solid $gray-light;\n }\n\n .col-reorder,\n .handle {\n background: $blue;\n border-top: 0;\n }\n\n &.infieldgroup-level-2 {\n .col-reorder,\n .handle {\n background: $blue-dark;\n border-top: 0;\n }\n }\n\n &.infieldgroup-level-3 {\n .col-reorder,\n .handle {\n background: $blue-darker;\n border-top: 0;\n }\n }\n }\n\n .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFormStep\"] {\n &,\n &:hover {\n background: $background-main;\n }\n\n label {\n font-weight: bold;\n color: $gray-base;\n font-size: 1.1em;\n }\n\n td {\n border-top: 1px solid $gray;\n }\n\n + .ss-gridfield-item td {\n border-top: 1px solid $background-main;\n }\n\n + .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFieldGroup\"] td {\n border-top: 1px solid $blue-base;\n }\n }\n\n .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFieldGroup\"] {\n td {\n border-top: 1px solid $blue-base;\n }\n\n .form__field-label {\n font-weight: bold;\n }\n }\n\n .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFieldGroupEnd\"] {\n td {\n border-bottom: 1px solid $blue-base;\n }\n\n + .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFieldGroupEnd\"] {\n border-top: 0;\n }\n\n .col-buttons .action {\n display: none;\n }\n }\n }\n\n .sticky-buttons {\n position: fixed;\n top: $height-top;\n z-index: 2;\n background: $background-main;\n border-bottom: 1px solid $border-color-light;\n // box-shadow: 0 $padding-base $padding-xs -$padding-base-horizontal $gray-light;\n padding: $padding-base;\n margin-left: -$padding-base;\n\n & button.action {\n margin-bottom: 0;\n }\n\n ~ .ss-gridfield-table {\n margin-top: $height-top;\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/styles/userforms-cms.scss",".uf-field-editor {\n padding-bottom: 0;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item {\n height: 46px;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item,\n.uf-field-editor .grid-field__table .ss-gridfield-item:hover {\n background: #fff;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item td {\n border-right-width: 0;\n border-top: 1px solid #999;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item td:last-child {\n border-right-width: 1px;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item .handle {\n min-height: 46px;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item.flash-background {\n animation: flash-background 2s linear;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item.ui-sortable-placeholder {\n height: 50px;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item .form-group {\n padding: 0;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item .form-group:after {\n border-bottom: 0;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item .form-group .form__field-label {\n flex: auto;\n max-width: 100%;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup,\n.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup:hover {\n background: #f2f9fd;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup td {\n border-bottom: 0;\n border-top: 1px solid #999;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup .col-reorder,\n.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup .handle {\n background: #bee0f8;\n border-top: 0;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup.infieldgroup-level-2 .col-reorder,\n.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup.infieldgroup-level-2 .handle {\n background: #99cef4;\n border-top: 0;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup.infieldgroup-level-3 .col-reorder,\n.uf-field-editor .grid-field__table .ss-gridfield-item.infieldgroup.infieldgroup-level-3 .handle {\n background: #89bef4;\n border-top: 0;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFormStep\"],\n.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFormStep\"]:hover {\n background: #f6f7f8;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFormStep\"] label {\n font-weight: bold;\n color: #000;\n font-size: 1.1em;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFormStep\"] td {\n border-top: 1px solid #a6b6c1;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFormStep\"] + .ss-gridfield-item td {\n border-top: 1px solid #f6f7f8;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFormStep\"] + .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFieldGroup\"] td {\n border-top: 1px solid #a8d7f5;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFieldGroup\"] td {\n border-top: 1px solid #a8d7f5;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFieldGroup\"] .form__field-label {\n font-weight: bold;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFieldGroupEnd\"] td {\n border-bottom: 1px solid #a8d7f5;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFieldGroupEnd\"] + .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFieldGroupEnd\"] {\n border-top: 0;\n}\n\n.uf-field-editor .grid-field__table .ss-gridfield-item[data-class=\"SilverStripe\\\\UserForms\\\\Model\\\\EditableFormField\\\\EditableFieldGroupEnd\"] .col-buttons .action {\n display: none;\n}\n\n.uf-field-editor .sticky-buttons {\n position: fixed;\n top: 73px;\n z-index: 2;\n background: #f6f7f8;\n border-bottom: 1px solid #e5e8eb;\n padding: 12px;\n margin-left: -12px;\n}\n\n.uf-field-editor .sticky-buttons button.action {\n margin-bottom: 0;\n}\n\n.uf-field-editor .sticky-buttons ~ .ss-gridfield-table {\n margin-top: 73px;\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./bundle-cms.scss"],"sourceRoot":""}
|
|
@ -1 +1,2 @@
|
|||
.userform-progress .progress{position:relative;height:1em;background:#eee}.userform-progress .progress-bar{position:absolute;height:1em;background:#666}.userform-progress .step-buttons{margin-left:0;position:relative}.userform-progress .step-button-wrapper{display:inline-block;list-style-type:none}.userform-progress .step-button-wrapper.viewed .step-button-jump{opacity:1}.userform-progress .step-button-jump{position:absolute;top:0;opacity:.7}.step-navigation .step-buttons{margin-left:0}.step-navigation .step-button-wrapper{display:inline-block;list-style-type:none}.userform{clear:both;width:100%;max-width:100%}.userform .field label.right{color:#555}.userformsgroup{border:1px solid #ccc;border-radius:4px;padding:8px;margin-top:12px;margin-bottom:12px}.userformsgroup>legend{padding-left:4px;padding-right:4px;border:0;width:auto}.right-title{clear:both;display:block}.checkbox .right-title{display:inline}.userform .left{margin-bottom:5px;font-weight:700}
|
||||
.userform-progress .progress{position:relative;height:1em;background:#eee}.userform-progress .progress-bar{position:absolute;height:1em;background:#666}.userform-progress .step-buttons{margin-left:0;position:relative}.userform-progress .step-button-wrapper{display:inline-block;list-style-type:none}.userform-progress .step-button-wrapper.viewed .step-button-jump{opacity:1}.userform-progress .step-button-jump{position:absolute;top:0;opacity:.7}.step-navigation .step-buttons{margin-left:0}.step-navigation .step-button-wrapper{display:inline-block;list-style-type:none}.userform{clear:both;width:100%;max-width:100%}.userform .field label.right{color:#555}.userformsgroup{border:1px solid #ccc;border-radius:4px;padding:8px;margin-top:12px;margin-bottom:12px}.userformsgroup>legend{padding-left:4px;padding-right:4px;border:0;width:auto}.right-title{clear:both;display:block}.checkbox .right-title{display:inline}.userform .left{margin-bottom:5px;font-weight:700}
|
||||
/*# sourceMappingURL=userforms.css.map*/
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"sources":["webpack:///./client/src/styles/userforms.scss?1f22","webpack:///./bundle.scss?6663"],"names":[],"mappings":"AAEA,6BAEI,kBACA,WACA,gBCFH,iCDMG,kBACA,WACA,gBCFH,iCDMG,cACA,kBCFH,wCDMG,qBACA,qBCFH,iEDKK,UCDL,qCDMG,kBACA,MACA,WCFH,+BDQG,cCJH,sCDQG,qBACA,qBCJH,UDSC,WACA,WACA,eCLD,6BDQG,WCJH,gBDSC,sBACA,kBACA,YACA,gBACA,mBCLD,uBDQG,iBACA,kBACA,SACA,WCJH,aDSC,WACA,cCLD,uBDSC,eCLD,gBDSC,kBACA","file":"styles/userforms.css","sourcesContent":["// Lightweight base styles for the front-end form.\n\n.userform-progress {\n .progress {\n position: relative;\n height: 1em;\n background: $gray-lighter;\n }\n\n .progress-bar {\n position: absolute;\n height: 1em;\n background: $gray-progress-bg;\n }\n\n .step-buttons {\n margin-left: 0;\n position: relative;\n }\n\n .step-button-wrapper {\n display: inline-block;\n list-style-type: none;\n\n &.viewed .step-button-jump {\n opacity: 1;\n }\n }\n\n .step-button-jump {\n position: absolute;\n top: 0;\n opacity: .7;\n }\n}\n\n.step-navigation {\n .step-buttons {\n margin-left: 0;\n }\n\n .step-button-wrapper {\n display: inline-block;\n list-style-type: none;\n }\n}\n\n.userform {\n clear: both;\n width: 100%;\n max-width: 100%;\n\n .field label.right {\n color: $gray-dark-label;\n }\n}\n\n.userformsgroup {\n border: 1px solid $gray-light-border;\n border-radius: $padding-xs;\n padding: $padding-base-horizontal;\n margin-top: $padding-base;\n margin-bottom: $padding-base;\n\n > legend {\n padding-left: $padding-xs;\n padding-right: $padding-xs;\n border: 0;\n width: auto;\n }\n}\n\n.right-title {\n clear: both;\n display: block;\n}\n\n.checkbox .right-title {\n display: inline;\n}\n\n.userform .left {\n margin-bottom: $padding-sm;\n font-weight: bold;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/src/styles/userforms.scss",".userform-progress .progress {\n position: relative;\n height: 1em;\n background: #eee;\n}\n\n.userform-progress .progress-bar {\n position: absolute;\n height: 1em;\n background: #666;\n}\n\n.userform-progress .step-buttons {\n margin-left: 0;\n position: relative;\n}\n\n.userform-progress .step-button-wrapper {\n display: inline-block;\n list-style-type: none;\n}\n\n.userform-progress .step-button-wrapper.viewed .step-button-jump {\n opacity: 1;\n}\n\n.userform-progress .step-button-jump {\n position: absolute;\n top: 0;\n opacity: .7;\n}\n\n.step-navigation .step-buttons {\n margin-left: 0;\n}\n\n.step-navigation .step-button-wrapper {\n display: inline-block;\n list-style-type: none;\n}\n\n.userform {\n clear: both;\n width: 100%;\n max-width: 100%;\n}\n\n.userform .field label.right {\n color: #555;\n}\n\n.userformsgroup {\n border: 1px solid #ccc;\n border-radius: 4px;\n padding: 8px;\n margin-top: 12px;\n margin-bottom: 12px;\n}\n\n.userformsgroup > legend {\n padding-left: 4px;\n padding-right: 4px;\n border: 0;\n width: auto;\n}\n\n.right-title {\n clear: both;\n display: block;\n}\n\n.checkbox .right-title {\n display: inline;\n}\n\n.userform .left {\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./bundle.scss"],"sourceRoot":""}
|
|
@ -2,35 +2,33 @@
|
|||
* form builder behaviour.
|
||||
*/
|
||||
|
||||
import $ from 'jquery';
|
||||
|
||||
$.entwine('ss', () => {
|
||||
window.jQuery.entwine('ss', ($) => {
|
||||
let stickyHeaderInterval = null;
|
||||
|
||||
$('.uf-field-editor tbody').entwine({
|
||||
onmatch: () => {
|
||||
$('.uf-field-editor .ss-gridfield-items').entwine({
|
||||
onmatch() {
|
||||
let i = 0;
|
||||
let thisLevel = 0;
|
||||
let depth = 0;
|
||||
const $buttonrow = $('.uf-field-editor .ss-gridfield-buttonrow').addClass('sticky-buttons');
|
||||
const navHeight = $('.cms-content-header.north').height()
|
||||
const navHeight = $('.cms-content-header.north').first().height()
|
||||
+ parseInt($('.sticky-buttons').css('padding-top'), 10);
|
||||
const fieldEditor = $('.uf-field-editor');
|
||||
|
||||
this._super();
|
||||
|
||||
// Loop through all rows and set necessary styles
|
||||
this.find('.ss-gridfield-item').each(() => {
|
||||
switch ($(this).data('class')) {
|
||||
case 'EditableFormStep': {
|
||||
this.find('.ss-gridfield-item').each((i, el) => {
|
||||
switch ($(el).data('class')) {
|
||||
case 'SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFormStep': {
|
||||
depth = 0;
|
||||
return;
|
||||
}
|
||||
case 'EditableFieldGroup': {
|
||||
case 'SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroup': {
|
||||
thisLevel = ++depth;
|
||||
break;
|
||||
}
|
||||
case 'EditableFieldGroupEnd': {
|
||||
case 'SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroupEnd': {
|
||||
thisLevel = depth--;
|
||||
break;
|
||||
}
|
||||
|
@ -39,9 +37,9 @@ $.entwine('ss', () => {
|
|||
}
|
||||
}
|
||||
|
||||
$(this).toggleClass('infieldgroup', thisLevel > 0);
|
||||
$(el).toggleClass('infieldgroup', thisLevel > 0);
|
||||
for (i = 1; i <= 5; i++) {
|
||||
$(this).toggleClass(`infieldgroup-level-${i}`, thisLevel >= i);
|
||||
$(el).toggleClass(`infieldgroup-level-${i}`, thisLevel >= i);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -56,7 +54,7 @@ $.entwine('ss', () => {
|
|||
}
|
||||
}, 300);
|
||||
},
|
||||
onunmatch: () => {
|
||||
onunmatch() {
|
||||
this._super();
|
||||
|
||||
clearInterval(stickyHeaderInterval);
|
||||
|
@ -65,7 +63,7 @@ $.entwine('ss', () => {
|
|||
|
||||
// When new fields are added.
|
||||
$('.uf-field-editor .ss-gridfield-buttonrow .action').entwine({
|
||||
onclick: (e) => {
|
||||
onclick(e) {
|
||||
this._super(e);
|
||||
|
||||
this.trigger('addnewinline');
|
||||
|
@ -73,7 +71,7 @@ $.entwine('ss', () => {
|
|||
});
|
||||
|
||||
$('.uf-field-editor').entwine({
|
||||
onmatch: () => {
|
||||
onmatch() {
|
||||
this._super();
|
||||
|
||||
// When the 'Add field' button is clicked set a one time listener.
|
||||
|
@ -83,7 +81,7 @@ $.entwine('ss', () => {
|
|||
// If fieldgroup, focus on the start marker
|
||||
let $newField = this.find('.ss-gridfield-item').last();
|
||||
let $groupEnd = null;
|
||||
if ($newField.attr('data-class') === 'EditableFieldGroupEnd') {
|
||||
if ($newField.attr('data-class') === 'SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroupEnd') {
|
||||
$groupEnd = $newField;
|
||||
$groupEnd.prev().find('.col-Title input').focus();
|
||||
$newField = $groupEnd.add($groupEnd.prev());
|
||||
|
@ -100,7 +98,7 @@ $.entwine('ss', () => {
|
|||
});
|
||||
});
|
||||
},
|
||||
onummatch: () => {
|
||||
onummatch() {
|
||||
this._super();
|
||||
},
|
||||
});
|
||||
|
|
|
@ -47,5 +47,5 @@ $padding-xs: 4px;
|
|||
$padding-sm: 5px;
|
||||
|
||||
$height-base: 46px;
|
||||
$height-top: 40px;
|
||||
$height-top: 73px;
|
||||
$placeholder-height: 50px;
|
|
@ -1,3 +1,6 @@
|
|||
// CMS SASS bundle
|
||||
// See includePaths in webpack.config.js
|
||||
@import "variables";
|
||||
|
||||
@import "userforms-variables";
|
||||
@import "userforms-cms";
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// Frontend SASS bundle
|
||||
// See includePaths in webpack.config.js
|
||||
@import "variables";
|
||||
|
||||
@import "userforms-variables";
|
||||
@import "userforms";
|
||||
|
|
|
@ -1,16 +1,8 @@
|
|||
// Animations
|
||||
|
||||
@keyframes flash-background {
|
||||
0% {background-color: $body-bg;}
|
||||
10% {background-color: $green-bg;}
|
||||
70% {background-color: $green-bg;}
|
||||
}
|
||||
|
||||
.uf-field-editor {
|
||||
padding-bottom: 0;
|
||||
|
||||
// Row styles
|
||||
table.ss-gridfield-table {
|
||||
.grid-field__table {
|
||||
// Standard rows
|
||||
.ss-gridfield-item {
|
||||
height: $height-base;
|
||||
|
@ -40,6 +32,19 @@
|
|||
&.ui-sortable-placeholder {
|
||||
height: $placeholder-height;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
padding: 0;
|
||||
|
||||
&:after {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.form__field-label {
|
||||
flex: auto;
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ss-gridfield-item.infieldgroup {
|
||||
|
@ -76,10 +81,10 @@
|
|||
}
|
||||
}
|
||||
|
||||
.ss-gridfield-item[data-class="EditableFormStep"] {
|
||||
.ss-gridfield-item[data-class="SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFormStep"] {
|
||||
&,
|
||||
&:hover {
|
||||
background: $gray-bg;
|
||||
background: $background-main;
|
||||
}
|
||||
|
||||
label {
|
||||
|
@ -93,41 +98,36 @@
|
|||
}
|
||||
|
||||
+ .ss-gridfield-item td {
|
||||
border-top: 1px solid $gray-bg;
|
||||
border-top: 1px solid $background-main;
|
||||
}
|
||||
|
||||
+ .ss-gridfield-item[data-class="EditableFieldGroup"] td {
|
||||
+ .ss-gridfield-item[data-class="SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroup"] td {
|
||||
border-top: 1px solid $blue-base;
|
||||
}
|
||||
}
|
||||
|
||||
.ss-gridfield-item[data-class="EditableFieldGroup"] {
|
||||
.ss-gridfield-item[data-class="SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroup"] {
|
||||
td {
|
||||
border-top: 1px solid $blue-base;
|
||||
}
|
||||
|
||||
label {
|
||||
.form__field-label {
|
||||
font-weight: bold;
|
||||
color: $gray-darker;
|
||||
}
|
||||
}
|
||||
|
||||
.ss-gridfield-item[data-class="EditableFieldGroupEnd"] {
|
||||
.ss-gridfield-item[data-class="SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroupEnd"] {
|
||||
td {
|
||||
border-bottom: 1px solid $blue-base;
|
||||
}
|
||||
|
||||
+ .ss-gridfield-item[data-class="EditableFieldGroupEnd"] {
|
||||
+ .ss-gridfield-item[data-class="SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroupEnd"] {
|
||||
border-top: 0;
|
||||
}
|
||||
|
||||
.col-buttons .action {
|
||||
display: none;
|
||||
}
|
||||
|
||||
label {
|
||||
color: $gray-dark;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -135,8 +135,9 @@
|
|||
position: fixed;
|
||||
top: $height-top;
|
||||
z-index: 2;
|
||||
background: $gray-light;
|
||||
box-shadow: 0 $padding-base $padding-xs -$padding-base-horizontal $gray-light;
|
||||
background: $background-main;
|
||||
border-bottom: 1px solid $border-color-light;
|
||||
// box-shadow: 0 $padding-base $padding-xs -$padding-base-horizontal $gray-light;
|
||||
padding: $padding-base;
|
||||
margin-left: -$padding-base;
|
||||
|
||||
|
|
|
@ -1,5 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Extension;
|
||||
|
||||
use SilverStripe\Assets\Folder;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\ORM\DB;
|
||||
use SilverStripe\Security\Group;
|
||||
use SilverStripe\Security\Permission;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFileField;
|
||||
|
||||
/**
|
||||
* Provides additional file security for uploaded files when the securefiles module is installed
|
||||
*
|
||||
|
@ -110,7 +119,7 @@ class SecureEditableFileField extends DataExtension
|
|||
*/
|
||||
protected function findAdminGroup()
|
||||
{
|
||||
singleton('Group')->requireDefaultRecords();
|
||||
singleton(Group::class)->requireDefaultRecords();
|
||||
return Permission::get_groups_by_permission('ADMIN')->First();
|
||||
}
|
||||
|
|
@ -1,18 +1,49 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Extension;
|
||||
|
||||
use SilverStripe\Core\Manifest\ModuleLoader;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\Tab;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldButtonRow;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig;
|
||||
use SilverStripe\Forms\GridField\GridFieldEditButton;
|
||||
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
|
||||
use SilverStripe\Forms\GridField\GridFieldDetailForm;
|
||||
use SilverStripe\Forms\GridField\GridFieldToolbarHeader;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\UserForms\Form\GridFieldAddClassesButton;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFormStep;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableTextField;
|
||||
use SilverStripe\Versioned\Versioned;
|
||||
use SilverStripe\View\Requirements;
|
||||
use Symbiote\GridFieldExtensions\GridFieldEditableColumns;
|
||||
use Symbiote\GridFieldExtensions\GridFieldOrderableRows;
|
||||
|
||||
/**
|
||||
* @package userforms
|
||||
*/
|
||||
class UserFormFieldEditorExtension extends DataExtension
|
||||
{
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_many = array(
|
||||
'Fields' => 'EditableFormField'
|
||||
'Fields' => EditableFormField::class
|
||||
);
|
||||
|
||||
private static $owns = [
|
||||
'Fields'
|
||||
];
|
||||
|
||||
private static $cascade_deletes = [
|
||||
'Fields'
|
||||
];
|
||||
|
||||
/**
|
||||
* Adds the field editor to the page.
|
||||
*
|
||||
|
@ -22,7 +53,7 @@ class UserFormFieldEditorExtension extends DataExtension
|
|||
{
|
||||
$fieldEditor = $this->getFieldEditorGrid();
|
||||
|
||||
$fields->insertAfter(new Tab('FormFields', _t('UserFormFieldEditorExtension.FORMFIELDS', 'Form Fields')), 'Main');
|
||||
$fields->insertAfter(new Tab('FormFields', _t(__CLASS__.'.FORMFIELDS', 'Form Fields')), 'Main');
|
||||
$fields->addFieldToTab('Root.FormFields', $fieldEditor);
|
||||
|
||||
return $fields;
|
||||
|
@ -35,15 +66,16 @@ class UserFormFieldEditorExtension extends DataExtension
|
|||
*/
|
||||
public function getFieldEditorGrid()
|
||||
{
|
||||
Requirements::javascript(USERFORMS_DIR . '/javascript/FieldEditor.js');
|
||||
$module = ModuleLoader::getModule('silverstripe/userforms');
|
||||
Requirements::javascript($module->getRelativeResourcePath('client/dist/js/userforms-cms.js'));
|
||||
|
||||
$fields = $this->owner->Fields();
|
||||
|
||||
$this->createInitialFormStep(true);
|
||||
|
||||
$editableColumns = new GridFieldEditableColumns();
|
||||
$fieldClasses = singleton('EditableFormField')->getEditableFieldClasses();
|
||||
$editableColumns->setDisplayFields(array(
|
||||
$fieldClasses = singleton(EditableFormField::class)->getEditableFieldClasses();
|
||||
$editableColumns->setDisplayFields([
|
||||
'ClassName' => function ($record, $column, $grid) use ($fieldClasses) {
|
||||
if ($record instanceof EditableFormField) {
|
||||
return $record->getInlineClassnameField($column, $fieldClasses);
|
||||
|
@ -54,19 +86,19 @@ class UserFormFieldEditorExtension extends DataExtension
|
|||
return $record->getInlineTitleField($column);
|
||||
}
|
||||
}
|
||||
));
|
||||
]);
|
||||
|
||||
$config = GridFieldConfig::create()
|
||||
->addComponents(
|
||||
$editableColumns,
|
||||
new GridFieldButtonRow(),
|
||||
GridFieldAddClassesButton::create('EditableTextField')
|
||||
->setButtonName(_t('UserFormFieldEditorExtension.ADD_FIELD', 'Add Field'))
|
||||
(new GridFieldAddClassesButton(EditableTextField::class))
|
||||
->setButtonName(_t(__CLASS__.'.ADD_FIELD', 'Add Field'))
|
||||
->setButtonClass('ss-ui-action-constructive'),
|
||||
GridFieldAddClassesButton::create('EditableFormStep')
|
||||
->setButtonName(_t('UserFormFieldEditorExtension.ADD_PAGE_BREAK', 'Add Page Break')),
|
||||
GridFieldAddClassesButton::create(array('EditableFieldGroup', 'EditableFieldGroupEnd'))
|
||||
->setButtonName(_t('UserFormFieldEditorExtension.ADD_FIELD_GROUP', 'Add Field Group')),
|
||||
(new GridFieldAddClassesButton(EditableFormStep::class))
|
||||
->setButtonName(_t(__CLASS__.'.ADD_PAGE_BREAK', 'Add Page Break')),
|
||||
(new GridFieldAddClassesButton([EditableFieldGroup::class, EditableFieldGroupEnd::class]))
|
||||
->setButtonName(_t(__CLASS__.'.ADD_FIELD_GROUP', 'Add Field Group')),
|
||||
new GridFieldEditButton(),
|
||||
new GridFieldDeleteAction(),
|
||||
new GridFieldToolbarHeader(),
|
||||
|
@ -76,7 +108,7 @@ class UserFormFieldEditorExtension extends DataExtension
|
|||
|
||||
$fieldEditor = GridField::create(
|
||||
'Fields',
|
||||
_t('UserDefinedForm.FIELDS', 'Fields'),
|
||||
_t('SilverStripe\\UserForms\\Model\\UserDefinedForm.FIELDS', 'Fields'),
|
||||
$fields,
|
||||
$config
|
||||
)->addExtraClass('uf-field-editor');
|
||||
|
@ -120,7 +152,7 @@ class UserFormFieldEditorExtension extends DataExtension
|
|||
|
||||
// Add step
|
||||
$step = EditableFormStep::create();
|
||||
$step->Title = _t('EditableFormStep.TITLE_FIRST', 'First Page');
|
||||
$step->Title = _t('SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFormStep.TITLE_FIRST', 'First Page');
|
||||
$step->Sort = 1;
|
||||
$step->write();
|
||||
$fields->add($step);
|
||||
|
@ -135,70 +167,65 @@ class UserFormFieldEditorExtension extends DataExtension
|
|||
}
|
||||
|
||||
/**
|
||||
* @see SiteTree::doPublish
|
||||
* @param Page $original
|
||||
*
|
||||
* @return void
|
||||
* Remove any orphaned child records on publish
|
||||
*/
|
||||
public function onAfterPublish($original)
|
||||
public function onAfterPublish()
|
||||
{
|
||||
// store IDs of fields we've published
|
||||
$seenIDs = array();
|
||||
|
||||
$seenIDs = [];
|
||||
foreach ($this->owner->Fields() as $field) {
|
||||
// store any IDs of fields we publish so we don't unpublish them
|
||||
$seenIDs[] = $field->ID;
|
||||
$field->doPublish('Stage', 'Live');
|
||||
$field->doPublish(Versioned::DRAFT, Versioned::LIVE);
|
||||
$field->destroy();
|
||||
}
|
||||
|
||||
// fetch any orphaned live records
|
||||
$live = Versioned::get_by_stage("EditableFormField", "Live")
|
||||
->filter(array(
|
||||
'ParentID' => $original->ID,
|
||||
));
|
||||
$live = Versioned::get_by_stage(EditableFormField::class, Versioned::LIVE)
|
||||
->filter([
|
||||
'ParentID' => $this->owner->ID,
|
||||
]);
|
||||
|
||||
if (!empty($seenIDs)) {
|
||||
$live = $live->exclude(array(
|
||||
$live = $live->exclude([
|
||||
'ID' => $seenIDs,
|
||||
));
|
||||
]);
|
||||
}
|
||||
|
||||
// delete orphaned records
|
||||
foreach ($live as $field) {
|
||||
$field->doDeleteFromStage('Live');
|
||||
$field->deleteFromStage(Versioned::LIVE);
|
||||
$field->destroy();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SiteTree::doUnpublish
|
||||
* @param Page $page
|
||||
*
|
||||
* @return void
|
||||
* Remove all fields from the live stage when unpublishing the page
|
||||
*/
|
||||
public function onAfterUnpublish($page)
|
||||
public function onAfterUnpublish()
|
||||
{
|
||||
foreach ($page->Fields() as $field) {
|
||||
$field->doDeleteFromStage('Live');
|
||||
foreach ($this->owner->Fields() as $field) {
|
||||
$field->deleteFromStage(Versioned::LIVE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SiteTree::duplicate
|
||||
* @param DataObject $newPage
|
||||
* When duplicating a UserDefinedForm, duplicate all of its fields and display rules
|
||||
*
|
||||
* @return DataObject
|
||||
* @see \SilverStripe\ORM\DataObject::duplicate
|
||||
* @param \SilverStripe\ORM\DataObject $oldPage
|
||||
* @param bool $doWrite
|
||||
* @param string $manyMany
|
||||
* @return \SilverStripe\ORM\DataObject
|
||||
*/
|
||||
public function onAfterDuplicate($newPage)
|
||||
public function onAfterDuplicate($oldPage, $doWrite, $manyMany)
|
||||
{
|
||||
// List of EditableFieldGroups, where the
|
||||
// key of the array is the ID of the old end group
|
||||
$fieldGroups = array();
|
||||
foreach ($this->owner->Fields() as $field) {
|
||||
// List of EditableFieldGroups, where the key of the array is the ID of the old end group
|
||||
$fieldGroups = [];
|
||||
foreach ($oldPage->Fields() as $field) {
|
||||
$newField = $field->duplicate(false);
|
||||
$newField->ParentID = $newPage->ID;
|
||||
$newField->ParentClass = $newPage->ClassName;
|
||||
$newField->ParentID = $this->owner->ID;
|
||||
$newField->ParentClass = $this->owner->ClassName;
|
||||
$newField->Version = 0;
|
||||
$newField->write();
|
||||
|
||||
|
@ -221,40 +248,32 @@ class UserFormFieldEditorExtension extends DataExtension
|
|||
$newRule->write();
|
||||
}
|
||||
}
|
||||
|
||||
return $newPage;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SiteTree::getIsModifiedOnStage
|
||||
* @param boolean $isModified
|
||||
* Checks child fields to see if any are modified in draft as well. The owner of this extension will still
|
||||
* use the Versioned method to determine its own status.
|
||||
*
|
||||
* @return boolean
|
||||
* @see Versioned::isModifiedOnDraft
|
||||
*
|
||||
* @return boolean|null
|
||||
*/
|
||||
public function getIsModifiedOnStage($isModified)
|
||||
public function isModifiedOnDraft()
|
||||
{
|
||||
if (!$isModified) {
|
||||
foreach ($this->owner->Fields() as $field) {
|
||||
if ($field->getIsModifiedOnStage()) {
|
||||
$isModified = true;
|
||||
break;
|
||||
}
|
||||
foreach ($this->owner->Fields() as $field) {
|
||||
if ($field->isModifiedOnDraft()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return $isModified;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SiteTree::doRevertToLive
|
||||
* @param Page $page
|
||||
*
|
||||
* @return void
|
||||
* @see Versioned::doRevertToLive
|
||||
*/
|
||||
public function onAfterRevertToLive($page)
|
||||
public function onAfterRevertToLive()
|
||||
{
|
||||
foreach ($page->Fields() as $field) {
|
||||
$field->publish('Live', 'Stage', false);
|
||||
foreach ($this->owner->Fields() as $field) {
|
||||
$field->copyVersionToStage(Versioned::LIVE, Versioned::DRAFT, false);
|
||||
$field->writeWithoutVersion();
|
||||
}
|
||||
}
|
|
@ -1,5 +1,12 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Extension;
|
||||
|
||||
use SilverStripe\Forms\RequiredFields;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFormStep;
|
||||
|
||||
class UserFormValidator extends RequiredFields
|
||||
{
|
||||
|
@ -31,7 +38,7 @@ class UserFormValidator extends RequiredFields
|
|||
$this->validationError(
|
||||
'FormFields',
|
||||
_t(
|
||||
"UserFormValidator.UNEXPECTED_BREAK",
|
||||
__CLASS__.".UNEXPECTED_BREAK",
|
||||
"Unexpected page break '{name}' inside nested field '{group}'",
|
||||
array(
|
||||
'name' => $field->CMSTitle,
|
||||
|
@ -48,7 +55,7 @@ class UserFormValidator extends RequiredFields
|
|||
$this->validationError(
|
||||
'FormFields',
|
||||
_t(
|
||||
"UserFormValidator.NO_PAGE",
|
||||
__CLASS__.".NO_PAGE",
|
||||
"Field '{name}' found before any pages",
|
||||
array(
|
||||
'name' => $field->CMSTitle
|
||||
|
@ -74,7 +81,7 @@ class UserFormValidator extends RequiredFields
|
|||
$this->validationError(
|
||||
'FormFields',
|
||||
_t(
|
||||
"UserFormValidator.UNEXPECTED_GROUP_END",
|
||||
__CLASS__.".UNEXPECTED_GROUP_END",
|
||||
"'{name}' found without a matching group",
|
||||
array(
|
||||
'name' => $field->CMSTitle
|
||||
|
@ -90,7 +97,7 @@ class UserFormValidator extends RequiredFields
|
|||
$this->validationError(
|
||||
'FormFields',
|
||||
_t(
|
||||
"UserFormValidator.WRONG_GROUP_END",
|
||||
__CLASS__.".WRONG_GROUP_END",
|
||||
"'{name}' found closes the wrong group '{group}'",
|
||||
array(
|
||||
'name' => $field->CMSTitle,
|
||||
|
@ -111,7 +118,7 @@ class UserFormValidator extends RequiredFields
|
|||
$this->validationError(
|
||||
'FormFields',
|
||||
_t(
|
||||
"UserFormValidator.CONDITIONAL_REQUIRED",
|
||||
__CLASS__.".CONDITIONAL_REQUIRED",
|
||||
"Required field '{name}' cannot be placed within a conditional page",
|
||||
array(
|
||||
'name' => $field->CMSTitle
|
|
@ -1,11 +1,18 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Form;
|
||||
|
||||
use SilverStripe\Control\HTTPResponse_Exception;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridField_ActionProvider;
|
||||
use SilverStripe\Forms\GridField\GridField_FormAction;
|
||||
use SilverStripe\Forms\GridField\GridField_HTMLProvider;
|
||||
|
||||
/**
|
||||
* A button which allows objects to be created with a specified classname(s)
|
||||
*/
|
||||
class GridFieldAddClassesButton extends Object implements GridField_HTMLProvider, GridField_ActionProvider
|
||||
class GridFieldAddClassesButton implements GridField_HTMLProvider, GridField_ActionProvider
|
||||
{
|
||||
|
||||
/**
|
||||
* Name of fragment to insert into
|
||||
*
|
||||
|
@ -41,7 +48,6 @@ class GridFieldAddClassesButton extends Object implements GridField_HTMLProvider
|
|||
*/
|
||||
public function __construct($classes, $targetFragment = 'buttons-before-left')
|
||||
{
|
||||
parent::__construct();
|
||||
$this->setClasses($classes);
|
||||
$this->setFragment($targetFragment);
|
||||
}
|
||||
|
@ -170,17 +176,17 @@ class GridFieldAddClassesButton extends Object implements GridField_HTMLProvider
|
|||
if (!$buttonName) {
|
||||
// provide a default button name, can be changed by calling {@link setButtonName()} on this component
|
||||
$objectName = $singleton->i18n_singular_name();
|
||||
$buttonName = _t('GridField.Add', 'Add {name}', array('name' => $objectName));
|
||||
$buttonName = _t('SilverStripe\\Forms\\GridField\\GridField.Add', 'Add {name}', ['name' => $objectName]);
|
||||
}
|
||||
|
||||
$addAction = new GridField_FormAction(
|
||||
$addAction = GridField_FormAction::create(
|
||||
$grid,
|
||||
$this->getAction(),
|
||||
$buttonName,
|
||||
$this->getAction(),
|
||||
array()
|
||||
);
|
||||
$addAction->setAttribute('data-icon', 'add');
|
||||
$addAction->addExtraClass('font-icon-plus btn btn-primary');
|
||||
|
||||
if ($this->getButtonClass()) {
|
||||
$addAction->addExtraClass($this->getButtonClass());
|
||||
|
@ -231,7 +237,7 @@ class GridFieldAddClassesButton extends Object implements GridField_HTMLProvider
|
|||
{
|
||||
$classes = $this->getClassesCreate($grid);
|
||||
if (empty($classes)) {
|
||||
throw new SS_HTTPResponse_Exception(400);
|
||||
throw new HTTPResponse_Exception(400);
|
||||
}
|
||||
|
||||
// Add item to gridfield
|
|
@ -0,0 +1,197 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Form;
|
||||
|
||||
use ResetFormAction;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Control\Session;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\Form;
|
||||
use SilverStripe\Forms\FormAction;
|
||||
use SilverStripe\Forms\RequiredFields;
|
||||
use SilverStripe\UserForms\FormField\UserFormsStepField;
|
||||
use SilverStripe\UserForms\FormField\UserFormsFieldList;
|
||||
|
||||
/**
|
||||
* @package userforms
|
||||
*/
|
||||
class UserForm extends Form
|
||||
{
|
||||
/**
|
||||
* @param Controller $controller
|
||||
* @param string $name
|
||||
*/
|
||||
public function __construct(Controller $controller, $name = Form::class)
|
||||
{
|
||||
$this->controller = $controller;
|
||||
$this->setRedirectToFormOnValidationError(true);
|
||||
|
||||
parent::__construct(
|
||||
$controller,
|
||||
$name,
|
||||
new FieldList(),
|
||||
new FieldList()
|
||||
);
|
||||
|
||||
$this->setFields($fields = $this->getFormFields());
|
||||
$fields->setForm($this);
|
||||
$this->setActions($actions = $this->getFormActions());
|
||||
$actions->setForm($this);
|
||||
$this->setValidator($this->getRequiredFields());
|
||||
|
||||
// This needs to be re-evaluated since fields have been assigned
|
||||
$this->restoreFormState();
|
||||
|
||||
// Number each page
|
||||
$stepNumber = 1;
|
||||
foreach ($this->getSteps() as $step) {
|
||||
$step->setStepNumber($stepNumber++);
|
||||
}
|
||||
|
||||
if ($controller->DisableCsrfSecurityToken) {
|
||||
$this->disableSecurityToken();
|
||||
}
|
||||
|
||||
$data = $this->getRequest()->getSession()->get("FormInfo.{$this->FormName()}.data");
|
||||
|
||||
if (is_array($data)) {
|
||||
$this->loadDataFrom($data);
|
||||
}
|
||||
|
||||
$this->extend('updateForm');
|
||||
}
|
||||
|
||||
public function restoreFormState()
|
||||
{
|
||||
// Suppress restoreFormState if fields haven't been bootstrapped
|
||||
if ($this->fields && $this->fields->exists()) {
|
||||
return parent::restoreFormState();
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used for partial caching in the template.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLastEdited()
|
||||
{
|
||||
return $this->controller->LastEdited;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function getDisplayErrorMessagesAtTop()
|
||||
{
|
||||
return (bool)$this->controller->DisplayErrorMessagesAtTop;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the fieldlist, filtered to only contain steps
|
||||
*
|
||||
* @return \SilverStripe\ORM\ArrayList
|
||||
*/
|
||||
public function getSteps()
|
||||
{
|
||||
return $this->Fields()->filterByCallback(function ($field) {
|
||||
return $field instanceof UserFormsStepField;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the form fields for the form on this page. Can modify this FieldSet
|
||||
* by using {@link updateFormFields()} on an {@link Extension} subclass which
|
||||
* is applied to this controller.
|
||||
*
|
||||
* This will be a list of top level composite steps
|
||||
*
|
||||
* @return FieldList
|
||||
*/
|
||||
public function getFormFields()
|
||||
{
|
||||
$fields = new UserFormsFieldList();
|
||||
$target = $fields;
|
||||
foreach ($this->controller->Fields() as $field) {
|
||||
$target = $target->processNext($field);
|
||||
}
|
||||
$fields->clearEmptySteps();
|
||||
$this->extend('updateFormFields', $fields);
|
||||
$fields->setForm($this);
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the form actions for the UserDefinedForm. You
|
||||
* can manipulate these by using {@link updateFormActions()} on
|
||||
* a decorator.
|
||||
*
|
||||
* @todo Make form actions editable via their own field editor.
|
||||
*
|
||||
* @return FieldList
|
||||
*/
|
||||
public function getFormActions()
|
||||
{
|
||||
$submitText = ($this->controller->SubmitButtonText)
|
||||
? $this->controller->SubmitButtonText
|
||||
: _t('SilverStripe\\UserForms\\Model\\UserDefinedForm.SUBMITBUTTON', 'Submit');
|
||||
$clearText = ($this->controller->ClearButtonText)
|
||||
? $this->controller->ClearButtonText
|
||||
: _t('SilverStripe\\UserForms\\Model\\UserDefinedForm.CLEARBUTTON', 'Clear');
|
||||
|
||||
$actions = FieldList::create(FormAction::create('process', $submitText));
|
||||
|
||||
if ($this->controller->ShowClearButton) {
|
||||
$actions->push(FormAction::create('clearForm', $clearText)->setAttribute('type', 'reset'));
|
||||
}
|
||||
|
||||
$this->extend('updateFormActions', $actions);
|
||||
$actions->setForm($this);
|
||||
return $actions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the required form fields for this form.
|
||||
*
|
||||
* @return RequiredFields
|
||||
*/
|
||||
public function getRequiredFields()
|
||||
{
|
||||
// Generate required field validator
|
||||
$requiredNames = $this
|
||||
->getController()
|
||||
->Fields()
|
||||
->filter('Required', true)
|
||||
->column('Name');
|
||||
$required = new RequiredFields($requiredNames);
|
||||
$this->extend('updateRequiredFields', $required);
|
||||
$required->setForm($this);
|
||||
return $required;
|
||||
}
|
||||
|
||||
/**
|
||||
* Override some we can add UserForm specific attributes to the form.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getAttributes()
|
||||
{
|
||||
$attrs = parent::getAttributes();
|
||||
|
||||
$attrs['class'] = $attrs['class'] . ' userform';
|
||||
$attrs['data-livevalidation'] = (bool)$this->controller->EnableLiveValidation;
|
||||
$attrs['data-toperrors'] = (bool)$this->controller->DisplayErrorMessagesAtTop;
|
||||
|
||||
return $attrs;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getButtonText()
|
||||
{
|
||||
return $this->config()->get('button_text');
|
||||
}
|
||||
}
|
|
@ -1,5 +1,20 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Form;
|
||||
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\Forms\CompositeField;
|
||||
use SilverStripe\Forms\DateField;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\FieldGroup;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridField_FormAction;
|
||||
use SilverStripe\Forms\GridField\GridFieldFilterHeader;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\ORM\ArrayList;
|
||||
use SilverStripe\ORM\SS_List;
|
||||
use SilverStripe\View\ArrayData;
|
||||
|
||||
/**
|
||||
* Extension to the build in SilverStripe {@link GridField} to allow for
|
||||
* filtering {@link SubmittedForm} objects in the submissions tab by
|
||||
|
@ -9,7 +24,6 @@
|
|||
*/
|
||||
class UserFormsGridFieldFilterHeader extends GridFieldFilterHeader
|
||||
{
|
||||
|
||||
/**
|
||||
* A map of name => value of columns from all submissions
|
||||
* @var array
|
||||
|
@ -40,7 +54,7 @@ class UserFormsGridFieldFilterHeader extends GridFieldFilterHeader
|
|||
|
||||
public function getHTMLFragments($gridField)
|
||||
{
|
||||
$fields = new ArrayList();
|
||||
$fields = ArrayList::create();
|
||||
$state = $gridField->State->UserFormsGridField;
|
||||
|
||||
$selectedField = $state->filter;
|
||||
|
@ -48,13 +62,13 @@ class UserFormsGridFieldFilterHeader extends GridFieldFilterHeader
|
|||
|
||||
// show dropdown of all the fields available from the submitted form fields
|
||||
// that have been saved. Takes the titles from the currently live form.
|
||||
$columnField = new DropdownField('FieldNameFilter', '');
|
||||
$columnField = DropdownField::create('FieldNameFilter', '');
|
||||
$columnField->setSource($this->columns);
|
||||
$columnField->setEmptyString(_t('UserFormsGridFieldFilterHeader.FILTERSUBMISSIONS', 'Filter Submissions..'));
|
||||
$columnField->setEmptyString(_t(__CLASS__.'.FILTERSUBMISSIONS', 'Filter Submissions..'));
|
||||
$columnField->setHasEmptyDefault(true);
|
||||
$columnField->setValue($selectedField);
|
||||
|
||||
$valueField = new TextField('FieldValue', '', $selectedValue);
|
||||
$valueField = TextField::create('FieldValue', '', $selectedValue);
|
||||
|
||||
$columnField->addExtraClass('ss-gridfield-sort');
|
||||
$columnField->addExtraClass('no-change-track');
|
||||
|
@ -63,23 +77,21 @@ class UserFormsGridFieldFilterHeader extends GridFieldFilterHeader
|
|||
$valueField->addExtraClass('no-change-track');
|
||||
$valueField->setAttribute(
|
||||
'placeholder',
|
||||
_t('UserFormsGridFieldFilterHeader.WHEREVALUEIS', 'where value is..'
|
||||
));
|
||||
_t(__CLASS__.'.WHEREVALUEIS', 'where value is..')
|
||||
);
|
||||
|
||||
$fields->push(new FieldGroup(new CompositeField(
|
||||
$fields->push(FieldGroup::create(CompositeField::create(
|
||||
$columnField,
|
||||
$valueField
|
||||
)));
|
||||
|
||||
$fields->push(new FieldGroup(new CompositeField(
|
||||
$start = new DateField('StartFilter', _t('UserFormsGridFieldFilterHeader.FROM', 'From')),
|
||||
$end = new DateField('EndFilter', _t('UserFormsGridFieldFilterHeader.TILL', 'Till'))
|
||||
$fields->push(FieldGroup::create(CompositeField::create(
|
||||
$start = DateField::create('StartFilter', _t(__CLASS__.'.FROM', 'From')),
|
||||
$end = DateField::create('EndFilter', _t(__CLASS__.'.TILL', 'Till'))
|
||||
)));
|
||||
|
||||
foreach (array($start, $end) as $date) {
|
||||
$date->setConfig('showcalendar', true);
|
||||
$date->setConfig('dateformat', 'y-mm-dd');
|
||||
$date->setConfig('datavalueformat', 'y-mm-dd');
|
||||
$date->setDateFormat('y-mm-dd');
|
||||
$date->addExtraClass('no-change-track');
|
||||
}
|
||||
|
||||
|
@ -87,28 +99,27 @@ class UserFormsGridFieldFilterHeader extends GridFieldFilterHeader
|
|||
$start->setValue($state->start);
|
||||
|
||||
|
||||
$fields->push($actions = new FieldGroup(
|
||||
$fields->push($actions = FieldGroup::create(
|
||||
GridField_FormAction::create($gridField, 'filter', false, 'filter', null)
|
||||
->addExtraClass('ss-gridfield-button-filter')
|
||||
->setAttribute('title', _t('GridField.Filter', "Filter"))
|
||||
->setAttribute('title', _t('SilverStripe\\Forms\\GridField\\GridField.Filter', "Filter"))
|
||||
->setAttribute('id', 'action_filter_' . $gridField->getModelClass() . '_' . $columnField),
|
||||
GridField_FormAction::create($gridField, 'reset', false, 'reset', null)
|
||||
->addExtraClass('ss-gridfield-button-close')
|
||||
->setAttribute('title', _t('GridField.ResetFilter', "Reset"))
|
||||
->setAttribute('title', _t('SilverStripe\\Forms\\GridField\\GridField.ResetFilter', "Reset"))
|
||||
->setAttribute('id', 'action_reset_' . $gridField->getModelClass() . '_' . $columnField)
|
||||
)
|
||||
);
|
||||
));
|
||||
|
||||
$actions->addExtraClass('filter-buttons');
|
||||
$actions->addExtraClass('no-change-track');
|
||||
|
||||
$forTemplate = new ArrayData(array(
|
||||
$forTemplate = ArrayData::create(array(
|
||||
'Fields' => $fields
|
||||
));
|
||||
|
||||
|
||||
return array(
|
||||
'header' => $forTemplate->renderWith('GridFieldFilterHeader_Row')
|
||||
'header' => $forTemplate->renderWith(GridFieldFilterHeader::class . '_Row')
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -118,14 +129,14 @@ class UserFormsGridFieldFilterHeader extends GridFieldFilterHeader
|
|||
|
||||
if ($filter = $state->UserFormsGridField->toArray()) {
|
||||
if (isset($filter['filter']) && $filter['filter'] && isset($filter['value']) && $filter['value']) {
|
||||
$dataList = $dataList->where(sprintf("
|
||||
$dataList = $dataList->where(sprintf(
|
||||
"
|
||||
SELECT COUNT(*) FROM SubmittedFormField
|
||||
WHERE (
|
||||
ParentID = SubmittedForm.ID AND
|
||||
Name = '%s' AND
|
||||
Value LIKE '%s'
|
||||
) > 0",
|
||||
|
||||
Convert::raw2sql($filter['filter']),
|
||||
Convert::raw2sql($filter['value'])
|
||||
));
|
|
@ -1,5 +1,9 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\FormField;
|
||||
|
||||
use SilverStripe\Forms\CheckboxSetField;
|
||||
|
||||
/**
|
||||
* @package userforms
|
||||
*/
|
|
@ -1,11 +1,16 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\FormField;
|
||||
|
||||
use SilverStripe\Forms\CompositeField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFormStep;
|
||||
|
||||
/**
|
||||
* Represents a composite field group, which may contain other groups
|
||||
*/
|
||||
abstract class UserFormsCompositeField extends CompositeField implements UserFormsFieldContainer
|
||||
{
|
||||
|
||||
/**
|
||||
* Parent field
|
||||
*
|
||||
|
@ -32,10 +37,11 @@ abstract class UserFormsCompositeField extends CompositeField implements UserFor
|
|||
}
|
||||
|
||||
// Skip over fields that don't generate formfields
|
||||
$formField = $field->getFormField();
|
||||
if (!$formField) {
|
||||
if (get_class($field) === EditableFormField::class || !$field->getFormField()) {
|
||||
return $this;
|
||||
}
|
||||
/** @var EditableFormField $formField */
|
||||
$formField = $field->getFormField();
|
||||
|
||||
// Save this field
|
||||
$this->push($formField);
|
|
@ -1,5 +1,9 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\FormField;
|
||||
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* Represents a field container which can iteratively process nested fields, converting it into a fieldset
|
||||
*/
|
|
@ -1,11 +1,15 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\FormField;
|
||||
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* A list of formfields which allows for iterative processing of nested composite fields
|
||||
*/
|
||||
class UserFormsFieldList extends FieldList implements UserFormsFieldContainer
|
||||
{
|
||||
|
||||
public function processNext(EditableFormField $field)
|
||||
{
|
||||
$formField = $field->getFormField();
|
|
@ -1,11 +1,15 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\FormField;
|
||||
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* Front end composite field for userforms
|
||||
*/
|
||||
class UserFormsGroupField extends UserFormsCompositeField
|
||||
{
|
||||
|
||||
public function __construct($children = null)
|
||||
{
|
||||
parent::__construct($children);
|
|
@ -1,14 +1,15 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\FormField;
|
||||
|
||||
/**
|
||||
* Represents a page step in a form, which may contain form fields or other groups
|
||||
*/
|
||||
class UserFormsStepField extends UserFormsCompositeField
|
||||
{
|
||||
|
||||
private static $casting = array(
|
||||
private static $casting = [
|
||||
'StepNumber' => 'Int'
|
||||
);
|
||||
];
|
||||
|
||||
/**
|
||||
* Numeric index (1 based) of this step
|
||||
|
@ -19,7 +20,7 @@ class UserFormsStepField extends UserFormsCompositeField
|
|||
*/
|
||||
protected $number = null;
|
||||
|
||||
public function FieldHolder($properties = array())
|
||||
public function FieldHolder($properties = [])
|
||||
{
|
||||
return $this->Field($properties);
|
||||
}
|
|
@ -1,5 +1,14 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model;
|
||||
|
||||
use LogicException;
|
||||
use SilverStripe\CMS\Controllers\CMSMain;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use Silverstripe\Versioned\Versioned;
|
||||
|
||||
/**
|
||||
* A custom rule for showing / hiding an EditableFormField
|
||||
* based the value of another EditableFormField.
|
||||
|
@ -13,28 +22,27 @@
|
|||
*/
|
||||
class EditableCustomRule extends DataObject
|
||||
{
|
||||
private static $condition_options = [
|
||||
'IsBlank' => 'Is blank',
|
||||
'IsNotBlank' => 'Is not blank',
|
||||
'HasValue' => 'Equals',
|
||||
'ValueNot' => 'Doesn\'t equal',
|
||||
'ValueLessThan' => 'Less than',
|
||||
'ValueLessThanEqual' => 'Less than or equal',
|
||||
'ValueGreaterThan' => 'Greater than',
|
||||
'ValueGreaterThanEqual' => 'Greater than or equal'
|
||||
];
|
||||
|
||||
private static $condition_options = array(
|
||||
"IsBlank" => "Is blank",
|
||||
"IsNotBlank" => "Is not blank",
|
||||
"HasValue" => "Equals",
|
||||
"ValueNot" => "Doesn't equal",
|
||||
"ValueLessThan" => "Less than",
|
||||
"ValueLessThanEqual" => "Less than or equal",
|
||||
"ValueGreaterThan" => "Greater than",
|
||||
"ValueGreaterThanEqual" => "Greater than or equal"
|
||||
);
|
||||
|
||||
private static $db = array(
|
||||
private static $db = [
|
||||
'Display' => 'Enum("Show,Hide")',
|
||||
'ConditionOption' => 'Enum("IsBlank,IsNotBlank,HasValue,ValueNot,ValueLessThan,ValueLessThanEqual,ValueGreaterThan,ValueGreaterThanEqual")',
|
||||
'FieldValue' => 'Varchar(255)'
|
||||
);
|
||||
];
|
||||
|
||||
private static $has_one = array(
|
||||
'Parent' => 'EditableFormField',
|
||||
'ConditionField' => 'EditableFormField'
|
||||
);
|
||||
private static $has_one = [
|
||||
'Parent' => EditableFormField::class,
|
||||
'ConditionField' => EditableFormField::class
|
||||
];
|
||||
|
||||
/**
|
||||
* Built in extensions required
|
||||
|
@ -42,30 +50,11 @@ class EditableCustomRule extends DataObject
|
|||
* @config
|
||||
* @var array
|
||||
*/
|
||||
private static $extensions = array(
|
||||
"Versioned('Stage', 'Live')"
|
||||
);
|
||||
|
||||
/**
|
||||
* Publish this custom rule to the live site
|
||||
*
|
||||
* Wrapper for the {@link Versioned} publish function
|
||||
*/
|
||||
public function doPublish($fromStage, $toStage, $createNewVersion = false)
|
||||
{
|
||||
$this->publish($fromStage, $toStage, $createNewVersion);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete this custom rule from a given stage
|
||||
*
|
||||
* Wrapper for the {@link Versioned} deleteFromStage function
|
||||
*/
|
||||
public function doDeleteFromStage($stage)
|
||||
{
|
||||
$this->deleteFromStage($stage);
|
||||
}
|
||||
private static $extensions = [
|
||||
Versioned::class . "('Stage', 'Live')"
|
||||
];
|
||||
|
||||
private static $table_name = 'EditableCustomRule';
|
||||
|
||||
/**
|
||||
* @param Member $member
|
||||
|
@ -101,7 +90,7 @@ class EditableCustomRule extends DataObject
|
|||
* @param array $context Virtual parameter to allow context to be passed in to check
|
||||
* @return bool
|
||||
*/
|
||||
public function canCreate($member = null)
|
||||
public function canCreate($member = null, $context = [])
|
||||
{
|
||||
// Check parent page
|
||||
$parent = $this->getCanCreateContext(func_get_args());
|
||||
|
@ -154,7 +143,9 @@ class EditableCustomRule extends DataObject
|
|||
|
||||
/**
|
||||
* Substitutes configured rule logic with it's JS equivalents and returns them as array elements
|
||||
*
|
||||
* @return array
|
||||
* @throws LogicException If the provided condition option was not able to be handled
|
||||
*/
|
||||
public function buildExpression()
|
||||
{
|
||||
|
@ -169,12 +160,13 @@ class EditableCustomRule extends DataObject
|
|||
$target = sprintf('$("%s")', $formFieldWatch->getSelectorFieldOnly());
|
||||
$fieldValue = Convert::raw2js($this->FieldValue);
|
||||
|
||||
$conditionOptions = array(
|
||||
$conditionOptions = [
|
||||
'ValueLessThan' => '<',
|
||||
'ValueLessThanEqual' => '<=',
|
||||
'ValueGreaterThan' => '>',
|
||||
'ValueGreaterThanEqual' => '>='
|
||||
);
|
||||
];
|
||||
|
||||
// and what should we evaluate
|
||||
switch ($this->ConditionOption) {
|
||||
case 'IsNotBlank':
|
||||
|
@ -229,10 +221,10 @@ class EditableCustomRule extends DataObject
|
|||
break;
|
||||
}
|
||||
|
||||
$result = array(
|
||||
$result = [
|
||||
'operation' => $expression,
|
||||
'event' => $action,
|
||||
);
|
||||
];
|
||||
|
||||
return $result;
|
||||
}
|
|
@ -1,6 +1,45 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model;
|
||||
|
||||
use SilverStripe\CMS\Controllers\CMSMain;
|
||||
use SilverStripe\CMS\Controllers\CMSPageEditController;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Core\ClassInfo;
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\Core\Manifest\ModuleLoader;
|
||||
use SilverStripe\Dev\Deprecation;
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldButtonRow;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig;
|
||||
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
|
||||
use SilverStripe\Forms\GridField\GridFieldToolbarHeader;
|
||||
use SilverStripe\Forms\LabelField;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\Forms\ReadonlyField;
|
||||
use SilverStripe\Forms\SegmentField;
|
||||
use SilverStripe\Forms\TabSet;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\ORM\ArrayList;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\ORM\FieldType\DBField;
|
||||
use SilverStripe\ORM\ValidationException;
|
||||
use SilverStripe\UserForms\Extension\UserFormFieldEditorExtension;
|
||||
use SilverStripe\UserForms\Model\UserDefinedForm;
|
||||
use SilverStripe\UserForms\Model\EditableCustomRule;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFormStep;
|
||||
use SilverStripe\UserForms\Model\Submission\SubmittedFormField;
|
||||
use SilverStripe\UserForms\Modifier\DisambiguationSegmentFieldModifier;
|
||||
use SilverStripe\UserForms\Modifier\UnderscoreSegmentFieldModifier;
|
||||
use SilverStripe\Versioned\Versioned;
|
||||
use Symbiote\GridFieldExtensions\GridFieldAddNewInlineButton;
|
||||
use Symbiote\GridFieldExtensions\GridFieldEditableColumns;
|
||||
|
||||
/**
|
||||
* Represents the base class of a editable form field
|
||||
|
@ -22,7 +61,6 @@ use SilverStripe\Forms\SegmentField;
|
|||
*/
|
||||
class EditableFormField extends DataObject
|
||||
{
|
||||
|
||||
/**
|
||||
* Set to true to hide from class selector
|
||||
*
|
||||
|
@ -60,7 +98,7 @@ class EditableFormField extends DataObject
|
|||
*
|
||||
* @var array
|
||||
*/
|
||||
public static $allowed_css = array();
|
||||
public static $allowed_css = [];
|
||||
|
||||
/**
|
||||
* Set this to true to enable placeholder field for any given class
|
||||
|
@ -73,47 +111,44 @@ class EditableFormField extends DataObject
|
|||
* @config
|
||||
* @var array
|
||||
*/
|
||||
private static $summary_fields = array(
|
||||
private static $summary_fields = [
|
||||
'Title'
|
||||
);
|
||||
];
|
||||
|
||||
/**
|
||||
* @config
|
||||
* @var array
|
||||
*/
|
||||
private static $db = array(
|
||||
"Name" => "Varchar",
|
||||
"Title" => "Varchar(255)",
|
||||
"Default" => "Varchar(255)",
|
||||
"Sort" => "Int",
|
||||
"Required" => "Boolean",
|
||||
"CustomErrorMessage" => "Varchar(255)",
|
||||
|
||||
"CustomRules" => "Text", // @deprecated from 2.0
|
||||
"CustomSettings" => "Text", // @deprecated from 2.0
|
||||
"Migrated" => "Boolean", // set to true when migrated
|
||||
|
||||
"ExtraClass" => "Text", // from CustomSettings
|
||||
"RightTitle" => "Varchar(255)", // from CustomSettings
|
||||
"ShowOnLoad" => "Boolean(1)", // from CustomSettings
|
||||
"ShowInSummary" => "Boolean",
|
||||
"Placeholder" => "Varchar(255)",
|
||||
private static $db = [
|
||||
'Name' => 'Varchar',
|
||||
'Title' => 'Varchar(255)',
|
||||
'Default' => 'Varchar(255)',
|
||||
'Sort' => 'Int',
|
||||
'Required' => 'Boolean',
|
||||
'CustomErrorMessage' => 'Varchar(255)',
|
||||
'ExtraClass' => 'Text',
|
||||
'RightTitle' => 'Varchar(255)',
|
||||
'ShowOnLoad' => 'Boolean(1)',
|
||||
'ShowInSummary' => 'Boolean',
|
||||
'Placeholder' => 'Varchar(255)',
|
||||
'DisplayRulesConjunction' => 'Enum("And,Or","Or")',
|
||||
);
|
||||
];
|
||||
|
||||
private static $table_name = 'EditableFormField';
|
||||
|
||||
|
||||
private static $defaults = array(
|
||||
private static $defaults = [
|
||||
'ShowOnLoad' => true,
|
||||
);
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* @config
|
||||
* @var array
|
||||
*/
|
||||
private static $has_one = array(
|
||||
"Parent" => "UserDefinedForm",
|
||||
);
|
||||
private static $has_one = [
|
||||
'Parent' => UserDefinedForm::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* Built in extensions required
|
||||
|
@ -121,17 +156,25 @@ class EditableFormField extends DataObject
|
|||
* @config
|
||||
* @var array
|
||||
*/
|
||||
private static $extensions = array(
|
||||
"Versioned('Stage', 'Live')"
|
||||
);
|
||||
private static $extensions = [
|
||||
Versioned::class . "('Stage', 'Live')"
|
||||
];
|
||||
|
||||
/**
|
||||
* @config
|
||||
* @var array
|
||||
*/
|
||||
private static $has_many = array(
|
||||
"DisplayRules" => "EditableCustomRule.Parent" // from CustomRules
|
||||
);
|
||||
private static $has_many = [
|
||||
'DisplayRules' => EditableCustomRule::class . '.Parent'
|
||||
];
|
||||
|
||||
private static $owns = [
|
||||
'DisplayRules',
|
||||
];
|
||||
|
||||
private static $cascade_deletes = [
|
||||
'DisplayRules',
|
||||
];
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
|
@ -158,10 +201,12 @@ class EditableFormField extends DataObject
|
|||
* Set the visibility of an individual form field
|
||||
*
|
||||
* @param bool
|
||||
* @return $this
|
||||
*/
|
||||
public function setReadonly($readonly = true)
|
||||
{
|
||||
$this->readonly = $readonly;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -179,44 +224,44 @@ class EditableFormField extends DataObject
|
|||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
$fields = new FieldList(new TabSet('Root'));
|
||||
$fields = FieldList::create(TabSet::create('Root'));
|
||||
|
||||
// Main tab
|
||||
$fields->addFieldsToTab(
|
||||
'Root.Main',
|
||||
array(
|
||||
[
|
||||
ReadonlyField::create(
|
||||
'Type',
|
||||
_t('EditableFormField.TYPE', 'Type'),
|
||||
_t(__CLASS__.'.TYPE', 'Type'),
|
||||
$this->i18n_singular_name()
|
||||
),
|
||||
CheckboxField::create('ShowInSummary', _t('EditableFormField.SHOWINSUMMARY', 'Show in summary gridfield')),
|
||||
CheckboxField::create('ShowInSummary', _t(__CLASS__.'.SHOWINSUMMARY', 'Show in summary gridfield')),
|
||||
LiteralField::create(
|
||||
'MergeField',
|
||||
_t(
|
||||
'EditableFormField.MERGEFIELDNAME',
|
||||
__CLASS__.'.MERGEFIELDNAME',
|
||||
'<div class="field readonly">' .
|
||||
'<label class="left">' . _t('EditableFormField.MERGEFIELDNAME', 'Merge field') . '</label>' .
|
||||
'<label class="left">' . _t(__CLASS__.'.MERGEFIELDNAME', 'Merge field') . '</label>' .
|
||||
'<div class="middleColumn">' .
|
||||
'<span class="readonly">$' . $this->Name . '</span>' .
|
||||
'</div>' .
|
||||
'</div>'
|
||||
)
|
||||
),
|
||||
TextField::create('Title', _t('EditableFormField.TITLE', 'Title')),
|
||||
TextField::create('Default', _t('EditableFormField.DEFAULT', 'Default value')),
|
||||
TextField::create('RightTitle', _t('EditableFormField.RIGHTTITLE', 'Right title')),
|
||||
SegmentField::create('Name', _t('EditableFormField.NAME', 'Name'))->setModifiers(array(
|
||||
TextField::create('Title', _t(__CLASS__.'.TITLE', 'Title')),
|
||||
TextField::create('Default', _t(__CLASS__.'.DEFAULT', 'Default value')),
|
||||
TextField::create('RightTitle', _t(__CLASS__.'.RIGHTTITLE', 'Right title')),
|
||||
SegmentField::create('Name', _t(__CLASS__.'.NAME', 'Name'))->setModifiers([
|
||||
UnderscoreSegmentFieldModifier::create()->setDefault('FieldName'),
|
||||
DisambiguationSegmentFieldModifier::create(),
|
||||
))->setPreview($this->Name)
|
||||
)
|
||||
])->setPreview($this->Name)
|
||||
]
|
||||
);
|
||||
$fields->fieldByName('Root.Main')->setTitle(_t('SiteTree.TABMAIN', 'Main'));
|
||||
$fields->fieldByName('Root.Main')->setTitle(_t('SilverStripe\\CMS\\Model\\SiteTree.TABMAIN', 'Main'));
|
||||
|
||||
// Custom settings
|
||||
if (!empty(self::$allowed_css)) {
|
||||
$cssList = array();
|
||||
$cssList = [];
|
||||
foreach (self::$allowed_css as $k => $v) {
|
||||
if (!is_array($v)) {
|
||||
$cssList[$k]=$v;
|
||||
|
@ -225,23 +270,25 @@ class EditableFormField extends DataObject
|
|||
}
|
||||
}
|
||||
|
||||
$fields->addFieldToTab('Root.Main',
|
||||
$fields->addFieldToTab(
|
||||
'Root.Main',
|
||||
DropdownField::create(
|
||||
'ExtraClass',
|
||||
_t('EditableFormField.EXTRACLASS_TITLE', 'Extra Styling/Layout'),
|
||||
_t(__CLASS__.'.EXTRACLASS_TITLE', 'Extra Styling/Layout'),
|
||||
$cssList
|
||||
)->setDescription(_t(
|
||||
'EditableFormField.EXTRACLASS_SELECT',
|
||||
__CLASS__.'.EXTRACLASS_SELECT',
|
||||
'Select from the list of allowed styles'
|
||||
))
|
||||
);
|
||||
} else {
|
||||
$fields->addFieldToTab('Root.Main',
|
||||
$fields->addFieldToTab(
|
||||
'Root.Main',
|
||||
TextField::create(
|
||||
'ExtraClass',
|
||||
_t('EditableFormField.EXTRACLASS_Title', 'Extra CSS classes')
|
||||
_t(__CLASS__.'.EXTRACLASS_Title', 'Extra CSS classes')
|
||||
)->setDescription(_t(
|
||||
'EditableFormField.EXTRACLASS_MULTIPLE',
|
||||
__CLASS__.'.EXTRACLASS_MULTIPLE',
|
||||
'Separate each CSS class with a single space'
|
||||
))
|
||||
);
|
||||
|
@ -251,7 +298,7 @@ class EditableFormField extends DataObject
|
|||
$validationFields = $this->getFieldValidationOptions();
|
||||
if ($validationFields && $validationFields->count()) {
|
||||
$fields->addFieldsToTab('Root.Validation', $validationFields);
|
||||
$fields->fieldByName('Root.Validation')->setTitle(_t('EditableFormField.VALIDATION', 'Validation'));
|
||||
$fields->fieldByName('Root.Validation')->setTitle(_t(__CLASS__.'.VALIDATION', 'Validation'));
|
||||
}
|
||||
|
||||
// Add display rule fields
|
||||
|
@ -266,7 +313,7 @@ class EditableFormField extends DataObject
|
|||
'Root.Main',
|
||||
TextField::create(
|
||||
'Placeholder',
|
||||
_t('EditableFormField.PLACEHOLDER', 'Placeholder')
|
||||
_t(__CLASS__.'.PLACEHOLDER', 'Placeholder')
|
||||
)
|
||||
);
|
||||
}
|
||||
|
@ -288,31 +335,34 @@ class EditableFormField extends DataObject
|
|||
return new FieldList(
|
||||
LabelField::create(
|
||||
_t(
|
||||
'EditableFormField.DISPLAY_RULES_DISABLED',
|
||||
'Display rules are not enabled for required fields. Please uncheck "Is this field Required?" under "Validation" to re-enable.'))
|
||||
->addExtraClass('message warning'));
|
||||
__CLASS__.'.DISPLAY_RULES_DISABLED',
|
||||
'Display rules are not enabled for required fields. Please uncheck "Is this field Required?" under "Validation" to re-enable.'
|
||||
)
|
||||
)
|
||||
->addExtraClass('message warning')
|
||||
);
|
||||
}
|
||||
$self = $this;
|
||||
|
||||
$allowedClasses = array_keys($this->getEditableFieldClasses(false));
|
||||
$editableColumns = new GridFieldEditableColumns();
|
||||
$editableColumns->setDisplayFields(array(
|
||||
'ConditionFieldID' => function ($record, $column, $grid) use ($allowedClasses, $self) {
|
||||
return DropdownField::create($column, '', EditableFormField::get()->filter(array(
|
||||
'ParentID' => $self->ParentID,
|
||||
$editableColumns->setDisplayFields([
|
||||
'ConditionFieldID' => function ($record, $column, $grid) use ($allowedClasses) {
|
||||
return DropdownField::create($column, '', EditableFormField::get()->filter([
|
||||
'ParentID' => $this->ParentID,
|
||||
'ClassName' => $allowedClasses,
|
||||
))->exclude(array(
|
||||
'ID' => $self->ID,
|
||||
))->map('ID', 'Title'));
|
||||
])->exclude([
|
||||
'ID' => $this->ID,
|
||||
])->map('ID', 'Title'));
|
||||
},
|
||||
'ConditionOption' => function ($record, $column, $grid) {
|
||||
$options = Config::inst()->get('EditableCustomRule', 'condition_options');
|
||||
$options = Config::inst()->get(EditableCustomRule::class, 'condition_options');
|
||||
|
||||
return DropdownField::create($column, '', $options);
|
||||
},
|
||||
'FieldValue' => function ($record, $column, $grid) {
|
||||
return TextField::create($column);
|
||||
}
|
||||
));
|
||||
]);
|
||||
|
||||
// Custom rules
|
||||
$customRulesConfig = GridFieldConfig::create()
|
||||
|
@ -325,23 +375,25 @@ class EditableFormField extends DataObject
|
|||
);
|
||||
|
||||
return new FieldList(
|
||||
DropdownField::create('ShowOnLoad',
|
||||
_t('EditableFormField.INITIALVISIBILITY', 'Initial visibility'),
|
||||
array(
|
||||
DropdownField::create(
|
||||
'ShowOnLoad',
|
||||
_t(__CLASS__.'.INITIALVISIBILITY', 'Initial visibility'),
|
||||
[
|
||||
1 => 'Show',
|
||||
0 => 'Hide',
|
||||
)
|
||||
]
|
||||
),
|
||||
DropdownField::create('DisplayRulesConjunction',
|
||||
_t('EditableFormField.DISPLAYIF', 'Toggle visibility when'),
|
||||
array(
|
||||
'Or' => _t('UserDefinedForm.SENDIFOR', 'Any conditions are true'),
|
||||
'And' => _t('UserDefinedForm.SENDIFAND', 'All conditions are true'),
|
||||
)
|
||||
DropdownField::create(
|
||||
'DisplayRulesConjunction',
|
||||
_t(__CLASS__.'.DISPLAYIF', 'Toggle visibility when'),
|
||||
[
|
||||
'Or' => _t('SilverStripe\\UserForms\\Model\\UserDefinedForm.SENDIFOR', 'Any conditions are true'),
|
||||
'And' => _t('SilverStripe\\UserForms\\Model\\UserDefinedForm.SENDIFAND', 'All conditions are true'),
|
||||
]
|
||||
),
|
||||
GridField::create(
|
||||
'DisplayRules',
|
||||
_t('EditableFormField.CUSTOMRULES', 'Custom Rules'),
|
||||
_t(__CLASS__.'.CUSTOMRULES', 'Custom Rules'),
|
||||
$this->DisplayRules(),
|
||||
$customRulesConfig
|
||||
)
|
||||
|
@ -376,8 +428,9 @@ class EditableFormField extends DataObject
|
|||
protected function generateName()
|
||||
{
|
||||
do {
|
||||
// Generate a new random name after this class
|
||||
$class = get_class($this);
|
||||
// Generate a new random name after this class (handles namespaces)
|
||||
$classNamePieces = explode('\\', static::class);
|
||||
$class = array_pop($classNamePieces);
|
||||
$entropy = substr(sha1(uniqid()), 0, 5);
|
||||
$name = "{$class}_{$entropy}";
|
||||
|
||||
|
@ -431,7 +484,7 @@ class EditableFormField extends DataObject
|
|||
$parent = $controller->getRecord($controller->currentPageID());
|
||||
// Only allow this behaviour on pages using UserFormFieldEditorExtension, such
|
||||
// as UserDefinedForm page type.
|
||||
if ($parent && $parent->hasExtension('UserFormFieldEditorExtension')) {
|
||||
if ($parent && $parent->hasExtension(UserFormFieldEditorExtension::class)) {
|
||||
return $parent->canEdit($member);
|
||||
}
|
||||
}
|
||||
|
@ -465,7 +518,7 @@ class EditableFormField extends DataObject
|
|||
* @param array $context Virtual parameter to allow context to be passed in to check
|
||||
* @return bool
|
||||
*/
|
||||
public function canCreate($member = null)
|
||||
public function canCreate($member = null, $context = [])
|
||||
{
|
||||
// Check parent page
|
||||
$parent = $this->getCanCreateContext(func_get_args());
|
||||
|
@ -498,92 +551,6 @@ class EditableFormField extends DataObject
|
|||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if can publish
|
||||
*
|
||||
* @param Member $member
|
||||
* @return bool
|
||||
*/
|
||||
public function canPublish($member = null)
|
||||
{
|
||||
return $this->canEdit($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if can unpublish
|
||||
*
|
||||
* @param Member $member
|
||||
* @return bool
|
||||
*/
|
||||
public function canUnpublish($member = null)
|
||||
{
|
||||
return $this->canDelete($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish this Form Field to the live site
|
||||
*
|
||||
* Wrapper for the {@link Versioned} publish function
|
||||
*
|
||||
* @param string $fromStage
|
||||
* @param string $toStage
|
||||
* @param bool $createNewVersion
|
||||
*/
|
||||
public function doPublish($fromStage, $toStage, $createNewVersion = false)
|
||||
{
|
||||
$this->publish($fromStage, $toStage, $createNewVersion);
|
||||
$this->publishRules($fromStage, $toStage, $createNewVersion);
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish all field rules
|
||||
*
|
||||
* @param string $fromStage
|
||||
* @param string $toStage
|
||||
* @param bool $createNewVersion
|
||||
*/
|
||||
protected function publishRules($fromStage, $toStage, $createNewVersion)
|
||||
{
|
||||
$seenRuleIDs = array();
|
||||
|
||||
// Don't forget to publish the related custom rules...
|
||||
foreach ($this->DisplayRules() as $rule) {
|
||||
$seenRuleIDs[] = $rule->ID;
|
||||
$rule->doPublish($fromStage, $toStage, $createNewVersion);
|
||||
$rule->destroy();
|
||||
}
|
||||
|
||||
// remove any orphans from the "fromStage"
|
||||
$rules = Versioned::get_by_stage('EditableCustomRule', $toStage)
|
||||
->filter('ParentID', $this->ID);
|
||||
|
||||
if (!empty($seenRuleIDs)) {
|
||||
$rules = $rules->exclude('ID', $seenRuleIDs);
|
||||
}
|
||||
|
||||
foreach ($rules as $rule) {
|
||||
$rule->deleteFromStage($toStage);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete this field from a given stage
|
||||
*
|
||||
* Wrapper for the {@link Versioned} deleteFromStage function
|
||||
*/
|
||||
public function doDeleteFromStage($stage)
|
||||
{
|
||||
// Remove custom rules in this stage
|
||||
$rules = Versioned::get_by_stage('EditableCustomRule', $stage)
|
||||
->filter('ParentID', $this->ID);
|
||||
foreach ($rules as $rule) {
|
||||
$rule->deleteFromStage($stage);
|
||||
}
|
||||
|
||||
// Remove record
|
||||
$this->deleteFromStage($stage);
|
||||
}
|
||||
|
||||
/**
|
||||
* checks whether record is new, copied from SiteTree
|
||||
*/
|
||||
|
@ -600,23 +567,6 @@ class EditableFormField extends DataObject
|
|||
return stripos($this->ID, 'new') === 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if records is changed on stage
|
||||
* @return boolean
|
||||
*/
|
||||
public function getIsModifiedOnStage()
|
||||
{
|
||||
// new unsaved fields could be never be published
|
||||
if ($this->isNew()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$stageVersion = Versioned::get_versionnumber_by_stage('EditableFormField', 'Stage', $this->ID);
|
||||
$liveVersion = Versioned::get_versionnumber_by_stage('EditableFormField', 'Live', $this->ID);
|
||||
|
||||
return ($stageVersion && $stageVersion != $liveVersion);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated since version 4.0
|
||||
*/
|
||||
|
@ -684,7 +634,8 @@ class EditableFormField extends DataObject
|
|||
*/
|
||||
public function getIcon()
|
||||
{
|
||||
return USERFORMS_DIR . '/images/' . strtolower($this->class) . '.png';
|
||||
return ModuleLoader::getModule('silverstripe/userforms')
|
||||
->getRelativeResourcePath('images/' . strtolower($this->class) . '.png');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -740,16 +691,16 @@ class EditableFormField extends DataObject
|
|||
}
|
||||
|
||||
$prior = 0; // Number of prior group at this level
|
||||
$stack = array(); // Current stack of nested groups, where the top level = the page
|
||||
$stack = []; // Current stack of nested groups, where the top level = the page
|
||||
foreach ($fields->map('ID', 'ClassName') as $id => $className) {
|
||||
if ($className === 'EditableFormStep') {
|
||||
if ($className === EditableFormStep::class) {
|
||||
$priorPage = empty($stack) ? $prior : $stack[0];
|
||||
$stack = array($priorPage + 1);
|
||||
$prior = 0;
|
||||
} elseif ($className === 'EditableFieldGroup') {
|
||||
} elseif ($className === EditableFieldGroup::class) {
|
||||
$stack[] = $prior + 1;
|
||||
$prior = 0;
|
||||
} elseif ($className === 'EditableFieldGroupEnd') {
|
||||
} elseif ($className === EditableFieldGroupEnd::class) {
|
||||
$prior = array_pop($stack);
|
||||
}
|
||||
if ($id == $this->ID) {
|
||||
|
@ -793,9 +744,9 @@ class EditableFormField extends DataObject
|
|||
public function getFieldValidationOptions()
|
||||
{
|
||||
$fields = new FieldList(
|
||||
CheckboxField::create('Required', _t('EditableFormField.REQUIRED', 'Is this field Required?'))
|
||||
->setDescription(_t('EditableFormField.REQUIRED_DESCRIPTION', 'Please note that conditional fields can\'t be required')),
|
||||
TextField::create('CustomErrorMessage', _t('EditableFormField.CUSTOMERROR', 'Custom Error Message'))
|
||||
CheckboxField::create('Required', _t(__CLASS__.'.REQUIRED', 'Is this field Required?'))
|
||||
->setDescription(_t(__CLASS__.'.REQUIRED_DESCRIPTION', 'Please note that conditional fields can\'t be required')),
|
||||
TextField::create('CustomErrorMessage', _t(__CLASS__.'.CUSTOMERROR', 'Custom Error Message'))
|
||||
);
|
||||
|
||||
$this->extend('updateFieldValidationOptions', $fields);
|
||||
|
@ -879,7 +830,7 @@ class EditableFormField extends DataObject
|
|||
*/
|
||||
public function getSubmittedFormField()
|
||||
{
|
||||
return new SubmittedFormField();
|
||||
return SubmittedFormField::create();
|
||||
}
|
||||
|
||||
|
||||
|
@ -902,7 +853,7 @@ class EditableFormField extends DataObject
|
|||
public function getErrorMessage()
|
||||
{
|
||||
$title = strip_tags("'". ($this->Title ? $this->Title : $this->Name) . "'");
|
||||
$standard = sprintf(_t('Form.FIELDISREQUIRED', '%s is required').'.', $title);
|
||||
$standard = _t('SilverStripe\\Forms\\Form.FIELDISREQUIRED', '{field} is required.', ['field' => $title]);
|
||||
|
||||
// only use CustomErrorMessage if it has a non empty value
|
||||
$errorMessage = (!empty($this->CustomErrorMessage)) ? $this->CustomErrorMessage : $standard;
|
||||
|
@ -953,8 +904,8 @@ class EditableFormField extends DataObject
|
|||
public function getInlineTitleField($column)
|
||||
{
|
||||
return TextField::create($column, false)
|
||||
->setAttribute('placeholder', _t('EditableFormField.TITLE', 'Title'))
|
||||
->setAttribute('data-placeholder', _t('EditableFormField.TITLE', 'Title'));
|
||||
->setAttribute('placeholder', _t(__CLASS__.'.TITLE', 'Title'))
|
||||
->setAttribute('data-placeholder', _t(__CLASS__.'.TITLE', 'Title'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1007,13 +958,14 @@ class EditableFormField extends DataObject
|
|||
*/
|
||||
public function getEditableFieldClasses($includeLiterals = true)
|
||||
{
|
||||
$classes = ClassInfo::getValidSubClasses('EditableFormField');
|
||||
$classes = ClassInfo::getValidSubClasses(EditableFormField::class);
|
||||
|
||||
// Remove classes we don't want to display in the dropdown.
|
||||
$editableFieldClasses = array();
|
||||
$editableFieldClasses = [];
|
||||
foreach ($classes as $class) {
|
||||
// Skip abstract / hidden classes
|
||||
if (Config::inst()->get($class, 'abstract', Config::UNINHERITED) || Config::inst()->get($class, 'hidden')
|
||||
if (Config::inst()->get($class, 'abstract', Config::UNINHERITED)
|
||||
|| Config::inst()->get($class, 'hidden')
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
@ -1035,11 +987,11 @@ class EditableFormField extends DataObject
|
|||
}
|
||||
|
||||
/**
|
||||
* @return EditableFormFieldValidator
|
||||
* @return EditableFormField\Validator
|
||||
*/
|
||||
public function getCMSValidator()
|
||||
{
|
||||
return EditableFormFieldValidator::create()
|
||||
return EditableFormField\Validator::create()
|
||||
->setRecord($this);
|
||||
}
|
||||
|
||||
|
@ -1051,7 +1003,7 @@ class EditableFormField extends DataObject
|
|||
public function EffectiveDisplayRules()
|
||||
{
|
||||
if ($this->Required) {
|
||||
return new ArrayList();
|
||||
return ArrayList::create();
|
||||
}
|
||||
return $this->DisplayRules();
|
||||
}
|
||||
|
@ -1063,22 +1015,23 @@ class EditableFormField extends DataObject
|
|||
public function formatDisplayRules()
|
||||
{
|
||||
$holderSelector = $this->getSelectorOnly();
|
||||
$result = array(
|
||||
$result = [
|
||||
'targetFieldID' => $holderSelector,
|
||||
'conjunction' => $this->DisplayRulesConjunctionNice(),
|
||||
'selectors' => array(),
|
||||
'events' => array(),
|
||||
'operations' => array(),
|
||||
'selectors' => [],
|
||||
'events' => [],
|
||||
'operations' => [],
|
||||
'initialState' => $this->ShowOnLoadNice(),
|
||||
'view' => array(),
|
||||
'opposite' => array(),
|
||||
);
|
||||
'view' => [],
|
||||
'opposite' => [],
|
||||
];
|
||||
|
||||
// Check for field dependencies / default
|
||||
/** @var EditableCustomRule $rule */
|
||||
foreach ($this->EffectiveDisplayRules() as $rule) {
|
||||
// Get the field which is effected
|
||||
/** @var EditableFormField $formFieldWatch */
|
||||
$formFieldWatch = DataObject::get_by_id('EditableFormField', $rule->ConditionFieldID);
|
||||
$formFieldWatch = DataObject::get_by_id(EditableFormField::class, $rule->ConditionFieldID);
|
||||
// Skip deleted fields
|
||||
if (! $formFieldWatch) {
|
||||
continue;
|
||||
|
@ -1086,10 +1039,10 @@ class EditableFormField extends DataObject
|
|||
$fieldToWatch = $formFieldWatch->getSelectorFieldOnly();
|
||||
|
||||
$expression = $rule->buildExpression();
|
||||
if (! in_array($fieldToWatch, $result['selectors'])) {
|
||||
if (!in_array($fieldToWatch, $result['selectors'])) {
|
||||
$result['selectors'][] = $fieldToWatch;
|
||||
}
|
||||
if (! in_array($expression['event'], $result['events'])) {
|
||||
if (!in_array($expression['event'], $result['events'])) {
|
||||
$result['events'][] = $expression['event'];
|
||||
}
|
||||
$result['operations'][] = $expression['operation'];
|
|
@ -1,4 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* EditableCheckbox
|
||||
*
|
||||
|
@ -9,16 +15,17 @@
|
|||
|
||||
class EditableCheckbox extends EditableFormField
|
||||
{
|
||||
|
||||
private static $singular_name = 'Checkbox Field';
|
||||
|
||||
private static $plural_name = 'Checkboxes';
|
||||
|
||||
protected $jsEventHandler = 'click';
|
||||
|
||||
private static $db = array(
|
||||
private static $db = [
|
||||
'CheckedDefault' => 'Boolean' // from CustomSettings
|
||||
);
|
||||
];
|
||||
|
||||
private static $table_name = 'EditableCheckbox';
|
||||
|
||||
/**
|
||||
* @return FieldList
|
||||
|
@ -29,7 +36,7 @@ class EditableCheckbox extends EditableFormField
|
|||
|
||||
$fields->replaceField('Default', CheckboxField::create(
|
||||
"CheckedDefault",
|
||||
_t('EditableFormField.CHECKEDBYDEFAULT', 'Checked by Default?')
|
||||
_t('SilverStripe\\UserForms\\Model\\EditableFormField.CHECKEDBYDEFAULT', 'Checked by Default?')
|
||||
));
|
||||
|
||||
return $fields;
|
||||
|
@ -38,8 +45,8 @@ class EditableCheckbox extends EditableFormField
|
|||
public function getFormField()
|
||||
{
|
||||
$field = CheckboxField::create($this->Name, $this->EscapedTitle, $this->CheckedDefault)
|
||||
->setFieldHolderTemplate('UserFormsCheckboxField_holder')
|
||||
->setTemplate('UserFormsCheckboxField');
|
||||
->setFieldHolderTemplate(__CLASS__ . '_holder')
|
||||
->setTemplate(__CLASS__);
|
||||
|
||||
$this->doUpdateFormField($field);
|
||||
|
||||
|
@ -50,7 +57,9 @@ class EditableCheckbox extends EditableFormField
|
|||
{
|
||||
$value = (isset($data[$this->Name])) ? $data[$this->Name] : false;
|
||||
|
||||
return ($value) ? _t('EditableFormField.YES', 'Yes') : _t('EditableFormField.NO', 'No');
|
||||
return ($value)
|
||||
? _t('SilverStripe\\UserForms\\Model\\EditableFormField.YES', 'Yes')
|
||||
: _t('SilverStripe\\UserForms\\Model\\EditableFormField.NO', 'No');
|
||||
}
|
||||
|
||||
public function migrateSettings($data)
|
||||
|
@ -64,7 +73,8 @@ class EditableCheckbox extends EditableFormField
|
|||
parent::migrateSettings($data);
|
||||
}
|
||||
|
||||
public function isCheckBoxField() {
|
||||
return true;
|
||||
}
|
||||
public function isCheckBoxField()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -1,4 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\UserForms\FormField\UserFormsCheckboxSetField;
|
||||
use SilverStripe\UserForms\Model\EditableCustomRule;
|
||||
|
||||
/**
|
||||
* EditableCheckboxGroup
|
||||
*
|
||||
|
@ -9,18 +15,19 @@
|
|||
|
||||
class EditableCheckboxGroupField extends EditableMultipleOptionField
|
||||
{
|
||||
private static $singular_name = 'Checkbox Group';
|
||||
|
||||
private static $singular_name = "Checkbox Group";
|
||||
|
||||
private static $plural_name = "Checkbox Groups";
|
||||
private static $plural_name = 'Checkbox Groups';
|
||||
|
||||
protected $jsEventHandler = 'click';
|
||||
|
||||
private static $table_name = 'EditableCheckboxGroupField';
|
||||
|
||||
public function getFormField()
|
||||
{
|
||||
$field = UserFormsCheckboxSetField::create($this->Name, $this->EscapedTitle, $this->getOptionsMap())
|
||||
->setFieldHolderTemplate('UserFormsMultipleOptionField_holder')
|
||||
->setTemplate('UserFormsCheckboxSetField');
|
||||
->setFieldHolderTemplate(EditableMultipleOptionField::class . '_holder')
|
||||
->setTemplate(UserFormsCheckboxSetField::class);
|
||||
|
||||
// Set the default checked items
|
||||
$defaultCheckedItems = $this->getDefaultOptions();
|
||||
|
@ -39,13 +46,13 @@ class EditableCheckboxGroupField extends EditableMultipleOptionField
|
|||
|
||||
if ($entries) {
|
||||
if (!is_array($data[$this->Name])) {
|
||||
$entries = array($data[$this->Name]);
|
||||
$entries = [$data[$this->Name]];
|
||||
}
|
||||
foreach ($entries as $selected => $value) {
|
||||
if (!$result) {
|
||||
$result = $value;
|
||||
} else {
|
||||
$result .= ", " . $value;
|
||||
$result .= ', ' . $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -63,11 +70,12 @@ class EditableCheckboxGroupField extends EditableMultipleOptionField
|
|||
}
|
||||
}
|
||||
|
||||
public function isCheckBoxField() {
|
||||
return true;
|
||||
}
|
||||
public function isCheckBoxField()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getSelectorFieldOnly()
|
||||
public function getSelectorFieldOnly()
|
||||
{
|
||||
return "[name='{$this->Name}[]']";
|
||||
}
|
|
@ -1,5 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Core\Manifest\ModuleLoader;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\i18n\i18n;
|
||||
use SilverStripe\UserForms\Model\EditableCustomRule;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* A dropdown field which allows the user to select a country
|
||||
*
|
||||
|
@ -7,11 +15,12 @@
|
|||
*/
|
||||
class EditableCountryDropdownField extends EditableFormField
|
||||
{
|
||||
|
||||
private static $singular_name = 'Country Dropdown';
|
||||
|
||||
private static $plural_name = 'Country Dropdowns';
|
||||
|
||||
private static $table_name = 'EditableCountryDropdownField';
|
||||
|
||||
/**
|
||||
* @return FieldList
|
||||
*/
|
||||
|
@ -26,9 +35,10 @@ class EditableCountryDropdownField extends EditableFormField
|
|||
|
||||
public function getFormField()
|
||||
{
|
||||
$field = CountryDropdownField::create($this->Name, $this->EscapedTitle)
|
||||
->setFieldHolderTemplate('UserFormsField_holder')
|
||||
->setTemplate('UserFormsDropdownField');
|
||||
$field = DropdownField::create($this->Name, $this->EscapedTitle)
|
||||
->setSource(i18n::getData()->getCountries())
|
||||
->setFieldHolderTemplate(EditableFormField::class . '_holder')
|
||||
->setTemplate(EditableDropdown::class);
|
||||
|
||||
$this->doUpdateFormField($field);
|
||||
|
||||
|
@ -45,7 +55,8 @@ class EditableCountryDropdownField extends EditableFormField
|
|||
|
||||
public function getIcon()
|
||||
{
|
||||
return USERFORMS_DIR . '/images/editabledropdown.png';
|
||||
return ModuleLoader::getModule('silverstripe/userforms')
|
||||
->getRelativeResourcePath('images/editabledropdown.png');
|
||||
}
|
||||
|
||||
public function getSelectorField(EditableCustomRule $rule, $forOnLoad = false)
|
|
@ -1,4 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableDateField\FormField;
|
||||
|
||||
/**
|
||||
* EditableDateField
|
||||
*
|
||||
|
@ -6,19 +15,19 @@
|
|||
*
|
||||
* @package userforms
|
||||
*/
|
||||
|
||||
class EditableDateField extends EditableFormField
|
||||
{
|
||||
|
||||
private static $singular_name = 'Date Field';
|
||||
|
||||
private static $plural_name = 'Date Fields';
|
||||
|
||||
private static $has_placeholder = true;
|
||||
|
||||
private static $db = array(
|
||||
private static $db = [
|
||||
'DefaultToToday' => 'Boolean' // From customsettings
|
||||
);
|
||||
];
|
||||
|
||||
private static $table_name = 'EditableDateField';
|
||||
|
||||
/**
|
||||
* @return FieldList
|
||||
|
@ -30,7 +39,7 @@ class EditableDateField extends EditableFormField
|
|||
'Root.Main',
|
||||
CheckboxField::create(
|
||||
'DefaultToToday',
|
||||
_t('EditableFormField.DEFAULTTOTODAY', 'Default to Today?')
|
||||
_t('SilverStripe\\UserForms\\Model\\EditableFormField.DEFAULTTOTODAY', 'Default to Today?')
|
||||
),
|
||||
'RightTitle'
|
||||
);
|
||||
|
@ -46,28 +55,15 @@ class EditableDateField extends EditableFormField
|
|||
public function getFormField()
|
||||
{
|
||||
$defaultValue = $this->DefaultToToday
|
||||
? SS_Datetime::now()->Format('Y-m-d')
|
||||
? DBDatetime::now()->Format('Y-m-d')
|
||||
: $this->Default;
|
||||
|
||||
$field = EditableDateField_FormField::create($this->Name, $this->EscapedTitle, $defaultValue)
|
||||
->setConfig('showcalendar', true)
|
||||
$field = FormField::create($this->Name, $this->EscapedTitle, $defaultValue)
|
||||
->setFieldHolderTemplate('UserFormsField_holder')
|
||||
->setTemplate('UserFormsField');
|
||||
->setTemplate(EditableFormField::class);
|
||||
|
||||
$this->doUpdateFormField($field);
|
||||
|
||||
return $field;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @package userforms
|
||||
*/
|
||||
class EditableDateField_FormField extends DateField
|
||||
{
|
||||
|
||||
public function Type()
|
||||
{
|
||||
return "date-alt text";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField\EditableDateField;
|
||||
|
||||
use SilverStripe\Forms\DateField;
|
||||
|
||||
/**
|
||||
* @package userforms
|
||||
*/
|
||||
class FormField extends DateField
|
||||
{
|
||||
public function Type()
|
||||
{
|
||||
return 'date-alt text';
|
||||
}
|
||||
}
|
|
@ -1,5 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\UserForms\Model\EditableCustomRule;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* EditableDropdown
|
||||
*
|
||||
|
@ -12,7 +20,6 @@
|
|||
*/
|
||||
class EditableDropdown extends EditableMultipleOptionField
|
||||
{
|
||||
|
||||
private static $singular_name = 'Dropdown Field';
|
||||
|
||||
private static $plural_name = 'Dropdowns';
|
||||
|
@ -22,6 +29,8 @@ class EditableDropdown extends EditableMultipleOptionField
|
|||
'EmptyString' => 'Varchar(255)',
|
||||
);
|
||||
|
||||
private static $table_name = 'EditableDropdown';
|
||||
|
||||
/**
|
||||
* @return FieldList
|
||||
*/
|
||||
|
@ -52,8 +61,8 @@ class EditableDropdown extends EditableMultipleOptionField
|
|||
public function getFormField()
|
||||
{
|
||||
$field = DropdownField::create($this->Name, $this->EscapedTitle, $this->getOptionsMap())
|
||||
->setFieldHolderTemplate('UserFormsField_holder')
|
||||
->setTemplate('UserFormsDropdownField');
|
||||
->setFieldHolderTemplate(EditableFormField::class . '_holder')
|
||||
->setTemplate(__CLASS__);
|
||||
|
||||
if ($this->UseEmptyString) {
|
||||
$field->setEmptyString(($this->EmptyString) ? $this->EmptyString : '');
|
|
@ -1,4 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Forms\EmailField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* EditableEmailField
|
||||
*
|
||||
|
@ -9,13 +15,14 @@
|
|||
|
||||
class EditableEmailField extends EditableFormField
|
||||
{
|
||||
|
||||
private static $singular_name = 'Email Field';
|
||||
|
||||
private static $plural_name = 'Email Fields';
|
||||
|
||||
private static $has_placeholder = true;
|
||||
|
||||
private static $table_name = 'EditableEmailField';
|
||||
|
||||
public function getSetsOwnError()
|
||||
{
|
||||
return true;
|
||||
|
@ -25,7 +32,7 @@ class EditableEmailField extends EditableFormField
|
|||
{
|
||||
$field = EmailField::create($this->Name, $this->EscapedTitle, $this->Default)
|
||||
->setFieldHolderTemplate('UserFormsField_holder')
|
||||
->setTemplate('UserFormsField');
|
||||
->setTemplate(EditableFormField::class);
|
||||
|
||||
$this->doUpdateFormField($field);
|
||||
|
|
@ -1,14 +1,28 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\Forms\LabelField;
|
||||
use SilverStripe\UserForms\FormField\UserFormsGroupField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* Specifies that this ends a group of fields
|
||||
*/
|
||||
class EditableFieldGroup extends EditableFormField
|
||||
{
|
||||
private static $has_one = [
|
||||
'End' => EditableFieldGroupEnd::class,
|
||||
];
|
||||
|
||||
private static $has_one = array(
|
||||
'End' => 'EditableFieldGroupEnd'
|
||||
);
|
||||
private static $owns = [
|
||||
'End',
|
||||
];
|
||||
|
||||
private static $cascade_deletes = [
|
||||
'End',
|
||||
];
|
||||
|
||||
/**
|
||||
* Disable selection of group class
|
||||
|
@ -25,10 +39,12 @@ class EditableFieldGroup extends EditableFormField
|
|||
*/
|
||||
private static $literal = true;
|
||||
|
||||
private static $table_name = 'EditableFieldGroup';
|
||||
|
||||
public function getCMSFields()
|
||||
{
|
||||
$fields = parent::getCMSFields();
|
||||
$fields->removeByName(array('MergeField', 'Default', 'Validation', 'DisplayRules'));
|
||||
$fields->removeByName(['MergeField', 'Default', 'Validation', 'DisplayRules']);
|
||||
return $fields;
|
||||
}
|
||||
|
||||
|
@ -39,17 +55,15 @@ class EditableFieldGroup extends EditableFormField
|
|||
?: 'group';
|
||||
|
||||
return _t(
|
||||
'EditableFieldGroupEnd.FIELD_GROUP_START',
|
||||
'SilverStripe\\UserForms\\Model\\EditableFormField\\EditableFieldGroupEnd.FIELD_GROUP_START',
|
||||
'Group {group}',
|
||||
array(
|
||||
'group' => $title
|
||||
)
|
||||
['group' => $title]
|
||||
);
|
||||
}
|
||||
|
||||
public function getInlineClassnameField($column, $fieldClasses)
|
||||
{
|
||||
return new LabelField($column, $this->CMSTitle);
|
||||
return LabelField::create($column, $this->CMSTitle);
|
||||
}
|
||||
|
||||
public function showInReports()
|
||||
|
@ -79,22 +93,4 @@ class EditableFieldGroup extends EditableFormField
|
|||
$field->addExtraClass($this->ExtraClass);
|
||||
}
|
||||
}
|
||||
|
||||
protected function onBeforeDelete()
|
||||
{
|
||||
parent::onBeforeDelete();
|
||||
|
||||
// Ensures EndID is lazy-loaded for onAfterDelete
|
||||
$this->EndID;
|
||||
}
|
||||
|
||||
protected function onAfterDelete()
|
||||
{
|
||||
parent::onAfterDelete();
|
||||
|
||||
// Delete end
|
||||
if (($end = $this->End()) && $end->exists()) {
|
||||
$end->delete();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,14 +1,21 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Forms\HiddenField;
|
||||
use SilverStripe\Forms\LabelField;
|
||||
use SilverStripe\Security\Group;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup;
|
||||
|
||||
/**
|
||||
* Specifies that this ends a group of fields
|
||||
*/
|
||||
class EditableFieldGroupEnd extends EditableFormField
|
||||
{
|
||||
|
||||
private static $belongs_to = array(
|
||||
'Group' => 'EditableFieldGroup'
|
||||
);
|
||||
private static $belongs_to = [
|
||||
'Group' => EditableFieldGroup::class
|
||||
];
|
||||
|
||||
/**
|
||||
* Disable selection of group class
|
||||
|
@ -26,28 +33,30 @@ class EditableFieldGroupEnd extends EditableFormField
|
|||
*/
|
||||
private static $literal = true;
|
||||
|
||||
private static $table_name = 'EditableFieldGroupEnd';
|
||||
|
||||
public function getCMSTitle()
|
||||
{
|
||||
$group = $this->Group();
|
||||
return _t(
|
||||
'EditableFieldGroupEnd.FIELD_GROUP_END',
|
||||
__CLASS__.'.FIELD_GROUP_END',
|
||||
'{group} end',
|
||||
array(
|
||||
'group' => ($group && $group->exists()) ? $group->CMSTitle : 'Group'
|
||||
)
|
||||
[
|
||||
'group' => ($group && $group->exists()) ? $group->CMSTitle : Group::class
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public function getCMSFields()
|
||||
{
|
||||
$fields = parent::getCMSFields();
|
||||
$fields->removeByName(array('MergeField', 'Default', 'Validation', 'DisplayRules'));
|
||||
$fields->removeByName(['MergeField', 'Default', 'Validation', 'DisplayRules']);
|
||||
return $fields;
|
||||
}
|
||||
|
||||
public function getInlineClassnameField($column, $fieldClasses)
|
||||
{
|
||||
return new LabelField($column, $this->CMSTitle);
|
||||
return LabelField::create($column, $this->CMSTitle);
|
||||
}
|
||||
|
||||
public function getInlineTitleField($column)
|
||||
|
@ -74,10 +83,10 @@ class EditableFieldGroupEnd extends EditableFormField
|
|||
$group = $this->Group();
|
||||
if (!($group && $group->exists()) && $this->ParentID) {
|
||||
$group = EditableFieldGroup::get()
|
||||
->filter(array(
|
||||
->filter([
|
||||
'ParentID' => $this->ParentID,
|
||||
'Sort:LessThanOrEqual' => $this->Sort
|
||||
))
|
||||
])
|
||||
->where('"EditableFieldGroup"."EndID" IS NULL OR "EditableFieldGroup"."EndID" = 0')
|
||||
->sort('"Sort" DESC')
|
||||
->first();
|
||||
|
@ -89,14 +98,4 @@ class EditableFieldGroupEnd extends EditableFormField
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function onAfterDelete()
|
||||
{
|
||||
parent::onAfterDelete();
|
||||
|
||||
// Delete group
|
||||
if (($group = $this->Group()) && $group->exists()) {
|
||||
$group->delete();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +1,17 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Assets\File;
|
||||
use SilverStripe\Assets\Folder;
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Forms\FileField;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\Forms\NumericField;
|
||||
use SilverStripe\Forms\TreeDropdownField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
use SilverStripe\UserForms\Model\Submission\SubmittedFileField;
|
||||
|
||||
/**
|
||||
* Allows a user to add a field that can be used to upload a file.
|
||||
*
|
||||
|
@ -12,22 +24,24 @@ class EditableFileField extends EditableFormField
|
|||
|
||||
private static $plural_names = 'File Fields';
|
||||
|
||||
private static $db = array(
|
||||
private static $db = [
|
||||
'MaxFileSizeMB' => 'Float',
|
||||
);
|
||||
];
|
||||
|
||||
private static $has_one = array(
|
||||
'Folder' => 'Folder' // From CustomFields
|
||||
);
|
||||
private static $has_one = [
|
||||
'Folder' => Folder::class // From CustomFields
|
||||
];
|
||||
|
||||
private static $table_name = 'EditableFileField';
|
||||
|
||||
/**
|
||||
* Further limit uploadable file extensions in addition to the restrictions
|
||||
* imposed by the File.allowed_extensions global configuration.
|
||||
* @config
|
||||
*/
|
||||
private static $allowed_extensions_blacklist = array(
|
||||
private static $allowed_extensions_blacklist = [
|
||||
'htm', 'html', 'xhtml', 'swf', 'xml'
|
||||
);
|
||||
];
|
||||
|
||||
/**
|
||||
* @return FieldList
|
||||
|
@ -41,18 +55,18 @@ class EditableFileField extends EditableFormField
|
|||
TreeDropdownField::create(
|
||||
'FolderID',
|
||||
_t('EditableUploadField.SELECTUPLOADFOLDER', 'Select upload folder'),
|
||||
'Folder'
|
||||
Folder::class
|
||||
)
|
||||
);
|
||||
|
||||
$fields->addFieldToTab("Root.Main", new LiteralField(
|
||||
"FileUploadWarning",
|
||||
"<p class=\"message notice\">"
|
||||
. _t(
|
||||
"UserDefinedForm.FileUploadWarning",
|
||||
"Files uploaded through this field could be publicly accessible if the exact URL is known"
|
||||
) . "</p>"
|
||||
), "Type");
|
||||
$fields->addFieldToTab("Root.Main", LiteralField::create(
|
||||
'FileUploadWarning',
|
||||
'<p class="message notice">' . _t(
|
||||
'SilverStripe\\UserForms\\Model\\UserDefinedForm.FileUploadWarning',
|
||||
'Files uploaded through this field could be publicly accessible if the exact URL is known'
|
||||
)
|
||||
. '</p>'
|
||||
), 'Type');
|
||||
|
||||
$fields->addFieldToTab(
|
||||
'Root.Main',
|
||||
|
@ -75,7 +89,7 @@ class EditableFileField extends EditableFormField
|
|||
|
||||
$max = static::get_php_max_file_size();
|
||||
if ($this->MaxFileSizeMB * 1024 > $max) {
|
||||
$result->error("Your max file size limit can't be larger than the server's limit of {$this->getPHPMaxFileSizeMB()}.");
|
||||
$result->addError("Your max file size limit can't be larger than the server's limit of {$this->getPHPMaxFileSizeMB()}.");
|
||||
}
|
||||
|
||||
return $result;
|
||||
|
@ -85,16 +99,16 @@ class EditableFileField extends EditableFormField
|
|||
{
|
||||
$field = FileField::create($this->Name, $this->EscapedTitle)
|
||||
->setFieldHolderTemplate('UserFormsField_holder')
|
||||
->setTemplate('UserFormsFileField');
|
||||
->setTemplate(__CLASS__);
|
||||
|
||||
$field->setFieldHolderTemplate('UserFormsField_holder')
|
||||
->setTemplate('UserFormsFileField');
|
||||
->setTemplate(__CLASS__);
|
||||
|
||||
$field->getValidator()->setAllowedExtensions(
|
||||
array_diff(
|
||||
// filter out '' since this would be a regex problem on JS end
|
||||
array_filter(Config::inst()->get('File', 'allowed_extensions')),
|
||||
$this->config()->allowed_extensions_blacklist
|
||||
// filter out '' since this would be a regex problem on JS end
|
||||
array_filter(Config::inst()->get(File::class, 'allowed_extensions')),
|
||||
$this->config()->get('allowed_extensions_blacklist')
|
||||
)
|
||||
);
|
||||
|
||||
|
@ -130,16 +144,16 @@ class EditableFileField extends EditableFormField
|
|||
|
||||
public function getSubmittedFormField()
|
||||
{
|
||||
return new SubmittedFileField();
|
||||
return SubmittedFileField::create();
|
||||
}
|
||||
|
||||
|
||||
public function migrateSettings($data)
|
||||
{
|
||||
// Migrate 'Folder' setting to 'FolderID'
|
||||
if (isset($data['Folder'])) {
|
||||
$this->FolderID = $data['Folder'];
|
||||
unset($data['Folder']);
|
||||
if (isset($data[Folder::class])) {
|
||||
$this->FolderID = $data[Folder::class];
|
||||
unset($data[Folder::class]);
|
||||
}
|
||||
|
||||
parent::migrateSettings($data);
|
||||
|
@ -159,5 +173,4 @@ class EditableFileField extends EditableFormField
|
|||
{
|
||||
return round(static::get_php_max_file_size() / 1024.0, 1);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,28 +1,37 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\HeaderField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* Allows an editor to insert a generic heading into a field
|
||||
*
|
||||
* @package userforms
|
||||
*/
|
||||
|
||||
class EditableFormHeading extends EditableFormField
|
||||
{
|
||||
|
||||
private static $singular_name = 'Heading';
|
||||
|
||||
private static $plural_name = 'Headings';
|
||||
|
||||
private static $literal = true;
|
||||
|
||||
private static $db = array(
|
||||
private static $db = [
|
||||
'Level' => 'Int(3)', // From CustomSettings
|
||||
'HideFromReports' => 'Boolean(0)' // from CustomSettings
|
||||
);
|
||||
];
|
||||
|
||||
private static $defaults = array(
|
||||
private static $defaults = [
|
||||
'Level' => 3,
|
||||
'HideFromReports' => false
|
||||
);
|
||||
];
|
||||
|
||||
private static $table_name = 'EditableFormHeading';
|
||||
|
||||
/**
|
||||
* @return FieldList
|
||||
|
@ -31,35 +40,35 @@ class EditableFormHeading extends EditableFormField
|
|||
{
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
$fields->removeByName(array('Default', 'Validation', 'RightTitle'));
|
||||
$fields->removeByName(['Default', 'Validation', 'RightTitle']);
|
||||
|
||||
$levels = array(
|
||||
$levels = [
|
||||
'1' => '1',
|
||||
'2' => '2',
|
||||
'3' => '3',
|
||||
'4' => '4',
|
||||
'5' => '5',
|
||||
'6' => '6'
|
||||
);
|
||||
];
|
||||
|
||||
$fields->addFieldsToTab('Root.Main', array(
|
||||
$fields->addFieldsToTab('Root.Main', [
|
||||
DropdownField::create(
|
||||
'Level',
|
||||
_t('EditableFormHeading.LEVEL', 'Select Heading Level'),
|
||||
_t(__CLASS__.'.LEVEL', 'Select Heading Level'),
|
||||
$levels
|
||||
),
|
||||
CheckboxField::create(
|
||||
'HideFromReports',
|
||||
_t('EditableLiteralField.HIDEFROMREPORT', 'Hide from reports?')
|
||||
_t('SilverStripe\\UserForms\\Model\\EditableFormField\\EditableLiteralField.HIDEFROMREPORT', 'Hide from reports?')
|
||||
)
|
||||
));
|
||||
]);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
public function getFormField()
|
||||
{
|
||||
$labelField = HeaderField::create($this->EscapedTitle)
|
||||
$labelField = HeaderField::create('userforms-header', $this->EscapedTitle)
|
||||
->setHeadingLevel($this->Level);
|
||||
$labelField->addExtraClass('FormHeading');
|
||||
$labelField->setAttribute('data-id', $this->Name);
|
|
@ -1,4 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Forms\LabelField;
|
||||
use SilverStripe\UserForms\FormField\UserFormsStepField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* A step in multi-page user form
|
||||
*
|
||||
|
@ -6,7 +13,6 @@
|
|||
*/
|
||||
class EditableFormStep extends EditableFormField
|
||||
{
|
||||
|
||||
private static $singular_name = 'Page Break';
|
||||
|
||||
private static $plural_name = 'Page Breaks';
|
||||
|
@ -19,6 +25,8 @@ class EditableFormStep extends EditableFormField
|
|||
*/
|
||||
private static $hidden = true;
|
||||
|
||||
private static $table_name = 'EditableFormStep';
|
||||
|
||||
/**
|
||||
* @return FieldList
|
||||
*/
|
||||
|
@ -26,7 +34,7 @@ class EditableFormStep extends EditableFormField
|
|||
{
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
$fields->removeByName(array('MergeField', 'Default', 'Validation', 'RightTitle'));
|
||||
$fields->removeByName(['MergeField', 'Default', 'Validation', 'RightTitle']);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
@ -61,10 +69,7 @@ class EditableFormStep extends EditableFormField
|
|||
|
||||
public function getInlineClassnameField($column, $fieldClasses)
|
||||
{
|
||||
return new LabelField(
|
||||
$column,
|
||||
$this->CMSTitle
|
||||
);
|
||||
return LabelField::create($column, $this->CMSTitle);
|
||||
}
|
||||
|
||||
public function getCMSTitle()
|
||||
|
@ -74,11 +79,9 @@ class EditableFormStep extends EditableFormField
|
|||
?: '';
|
||||
|
||||
return _t(
|
||||
'EditableFormStep.STEP_TITLE',
|
||||
__CLASS__.'.STEP_TITLE',
|
||||
'Page {page}',
|
||||
array(
|
||||
'page' => $title
|
||||
)
|
||||
['page' => $title]
|
||||
);
|
||||
}
|
||||
|
|
@ -1,19 +1,30 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Core\Injector\Injector;
|
||||
use SilverStripe\Forms\HTMLEditor\HTMLEditorConfig;
|
||||
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
|
||||
use SilverStripe\Forms\HTMLEditor\HTMLEditorSanitiser;
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\CompositeField;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* Editable Literal Field. A literal field is just a blank slate where
|
||||
* you can add your own HTML / Images / Flash
|
||||
*
|
||||
* @package userforms
|
||||
*/
|
||||
|
||||
class EditableLiteralField extends EditableFormField
|
||||
{
|
||||
|
||||
private static $singular_name = 'HTML Block';
|
||||
|
||||
private static $plural_name = 'HTML Blocks';
|
||||
|
||||
private static $table_name = 'EditableLiteralField';
|
||||
|
||||
/**
|
||||
* Mark as literal only
|
||||
*
|
||||
|
@ -30,28 +41,28 @@ class EditableLiteralField extends EditableFormField
|
|||
*/
|
||||
private static $editor_config = null;
|
||||
|
||||
private static $db = array(
|
||||
private static $db = [
|
||||
'Content' => 'HTMLText', // From CustomSettings
|
||||
'HideFromReports' => 'Boolean(0)', // from CustomSettings
|
||||
'HideLabel' => 'Boolean(0)'
|
||||
);
|
||||
];
|
||||
|
||||
private static $defaults = array(
|
||||
private static $defaults = [
|
||||
'HideFromReports' => false
|
||||
);
|
||||
];
|
||||
|
||||
/**
|
||||
* Returns the {@see HtmlEditorConfig} instance to use for sanitisation
|
||||
* Returns the {@see HTMLEditorConfig} instance to use for sanitisation
|
||||
*
|
||||
* @return HtmlEditorConfig
|
||||
* @return HTMLEditorConfig
|
||||
*/
|
||||
protected function getEditorConfig()
|
||||
{
|
||||
$editorConfig = $this->config()->editor_config;
|
||||
$editorConfig = $this->config()->get('editor_config');
|
||||
if ($editorConfig) {
|
||||
return HtmlEditorConfig::get($editorConfig);
|
||||
return HTMLEditorConfig::get($editorConfig);
|
||||
}
|
||||
return HtmlEditorConfig::get_active();
|
||||
return HTMLEditorConfig::get_active();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -63,13 +74,13 @@ class EditableLiteralField extends EditableFormField
|
|||
protected function sanitiseContent($content)
|
||||
{
|
||||
// Check if sanitisation is enabled
|
||||
if (!HtmlEditorField::config()->sanitise_server_side) {
|
||||
if (!HTMLEditorField::config()->get('sanitise_server_side')) {
|
||||
return $content;
|
||||
}
|
||||
|
||||
// Perform sanitisation
|
||||
$htmlValue = Injector::inst()->create('HTMLValue', $content);
|
||||
$santiser = Injector::inst()->create('HtmlEditorSanitiser', $this->getEditorConfig());
|
||||
$santiser = Injector::inst()->create(HTMLEditorSanitiser::class, $this->getEditorConfig());
|
||||
$santiser->sanitise($htmlValue);
|
||||
return $htmlValue->getContent();
|
||||
}
|
||||
|
@ -105,21 +116,21 @@ class EditableLiteralField extends EditableFormField
|
|||
{
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
$fields->removeByName(array('Default', 'Validation', 'RightTitle'));
|
||||
$fields->removeByName(['Default', 'Validation', 'RightTitle']);
|
||||
|
||||
$fields->addFieldsToTab('Root.Main', array(
|
||||
HTMLEditorField::create('Content', _t('EditableLiteralField.CONTENT', 'HTML'))
|
||||
$fields->addFieldsToTab('Root.Main', [
|
||||
HTMLEditorField::create('Content', _t(__CLASS__.'.CONTENT', 'HTML'))
|
||||
->setRows(4)
|
||||
->setColumns(20),
|
||||
CheckboxField::create(
|
||||
'HideFromReports',
|
||||
_t('EditableLiteralField.HIDEFROMREPORT', 'Hide from reports?')
|
||||
_t(__CLASS__.'.HIDEFROMREPORT', 'Hide from reports?')
|
||||
),
|
||||
CheckboxField::create(
|
||||
'HideLabel',
|
||||
_t('EditableLiteralField.HIDELABEL', "Hide 'Title' label on frontend?")
|
||||
_t(__CLASS__.'.HIDELABEL', "Hide 'Title' label on frontend?")
|
||||
)
|
||||
));
|
||||
]);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
@ -133,8 +144,8 @@ class EditableLiteralField extends EditableFormField
|
|||
|
||||
$field = CompositeField::create($content)
|
||||
->setName($this->Name)
|
||||
->setID($this->Name)
|
||||
->setFieldHolderTemplate('UserFormsLiteralField_holder');
|
||||
// ->setID($this->Name) // @todo: https://github.com/silverstripe/silverstripe-framework/issues/7264
|
||||
->setFieldHolderTemplate(__CLASS__ . '_holder');
|
||||
|
||||
$this->doUpdateFormField($field);
|
||||
|
||||
|
@ -154,6 +165,6 @@ class EditableLiteralField extends EditableFormField
|
|||
|
||||
public function showInReports()
|
||||
{
|
||||
return ! $this->HideFromReports;
|
||||
return !$this->HideFromReports;
|
||||
}
|
||||
}
|
|
@ -1,20 +1,28 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Security\Group;
|
||||
use SilverStripe\Security\Member;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* Creates an editable field that displays members in a given group
|
||||
*
|
||||
* @package userforms
|
||||
*/
|
||||
|
||||
class EditableMemberListField extends EditableFormField
|
||||
{
|
||||
|
||||
private static $singular_name = 'Member List Field';
|
||||
|
||||
private static $plural_name = 'Member List Fields';
|
||||
|
||||
private static $has_one = array(
|
||||
'Group' => 'Group'
|
||||
);
|
||||
private static $has_one = [
|
||||
'Group' => Group::class
|
||||
];
|
||||
|
||||
private static $table_name = 'EditableMemberListField';
|
||||
|
||||
/**
|
||||
* @return FieldList
|
||||
|
@ -29,8 +37,8 @@ class EditableMemberListField extends EditableFormField
|
|||
$fields->addFieldToTab(
|
||||
'Root.Main',
|
||||
DropdownField::create(
|
||||
"GroupID",
|
||||
_t('EditableFormField.GROUP', 'Group'),
|
||||
'GroupID',
|
||||
_t('SilverStripe\\UserForms\\Model\\EditableFormField.GROUP', Group::class),
|
||||
Group::get()->map()
|
||||
)->setEmptyString(' ')
|
||||
);
|
||||
|
@ -45,7 +53,7 @@ class EditableMemberListField extends EditableFormField
|
|||
}
|
||||
|
||||
$members = Member::map_in_groups($this->GroupID);
|
||||
$field = new DropdownField($this->Name, $this->EscapedTitle, $members);
|
||||
$field = DropdownField::create($this->Name, $this->EscapedTitle, $members);
|
||||
$this->doUpdateFormField($field);
|
||||
return $field;
|
||||
}
|
||||
|
@ -55,7 +63,7 @@ class EditableMemberListField extends EditableFormField
|
|||
if (isset($data[$this->Name])) {
|
||||
$memberID = $data[$this->Name];
|
||||
$member = Member::get()->byID($memberID);
|
||||
return $member ? $member->getName() : "";
|
||||
return $member ? $member->getName() : '';
|
||||
}
|
||||
|
||||
return false;
|
|
@ -0,0 +1,168 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldButtonRow;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig;
|
||||
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
|
||||
use SilverStripe\Forms\GridField\GridFieldToolbarHeader;
|
||||
use SilverStripe\Forms\Tab;
|
||||
use SilverStripe\ORM\Map;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
use SilverStripe\Versioned\Versioned;
|
||||
use Symbiote\GridFieldExtensions\GridFieldAddNewInlineButton;
|
||||
use Symbiote\GridFieldExtensions\GridFieldEditableColumns;
|
||||
use Symbiote\GridFieldExtensions\GridFieldOrderableRows;
|
||||
use Symbiote\GridFieldExtensions\GridFieldTitleHeader;
|
||||
|
||||
/**
|
||||
* Base class for multiple option fields such as {@link EditableDropdownField}
|
||||
* and radio sets.
|
||||
*
|
||||
* Implemented as a class but should be viewed as abstract, you should
|
||||
* instantiate a subclass such as {@link EditableDropdownField}
|
||||
*
|
||||
* @see EditableCheckboxGroupField
|
||||
* @see EditableDropdownField
|
||||
*
|
||||
* @package userforms
|
||||
*/
|
||||
|
||||
class EditableMultipleOptionField extends EditableFormField
|
||||
{
|
||||
/**
|
||||
* Define this field as abstract (not inherited)
|
||||
*
|
||||
* @config
|
||||
* @var bool
|
||||
*/
|
||||
private static $abstract = true;
|
||||
|
||||
private static $has_many = [
|
||||
'Options' => EditableOption::class,
|
||||
];
|
||||
|
||||
private static $owns = [
|
||||
'Options',
|
||||
];
|
||||
|
||||
private static $cascade_deletes = [
|
||||
'Options',
|
||||
];
|
||||
|
||||
private static $table_name = 'EditableMultipleOptionField';
|
||||
|
||||
/**
|
||||
* @return \SilverStripe\Forms\FieldList
|
||||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
$this->beforeUpdateCMSFields(function ($fields) {
|
||||
$editableColumns = new GridFieldEditableColumns();
|
||||
$editableColumns->setDisplayFields([
|
||||
'Title' => [
|
||||
'title' => _t(__CLASS__.'.TITLE', 'Title'),
|
||||
'callback' => function ($record, $column, $grid) {
|
||||
return TextField::create($column);
|
||||
}
|
||||
],
|
||||
'Value' => [
|
||||
'title' => _t(__CLASS__.'.VALUE', 'Value'),
|
||||
'callback' => function ($record, $column, $grid) {
|
||||
return TextField::create($column);
|
||||
}
|
||||
],
|
||||
'Default' => [
|
||||
'title' => _t(__CLASS__.'.DEFAULT', 'Selected by default?'),
|
||||
'callback' => function ($record, $column, $grid) {
|
||||
return CheckboxField::create($column);
|
||||
}
|
||||
]
|
||||
]);
|
||||
|
||||
$optionsConfig = GridFieldConfig::create()
|
||||
->addComponents(
|
||||
new GridFieldToolbarHeader(),
|
||||
new GridFieldTitleHeader(),
|
||||
new GridFieldOrderableRows('Sort'),
|
||||
$editableColumns,
|
||||
new GridFieldButtonRow(),
|
||||
new GridFieldAddNewInlineButton(),
|
||||
new GridFieldDeleteAction()
|
||||
);
|
||||
|
||||
$optionsGrid = GridField::create(
|
||||
'Options',
|
||||
_t('SilverStripe\\UserForms\\Model\\EditableFormField.CUSTOMOPTIONS', 'Options'),
|
||||
$this->Options(),
|
||||
$optionsConfig
|
||||
);
|
||||
|
||||
$fields->insertAfter(Tab::create('Options', _t(__CLASS__.'.OPTIONSTAB', 'Options')), 'Main');
|
||||
$fields->addFieldToTab('Root.Options', $optionsGrid);
|
||||
});
|
||||
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Duplicate a pages content. We need to make sure all the fields attached
|
||||
* to that page go with it
|
||||
*
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function duplicate($doWrite = true, $manyMany = 'many_many')
|
||||
{
|
||||
$clonedNode = parent::duplicate($doWrite, $manyMany);
|
||||
|
||||
foreach ($this->Options() as $field) {
|
||||
$newField = $field->duplicate(false);
|
||||
$newField->ParentID = $clonedNode->ID;
|
||||
$newField->Version = 0;
|
||||
$newField->write();
|
||||
}
|
||||
|
||||
return $clonedNode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return whether or not this field has addable options such as a
|
||||
* {@link EditableDropdown} or {@link EditableRadioField}
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getHasAddableOptions()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets map of field options suitable for use in a form
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getOptionsMap()
|
||||
{
|
||||
$optionSet = $this->Options();
|
||||
$optionMap = $optionSet->map('Value', 'Title');
|
||||
if ($optionMap instanceof Map) {
|
||||
return $optionMap->toArray();
|
||||
}
|
||||
return $optionMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all default options
|
||||
*
|
||||
* @return \SilverStripe\ORM\SS_List
|
||||
*/
|
||||
protected function getDefaultOptions()
|
||||
{
|
||||
return $this->Options()->filter('Default', 1);
|
||||
}
|
||||
}
|
|
@ -1,4 +1,12 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Forms\FieldGroup;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\Forms\NumericField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* EditableNumericField
|
||||
*
|
||||
|
@ -16,10 +24,12 @@ class EditableNumericField extends EditableFormField
|
|||
|
||||
private static $has_placeholder = true;
|
||||
|
||||
private static $db = array(
|
||||
private static $db = [
|
||||
'MinValue' => 'Int',
|
||||
'MaxValue' => 'Int'
|
||||
);
|
||||
];
|
||||
|
||||
private static $table_name = 'EditableNumericField';
|
||||
|
||||
public function getSetsOwnError()
|
||||
{
|
||||
|
@ -32,8 +42,8 @@ class EditableNumericField extends EditableFormField
|
|||
public function getFormField()
|
||||
{
|
||||
$field = NumericField::create($this->Name, $this->EscapedTitle, $this->Default)
|
||||
->setFieldHolderTemplate('UserFormsField_holder')
|
||||
->setTemplate('UserFormsField')
|
||||
->setFieldHolderTemplate(EditableFormField::class . '_holder')
|
||||
->setTemplate(EditableFormField::class)
|
||||
->addExtraClass('number');
|
||||
|
||||
$this->doUpdateFormField($field);
|
||||
|
@ -45,12 +55,12 @@ class EditableNumericField extends EditableFormField
|
|||
{
|
||||
$fields = parent::getFieldValidationOptions();
|
||||
$fields->push(FieldGroup::create(
|
||||
_t("EditableNumericField.RANGE", "Allowed numeric range"),
|
||||
array(
|
||||
new NumericField('MinValue', false),
|
||||
new LiteralField('RangeValue', _t("EditableNumericField.RANGE_TO", "to")),
|
||||
new NumericField('MaxValue', false)
|
||||
)
|
||||
_t(__CLASS__.'.RANGE', 'Allowed numeric range'),
|
||||
[
|
||||
NumericField::create('MinValue', false),
|
||||
LiteralField::create('RangeValue', _t(__CLASS__.'.RANGE_TO', 'to')),
|
||||
NumericField::create('MaxValue', false)
|
||||
]
|
||||
));
|
||||
return $fields;
|
||||
}
|
|
@ -0,0 +1,100 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\CMS\Controllers\CMSMain;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField;
|
||||
use SilverStripe\Versioned\Versioned;
|
||||
|
||||
/**
|
||||
* Base Class for EditableOption Fields such as the ones used in
|
||||
* dropdown fields and in radio check box groups
|
||||
*
|
||||
* @method EditableMultipleOptionField Parent()
|
||||
* @package userforms
|
||||
*/
|
||||
class EditableOption extends DataObject
|
||||
{
|
||||
private static $default_sort = 'Sort';
|
||||
|
||||
private static $db = [
|
||||
'Name' => 'Varchar(255)',
|
||||
'Title' => 'Varchar(255)',
|
||||
'Default' => 'Boolean',
|
||||
'Sort' => 'Int',
|
||||
'Value' => 'Varchar(255)',
|
||||
];
|
||||
|
||||
private static $has_one = [
|
||||
'Parent' => EditableMultipleOptionField::class,
|
||||
];
|
||||
|
||||
private static $extensions = [
|
||||
Versioned::class . "('Stage', 'Live')"
|
||||
];
|
||||
|
||||
private static $summary_fields = [
|
||||
'Title',
|
||||
'Default'
|
||||
];
|
||||
|
||||
protected static $allow_empty_values = false;
|
||||
|
||||
private static $table_name = 'EditableOption';
|
||||
|
||||
/**
|
||||
* Returns whether to allow empty values or not.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public static function allow_empty_values()
|
||||
{
|
||||
return (bool) self::$allow_empty_values;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether to allow empty values.
|
||||
*
|
||||
* @param boolean $allow
|
||||
*/
|
||||
public static function set_allow_empty_values($allow)
|
||||
{
|
||||
self::$allow_empty_values = (bool) $allow;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated 5.0 Use "$Title.XML" in templates instead
|
||||
* @return string
|
||||
*/
|
||||
public function getEscapedTitle()
|
||||
{
|
||||
return Convert::raw2att($this->Title);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches a value for $this->Value. If empty values are not allowed,
|
||||
* then this will return the title in the case of an empty value.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getValue()
|
||||
{
|
||||
$value = $this->getField('Value');
|
||||
if (empty($value) && !self::allow_empty_values()) {
|
||||
return $this->Title;
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
protected function onBeforeWrite()
|
||||
{
|
||||
if (!$this->Sort) {
|
||||
$this->Sort = EditableOption::get()->max('Sort') + 1;
|
||||
}
|
||||
|
||||
parent::onBeforeWrite();
|
||||
}
|
||||
}
|
|
@ -1,4 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Forms\OptionsetField;
|
||||
use SilverStripe\UserForms\Model\EditableCustomRule;
|
||||
|
||||
/**
|
||||
* EditableRadioField
|
||||
*
|
||||
|
@ -9,11 +15,12 @@
|
|||
|
||||
class EditableRadioField extends EditableMultipleOptionField
|
||||
{
|
||||
|
||||
private static $singular_name = 'Radio Group';
|
||||
|
||||
private static $plural_name = 'Radio Groups';
|
||||
|
||||
private static $table_name = 'EditableRadioField';
|
||||
|
||||
/**
|
||||
* @return FieldList
|
||||
*/
|
||||
|
@ -29,8 +36,8 @@ class EditableRadioField extends EditableMultipleOptionField
|
|||
public function getFormField()
|
||||
{
|
||||
$field = OptionsetField::create($this->Name, $this->EscapedTitle, $this->getOptionsMap())
|
||||
->setFieldHolderTemplate('UserFormsMultipleOptionField_holder')
|
||||
->setTemplate('UserFormsOptionSetField');
|
||||
->setFieldHolderTemplate(EditableMultipleOptionField::class . '_holder')
|
||||
->setTemplate('SilverStripe\\UserForms\\FormField\\UserFormsOptionSetField');
|
||||
|
||||
// Set default item
|
||||
$defaultOption = $this->getDefaultOptions()->first();
|
||||
|
@ -48,7 +55,8 @@ class EditableRadioField extends EditableMultipleOptionField
|
|||
return "$(\"input[name='{$this->Name}']{$first}\")";
|
||||
}
|
||||
|
||||
public function isRadioField() {
|
||||
return true;
|
||||
}
|
||||
public function isRadioField()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -1,4 +1,16 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Control\Email\Email;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\FieldGroup;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\Forms\NumericField;
|
||||
use SilverStripe\Forms\TextareaField;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* EditableTextField
|
||||
*
|
||||
|
@ -9,14 +21,14 @@
|
|||
|
||||
class EditableTextField extends EditableFormField
|
||||
{
|
||||
|
||||
private static $singular_name = 'Text Field';
|
||||
|
||||
private static $plural_name = 'Text Fields';
|
||||
|
||||
private static $has_placeholder = true;
|
||||
|
||||
private static $autocomplete_options = array(
|
||||
/** @skipUpgrade */
|
||||
private static $autocomplete_options = [
|
||||
'off' => 'Off',
|
||||
'on' => 'On',
|
||||
'name' => 'Full name',
|
||||
|
@ -44,50 +56,46 @@ class EditableTextField extends EditableFormField
|
|||
'sex' => 'Gender identity',
|
||||
'tel' => 'Telephone number',
|
||||
'url' => 'Home page'
|
||||
);
|
||||
];
|
||||
|
||||
protected $jsEventHandler = 'keyup';
|
||||
|
||||
private static $db = array(
|
||||
private static $db = [
|
||||
'MinLength' => 'Int',
|
||||
'MaxLength' => 'Int',
|
||||
'Rows' => 'Int(1)',
|
||||
'Autocomplete' => 'Varchar(255)'
|
||||
);
|
||||
];
|
||||
|
||||
private static $defaults = array(
|
||||
private static $defaults = [
|
||||
'Rows' => 1
|
||||
);
|
||||
];
|
||||
|
||||
private static $table_name = 'EditableTextField';
|
||||
|
||||
public function getCMSFields()
|
||||
{
|
||||
// PHP 5.3 compat
|
||||
$self = $this;
|
||||
|
||||
$this->beforeUpdateCMSFields(function ($fields) use ($self) {
|
||||
$fields->addFieldToTab(
|
||||
$this->beforeUpdateCMSFields(function ($fields) {
|
||||
$fields->addFieldsToTab(
|
||||
'Root.Main',
|
||||
NumericField::create(
|
||||
'Rows',
|
||||
_t('EditableTextField.NUMBERROWS', 'Number of rows')
|
||||
)->setDescription(_t(
|
||||
'EditableTextField.NUMBERROWS_DESCRIPTION',
|
||||
'Fields with more than one row will be generated as a textarea'
|
||||
))
|
||||
[
|
||||
NumericField::create(
|
||||
'Rows',
|
||||
_t(__CLASS__.'.NUMBERROWS', 'Number of rows')
|
||||
)->setDescription(_t(
|
||||
__CLASS__.'.NUMBERROWS_DESCRIPTION',
|
||||
'Fields with more than one row will be generated as a textarea'
|
||||
)),
|
||||
DropdownField::create(
|
||||
'Autocomplete',
|
||||
_t(__CLASS__.'.AUTOCOMPLETE', 'Autocomplete'),
|
||||
$this->config()->get('autocomplete_options')
|
||||
)->setDescription(_t(
|
||||
__CLASS__.'.AUTOCOMPLETE_DESCRIPTION',
|
||||
'Supported browsers will attempt to populate this field automatically with the users information, use to set the value populated'
|
||||
))
|
||||
]
|
||||
);
|
||||
|
||||
$fields->addFieldToTab(
|
||||
'Root.Main',
|
||||
DropdownField::create(
|
||||
'Autocomplete',
|
||||
_t('EditableTextField.AUTOCOMPLETE', 'Autocomplete'),
|
||||
$self->config()->get('autocomplete_options')
|
||||
)->setDescription(_t(
|
||||
'EditableTextField.AUTOCOMPLETE_DESCRIPTION',
|
||||
'Supported browsers will attempt to populate this field automatically with the users information, use to set the value populated'
|
||||
))
|
||||
);
|
||||
|
||||
});
|
||||
|
||||
return parent::getCMSFields();
|
||||
|
@ -100,16 +108,16 @@ class EditableTextField extends EditableFormField
|
|||
{
|
||||
$fields = parent::getFieldValidationOptions();
|
||||
|
||||
$fields->merge(array(
|
||||
$fields->merge([
|
||||
FieldGroup::create(
|
||||
_t('EditableTextField.TEXTLENGTH', 'Allowed text length'),
|
||||
array(
|
||||
_t(__CLASS__.'.TEXTLENGTH', 'Allowed text length'),
|
||||
[
|
||||
NumericField::create('MinLength', false),
|
||||
LiteralField::create('RangeLength', _t("EditableTextField.RANGE_TO", "to")),
|
||||
LiteralField::create('RangeLength', _t(__CLASS__.".RANGE_TO", "to")),
|
||||
NumericField::create('MaxLength', false)
|
||||
)
|
||||
]
|
||||
)
|
||||
));
|
||||
]);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
@ -121,13 +129,13 @@ class EditableTextField extends EditableFormField
|
|||
{
|
||||
if ($this->Rows > 1) {
|
||||
$field = TextareaField::create($this->Name, $this->EscapedTitle, $this->Default)
|
||||
->setFieldHolderTemplate('UserFormsField_holder')
|
||||
->setTemplate('UserFormsTextareaField')
|
||||
->setFieldHolderTemplate(EditableFormField::class . '_holder')
|
||||
->setTemplate(str_replace('EditableTextField', 'EditableTextareaField', __CLASS__))
|
||||
->setRows($this->Rows);
|
||||
} else {
|
||||
$field = TextField::create($this->Name, $this->EscapedTitle, $this->Default)
|
||||
->setFieldHolderTemplate('UserFormsField_holder')
|
||||
->setTemplate('UserFormsField');
|
||||
->setFieldHolderTemplate(EditableFormField::class . '_holder')
|
||||
->setTemplate(EditableFormField::class);
|
||||
}
|
||||
|
||||
$this->doUpdateFormField($field);
|
||||
|
@ -158,6 +166,5 @@ class EditableTextField extends EditableFormField
|
|||
if ($this->Autocomplete) {
|
||||
$field->setAttribute('autocomplete', $this->Autocomplete);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -1,8 +1,12 @@
|
|||
<?php
|
||||
|
||||
class EditableFormFieldValidator extends RequiredFields
|
||||
{
|
||||
namespace SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Forms\RequiredFields;
|
||||
use SilverStripe\UserForms\Model\EditableCustomRule;
|
||||
|
||||
class Validator extends RequiredFields
|
||||
{
|
||||
/**
|
||||
*
|
||||
* @var EditableFormField
|
||||
|
@ -55,8 +59,8 @@ class EditableFormFieldValidator extends RequiredFields
|
|||
$this->validationError(
|
||||
'Required_Error',
|
||||
_t(
|
||||
"EditableFormFieldValidator.REQUIRED_ERROR",
|
||||
"Form fields cannot be required and have conditional display rules."
|
||||
__CLASS__.'.REQUIRED_ERROR',
|
||||
'Form fields cannot be required and have conditional display rules.'
|
||||
),
|
||||
'error'
|
||||
);
|
|
@ -1,5 +1,41 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\Recipient;
|
||||
|
||||
use SilverStripe\Admin\LeftAndMain;
|
||||
use SilverStripe\Assets\FileFinder;
|
||||
use SilverStripe\CMS\Controllers\CMSMain;
|
||||
use SilverStripe\CMS\Controllers\CMSPageEditController;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Control\Email\Email;
|
||||
use SilverStripe\Core\Manifest\ModuleLoader;
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\FieldGroup;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\Form;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldButtonRow;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig;
|
||||
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
|
||||
use SilverStripe\Forms\GridField\GridFieldToolbarHeader;
|
||||
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\Forms\TabSet;
|
||||
use SilverStripe\Forms\TextareaField;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\ORM\ArrayList;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\ORM\FieldType\DBField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableEmailField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableTextField;
|
||||
use SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition;
|
||||
use SilverStripe\UserForms\Model\UserDefinedForm;
|
||||
use SilverStripe\View\Requirements;
|
||||
use Symbiote\GridFieldExtensions\GridFieldAddNewInlineButton;
|
||||
use Symbiote\GridFieldExtensions\GridFieldEditableColumns;
|
||||
|
||||
/**
|
||||
* A Form can have multiply members / emails to email the submission
|
||||
|
@ -7,10 +43,9 @@
|
|||
*
|
||||
* @package userforms
|
||||
*/
|
||||
class UserDefinedForm_EmailRecipient extends DataObject
|
||||
class EmailRecipient extends DataObject
|
||||
{
|
||||
|
||||
private static $db = array(
|
||||
private static $db = [
|
||||
'EmailAddress' => 'Varchar(200)',
|
||||
'EmailSubject' => 'Varchar(200)',
|
||||
'EmailFrom' => 'Varchar(200)',
|
||||
|
@ -21,24 +56,34 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
'SendPlain' => 'Boolean',
|
||||
'HideFormData' => 'Boolean',
|
||||
'CustomRulesCondition' => 'Enum("And,Or")'
|
||||
);
|
||||
];
|
||||
|
||||
private static $has_one = array(
|
||||
'Form' => 'UserDefinedForm',
|
||||
'SendEmailFromField' => 'EditableFormField',
|
||||
'SendEmailToField' => 'EditableFormField',
|
||||
'SendEmailSubjectField' => 'EditableFormField'
|
||||
);
|
||||
private static $has_one = [
|
||||
'Form' => UserDefinedForm::class,
|
||||
'SendEmailFromField' => EditableFormField::class,
|
||||
'SendEmailToField' => EditableFormField::class,
|
||||
'SendEmailSubjectField' => EditableFormField::class
|
||||
];
|
||||
|
||||
private static $has_many = array(
|
||||
'CustomRules' => 'UserDefinedForm_EmailRecipientCondition'
|
||||
);
|
||||
private static $has_many = [
|
||||
'CustomRules' => EmailRecipientCondition::class,
|
||||
];
|
||||
|
||||
private static $summary_fields = array(
|
||||
private static $owns = [
|
||||
'CustomRules',
|
||||
];
|
||||
|
||||
private static $cascade_deetes = [
|
||||
'CustomRules',
|
||||
];
|
||||
|
||||
private static $summary_fields = [
|
||||
'EmailAddress',
|
||||
'EmailSubject',
|
||||
'EmailFrom'
|
||||
);
|
||||
];
|
||||
|
||||
private static $table_name = 'UserDefinedForm_EmailRecipient';
|
||||
|
||||
/**
|
||||
* Setting this to true will allow you to select "risky" fields as
|
||||
|
@ -55,13 +100,13 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
{
|
||||
$fields = parent::summaryFields();
|
||||
if (isset($fields['EmailAddress'])) {
|
||||
$fields['EmailAddress'] = _t('UserDefinedForm.EMAILADDRESS', 'Email');
|
||||
$fields['EmailAddress'] = _t('SilverStripe\\UserForms\\Model\\UserDefinedForm.EMAILADDRESS', Email::class);
|
||||
}
|
||||
if (isset($fields['EmailSubject'])) {
|
||||
$fields['EmailSubject'] = _t('UserDefinedForm.EMAILSUBJECT', 'Subject');
|
||||
$fields['EmailSubject'] = _t('SilverStripe\\UserForms\\Model\\UserDefinedForm.EMAILSUBJECT', 'Subject');
|
||||
}
|
||||
if (isset($fields['EmailFrom'])) {
|
||||
$fields['EmailFrom'] = _t('UserDefinedForm.EMAILFROM', 'From');
|
||||
$fields['EmailFrom'] = _t('SilverStripe\\UserForms\\Model\\UserDefinedForm.EMAILFROM', 'From');
|
||||
}
|
||||
return $fields;
|
||||
}
|
||||
|
@ -73,9 +118,12 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
*/
|
||||
protected function getFormParent()
|
||||
{
|
||||
// LeftAndMain::sessionNamespace is protected. @todo replace this with a non-deprecated equivalent.
|
||||
$sessionNamespace = $this->config()->get('session_namespace') ?: LeftAndMain::class;
|
||||
|
||||
$formID = $this->FormID
|
||||
? $this->FormID
|
||||
: Session::get('CMSMain.currentPage');
|
||||
: Controller::curr()->getRequest()->getSession()->get($sessionNamespace . '.currentPage');
|
||||
return UserDefinedForm::get()->byID($formID);
|
||||
}
|
||||
|
||||
|
@ -113,7 +161,7 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
return DropdownField::create($column, false, $formFields->map('ID', 'Title'));
|
||||
},
|
||||
'ConditionOption' => function ($record, $column, $grid) {
|
||||
$options = UserDefinedForm_EmailRecipientCondition::config()->condition_options;
|
||||
$options = EmailRecipientCondition::config()->condition_options;
|
||||
return DropdownField::create($column, false, $options);
|
||||
},
|
||||
'ConditionValue' => function ($record, $column, $grid) {
|
||||
|
@ -129,7 +177,9 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
Requirements::javascript(USERFORMS_DIR . '/javascript/Recipient.js');
|
||||
Requirements::javascript(
|
||||
ModuleLoader::getModule('silverstripe/userforms')->getRelativeResourcePath('client/dist/js/userforms-cms.js')
|
||||
);
|
||||
|
||||
// Determine optional field values
|
||||
$form = $this->getFormParent();
|
||||
|
@ -151,7 +201,7 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
|
||||
|
||||
// Check valid email-recipient fields
|
||||
if ($this->config()->allow_unbound_recipient_fields) {
|
||||
if ($this->config()->get('allow_unbound_recipient_fields')) {
|
||||
// To address can only be email fields or multi option fields
|
||||
$validEmailToFields = ArrayList::create($validEmailFromFields->toArray());
|
||||
$validEmailToFields->merge($multiOptionFields);
|
||||
|
@ -164,40 +214,55 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
$fields = FieldList::create(Tabset::create('Root')->addExtraClass('EmailRecipientForm'));
|
||||
|
||||
// Configuration fields
|
||||
$fields->addFieldsToTab('Root.EmailDetails', array(
|
||||
$fields->addFieldsToTab('Root.EmailDetails', [
|
||||
// Subject
|
||||
FieldGroup::create(
|
||||
TextField::create('EmailSubject', _t('UserDefinedForm.TYPESUBJECT', 'Type subject'))
|
||||
TextField::create(
|
||||
'EmailSubject',
|
||||
_t('SilverStripe\\UserForms\\Model\\UserDefinedForm.TYPESUBJECT', 'Type subject')
|
||||
)
|
||||
->setAttribute('style', 'min-width: 400px;'),
|
||||
DropdownField::create(
|
||||
'SendEmailSubjectFieldID',
|
||||
_t('UserDefinedForm.SELECTAFIELDTOSETSUBJECT', '.. or select a field to use as the subject'),
|
||||
_t(
|
||||
'SilverStripe\\UserForms\\Model\\UserDefinedForm.SELECTAFIELDTOSETSUBJECT',
|
||||
'.. or select a field to use as the subject'
|
||||
),
|
||||
$validSubjectFields->map('ID', 'Title')
|
||||
)->setEmptyString('')
|
||||
)
|
||||
->setTitle(_t('UserDefinedForm.EMAILSUBJECT', 'Email subject')),
|
||||
->setTitle(_t('SilverStripe\\UserForms\\Model\\UserDefinedForm.EMAILSUBJECT', 'Email subject')),
|
||||
|
||||
// To
|
||||
FieldGroup::create(
|
||||
TextField::create('EmailAddress', _t('UserDefinedForm.TYPETO', 'Type to address'))
|
||||
TextField::create(
|
||||
'EmailAddress',
|
||||
_t('SilverStripe\\UserForms\\Model\\UserDefinedForm.TYPETO', 'Type to address')
|
||||
)
|
||||
->setAttribute('style', 'min-width: 400px;'),
|
||||
DropdownField::create(
|
||||
'SendEmailToFieldID',
|
||||
_t('UserDefinedForm.ORSELECTAFIELDTOUSEASTO', '.. or select a field to use as the to address'),
|
||||
_t(
|
||||
'SilverStripe\\UserForms\\Model\\UserDefinedForm.ORSELECTAFIELDTOUSEASTO',
|
||||
'.. or select a field to use as the to address'
|
||||
),
|
||||
$validEmailToFields->map('ID', 'Title')
|
||||
)->setEmptyString(' ')
|
||||
)
|
||||
->setTitle(_t('UserDefinedForm.SENDEMAILTO', 'Send email to'))
|
||||
->setTitle(_t('SilverStripe\\UserForms\\Model\\UserDefinedForm.SENDEMAILTO', 'Send email to'))
|
||||
->setDescription(_t(
|
||||
'UserDefinedForm.SENDEMAILTO_DESCRIPTION',
|
||||
'SilverStripe\\UserForms\\Model\\UserDefinedForm.SENDEMAILTO_DESCRIPTION',
|
||||
'You may enter multiple email addresses as a comma separated list.'
|
||||
)),
|
||||
|
||||
|
||||
// From
|
||||
TextField::create('EmailFrom', _t('UserDefinedForm.FROMADDRESS', 'Send email from'))
|
||||
TextField::create(
|
||||
'EmailFrom',
|
||||
_t('SilverStripe\\UserForms\\Model\\UserDefinedForm.FROMADDRESS', 'Send email from')
|
||||
)
|
||||
->setDescription(_t(
|
||||
'UserDefinedForm.EmailFromContent',
|
||||
'SilverStripe\\UserForms\\Model\\UserDefinedForm.EmailFromContent',
|
||||
"The from address allows you to set who the email comes from. On most servers this ".
|
||||
"will need to be set to an email address on the same domain name as your site. ".
|
||||
"For example on yoursite.com the from address may need to be something@yoursite.com. ".
|
||||
|
@ -207,89 +272,118 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
|
||||
// Reply-To
|
||||
FieldGroup::create(
|
||||
TextField::create('EmailReplyTo', _t('UserDefinedForm.TYPEREPLY', 'Type reply address'))
|
||||
TextField::create('EmailReplyTo', _t(
|
||||
'SilverStripe\\UserForms\\Model\\UserDefinedForm.TYPEREPLY',
|
||||
'Type reply address'
|
||||
))
|
||||
->setAttribute('style', 'min-width: 400px;'),
|
||||
DropdownField::create(
|
||||
'SendEmailFromFieldID',
|
||||
_t('UserDefinedForm.ORSELECTAFIELDTOUSEASFROM', '.. or select a field to use as reply to address'),
|
||||
_t(
|
||||
'SilverStripe\\UserForms\\Model\\UserDefinedForm.ORSELECTAFIELDTOUSEASFROM',
|
||||
'.. or select a field to use as reply to address'
|
||||
),
|
||||
$validEmailFromFields->map('ID', 'Title')
|
||||
)->setEmptyString(' ')
|
||||
)
|
||||
->setTitle(_t('UserDefinedForm.REPLYADDRESS', 'Email for reply to'))
|
||||
->setTitle(_t(
|
||||
'SilverStripe\\UserForms\\Model\\UserDefinedForm.REPLYADDRESS',
|
||||
'Email for reply to'
|
||||
))
|
||||
->setDescription(_t(
|
||||
'UserDefinedForm.REPLYADDRESS_DESCRIPTION',
|
||||
'SilverStripe\\UserForms\\Model\\UserDefinedForm.REPLYADDRESS_DESCRIPTION',
|
||||
'The email address which the recipient is able to \'reply\' to.'
|
||||
))
|
||||
));
|
||||
]);
|
||||
|
||||
$fields->fieldByName('Root.EmailDetails')->setTitle(_t('UserDefinedForm_EmailRecipient.EMAILDETAILSTAB', 'Email Details'));
|
||||
$fields->fieldByName('Root.EmailDetails')->setTitle(_t(__CLASS__.'.EMAILDETAILSTAB', 'Email Details'));
|
||||
|
||||
// Only show the preview link if the recipient has been saved.
|
||||
if (!empty($this->EmailTemplate)) {
|
||||
$pageEditController = singleton(CMSPageEditController::class);
|
||||
$pageEditController
|
||||
->getRequest()
|
||||
->setSession(Controller::curr()->getRequest()->getSession());
|
||||
|
||||
$preview = sprintf(
|
||||
'<p><a href="%s" target="_blank" class="ss-ui-button">%s</a></p><em>%s</em>',
|
||||
'<p><a href="%s" target="_blank" class="btn btn-outline-secondary">%s</a></p><em>%s</em>',
|
||||
Controller::join_links(
|
||||
singleton('CMSPageEditController')->getEditForm()->FormAction(),
|
||||
$pageEditController->getEditForm()->FormAction(),
|
||||
"field/EmailRecipients/item/{$this->ID}/preview"
|
||||
),
|
||||
_t('UserDefinedForm.PREVIEW_EMAIL', 'Preview email'),
|
||||
_t('UserDefinedForm.PREVIEW_EMAIL_DESCRIPTION', 'Note: Unsaved changes will not appear in the preview.')
|
||||
_t('SilverStripe\\UserForms\\Model\\UserDefinedForm.PREVIEW_EMAIL', 'Preview email'),
|
||||
_t(
|
||||
'SilverStripe\\UserForms\\Model\\UserDefinedForm.PREVIEW_EMAIL_DESCRIPTION',
|
||||
'Note: Unsaved changes will not appear in the preview.'
|
||||
)
|
||||
);
|
||||
} else {
|
||||
$preview = sprintf(
|
||||
'<em>%s</em>',
|
||||
_t(
|
||||
'UserDefinedForm.PREVIEW_EMAIL_UNAVAILABLE',
|
||||
'SilverStripe\\UserForms\\Model\\UserDefinedForm.PREVIEW_EMAIL_UNAVAILABLE',
|
||||
'You can preview this email once you have saved the Recipient.'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// Email templates
|
||||
$fields->addFieldsToTab('Root.EmailContent', array(
|
||||
CheckboxField::create('HideFormData', _t('UserDefinedForm.HIDEFORMDATA', 'Hide form data from email?')),
|
||||
$fields->addFieldsToTab('Root.EmailContent', [
|
||||
CheckboxField::create(
|
||||
'HideFormData',
|
||||
_t('SilverStripe\\UserForms\\Model\\UserDefinedForm.HIDEFORMDATA', 'Hide form data from email?')
|
||||
),
|
||||
CheckboxField::create(
|
||||
'SendPlain',
|
||||
_t('UserDefinedForm.SENDPLAIN', 'Send email as plain text? (HTML will be stripped)')
|
||||
_t(
|
||||
'SilverStripe\\UserForms\\Model\\UserDefinedForm.SENDPLAIN',
|
||||
'Send email as plain text? (HTML will be stripped)'
|
||||
)
|
||||
),
|
||||
DropdownField::create(
|
||||
'EmailTemplate',
|
||||
_t('UserDefinedForm.EMAILTEMPLATE', 'Email template'),
|
||||
_t('SilverStripe\\UserForms\\Model\\UserDefinedForm.EMAILTEMPLATE', 'Email template'),
|
||||
$this->getEmailTemplateDropdownValues()
|
||||
)->addExtraClass('toggle-html-only'),
|
||||
HTMLEditorField::create('EmailBodyHtml', _t('UserDefinedForm.EMAILBODYHTML', 'Body'))
|
||||
HTMLEditorField::create(
|
||||
'EmailBodyHtml',
|
||||
_t('SilverStripe\\UserForms\\Model\\UserDefinedForm.EMAILBODYHTML', 'Body')
|
||||
)
|
||||
->addExtraClass('toggle-html-only'),
|
||||
TextareaField::create('EmailBody', _t('UserDefinedForm.EMAILBODY', 'Body'))
|
||||
TextareaField::create(
|
||||
'EmailBody',
|
||||
_t('SilverStripe\\UserForms\\Model\\UserDefinedForm.EMAILBODY', 'Body')
|
||||
)
|
||||
->addExtraClass('toggle-plain-only'),
|
||||
LiteralField::create('EmailPreview', $preview)
|
||||
));
|
||||
]);
|
||||
|
||||
$fields->fieldByName('Root.EmailContent')->setTitle(_t('UserDefinedForm_EmailRecipient.EMAILCONTENTTAB', 'Email Content'));
|
||||
$fields->fieldByName('Root.EmailContent')->setTitle(_t(__CLASS__.'.EMAILCONTENTTAB', 'Email Content'));
|
||||
|
||||
// Custom rules for sending this field
|
||||
$grid = new GridField(
|
||||
"CustomRules",
|
||||
_t('EditableFormField.CUSTOMRULES', 'Custom Rules'),
|
||||
$grid = GridField::create(
|
||||
'CustomRules',
|
||||
_t('SilverStripe\\UserForms\\Model\\EditableFormField.CUSTOMRULES', 'Custom Rules'),
|
||||
$this->CustomRules(),
|
||||
$this->getRulesConfig()
|
||||
);
|
||||
$grid->setDescription(_t(
|
||||
'UserDefinedForm.RulesDescription',
|
||||
'SilverStripe\\UserForms\\Model\\UserDefinedForm.RulesDescription',
|
||||
'Emails will only be sent to the recipient if the custom rules are met. If no rules are defined, this receipient will receive notifications for every submission.'
|
||||
));
|
||||
$fields->addFieldsToTab('Root.CustomRules', array(
|
||||
new DropdownField(
|
||||
$fields->addFieldsToTab('Root.CustomRules', [
|
||||
DropdownField::create(
|
||||
'CustomRulesCondition',
|
||||
_t('UserDefinedForm.SENDIF', 'Send condition'),
|
||||
array(
|
||||
'Or' => _t('UserDefinedForm.SENDIFOR', 'Any conditions are true'),
|
||||
'And' => _t('UserDefinedForm.SENDIFAND', 'All conditions are true')
|
||||
)
|
||||
_t('SilverStripe\\UserForms\\Model\\UserDefinedForm.SENDIF', 'Send condition'),
|
||||
[
|
||||
'Or' => _t('SilverStripe\\UserForms\\Model\\UserDefinedForm.SENDIFOR', 'Any conditions are true'),
|
||||
'And' => _t('SilverStripe\\UserForms\\Model\\UserDefinedForm.SENDIFAND', 'All conditions are true')
|
||||
]
|
||||
),
|
||||
$grid
|
||||
));
|
||||
]);
|
||||
|
||||
$fields->fieldByName('Root.CustomRules')->setTitle(_t('UserDefinedForm_EmailRecipient.CUSTOMRULESTAB', 'Custom Rules'));
|
||||
$fields->fieldByName('Root.CustomRules')->setTitle(_t(__CLASS__.'.CUSTOMRULESTAB', 'Custom Rules'));
|
||||
|
||||
$this->extend('updateCMSFields', $fields);
|
||||
return $fields;
|
||||
|
@ -302,7 +396,7 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
* @param array $context Virtual parameter to allow context to be passed in to check
|
||||
* @return bool
|
||||
*/
|
||||
public function canCreate($member = null)
|
||||
public function canCreate($member = null, $context = [])
|
||||
{
|
||||
// Check parent page
|
||||
$parent = $this->getCanCreateContext(func_get_args());
|
||||
|
@ -323,8 +417,8 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
protected function getCanCreateContext($args)
|
||||
{
|
||||
// Inspect second parameter to canCreate for a 'Parent' context
|
||||
if (isset($args[1]['Form'])) {
|
||||
return $args[1]['Form'];
|
||||
if (isset($args[1][Form::class])) {
|
||||
return $args[1][Form::class];
|
||||
}
|
||||
// Hack in currently edited page if context is missing
|
||||
if (Controller::has_curr() && Controller::curr() instanceof CMSMain) {
|
||||
|
@ -383,7 +477,7 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
// Check all rules
|
||||
$isAnd = $this->CustomRulesCondition === 'And';
|
||||
foreach ($customRules as $customRule) {
|
||||
/** @var UserDefinedForm_EmailRecipientCondition $customRule */
|
||||
/** @var EmailRecipientCondition $customRule */
|
||||
$matches = $customRule->matches($data);
|
||||
if ($isAnd && !$matches) {
|
||||
return false;
|
||||
|
@ -408,7 +502,7 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
{
|
||||
$t = ($template ? $template : $this->EmailTemplate);
|
||||
|
||||
return in_array($t, $this->getEmailTemplateDropdownValues());
|
||||
return array_key_exists($t, $this->getEmailTemplateDropdownValues());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -419,9 +513,9 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
public function getEmailBodyContent()
|
||||
{
|
||||
if ($this->SendPlain) {
|
||||
return DBField::create_field('HTMLText', $this->EmailBody)->NoHTML();
|
||||
return DBField::create_field('HTMLText', $this->EmailBody)->Plain();
|
||||
}
|
||||
return DBField::create_field('HTMLText', $this->EmailBodyHtml)->RAW();
|
||||
return DBField::create_field('HTMLText', $this->EmailBodyHtml);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -431,17 +525,36 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
*/
|
||||
public function getEmailTemplateDropdownValues()
|
||||
{
|
||||
$templates = array();
|
||||
$templates = [];
|
||||
|
||||
$finder = new SS_FileFinder();
|
||||
$finder = new FileFinder();
|
||||
$finder->setOption('name_regex', '/^.*\.ss$/');
|
||||
|
||||
$found = $finder->find(BASE_PATH . '/' . UserDefinedForm::config()->email_template_directory);
|
||||
$templateDirectory = UserDefinedForm::config()->get('email_template_directory');
|
||||
// Handle cases where "userforms" might not be the base module directory, e.g. in a Travis build
|
||||
if (!file_exists(BASE_PATH . DIRECTORY_SEPARATOR . $templateDirectory)
|
||||
&& substr($templateDirectory, 0, 10) === 'userforms/'
|
||||
) {
|
||||
$templateDirectory = substr($templateDirectory, 10);
|
||||
}
|
||||
$found = $finder->find(BASE_PATH . DIRECTORY_SEPARATOR . $templateDirectory);
|
||||
|
||||
foreach ($found as $key => $value) {
|
||||
$template = pathinfo($value);
|
||||
$templatePath = substr(
|
||||
$template['dirname'] . DIRECTORY_SEPARATOR . $template['filename'],
|
||||
strlen(BASE_PATH) + 1
|
||||
);
|
||||
|
||||
$templates[$template['filename']] = $template['filename'];
|
||||
$defaultPrefixes = ['userforms/templates/', 'templates/'];
|
||||
foreach ($defaultPrefixes as $defaultPrefix) {
|
||||
// Remove default userforms folder if it's provided
|
||||
if (substr($templatePath, 0, strlen($defaultPrefix)) === $defaultPrefix) {
|
||||
$templatePath = substr($templatePath, strlen($defaultPrefix));
|
||||
break;
|
||||
}
|
||||
}
|
||||
$templates[$templatePath] = $template['filename'];
|
||||
}
|
||||
|
||||
return $templates;
|
||||
|
@ -452,13 +565,14 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
*
|
||||
* @return ValidationResult
|
||||
*/
|
||||
public function validate() {
|
||||
public function validate()
|
||||
{
|
||||
$result = parent::validate();
|
||||
$checkEmail = array(
|
||||
$checkEmail = [
|
||||
'EmailAddress' => 'EMAILADDRESSINVALID',
|
||||
'EmailFrom' => 'EMAILFROMINVALID',
|
||||
'EmailReplyTo' => 'EMAILREPLYTOINVALID',
|
||||
);
|
||||
];
|
||||
foreach ($checkEmail as $check => $translation) {
|
||||
if ($this->$check) {
|
||||
//may be a comma separated list of emails
|
||||
|
@ -466,9 +580,11 @@ class UserDefinedForm_EmailRecipient extends DataObject
|
|||
foreach ($addresses as $address) {
|
||||
$trimAddress = trim($address);
|
||||
if ($trimAddress && !Email::is_valid_address($trimAddress)) {
|
||||
$error = _t("UserDefinedForm_EmailRecipient.$translation",
|
||||
"Invalid email address $trimAddress");
|
||||
$result->error($error . " ($trimAddress)");
|
||||
$error = _t(
|
||||
__CLASS__.".$translation",
|
||||
"Invalid email address $trimAddress"
|
||||
);
|
||||
$result->addError($error . " ($trimAddress)");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,45 +1,54 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\Recipient;
|
||||
|
||||
use LogicException;
|
||||
use SilverStripe\CMS\Controllers\CMSMain;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\UserForms\Model\Recipient\EmailRecipient;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* Declares a condition that determines whether an email can be sent to a given recipient
|
||||
*
|
||||
* @method UserDefinedForm_EmailRecipient Parent()
|
||||
* @method EmailRecipient Parent()
|
||||
*
|
||||
* @property Enum ConditionOption
|
||||
* @property Varchar ConditionValue
|
||||
*
|
||||
* @method EditableFormField ConditionField
|
||||
*/
|
||||
class UserDefinedForm_EmailRecipientCondition extends DataObject
|
||||
class EmailRecipientCondition extends DataObject
|
||||
{
|
||||
|
||||
/**
|
||||
* List of options
|
||||
*
|
||||
* @config
|
||||
* @var array
|
||||
*/
|
||||
private static $condition_options = array(
|
||||
"IsBlank" => "Is blank",
|
||||
"IsNotBlank" => "Is not blank",
|
||||
"Equals" => "Equals",
|
||||
"NotEquals" => "Doesn't equal",
|
||||
"ValueLessThan" => "Less than",
|
||||
"ValueLessThanEqual" => "Less than or equal",
|
||||
"ValueGreaterThan" => "Greater than",
|
||||
"ValueGreaterThanEqual" => "Greater than or equal"
|
||||
);
|
||||
private static $condition_options = [
|
||||
'IsBlank' => 'Is blank',
|
||||
'IsNotBlank' => 'Is not blank',
|
||||
'Equals' => 'Equals',
|
||||
'NotEquals' => "Doesn't equal",
|
||||
'ValueLessThan' => 'Less than',
|
||||
'ValueLessThanEqual' => 'Less than or equal',
|
||||
'ValueGreaterThan' => 'Greater than',
|
||||
'ValueGreaterThanEqual' => 'Greater than or equal'
|
||||
];
|
||||
|
||||
private static $db = array(
|
||||
private static $db = [
|
||||
'ConditionOption' => 'Enum("IsBlank,IsNotBlank,Equals,NotEquals,ValueLessThan,ValueLessThanEqual,ValueGreaterThan,ValueGreaterThanEqual")',
|
||||
'ConditionValue' => 'Varchar'
|
||||
);
|
||||
];
|
||||
|
||||
private static $has_one = array(
|
||||
'Parent' => 'UserDefinedForm_EmailRecipient',
|
||||
'ConditionField' => 'EditableFormField'
|
||||
);
|
||||
private static $has_one = [
|
||||
'Parent' => EmailRecipient::class,
|
||||
'ConditionField' => EditableFormField::class
|
||||
];
|
||||
|
||||
private static $table_name = 'UserDefinedForm_EmailRecipientCondition';
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -100,7 +109,7 @@ class UserDefinedForm_EmailRecipientCondition extends DataObject
|
|||
* @param array $context Virtual parameter to allow context to be passed in to check
|
||||
* @return bool
|
||||
*/
|
||||
public function canCreate($member = null)
|
||||
public function canCreate($member = null, $context = [])
|
||||
{
|
||||
// Check parent page
|
||||
$parent = $this->getCanCreateContext(func_get_args());
|
|
@ -1,5 +1,16 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\Recipient;
|
||||
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Forms\GridField\GridFieldDetailForm_ItemRequest;
|
||||
use SilverStripe\ORM\ArrayList;
|
||||
use SilverStripe\ORM\FieldType\DBField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading;
|
||||
use SilverStripe\View\ArrayData;
|
||||
use SilverStripe\View\SSViewer;
|
||||
|
||||
/**
|
||||
* Controller that handles requests to EmailRecipient's
|
||||
*
|
||||
|
@ -7,13 +18,12 @@
|
|||
*/
|
||||
class UserFormRecipientItemRequest extends GridFieldDetailForm_ItemRequest
|
||||
{
|
||||
|
||||
private static $allowed_actions = array(
|
||||
private static $allowed_actions = [
|
||||
'edit',
|
||||
'view',
|
||||
'ItemEditForm',
|
||||
'preview'
|
||||
);
|
||||
];
|
||||
|
||||
/**
|
||||
* Renders a preview of the recipient email.
|
||||
|
@ -22,13 +32,13 @@ class UserFormRecipientItemRequest extends GridFieldDetailForm_ItemRequest
|
|||
{
|
||||
// Enable theme for preview (may be needed for Shortcodes)
|
||||
Config::nest();
|
||||
Config::inst()->update('SSViewer', 'theme_enabled', true);
|
||||
Config::modify()->set(SSViewer::class, 'theme_enabled', true);
|
||||
|
||||
$content = $this->customise(new ArrayData(array(
|
||||
$content = $this->customise(ArrayData::create([
|
||||
'Body' => $this->record->getEmailBodyContent(),
|
||||
'HideFormData' => $this->record->HideFormData,
|
||||
'Fields' => $this->getPreviewFieldData()
|
||||
)))->renderWith($this->record->EmailTemplate);
|
||||
]))->renderWith($this->record->EmailTemplate);
|
||||
|
||||
Config::unnest();
|
||||
|
||||
|
@ -37,24 +47,28 @@ class UserFormRecipientItemRequest extends GridFieldDetailForm_ItemRequest
|
|||
|
||||
/**
|
||||
* Get some placeholder field values to display in the preview
|
||||
*
|
||||
* @return ArrayList
|
||||
*/
|
||||
private function getPreviewFieldData()
|
||||
protected function getPreviewFieldData()
|
||||
{
|
||||
$data = new ArrayList();
|
||||
$data = ArrayList::create();
|
||||
|
||||
$fields = $this->record->Form()->Fields()->filter(array(
|
||||
'ClassName:not' => 'EditableLiteralField',
|
||||
'ClassName:not' => 'EditableFormHeading'
|
||||
));
|
||||
$fields = $this->record->Form()->Fields()->filter(
|
||||
'ClassName:not',
|
||||
[
|
||||
EditableLiteralField::class,
|
||||
EditableFormHeading::class,
|
||||
]
|
||||
);
|
||||
|
||||
foreach ($fields as $field) {
|
||||
$data->push(new ArrayData(array(
|
||||
$data->push(ArrayData::create([
|
||||
'Name' => $field->dbObject('Name'),
|
||||
'Title' => $field->dbObject('Title'),
|
||||
'Value' => DBField::create_field('Varchar', '$' . $field->Name),
|
||||
'FormattedValue' => DBField::create_field('Varchar', '$' . $field->Name)
|
||||
)));
|
||||
]));
|
||||
}
|
||||
|
||||
return $data;
|
|
@ -1,5 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\Submission;
|
||||
|
||||
use SilverStripe\Assets\File;
|
||||
use SilverStripe\ORM\FieldType\DBField;
|
||||
|
||||
/**
|
||||
* A file uploaded on a {@link UserDefinedForm} and attached to a single
|
||||
* {@link SubmittedForm}.
|
||||
|
@ -9,10 +14,11 @@
|
|||
|
||||
class SubmittedFileField extends SubmittedFormField
|
||||
{
|
||||
private static $has_one = [
|
||||
'UploadedFile' => File::class
|
||||
];
|
||||
|
||||
private static $has_one = array(
|
||||
"UploadedFile" => "File"
|
||||
);
|
||||
private static $table_name = 'SubmittedFileField';
|
||||
|
||||
/**
|
||||
* Return the value of this field for inclusion into things such as
|
||||
|
@ -24,12 +30,14 @@ class SubmittedFileField extends SubmittedFormField
|
|||
{
|
||||
$name = $this->getFileName();
|
||||
$link = $this->getLink();
|
||||
$title = _t('SubmittedFileField.DOWNLOADFILE', 'Download File');
|
||||
$title = _t(__CLASS__.'.DOWNLOADFILE', 'Download File');
|
||||
|
||||
if ($link) {
|
||||
return DBField::create_field('HTMLText', sprintf(
|
||||
'%s - <a href="%s" target="_blank">%s</a>',
|
||||
$name, $link, $title
|
||||
$name,
|
||||
$link,
|
||||
$title
|
||||
));
|
||||
}
|
||||
|
||||
|
@ -43,7 +51,7 @@ class SubmittedFileField extends SubmittedFormField
|
|||
*/
|
||||
public function getExportValue()
|
||||
{
|
||||
return ($link = $this->getLink()) ? $link : "";
|
||||
return ($link = $this->getLink()) ? $link : '';
|
||||
}
|
||||
|
||||
/**
|
|
@ -1,26 +1,44 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\Submission;
|
||||
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig;
|
||||
use SilverStripe\Forms\GridField\GridFieldDataColumns;
|
||||
use SilverStripe\Forms\GridField\GridFieldExportButton;
|
||||
use SilverStripe\Forms\GridField\GridFieldPrintButton;
|
||||
use SilverStripe\Forms\ReadonlyField;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\Security\Member;
|
||||
use SilverStripe\UserForms\Model\UserDefinedForm;
|
||||
use SilverStripe\UserForms\Model\Submission\SubmittedFormField;
|
||||
|
||||
/**
|
||||
* Contents of an UserDefinedForm submission
|
||||
*
|
||||
* @package userforms
|
||||
*/
|
||||
|
||||
class SubmittedForm extends DataObject
|
||||
{
|
||||
private static $has_one = [
|
||||
'SubmittedBy' => Member::class,
|
||||
'Parent' => UserDefinedForm::class,
|
||||
];
|
||||
|
||||
private static $has_one = array(
|
||||
"SubmittedBy" => "Member",
|
||||
"Parent" => "UserDefinedForm",
|
||||
);
|
||||
private static $has_many = [
|
||||
'Values' => SubmittedFormField::class
|
||||
];
|
||||
|
||||
private static $has_many = array(
|
||||
"Values" => "SubmittedFormField"
|
||||
);
|
||||
private static $cascade_deletes = [
|
||||
'Values',
|
||||
];
|
||||
|
||||
private static $summary_fields = array(
|
||||
private static $summary_fields = [
|
||||
'ID',
|
||||
'Created'
|
||||
);
|
||||
];
|
||||
|
||||
private static $table_name = 'SubmittedForm';
|
||||
|
||||
/**
|
||||
* Returns the value of a relation or, in the case of this form, the value
|
||||
|
@ -53,14 +71,12 @@ class SubmittedForm extends DataObject
|
|||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
$self = $this;
|
||||
|
||||
$this->beforeUpdateCMSFields(function ($fields) use ($self) {
|
||||
$this->beforeUpdateCMSFields(function ($fields) {
|
||||
$fields->removeByName('Values');
|
||||
|
||||
//check to ensure there is a Member to extract an Email from else null value
|
||||
if($self->SubmittedBy() && $self->SubmittedBy()->exists()){
|
||||
$submitter = $self->SubmittedBy()->Email;
|
||||
if ($this->SubmittedBy() && $this->SubmittedBy()->exists()) {
|
||||
$submitter = $this->SubmittedBy()->Email;
|
||||
} else {
|
||||
$submitter = null;
|
||||
}
|
||||
|
@ -77,8 +93,8 @@ class SubmittedForm extends DataObject
|
|||
|
||||
$values = GridField::create(
|
||||
'Values',
|
||||
'SubmittedFormField',
|
||||
$self->Values()->sort('Created', 'ASC')
|
||||
SubmittedFormField::class,
|
||||
$this->Values()->sort('Created', 'ASC')
|
||||
);
|
||||
|
||||
$exportColumns = array(
|
||||
|
@ -105,7 +121,7 @@ class SubmittedForm extends DataObject
|
|||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function canCreate($member = null)
|
||||
public function canCreate($member = null, $context = [])
|
||||
{
|
||||
$extended = $this->extendedCan(__FUNCTION__, $member);
|
||||
if ($extended !== null) {
|
|
@ -1,40 +1,46 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model\Submission;
|
||||
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\UserForms\Model\Submission\SubmittedForm;
|
||||
|
||||
/**
|
||||
* Data received from a UserDefinedForm submission
|
||||
*
|
||||
* @package userforms
|
||||
*/
|
||||
|
||||
class SubmittedFormField extends DataObject
|
||||
{
|
||||
private static $db = [
|
||||
'Name' => 'Varchar',
|
||||
'Value' => 'Text',
|
||||
'Title' => 'Varchar(255)'
|
||||
];
|
||||
|
||||
private static $db = array(
|
||||
"Name" => "Varchar",
|
||||
"Value" => "Text",
|
||||
"Title" => "Varchar(255)"
|
||||
);
|
||||
private static $has_one = [
|
||||
'Parent' => SubmittedForm::class
|
||||
];
|
||||
|
||||
private static $has_one = array(
|
||||
"Parent" => "SubmittedForm"
|
||||
);
|
||||
|
||||
private static $summary_fields = array(
|
||||
private static $summary_fields = [
|
||||
'Title' => 'Title',
|
||||
'FormattedValue' => 'Value'
|
||||
);
|
||||
];
|
||||
|
||||
private static $table_name = 'SubmittedFormField';
|
||||
|
||||
/**
|
||||
* @param Member
|
||||
*
|
||||
* @param Member $member
|
||||
* @param array $context
|
||||
* @return boolean
|
||||
*/
|
||||
public function canCreate($member = null)
|
||||
public function canCreate($member = null, $context = [])
|
||||
{
|
||||
return $this->Parent()->canCreate();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Member
|
||||
* @param Member $member
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
@ -44,7 +50,7 @@ class SubmittedFormField extends DataObject
|
|||
}
|
||||
|
||||
/**
|
||||
* @param Member
|
||||
* @param Member $member
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
@ -54,7 +60,7 @@ class SubmittedFormField extends DataObject
|
|||
}
|
||||
|
||||
/**
|
||||
* @param Member
|
||||
* @param Member $member
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
|
@ -98,8 +104,8 @@ class SubmittedFormField extends DataObject
|
|||
*/
|
||||
public function getEditableField()
|
||||
{
|
||||
return $this->Parent()->Parent()->Fields()->filter(array(
|
||||
return $this->Parent()->Parent()->Fields()->filter([
|
||||
'Name' => $this->Name
|
||||
))->First();
|
||||
])->First();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,404 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model;
|
||||
|
||||
use Page;
|
||||
use Colymba\BulkManager\BulkManager;
|
||||
use SilverStripe\Core\Injector\Injector;
|
||||
use SilverStripe\Core\Manifest\ModuleLoader;
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\CompositeField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldAddNewButton;
|
||||
use SilverStripe\Forms\GridField\GridFieldButtonRow;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor;
|
||||
use SilverStripe\Forms\GridField\GridFieldDataColumns;
|
||||
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
|
||||
use SilverStripe\Forms\GridField\GridFieldDetailForm;
|
||||
use SilverStripe\Forms\GridField\GridFieldEditButton;
|
||||
use SilverStripe\Forms\GridField\GridFieldExportButton;
|
||||
use SilverStripe\Forms\GridField\GridFieldPageCount;
|
||||
use SilverStripe\Forms\GridField\GridFieldPaginator;
|
||||
use SilverStripe\Forms\GridField\GridFieldPrintButton;
|
||||
use SilverStripe\Forms\GridField\GridFieldSortableHeader;
|
||||
use SilverStripe\Forms\GridField\GridFieldToolbarHeader;
|
||||
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
|
||||
use SilverStripe\Forms\LabelField;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\ORM\ArrayList;
|
||||
use SilverStripe\ORM\DB;
|
||||
use SilverStripe\UserForms\Extension\UserFormFieldEditorExtension;
|
||||
use SilverStripe\UserForms\Extension\UserFormValidator;
|
||||
use SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader;
|
||||
use SilverStripe\UserForms\Model\Recipient\EmailRecipient;
|
||||
use SilverStripe\UserForms\Model\Recipient\UserFormRecipientItemRequest;
|
||||
use SilverStripe\UserForms\Model\Submission\SubmittedForm;
|
||||
use SilverStripe\View\Requirements;
|
||||
|
||||
/**
|
||||
* @package userforms
|
||||
*/
|
||||
class UserDefinedForm extends Page
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $icon = 'userforms/client/dist/images/sitetree_icon.png';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $description = 'Adds a customizable form.';
|
||||
|
||||
/**
|
||||
* @var string Required Identifier
|
||||
*/
|
||||
private static $required_identifier = null;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $email_template_directory = 'userforms/templates/email/';
|
||||
|
||||
/**
|
||||
* Should this module automatically upgrade on dev/build?
|
||||
*
|
||||
* @config
|
||||
* @var bool
|
||||
*/
|
||||
private static $upgrade_on_build = true;
|
||||
|
||||
/**
|
||||
* Set this to true to disable automatic inclusion of CSS files
|
||||
* @config
|
||||
* @var bool
|
||||
*/
|
||||
private static $block_default_userforms_css = false;
|
||||
|
||||
/**
|
||||
* Set this to true to disable automatic inclusion of JavaScript files
|
||||
* @config
|
||||
* @var bool
|
||||
*/
|
||||
private static $block_default_userforms_js = false;
|
||||
|
||||
private static $table_name = 'UserDefinedForm';
|
||||
|
||||
/**
|
||||
* Built in extensions required by this page
|
||||
* @config
|
||||
* @var array
|
||||
*/
|
||||
private static $extensions = [
|
||||
UserFormFieldEditorExtension::class
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array Fields on the user defined form page.
|
||||
*/
|
||||
private static $db = [
|
||||
'SubmitButtonText' => 'Varchar',
|
||||
'ClearButtonText' => 'Varchar',
|
||||
'OnCompleteMessage' => 'HTMLText',
|
||||
'ShowClearButton' => 'Boolean',
|
||||
'DisableSaveSubmissions' => 'Boolean',
|
||||
'EnableLiveValidation' => 'Boolean',
|
||||
'DisplayErrorMessagesAtTop' => 'Boolean',
|
||||
'DisableAuthenicatedFinishAction' => 'Boolean',
|
||||
'DisableCsrfSecurityToken' => 'Boolean'
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array Default values of variables when this page is created
|
||||
*/
|
||||
private static $defaults = [
|
||||
'Content' => '$UserDefinedForm',
|
||||
'DisableSaveSubmissions' => 0,
|
||||
'OnCompleteMessage' => '<p>Thanks, we\'ve received your submission.</p>'
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_many = [
|
||||
'Submissions' => SubmittedForm::class,
|
||||
'EmailRecipients' => EmailRecipient::class
|
||||
];
|
||||
|
||||
private static $cascade_deletes = [
|
||||
'EmailRecipients',
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
* @config
|
||||
*/
|
||||
private static $casting = [
|
||||
'ErrorContainerID' => 'Text'
|
||||
];
|
||||
|
||||
/**
|
||||
* Error container selector which matches the element for grouped messages
|
||||
*
|
||||
* @var string
|
||||
* @config
|
||||
*/
|
||||
private static $error_container_id = 'error-container';
|
||||
|
||||
/**
|
||||
* The configuration used to determine whether a confirmation message is to
|
||||
* appear when navigating away from a partially completed form.
|
||||
*
|
||||
* @var boolean
|
||||
* @config
|
||||
*/
|
||||
private static $enable_are_you_sure = true;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
* @config
|
||||
*/
|
||||
private static $recipients_warning_enabled = false;
|
||||
|
||||
private static $non_live_permissions = ['SITETREE_VIEW_ALL'];
|
||||
|
||||
/**
|
||||
* Temporary storage of field ids when the form is duplicated.
|
||||
* Example layout: array('EditableCheckbox3' => 'EditableCheckbox14')
|
||||
* @var array
|
||||
*/
|
||||
protected $fieldsFromTo = [];
|
||||
|
||||
/**
|
||||
* @return FieldList
|
||||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
Requirements::css(
|
||||
ModuleLoader::getModule('silverstripe/userforms')
|
||||
->getRelativeResourcePath('client/dist/styles/userforms-cms.css')
|
||||
);
|
||||
|
||||
$this->beforeUpdateCMSFields(function ($fields) {
|
||||
// define tabs
|
||||
$fields->findOrMakeTab('Root.FormOptions', _t(__CLASS__.'.CONFIGURATION', 'Configuration'));
|
||||
$fields->findOrMakeTab('Root.Recipients', _t(__CLASS__.'.RECIPIENTS', 'Recipients'));
|
||||
$fields->findOrMakeTab('Root.Submissions', _t(__CLASS__.'.SUBMISSIONS', 'Submissions'));
|
||||
|
||||
// text to show on complete
|
||||
$onCompleteFieldSet = CompositeField::create(
|
||||
$label = LabelField::create(
|
||||
'OnCompleteMessageLabel',
|
||||
_t(__CLASS__.'.ONCOMPLETELABEL', 'Show on completion')
|
||||
),
|
||||
$editor = HTMLEditorField::create(
|
||||
'OnCompleteMessage',
|
||||
'',
|
||||
_t(__CLASS__.'.ONCOMPLETEMESSAGE', $this->OnCompleteMessage)
|
||||
)
|
||||
);
|
||||
|
||||
$onCompleteFieldSet->addExtraClass('field');
|
||||
|
||||
$editor->setRows(3);
|
||||
$label->addExtraClass('left');
|
||||
|
||||
// Define config for email recipients
|
||||
$emailRecipientsConfig = GridFieldConfig_RecordEditor::create(10);
|
||||
$emailRecipientsConfig->getComponentByType(GridFieldAddNewButton::class)
|
||||
->setButtonName(
|
||||
_t(__CLASS__.'.ADDEMAILRECIPIENT', 'Add Email Recipient')
|
||||
);
|
||||
|
||||
// who do we email on submission
|
||||
$emailRecipients = GridField::create(
|
||||
'EmailRecipients',
|
||||
_t(__CLASS__.'.EMAILRECIPIENTS', 'Email Recipients'),
|
||||
$this->EmailRecipients(),
|
||||
$emailRecipientsConfig
|
||||
);
|
||||
$emailRecipients
|
||||
->getConfig()
|
||||
->getComponentByType(GridFieldDetailForm::class)
|
||||
->setItemRequestClass(UserFormRecipientItemRequest::class);
|
||||
|
||||
$fields->addFieldsToTab('Root.FormOptions', $onCompleteFieldSet);
|
||||
$fields->addFieldToTab('Root.Recipients', $emailRecipients);
|
||||
$fields->addFieldsToTab('Root.FormOptions', $this->getFormOptions());
|
||||
|
||||
|
||||
// view the submissions
|
||||
// make sure a numeric not a empty string is checked against this int column for SQL server
|
||||
$parentID = (!empty($this->ID)) ? (int) $this->ID : 0;
|
||||
|
||||
// get a list of all field names and values used for print and export CSV views of the GridField below.
|
||||
$columnSQL = <<<SQL
|
||||
SELECT "SubmittedFormField"."Name" as "Name", COALESCE("EditableFormField"."Title", "SubmittedFormField"."Title") as "Title", COALESCE("EditableFormField"."Sort", 999) AS "Sort"
|
||||
FROM "SubmittedFormField"
|
||||
LEFT JOIN "SubmittedForm" ON "SubmittedForm"."ID" = "SubmittedFormField"."ParentID"
|
||||
LEFT JOIN "EditableFormField" ON "EditableFormField"."Name" = "SubmittedFormField"."Name" AND "EditableFormField"."ParentID" = '$parentID'
|
||||
WHERE "SubmittedForm"."ParentID" = '$parentID'
|
||||
ORDER BY "Sort", "Title"
|
||||
SQL;
|
||||
// Sanitise periods in title
|
||||
$columns = array();
|
||||
foreach (DB::query($columnSQL)->map() as $name => $title) {
|
||||
$columns[$name] = trim(strtr($title, '.', ' '));
|
||||
}
|
||||
|
||||
$config = GridFieldConfig::create();
|
||||
$config->addComponent(new GridFieldToolbarHeader());
|
||||
$config->addComponent($sort = new GridFieldSortableHeader());
|
||||
$config->addComponent($filter = new UserFormsGridFieldFilterHeader());
|
||||
$config->addComponent(new GridFieldDataColumns());
|
||||
$config->addComponent(new GridFieldEditButton());
|
||||
$config->addComponent(new GridFieldDeleteAction());
|
||||
$config->addComponent(new GridFieldPageCount('toolbar-header-right'));
|
||||
$config->addComponent($pagination = new GridFieldPaginator(25));
|
||||
$config->addComponent(new GridFieldDetailForm());
|
||||
$config->addComponent(new GridFieldButtonRow('after'));
|
||||
$config->addComponent($export = new GridFieldExportButton('buttons-after-left'));
|
||||
$config->addComponent($print = new GridFieldPrintButton('buttons-after-left'));
|
||||
|
||||
// show user form items in the summary tab
|
||||
$summaryarray = array(
|
||||
'ID' => 'ID',
|
||||
'Created' => 'Created',
|
||||
'LastEdited' => 'Last Edited'
|
||||
);
|
||||
foreach (EditableFormField::get()->filter(array('ParentID' => $parentID)) as $eff) {
|
||||
if ($eff->ShowInSummary) {
|
||||
$summaryarray[$eff->Name] = $eff->Title ?: $eff->Name;
|
||||
}
|
||||
}
|
||||
|
||||
$config->getComponentByType(GridFieldDataColumns::class)->setDisplayFields($summaryarray);
|
||||
|
||||
/**
|
||||
* Support for {@link https://github.com/colymba/GridFieldBulkEditingTools}
|
||||
*/
|
||||
if (class_exists(BulkManager::class)) {
|
||||
$config->addComponent(new BulkManager);
|
||||
}
|
||||
|
||||
$sort->setThrowExceptionOnBadDataType(false);
|
||||
$filter->setThrowExceptionOnBadDataType(false);
|
||||
$pagination->setThrowExceptionOnBadDataType(false);
|
||||
|
||||
// attach every column to the print view form
|
||||
$columns['Created'] = 'Created';
|
||||
$columns['SubmittedBy.Email'] = 'Submitter';
|
||||
$filter->setColumns($columns);
|
||||
|
||||
// print configuration
|
||||
|
||||
$print->setPrintHasHeader(true);
|
||||
$print->setPrintColumns($columns);
|
||||
|
||||
// export configuration
|
||||
$export->setCsvHasHeader(true);
|
||||
$export->setExportColumns($columns);
|
||||
|
||||
$submissions = GridField::create(
|
||||
'Submissions',
|
||||
_t(__CLASS__.'.SUBMISSIONS', 'Submissions'),
|
||||
$this->Submissions()->sort('Created', 'DESC'),
|
||||
$config
|
||||
);
|
||||
$fields->addFieldToTab('Root.Submissions', $submissions);
|
||||
$fields->addFieldToTab(
|
||||
'Root.FormOptions',
|
||||
CheckboxField::create(
|
||||
'DisableSaveSubmissions',
|
||||
_t(__CLASS__.'.SAVESUBMISSIONS', 'Disable Saving Submissions to Server')
|
||||
)
|
||||
);
|
||||
});
|
||||
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
if ($this->EmailRecipients()->Count() == 0 && static::config()->recipients_warning_enabled) {
|
||||
$fields->addFieldToTab('Root.Main', LiteralField::create(
|
||||
'EmailRecipientsWarning',
|
||||
'<p class="message warning">' . _t(
|
||||
__CLASS__.'.NORECIPIENTS',
|
||||
'Warning: You have not configured any recipients. Form submissions may be missed.'
|
||||
)
|
||||
. '</p>'
|
||||
), 'Title');
|
||||
}
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Allow overriding the EmailRecipients on a {@link DataExtension}
|
||||
* so you can customise who receives an email.
|
||||
* Converts the RelationList to an ArrayList so that manipulation
|
||||
* of the original source data isn't possible.
|
||||
*
|
||||
* @return ArrayList
|
||||
*/
|
||||
public function FilteredEmailRecipients($data = null, $form = null)
|
||||
{
|
||||
$recipients = ArrayList::create($this->EmailRecipients()->toArray());
|
||||
|
||||
// Filter by rules
|
||||
$recipients = $recipients->filterByCallback(function ($recipient) use ($data, $form) {
|
||||
/** @var EmailRecipient $recipient */
|
||||
return $recipient->canSend($data, $form);
|
||||
});
|
||||
|
||||
$this->extend('updateFilteredEmailRecipients', $recipients, $data, $form);
|
||||
|
||||
return $recipients;
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom options for the form. You can extend the built in options by
|
||||
* using {@link updateFormOptions()}
|
||||
*
|
||||
* @return FieldList
|
||||
*/
|
||||
public function getFormOptions()
|
||||
{
|
||||
$submit = ($this->SubmitButtonText) ? $this->SubmitButtonText : _t(__CLASS__.'.SUBMITBUTTON', 'Submit');
|
||||
$clear = ($this->ClearButtonText) ? $this->ClearButtonText : _t(__CLASS__.'.CLEARBUTTON', 'Clear');
|
||||
|
||||
$options = FieldList::create(
|
||||
TextField::create('SubmitButtonText', _t(__CLASS__.'.TEXTONSUBMIT', 'Text on submit button:'), $submit),
|
||||
TextField::create('ClearButtonText', _t(__CLASS__.'.TEXTONCLEAR', 'Text on clear button:'), $clear),
|
||||
CheckboxField::create('ShowClearButton', _t(__CLASS__.'.SHOWCLEARFORM', 'Show Clear Form Button'), $this->ShowClearButton),
|
||||
CheckboxField::create('EnableLiveValidation', _t(__CLASS__.'.ENABLELIVEVALIDATION', 'Enable live validation')),
|
||||
CheckboxField::create('DisplayErrorMessagesAtTop', _t(__CLASS__.'.DISPLAYERRORMESSAGESATTOP', 'Display error messages above the form?')),
|
||||
CheckboxField::create('DisableCsrfSecurityToken', _t(__CLASS__.'.DISABLECSRFSECURITYTOKEN', 'Disable CSRF Token')),
|
||||
CheckboxField::create('DisableAuthenicatedFinishAction', _t(__CLASS__.'.DISABLEAUTHENICATEDFINISHACTION', 'Disable Authentication on finish action'))
|
||||
);
|
||||
|
||||
$this->extend('updateFormOptions', $options);
|
||||
|
||||
return $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the HTML id of the error container displayed above the form.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getErrorContainerID()
|
||||
{
|
||||
return $this->config()->get('error_container_id');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validate formfields
|
||||
*/
|
||||
public function getCMSValidator()
|
||||
{
|
||||
return UserFormValidator::create();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,500 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Model;
|
||||
|
||||
use PageController;
|
||||
use SilverStripe\Assets\File;
|
||||
use SilverStripe\Assets\Upload;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Control\Email\Email;
|
||||
use SilverStripe\Control\HTTP;
|
||||
use SilverStripe\Core\Manifest\Module;
|
||||
use SilverStripe\Core\Manifest\ModuleLoader;
|
||||
use SilverStripe\Forms\Form;
|
||||
use SilverStripe\i18n\i18n;
|
||||
use SilverStripe\ORM\ArrayList;
|
||||
use SilverStripe\ORM\FieldType\DBField;
|
||||
use SilverStripe\ORM\ValidationException;
|
||||
use SilverStripe\Security\Security;
|
||||
use SilverStripe\UserForms\Form\UserForm;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFileField;
|
||||
use SilverStripe\UserForms\Model\Submission\SubmittedForm;
|
||||
use SilverStripe\View\ArrayData;
|
||||
use SilverStripe\View\Requirements;
|
||||
use SilverStripe\View\SSViewer;
|
||||
|
||||
/**
|
||||
* Controller for the {@link UserDefinedForm} page type.
|
||||
*
|
||||
* @package userforms
|
||||
*/
|
||||
class UserDefinedFormController extends PageController
|
||||
{
|
||||
private static $finished_anchor = '#uff';
|
||||
|
||||
private static $allowed_actions = [
|
||||
'index',
|
||||
'ping',
|
||||
'Form',
|
||||
'finished'
|
||||
];
|
||||
|
||||
protected function init()
|
||||
{
|
||||
parent::init();
|
||||
|
||||
$page = $this->data();
|
||||
|
||||
$userforms = ModuleLoader::getModule('silverstripe/userforms');
|
||||
$admin = ModuleLoader::getModule('silverstripe/admin');
|
||||
// load the css
|
||||
if (!$page->config()->get('block_default_userforms_css')) {
|
||||
Requirements::css($userforms->getRelativeResourcePath('client/dist/styles/userforms.css'));
|
||||
}
|
||||
|
||||
// load the jquery
|
||||
if (!$page->config()->get('block_default_userforms_js')) {
|
||||
Requirements::javascript('//code.jquery.com/jquery-1.7.2.min.js');
|
||||
Requirements::javascript(
|
||||
$userforms->getRelativeResourcePath('client/thirdparty/jquery-validate/jquery.validate.min.js')
|
||||
);
|
||||
Requirements::add_i18n_javascript($userforms->getRelativeResourcePath('client/lang'));
|
||||
Requirements::javascript($userforms->getRelativeResourcePath('client/dist/js/userforms.js'));
|
||||
|
||||
$this->addUserFormsValidatei18n($userforms);
|
||||
|
||||
// Bind a confirmation message when navigating away from a partially completed form.
|
||||
if ($page::config()->get('enable_are_you_sure')) {
|
||||
Requirements::javascript(
|
||||
$userforms->getRelativeResourcePath('client/thirdparty/jquery.are-you-sure/jquery.are-you-sure.js')
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the necessary jQuery validate i18n translation files, either by locale or by langauge,
|
||||
* e.g. 'en_NZ' or 'en'. This adds "methods_abc.min.js" as well as "messages_abc.min.js" from the
|
||||
* jQuery validate thirdparty library.
|
||||
*
|
||||
* @param Module $module
|
||||
*/
|
||||
protected function addUserFormsValidatei18n(Module $module)
|
||||
{
|
||||
$candidates = [
|
||||
i18n::getData()->langFromLocale(i18n::config()->get('default_locale')),
|
||||
i18n::config()->get('default_locale'),
|
||||
i18n::getData()->langFromLocale(i18n::get_locale()),
|
||||
i18n::get_locale(),
|
||||
];
|
||||
|
||||
foreach ($candidates as $candidate) {
|
||||
foreach (['messages', 'methods'] as $candidateType) {
|
||||
$localisationCandidate = "client/thirdparty/jquery-validate/localization/{$candidateType}_{$candidate}.min.js";
|
||||
if ($module->hasResource($localisationCandidate)) {
|
||||
Requirements::javascript($module->getRelativeResourcePath($localisationCandidate));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Using $UserDefinedForm in the Content area of the page shows
|
||||
* where the form should be rendered into. If it does not exist
|
||||
* then default back to $Form.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
if ($this->Content && $form = $this->Form()) {
|
||||
$hasLocation = stristr($this->Content, '$UserDefinedForm');
|
||||
if ($hasLocation) {
|
||||
$content = preg_replace(
|
||||
'/(<p[^>]*>)?\\$UserDefinedForm(<\\/p>)?/i',
|
||||
$form->forTemplate(),
|
||||
$this->Content
|
||||
);
|
||||
return [
|
||||
'Content' => DBField::create_field('HTMLText', $content),
|
||||
'Form' => ''
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'Content' => DBField::create_field('HTMLText', $this->Content),
|
||||
'Form' => $this->Form()
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Keep the session alive for the user.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function ping()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the form for the page. Form can be modified by calling {@link updateForm()}
|
||||
* on a UserDefinedForm extension.
|
||||
*
|
||||
* @return Form
|
||||
*/
|
||||
public function Form()
|
||||
{
|
||||
$form = UserForm::create($this, 'Form_' . $this->ID);
|
||||
/** @skipUpgrade */
|
||||
$form->setFormAction(Controller::join_links($this->Link(), 'Form'));
|
||||
$this->generateConditionalJavascript();
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the javascript for the conditional field show / hiding logic.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function generateConditionalJavascript()
|
||||
{
|
||||
$default = '';
|
||||
$rules = '';
|
||||
|
||||
$watch = [];
|
||||
|
||||
if ($this->Fields()) {
|
||||
/** @var EditableFormField $field */
|
||||
foreach ($this->Fields() as $field) {
|
||||
if ($result = $field->formatDisplayRules()) {
|
||||
$watch[] = $result;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($watch) {
|
||||
$rules .= $this->buildWatchJS($watch);
|
||||
}
|
||||
|
||||
// Only add customScript if $default or $rules is defined
|
||||
if ($rules) {
|
||||
Requirements::customScript(<<<JS
|
||||
(function($) {
|
||||
$(document).ready(function() {
|
||||
{$rules}
|
||||
});
|
||||
})(jQuery);
|
||||
JS
|
||||
, 'UserFormsConditional');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Process the form that is submitted through the site
|
||||
*
|
||||
* {@see UserForm::validate()} for validation step prior to processing
|
||||
*
|
||||
* @param array $data
|
||||
* @param Form $form
|
||||
*
|
||||
* @return \SilverStripe\Control\HTTPResponse
|
||||
*/
|
||||
public function process($data, $form)
|
||||
{
|
||||
$submittedForm = SubmittedForm::create();
|
||||
$submittedForm->SubmittedByID = Security::getCurrentUser() ? Security::getCurrentUser()->ID : 0;
|
||||
$submittedForm->ParentID = $this->ID;
|
||||
|
||||
// if saving is not disabled save now to generate the ID
|
||||
if (!$this->DisableSaveSubmissions) {
|
||||
$submittedForm->write();
|
||||
}
|
||||
|
||||
$attachments = array();
|
||||
$submittedFields = ArrayList::create();
|
||||
|
||||
foreach ($this->Fields() as $field) {
|
||||
if (!$field->showInReports()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$submittedField = $field->getSubmittedFormField();
|
||||
$submittedField->ParentID = $submittedForm->ID;
|
||||
$submittedField->Name = $field->Name;
|
||||
$submittedField->Title = $field->getField('Title');
|
||||
|
||||
// save the value from the data
|
||||
if ($field->hasMethod('getValueFromData')) {
|
||||
$submittedField->Value = $field->getValueFromData($data);
|
||||
} else {
|
||||
if (isset($data[$field->Name])) {
|
||||
$submittedField->Value = $data[$field->Name];
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($data[$field->Name])) {
|
||||
if (in_array(EditableFileField::class, $field->getClassAncestry())) {
|
||||
if (!empty($_FILES[$field->Name]['name'])) {
|
||||
$foldername = $field->getFormField()->getFolderName();
|
||||
|
||||
// create the file from post data
|
||||
$upload = Upload::create();
|
||||
$file = File::create();
|
||||
$file->ShowInSearch = 0;
|
||||
try {
|
||||
$upload->loadIntoFile($_FILES[$field->Name], $file, $foldername);
|
||||
} catch (ValidationException $e) {
|
||||
$validationResult = $e->getResult();
|
||||
$form->addErrorMessage($field->Name, $validationResult->message(), 'bad');
|
||||
Controller::curr()->redirectBack();
|
||||
return;
|
||||
}
|
||||
|
||||
// write file to form field
|
||||
$submittedField->UploadedFileID = $file->ID;
|
||||
|
||||
// attach a file only if lower than 1MB
|
||||
if ($file->getAbsoluteSize() < 1024 * 1024 * 1) {
|
||||
$attachments[] = $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$submittedField->extend('onPopulationFromField', $field);
|
||||
|
||||
if (!$this->DisableSaveSubmissions) {
|
||||
$submittedField->write();
|
||||
}
|
||||
|
||||
$submittedFields->push($submittedField);
|
||||
}
|
||||
|
||||
$emailData = [
|
||||
'Sender' => Security::getCurrentUser(),
|
||||
'Fields' => $submittedFields
|
||||
];
|
||||
|
||||
$this->extend('updateEmailData', $emailData, $attachments);
|
||||
|
||||
// email users on submit.
|
||||
if ($recipients = $this->FilteredEmailRecipients($data, $form)) {
|
||||
foreach ($recipients as $recipient) {
|
||||
$email = Email::create()
|
||||
->setHTMLTemplate('email/SubmittedFormEmail.ss')
|
||||
->setPlainTemplate('email/SubmittedFormEmail.ss');
|
||||
|
||||
$mergeFields = $this->getMergeFieldsMap($emailData['Fields']);
|
||||
|
||||
if ($attachments) {
|
||||
foreach ($attachments as $file) {
|
||||
if (!$file->ID != 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$email->attachFile(
|
||||
$file->Filename,
|
||||
$file->Filename,
|
||||
HTTP::get_mime_type($file->Filename)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$parsedBody = SSViewer::execute_string($recipient->getEmailBodyContent(), $mergeFields);
|
||||
|
||||
if (!$recipient->SendPlain && $recipient->emailTemplateExists()) {
|
||||
$email->setHTMLTemplate($recipient->EmailTemplate);
|
||||
}
|
||||
|
||||
$email->setData($recipient);
|
||||
foreach ($emailData as $key => $value) {
|
||||
$email->addData($key, $value);
|
||||
}
|
||||
|
||||
$email->setFrom($recipient->EmailFrom);
|
||||
$email->setBody($parsedBody);
|
||||
$email->setTo($recipient->EmailAddress);
|
||||
$email->setSubject($recipient->EmailSubject);
|
||||
|
||||
if ($recipient->EmailReplyTo) {
|
||||
$email->setReplyTo($recipient->EmailReplyTo);
|
||||
}
|
||||
|
||||
// check to see if they are a dynamic reply to. eg based on a email field a user selected
|
||||
if ($recipient->SendEmailFromField()) {
|
||||
$submittedFormField = $submittedFields->find('Name', $recipient->SendEmailFromField()->Name);
|
||||
|
||||
if ($submittedFormField && is_string($submittedFormField->Value)) {
|
||||
$email->setReplyTo($submittedFormField->Value);
|
||||
}
|
||||
}
|
||||
// check to see if they are a dynamic reciever eg based on a dropdown field a user selected
|
||||
if ($recipient->SendEmailToField()) {
|
||||
$submittedFormField = $submittedFields->find('Name', $recipient->SendEmailToField()->Name);
|
||||
|
||||
if ($submittedFormField && is_string($submittedFormField->Value)) {
|
||||
$email->setTo($submittedFormField->Value);
|
||||
}
|
||||
}
|
||||
|
||||
// check to see if there is a dynamic subject
|
||||
if ($recipient->SendEmailSubjectField()) {
|
||||
$submittedFormField = $submittedFields->find('Name', $recipient->SendEmailSubjectField()->Name);
|
||||
|
||||
if ($submittedFormField && trim($submittedFormField->Value)) {
|
||||
$email->setSubject($submittedFormField->Value);
|
||||
}
|
||||
}
|
||||
|
||||
$this->extend('updateEmail', $email, $recipient, $emailData);
|
||||
|
||||
if ($recipient->SendPlain) {
|
||||
$body = strip_tags($recipient->getEmailBodyContent()) . "\n";
|
||||
if (isset($emailData['Fields']) && !$recipient->HideFormData) {
|
||||
foreach ($emailData['Fields'] as $Field) {
|
||||
$body .= $Field->Title . ': ' . $Field->Value . " \n";
|
||||
}
|
||||
}
|
||||
|
||||
$email->setBody($body);
|
||||
$email->sendPlain();
|
||||
} else {
|
||||
$email->send();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$submittedForm->extend('updateAfterProcess');
|
||||
|
||||
$session = $this->getRequest()->getSession();
|
||||
$session->clear("FormInfo.{$form->FormName()}.errors");
|
||||
$session->clear("FormInfo.{$form->FormName()}.data");
|
||||
|
||||
$referrer = (isset($data['Referrer'])) ? '?referrer=' . urlencode($data['Referrer']) : "";
|
||||
|
||||
// set a session variable from the security ID to stop people accessing
|
||||
// the finished method directly.
|
||||
if (!$this->DisableAuthenicatedFinishAction) {
|
||||
if (isset($data['SecurityID'])) {
|
||||
$session->set('FormProcessed', $data['SecurityID']);
|
||||
} else {
|
||||
// if the form has had tokens disabled we still need to set FormProcessed
|
||||
// to allow us to get through the finshed method
|
||||
if (!$this->Form()->getSecurityToken()->isEnabled()) {
|
||||
$randNum = rand(1, 1000);
|
||||
$randHash = md5($randNum);
|
||||
$session->set('FormProcessed', $randHash);
|
||||
$session->set('FormProcessedNum', $randNum);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$this->DisableSaveSubmissions) {
|
||||
$session->set('userformssubmission'. $this->ID, $submittedForm->ID);
|
||||
}
|
||||
|
||||
return $this->redirect($this->Link('finished') . $referrer . $this->config()->get('finished_anchor'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows the use of field values in email body.
|
||||
*
|
||||
* @param ArrayList $fields
|
||||
* @return ArrayData
|
||||
*/
|
||||
protected function getMergeFieldsMap($fields = [])
|
||||
{
|
||||
$data = ArrayData::create([]);
|
||||
|
||||
foreach ($fields as $field) {
|
||||
$data->setField($field->Name, DBField::create_field('Text', $field->Value));
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* This action handles rendering the "finished" message, which is
|
||||
* customizable by editing the ReceivedFormSubmission template.
|
||||
*
|
||||
* @return ViewableData
|
||||
*/
|
||||
public function finished()
|
||||
{
|
||||
$submission = $this->getRequest()->getSession()->get('userformssubmission'. $this->ID);
|
||||
|
||||
if ($submission) {
|
||||
$submission = SubmittedForm::get()->byId($submission);
|
||||
}
|
||||
|
||||
$referrer = isset($_GET['referrer']) ? urldecode($_GET['referrer']) : null;
|
||||
|
||||
if (!$this->DisableAuthenicatedFinishAction) {
|
||||
$formProcessed = $this->getRequest()->getSession()->get('FormProcessed');
|
||||
|
||||
if (!isset($formProcessed)) {
|
||||
return $this->redirect($this->Link() . $referrer);
|
||||
} else {
|
||||
$securityID = $this->getRequest()->getSession()->get('SecurityID');
|
||||
// make sure the session matches the SecurityID and is not left over from another form
|
||||
if ($formProcessed != $securityID) {
|
||||
// they may have disabled tokens on the form
|
||||
$securityID = md5($this->getRequest()->getSession()->get('FormProcessedNum'));
|
||||
if ($formProcessed != $securityID) {
|
||||
return $this->redirect($this->Link() . $referrer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->getRequest()->getSession()->clear('FormProcessed');
|
||||
}
|
||||
|
||||
$data = [
|
||||
'Submission' => $submission,
|
||||
'Link' => $referrer
|
||||
];
|
||||
|
||||
$this->extend('updateReceivedFormSubmissionData', $data);
|
||||
|
||||
return $this->customise([
|
||||
'Content' => $this->customise($data)->renderWith(__CLASS__ . '_ReceivedFormSubmission'),
|
||||
'Form' => '',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Outputs the required JS from the $watch input
|
||||
*
|
||||
* @param array $watch
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function buildWatchJS($watch)
|
||||
{
|
||||
$result = '';
|
||||
foreach ($watch as $key => $rule) {
|
||||
$events = implode(' ', $rule['events']);
|
||||
$selectors = implode(', ', $rule['selectors']);
|
||||
$conjunction = $rule['conjunction'];
|
||||
$operations = implode(" {$conjunction} ", $rule['operations']);
|
||||
$target = $rule['targetFieldID'];
|
||||
|
||||
$result .= <<<EOS
|
||||
\n
|
||||
$('.userform').on('{$events}',
|
||||
"{$selectors}",
|
||||
function (){
|
||||
if ({$operations}) {
|
||||
$('{$target}').{$rule['view']};
|
||||
} else {
|
||||
$('{$target}').{$rule['opposite']};
|
||||
}
|
||||
});
|
||||
$("{$target}").find('.hide').removeClass('hide');
|
||||
EOS;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
|
@ -1,16 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Modifier;
|
||||
|
||||
use SilverStripe\Forms\Form;
|
||||
use SilverStripe\Forms\SegmentFieldModifier\AbstractSegmentFieldModifier;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
class DisambiguationSegmentFieldModifier extends AbstractSegmentFieldModifier
|
||||
{
|
||||
/**
|
||||
* @inheritdoc
|
||||
*
|
||||
* @param string $value
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPreview($value)
|
||||
{
|
||||
if ($this->form instanceof Form && $record = $this->form->getRecord()) {
|
||||
|
@ -18,7 +15,7 @@ class DisambiguationSegmentFieldModifier extends AbstractSegmentFieldModifier
|
|||
|
||||
$try = $value;
|
||||
|
||||
$sibling = EditableformField::get()
|
||||
$sibling = EditableFormField::get()
|
||||
->filter('ParentID', $parent->ID)
|
||||
->filter('Name', $try)
|
||||
->where('"ID" != ' . $record->ID)
|
||||
|
@ -29,7 +26,7 @@ class DisambiguationSegmentFieldModifier extends AbstractSegmentFieldModifier
|
|||
while ($sibling !== null) {
|
||||
$try = $value . '_' . $counter++;
|
||||
|
||||
$sibling = EditableformField::get()
|
||||
$sibling = EditableFormField::get()
|
||||
->filter('ParentID', $parent->ID)
|
||||
->filter('Name', $try)
|
||||
->first();
|
||||
|
@ -43,13 +40,6 @@ class DisambiguationSegmentFieldModifier extends AbstractSegmentFieldModifier
|
|||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*
|
||||
* @param string $value
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getSuggestion($value)
|
||||
{
|
||||
return $this->getPreview($value);
|
|
@ -1,28 +1,16 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Modifier;
|
||||
|
||||
use SilverStripe\Forms\SegmentFieldModifier\SlugSegmentFieldModifier;
|
||||
|
||||
class UnderscoreSegmentFieldModifier extends SlugSegmentFieldModifier
|
||||
{
|
||||
/**
|
||||
* @inheritdoc
|
||||
*
|
||||
* @param string $value
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPreview($value)
|
||||
{
|
||||
return str_replace('-', '_', parent::getPreview($value));
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*
|
||||
* @param string $value
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getSuggestion($value)
|
||||
{
|
||||
return str_replace('-', '_', parent::getSuggestion($value));
|
|
@ -1,5 +1,12 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Task;
|
||||
|
||||
use SilverStripe\Dev\MigrationTask;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\ORM\DB;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
/**
|
||||
* UserForms Column Clean Task
|
||||
*
|
||||
|
@ -10,24 +17,24 @@
|
|||
|
||||
class UserFormsColumnCleanTask extends MigrationTask
|
||||
{
|
||||
protected $title = 'UserForms EditableFormField Column Clean task';
|
||||
|
||||
protected $title = "UserForms EditableFormField Column Clean task";
|
||||
protected $description = 'Removes unused columns from EditableFormField for MySQL databases;';
|
||||
|
||||
protected $description = "Removes unused columns from EditableFormField for MySQL databases;";
|
||||
protected $tables = [EditableFormField::class];
|
||||
|
||||
protected $tables = array('EditableFormField');
|
||||
|
||||
protected $keepColumns = array('ID');
|
||||
protected $keepColumns = ['ID'];
|
||||
|
||||
/**
|
||||
* Publish the existing forms.
|
||||
*
|
||||
*/
|
||||
public function run($request)
|
||||
{
|
||||
/** @var \SilverStripe\ORM\DataObjectSchema $schema */
|
||||
$schema = DataObject::getSchema();
|
||||
|
||||
foreach ($this->tables as $db) {
|
||||
$obj = new $db();
|
||||
$columns = $obj->database_fields($db);
|
||||
$columns = $schema->databaseFields($db);
|
||||
$query = "SHOW COLUMNS FROM $db";
|
||||
$liveColumns = DB::query($query)->column();
|
||||
$backedUp = 0;
|
|
@ -1,19 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* {@link TreeDropdownField} subclass for handling loading folders through the
|
||||
* nested {@link FormField} instances of the {@link FieldEditor}
|
||||
*
|
||||
* @deprecated since version 4.0
|
||||
* @package userforms
|
||||
*/
|
||||
class UserformsTreeDropdownField extends TreeDropdownField
|
||||
{
|
||||
|
||||
public function __construct($name, $title = null, $sourceObject = 'Group', $keyField = 'ID', $labelField = 'TreeTitle', $showSearch = true)
|
||||
{
|
||||
parent::__construct($name, $title, $sourceObject, $keyField, $labelField, $showSearch);
|
||||
|
||||
Deprecation::notice('4.0', __CLASS__ . " is deprecated");
|
||||
}
|
||||
}
|
|
@ -1,184 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @package userforms
|
||||
*/
|
||||
class UserForm extends Form
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Controller $controller
|
||||
* @param string $name
|
||||
*/
|
||||
public function __construct(Controller $controller, $name = 'Form')
|
||||
{
|
||||
$this->controller = $controller;
|
||||
$this->setRedirectToFormOnValidationError(true);
|
||||
|
||||
parent::__construct(
|
||||
$controller,
|
||||
$name,
|
||||
new FieldList(),
|
||||
new FieldList()
|
||||
);
|
||||
|
||||
$this->setFields($fields = $this->getFormFields());
|
||||
$fields->setForm($this);
|
||||
$this->setActions($actions = $this->getFormActions());
|
||||
$actions->setForm($this);
|
||||
$this->setValidator($this->getRequiredFields());
|
||||
|
||||
// This needs to be re-evaluated since fields have been assigned
|
||||
$this->setupFormErrors();
|
||||
|
||||
// Number each page
|
||||
$stepNumber = 1;
|
||||
foreach($this->getSteps() as $step) {
|
||||
$step->setStepNumber($stepNumber++);
|
||||
}
|
||||
|
||||
if($controller->DisableCsrfSecurityToken) {
|
||||
$this->disableSecurityToken();
|
||||
}
|
||||
|
||||
$data = Session::get("FormInfo.{$this->FormName()}.data");
|
||||
|
||||
if(is_array($data)) {
|
||||
$this->loadDataFrom($data);
|
||||
}
|
||||
|
||||
$this->extend('updateForm');
|
||||
}
|
||||
|
||||
public function setupFormErrors()
|
||||
{
|
||||
// Suppress setupFormErrors if fields haven't been bootstrapped
|
||||
if ($this->fields && $this->fields->exists()) {
|
||||
return parent::setupFormErrors();
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used for partial caching in the template.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLastEdited()
|
||||
{
|
||||
return $this->controller->LastEdited;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function getDisplayErrorMessagesAtTop()
|
||||
{
|
||||
return (bool)$this->controller->DisplayErrorMessagesAtTop;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the fieldlist, filtered to only contain steps
|
||||
*
|
||||
* @return ArrayList
|
||||
*/
|
||||
public function getSteps()
|
||||
{
|
||||
return $this->Fields()->filterByCallback(function($field) {
|
||||
return $field instanceof UserFormsStepField;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the form fields for the form on this page. Can modify this FieldSet
|
||||
* by using {@link updateFormFields()} on an {@link Extension} subclass which
|
||||
* is applied to this controller.
|
||||
*
|
||||
* This will be a list of top level composite steps
|
||||
*
|
||||
* @return FieldList
|
||||
*/
|
||||
public function getFormFields()
|
||||
{
|
||||
$fields = new UserFormsFieldList();
|
||||
$target = $fields;
|
||||
foreach ($this->controller->Fields() as $field) {
|
||||
$target = $target->processNext($field);
|
||||
}
|
||||
$fields->clearEmptySteps();
|
||||
$this->extend('updateFormFields', $fields);
|
||||
$fields->setForm($this);
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the form actions for the UserDefinedForm. You
|
||||
* can manipulate these by using {@link updateFormActions()} on
|
||||
* a decorator.
|
||||
*
|
||||
* @todo Make form actions editable via their own field editor.
|
||||
*
|
||||
* @return FieldList
|
||||
*/
|
||||
public function getFormActions()
|
||||
{
|
||||
$submitText = ($this->controller->SubmitButtonText) ? $this->controller->SubmitButtonText : _t('UserDefinedForm.SUBMITBUTTON', 'Submit');
|
||||
$clearText = ($this->controller->ClearButtonText) ? $this->controller->ClearButtonText : _t('UserDefinedForm.CLEARBUTTON', 'Clear');
|
||||
|
||||
$actions = new FieldList(
|
||||
new FormAction("process", $submitText)
|
||||
);
|
||||
|
||||
if($this->controller->ShowClearButton) {
|
||||
$actions->push(new ResetFormAction("clearForm", $clearText));
|
||||
}
|
||||
|
||||
$this->extend('updateFormActions', $actions);
|
||||
$actions->setForm($this);
|
||||
return $actions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the required form fields for this form.
|
||||
*
|
||||
* @return RequiredFields
|
||||
*/
|
||||
public function getRequiredFields()
|
||||
{
|
||||
// Generate required field validator
|
||||
$requiredNames = $this
|
||||
->getController()
|
||||
->Fields()
|
||||
->filter('Required', true)
|
||||
->column('Name');
|
||||
$required = new RequiredFields($requiredNames);
|
||||
$this->extend('updateRequiredFields', $required);
|
||||
$required->setForm($this);
|
||||
return $required;
|
||||
}
|
||||
|
||||
/**
|
||||
* Override some we can add UserForm specific attributes to the form.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getAttributes()
|
||||
{
|
||||
$attrs = parent::getAttributes();
|
||||
|
||||
$attrs['class'] = $attrs['class'] . ' userform';
|
||||
$attrs['data-livevalidation'] = (bool)$this->controller->EnableLiveValidation;
|
||||
$attrs['data-toperrors'] = (bool)$this->controller->DisplayErrorMessagesAtTop;
|
||||
|
||||
return $attrs;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getButtonText() {
|
||||
return $this->config()->get('button_text');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,803 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @package userforms
|
||||
*/
|
||||
|
||||
class UserDefinedForm extends Page
|
||||
{
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $icon = 'userforms/images/sitetree_icon.png';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $description = 'Adds a customizable form.';
|
||||
|
||||
/**
|
||||
* @var string Required Identifier
|
||||
*/
|
||||
private static $required_identifier = null;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $email_template_directory = 'userforms/templates/email/';
|
||||
|
||||
/**
|
||||
* Should this module automatically upgrade on dev/build?
|
||||
*
|
||||
* @config
|
||||
* @var bool
|
||||
*/
|
||||
private static $upgrade_on_build = true;
|
||||
|
||||
/**
|
||||
* Set this to true to disable automatic inclusion of CSS files
|
||||
* @config
|
||||
* @var bool
|
||||
*/
|
||||
private static $block_default_userforms_css = false;
|
||||
|
||||
/**
|
||||
* Set this to true to disable automatic inclusion of JavaScript files
|
||||
* @config
|
||||
* @var bool
|
||||
*/
|
||||
private static $block_default_userforms_js = false;
|
||||
|
||||
/**
|
||||
* Built in extensions required by this page
|
||||
* @config
|
||||
* @var array
|
||||
*/
|
||||
private static $extensions = array(
|
||||
'UserFormFieldEditorExtension'
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array Fields on the user defined form page.
|
||||
*/
|
||||
private static $db = array(
|
||||
"SubmitButtonText" => "Varchar",
|
||||
"ClearButtonText" => "Varchar",
|
||||
"OnCompleteMessage" => "HTMLText",
|
||||
"ShowClearButton" => "Boolean",
|
||||
'DisableSaveSubmissions' => 'Boolean',
|
||||
'EnableLiveValidation' => 'Boolean',
|
||||
'DisplayErrorMessagesAtTop' => 'Boolean',
|
||||
'DisableAuthenicatedFinishAction' => 'Boolean',
|
||||
'DisableCsrfSecurityToken' => 'Boolean'
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array Default values of variables when this page is created
|
||||
*/
|
||||
private static $defaults = array(
|
||||
'Content' => '$UserDefinedForm',
|
||||
'DisableSaveSubmissions' => 0,
|
||||
'OnCompleteMessage' => '<p>Thanks, we\'ve received your submission.</p>'
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private static $has_many = array(
|
||||
"Submissions" => "SubmittedForm",
|
||||
"EmailRecipients" => "UserDefinedForm_EmailRecipient"
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array
|
||||
* @config
|
||||
*/
|
||||
private static $casting = array(
|
||||
'ErrorContainerID' => 'Text'
|
||||
);
|
||||
|
||||
/**
|
||||
* Error container selector which matches the element for grouped messages
|
||||
*
|
||||
* @var string
|
||||
* @config
|
||||
*/
|
||||
private static $error_container_id = 'error-container';
|
||||
|
||||
/**
|
||||
* The configuration used to determine whether a confirmation message is to
|
||||
* appear when navigating away from a partially completed form.
|
||||
*
|
||||
* @var boolean
|
||||
* @config
|
||||
*/
|
||||
private static $enable_are_you_sure = true;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
* @config
|
||||
*/
|
||||
private static $recipients_warning_enabled = false;
|
||||
|
||||
/**
|
||||
* Temporary storage of field ids when the form is duplicated.
|
||||
* Example layout: array('EditableCheckbox3' => 'EditableCheckbox14')
|
||||
* @var array
|
||||
*/
|
||||
protected $fieldsFromTo = array();
|
||||
|
||||
/**
|
||||
* @return FieldList
|
||||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
Requirements::css(USERFORMS_DIR . '/css/UserForm_cms.css');
|
||||
|
||||
$self = $this;
|
||||
|
||||
$this->beforeUpdateCMSFields(function ($fields) use ($self) {
|
||||
// define tabs
|
||||
$fields->findOrMakeTab('Root.FormOptions', _t('UserDefinedForm.CONFIGURATION', 'Configuration'));
|
||||
$fields->findOrMakeTab('Root.Recipients', _t('UserDefinedForm.RECIPIENTS', 'Recipients'));
|
||||
$fields->findOrMakeTab('Root.Submissions', _t('UserDefinedForm.SUBMISSIONS', 'Submissions'));
|
||||
|
||||
// text to show on complete
|
||||
$onCompleteFieldSet = new CompositeField(
|
||||
$label = new LabelField('OnCompleteMessageLabel', _t('UserDefinedForm.ONCOMPLETELABEL', 'Show on completion')),
|
||||
$editor = new HtmlEditorField('OnCompleteMessage', '', _t('UserDefinedForm.ONCOMPLETEMESSAGE', $self->OnCompleteMessage))
|
||||
);
|
||||
|
||||
$onCompleteFieldSet->addExtraClass('field');
|
||||
|
||||
$editor->setRows(3);
|
||||
$label->addExtraClass('left');
|
||||
|
||||
// Define config for email recipients
|
||||
$emailRecipientsConfig = GridFieldConfig_RecordEditor::create(10);
|
||||
$emailRecipientsConfig->getComponentByType('GridFieldAddNewButton')
|
||||
->setButtonName(
|
||||
_t('UserDefinedForm.ADDEMAILRECIPIENT', 'Add Email Recipient')
|
||||
);
|
||||
|
||||
// who do we email on submission
|
||||
$emailRecipients = new GridField(
|
||||
'EmailRecipients',
|
||||
_t('UserDefinedForm.EMAILRECIPIENTS', 'Email Recipients'),
|
||||
$self->EmailRecipients(),
|
||||
$emailRecipientsConfig
|
||||
);
|
||||
$emailRecipients
|
||||
->getConfig()
|
||||
->getComponentByType('GridFieldDetailForm')
|
||||
->setItemRequestClass('UserFormRecipientItemRequest');
|
||||
|
||||
$fields->addFieldsToTab('Root.FormOptions', $onCompleteFieldSet);
|
||||
$fields->addFieldToTab('Root.Recipients', $emailRecipients);
|
||||
$fields->addFieldsToTab('Root.FormOptions', $self->getFormOptions());
|
||||
|
||||
|
||||
// view the submissions
|
||||
// make sure a numeric not a empty string is checked against this int column for SQL server
|
||||
$parentID = (!empty($self->ID)) ? (int) $self->ID : 0;
|
||||
|
||||
// get a list of all field names and values used for print and export CSV views of the GridField below.
|
||||
$columnSQL = <<<SQL
|
||||
SELECT "SubmittedFormField"."Name" as "Name", COALESCE("EditableFormField"."Title", "SubmittedFormField"."Title") as "Title", COALESCE("EditableFormField"."Sort", 999) AS "Sort"
|
||||
FROM "SubmittedFormField"
|
||||
LEFT JOIN "SubmittedForm" ON "SubmittedForm"."ID" = "SubmittedFormField"."ParentID"
|
||||
LEFT JOIN "EditableFormField" ON "EditableFormField"."Name" = "SubmittedFormField"."Name" AND "EditableFormField"."ParentID" = '$parentID'
|
||||
WHERE "SubmittedForm"."ParentID" = '$parentID'
|
||||
ORDER BY "Sort", "Title"
|
||||
SQL;
|
||||
// Sanitise periods in title
|
||||
$columns = array();
|
||||
foreach (DB::query($columnSQL)->map() as $name => $title) {
|
||||
$columns[$name] = trim(strtr($title, '.', ' '));
|
||||
}
|
||||
|
||||
$config = new GridFieldConfig();
|
||||
$config->addComponent(new GridFieldToolbarHeader());
|
||||
$config->addComponent($sort = new GridFieldSortableHeader());
|
||||
$config->addComponent($filter = new UserFormsGridFieldFilterHeader());
|
||||
$config->addComponent(new GridFieldDataColumns());
|
||||
$config->addComponent(new GridFieldEditButton());
|
||||
$config->addComponent(new GridFieldDeleteAction());
|
||||
$config->addComponent(new GridFieldPageCount('toolbar-header-right'));
|
||||
$config->addComponent($pagination = new GridFieldPaginator(25));
|
||||
$config->addComponent(new GridFieldDetailForm());
|
||||
$config->addComponent(new GridFieldButtonRow('after'));
|
||||
$config->addComponent($export = new GridFieldExportButton('buttons-after-left'));
|
||||
$config->addComponent($print = new GridFieldPrintButton('buttons-after-left'));
|
||||
|
||||
// show user form items in the summary tab
|
||||
$summaryarray = array(
|
||||
'ID' => 'ID',
|
||||
'Created' => 'Created',
|
||||
'LastEdited' => 'Last Edited'
|
||||
);
|
||||
foreach(EditableFormField::get()->filter(array("ParentID" => $parentID)) as $eff) {
|
||||
if($eff->ShowInSummary) {
|
||||
$summaryarray[$eff->Name] = $eff->Title ?: $eff->Name;
|
||||
}
|
||||
}
|
||||
|
||||
$config->getComponentByType('GridFieldDataColumns')->setDisplayFields($summaryarray);
|
||||
|
||||
/**
|
||||
* Support for {@link https://github.com/colymba/GridFieldBulkEditingTools}
|
||||
*/
|
||||
if (class_exists('GridFieldBulkManager')) {
|
||||
$config->addComponent(new GridFieldBulkManager());
|
||||
}
|
||||
|
||||
$sort->setThrowExceptionOnBadDataType(false);
|
||||
$filter->setThrowExceptionOnBadDataType(false);
|
||||
$pagination->setThrowExceptionOnBadDataType(false);
|
||||
|
||||
// attach every column to the print view form
|
||||
$columns['Created'] = 'Created';
|
||||
$columns['SubmittedBy.Email'] = 'Submitter';
|
||||
$filter->setColumns($columns);
|
||||
|
||||
// print configuration
|
||||
|
||||
$print->setPrintHasHeader(true);
|
||||
$print->setPrintColumns($columns);
|
||||
|
||||
// export configuration
|
||||
$export->setCsvHasHeader(true);
|
||||
$export->setExportColumns($columns);
|
||||
|
||||
$submissions = GridField::create(
|
||||
'Submissions',
|
||||
_t('UserDefinedForm.SUBMISSIONS', 'Submissions'),
|
||||
$self->Submissions()->sort('Created', 'DESC'),
|
||||
$config
|
||||
);
|
||||
$fields->addFieldToTab('Root.Submissions', $submissions);
|
||||
$fields->addFieldToTab(
|
||||
'Root.FormOptions',
|
||||
CheckboxField::create(
|
||||
'DisableSaveSubmissions',
|
||||
_t('UserDefinedForm.SAVESUBMISSIONS', 'Disable Saving Submissions to Server')
|
||||
)
|
||||
);
|
||||
});
|
||||
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
if ($this->EmailRecipients()->Count() == 0 && static::config()->recipients_warning_enabled) {
|
||||
$fields->addFieldToTab("Root.Main", new LiteralField("EmailRecipientsWarning",
|
||||
"<p class=\"message warning\">" . _t("UserDefinedForm.NORECIPIENTS",
|
||||
"Warning: You have not configured any recipients. Form submissions may be missed.")
|
||||
. "</p>"), "Title");
|
||||
}
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Allow overriding the EmailRecipients on a {@link DataExtension}
|
||||
* so you can customise who receives an email.
|
||||
* Converts the RelationList to an ArrayList so that manipulation
|
||||
* of the original source data isn't possible.
|
||||
*
|
||||
* @return ArrayList
|
||||
*/
|
||||
public function FilteredEmailRecipients($data = null, $form = null)
|
||||
{
|
||||
$recipients = new ArrayList($this->EmailRecipients()->toArray());
|
||||
|
||||
// Filter by rules
|
||||
$recipients = $recipients->filterByCallback(function ($recipient) use ($data, $form) {
|
||||
/** @var UserDefinedForm_EmailRecipient $recipient */
|
||||
return $recipient->canSend($data, $form);
|
||||
});
|
||||
|
||||
$this->extend('updateFilteredEmailRecipients', $recipients, $data, $form);
|
||||
|
||||
return $recipients;
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom options for the form. You can extend the built in options by
|
||||
* using {@link updateFormOptions()}
|
||||
*
|
||||
* @return FieldList
|
||||
*/
|
||||
public function getFormOptions()
|
||||
{
|
||||
$submit = ($this->SubmitButtonText) ? $this->SubmitButtonText : _t('UserDefinedForm.SUBMITBUTTON', 'Submit');
|
||||
$clear = ($this->ClearButtonText) ? $this->ClearButtonText : _t('UserDefinedForm.CLEARBUTTON', 'Clear');
|
||||
|
||||
$options = new FieldList(
|
||||
new TextField("SubmitButtonText", _t('UserDefinedForm.TEXTONSUBMIT', 'Text on submit button:'), $submit),
|
||||
new TextField("ClearButtonText", _t('UserDefinedForm.TEXTONCLEAR', 'Text on clear button:'), $clear),
|
||||
new CheckboxField("ShowClearButton", _t('UserDefinedForm.SHOWCLEARFORM', 'Show Clear Form Button'), $this->ShowClearButton),
|
||||
new CheckboxField("EnableLiveValidation", _t('UserDefinedForm.ENABLELIVEVALIDATION', 'Enable live validation')),
|
||||
new CheckboxField("DisplayErrorMessagesAtTop", _t('UserDefinedForm.DISPLAYERRORMESSAGESATTOP', 'Display error messages above the form?')),
|
||||
new CheckboxField('DisableCsrfSecurityToken', _t('UserDefinedForm.DISABLECSRFSECURITYTOKEN', 'Disable CSRF Token')),
|
||||
new CheckboxField('DisableAuthenicatedFinishAction', _t('UserDefinedForm.DISABLEAUTHENICATEDFINISHACTION', 'Disable Authentication on finish action'))
|
||||
);
|
||||
|
||||
$this->extend('updateFormOptions', $options);
|
||||
|
||||
return $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the HTML id of the error container displayed above the form.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getErrorContainerID()
|
||||
{
|
||||
return $this->config()->error_container_id;
|
||||
}
|
||||
|
||||
public function requireDefaultRecords()
|
||||
{
|
||||
parent::requireDefaultRecords();
|
||||
|
||||
if (!$this->config()->upgrade_on_build) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Perform migrations
|
||||
Injector::inst()
|
||||
->create('UserFormsUpgradeService')
|
||||
->setQuiet(true)
|
||||
->run();
|
||||
|
||||
DB::alteration_message('Migrated userforms', 'changed');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validate formfields
|
||||
*/
|
||||
public function getCMSValidator()
|
||||
{
|
||||
return new UserFormValidator();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Controller for the {@link UserDefinedForm} page type.
|
||||
*
|
||||
* @package userforms
|
||||
*/
|
||||
|
||||
class UserDefinedForm_Controller extends Page_Controller
|
||||
{
|
||||
|
||||
private static $finished_anchor = '#uff';
|
||||
|
||||
private static $allowed_actions = array(
|
||||
'index',
|
||||
'ping',
|
||||
'Form',
|
||||
'finished'
|
||||
);
|
||||
|
||||
public function init()
|
||||
{
|
||||
parent::init();
|
||||
|
||||
$page = $this->data();
|
||||
|
||||
// load the css
|
||||
if (!$page->config()->block_default_userforms_css) {
|
||||
Requirements::css(USERFORMS_DIR . '/css/UserForm.css');
|
||||
}
|
||||
|
||||
// load the jquery
|
||||
if (!$page->config()->block_default_userforms_js) {
|
||||
$lang = i18n::get_lang_from_locale(i18n::get_locale());
|
||||
Requirements::javascript(FRAMEWORK_DIR .'/thirdparty/jquery/jquery.js');
|
||||
Requirements::javascript(USERFORMS_DIR . '/thirdparty/jquery-validate/jquery.validate.min.js');
|
||||
Requirements::add_i18n_javascript(USERFORMS_DIR . '/javascript/lang');
|
||||
Requirements::javascript(USERFORMS_DIR . '/javascript/UserForm.js');
|
||||
|
||||
Requirements::javascript(
|
||||
USERFORMS_DIR . "/thirdparty/jquery-validate/localization/messages_{$lang}.min.js"
|
||||
);
|
||||
Requirements::javascript(
|
||||
USERFORMS_DIR . "/thirdparty/jquery-validate/localization/methods_{$lang}.min.js"
|
||||
);
|
||||
|
||||
// Bind a confirmation message when navigating away from a partially completed form.
|
||||
if ($page::config()->enable_are_you_sure) {
|
||||
Requirements::javascript(USERFORMS_DIR . '/thirdparty/jquery.are-you-sure/jquery.are-you-sure.js');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Using $UserDefinedForm in the Content area of the page shows
|
||||
* where the form should be rendered into. If it does not exist
|
||||
* then default back to $Form.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
if ($this->Content && $form = $this->Form()) {
|
||||
$hasLocation = stristr($this->Content, '$UserDefinedForm');
|
||||
if ($hasLocation) {
|
||||
$content = preg_replace('/(<p[^>]*>)?\\$UserDefinedForm(<\\/p>)?/i', $form->forTemplate(), $this->Content);
|
||||
return array(
|
||||
'Content' => DBField::create_field('HTMLText', $content),
|
||||
'Form' => ""
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return array(
|
||||
'Content' => DBField::create_field('HTMLText', $this->Content),
|
||||
'Form' => $this->Form()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Keep the session alive for the user.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function ping()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the form for the page. Form can be modified by calling {@link updateForm()}
|
||||
* on a UserDefinedForm extension.
|
||||
*
|
||||
* @return Forms
|
||||
*/
|
||||
public function Form()
|
||||
{
|
||||
$form = UserForm::create($this, 'Form_' . $this->ID);
|
||||
$form->setFormAction(Controller::join_links($this->Link(), 'Form'));
|
||||
$this->generateConditionalJavascript();
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate the javascript for the conditional field show / hiding logic.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function generateConditionalJavascript()
|
||||
{
|
||||
$default = "";
|
||||
$rules = "";
|
||||
|
||||
$watch = array();
|
||||
|
||||
if ($this->Fields()) {
|
||||
/** @var EditableFormField $field */
|
||||
foreach ($this->Fields() as $field) {
|
||||
if ($result = $field->formatDisplayRules()) {
|
||||
$watch[] = $result;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($watch) {
|
||||
$rules .= $this->buildWatchJS($watch);
|
||||
}
|
||||
|
||||
// Only add customScript if $default or $rules is defined
|
||||
if ($rules) {
|
||||
Requirements::customScript(<<<JS
|
||||
(function($) {
|
||||
$(document).ready(function() {
|
||||
{$rules}
|
||||
});
|
||||
})(jQuery);
|
||||
JS
|
||||
, 'UserFormsConditional');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Process the form that is submitted through the site
|
||||
*
|
||||
* {@see UserForm::validate()} for validation step prior to processing
|
||||
*
|
||||
* @param array $data
|
||||
* @param Form $form
|
||||
*
|
||||
* @return Redirection
|
||||
*/
|
||||
public function process($data, $form)
|
||||
{
|
||||
$submittedForm = Object::create('SubmittedForm');
|
||||
$submittedForm->SubmittedByID = ($id = Member::currentUserID()) ? $id : 0;
|
||||
$submittedForm->ParentID = $this->ID;
|
||||
|
||||
// if saving is not disabled save now to generate the ID
|
||||
if (!$this->DisableSaveSubmissions) {
|
||||
$submittedForm->write();
|
||||
}
|
||||
|
||||
$attachments = array();
|
||||
$submittedFields = new ArrayList();
|
||||
|
||||
foreach ($this->Fields() as $field) {
|
||||
if (!$field->showInReports()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$submittedField = $field->getSubmittedFormField();
|
||||
$submittedField->ParentID = $submittedForm->ID;
|
||||
$submittedField->Name = $field->Name;
|
||||
$submittedField->Title = $field->getField('Title');
|
||||
|
||||
// save the value from the data
|
||||
if ($field->hasMethod('getValueFromData')) {
|
||||
$submittedField->Value = $field->getValueFromData($data);
|
||||
} else {
|
||||
if (isset($data[$field->Name])) {
|
||||
$submittedField->Value = $data[$field->Name];
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($data[$field->Name])) {
|
||||
if (in_array("EditableFileField", $field->getClassAncestry())) {
|
||||
if (!empty($_FILES[$field->Name]['name'])) {
|
||||
$foldername = $field->getFormField()->getFolderName();
|
||||
|
||||
// create the file from post data
|
||||
$upload = new Upload();
|
||||
$file = new File();
|
||||
$file->ShowInSearch = 0;
|
||||
try {
|
||||
$upload->loadIntoFile($_FILES[$field->Name], $file, $foldername);
|
||||
} catch (ValidationException $e) {
|
||||
$validationResult = $e->getResult();
|
||||
$form->addErrorMessage($field->Name, $validationResult->message(), 'bad');
|
||||
Controller::curr()->redirectBack();
|
||||
return;
|
||||
}
|
||||
|
||||
// write file to form field
|
||||
$submittedField->UploadedFileID = $file->ID;
|
||||
|
||||
// attach a file only if lower than 1MB
|
||||
if ($file->getAbsoluteSize() < 1024*1024*1) {
|
||||
$attachments[] = $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$submittedField->extend('onPopulationFromField', $field);
|
||||
|
||||
if (!$this->DisableSaveSubmissions) {
|
||||
$submittedField->write();
|
||||
}
|
||||
|
||||
$submittedFields->push($submittedField);
|
||||
}
|
||||
|
||||
$emailData = array(
|
||||
"Sender" => Member::currentUser(),
|
||||
"Fields" => $submittedFields
|
||||
);
|
||||
|
||||
$this->extend('updateEmailData', $emailData, $attachments);
|
||||
|
||||
// email users on submit.
|
||||
if ($recipients = $this->FilteredEmailRecipients($data, $form)) {
|
||||
foreach ($recipients as $recipient) {
|
||||
$email = new UserFormRecipientEmail($submittedFields);
|
||||
$mergeFields = $this->getMergeFieldsMap($emailData['Fields']);
|
||||
|
||||
if ($attachments) {
|
||||
foreach ($attachments as $file) {
|
||||
if ($file->ID != 0) {
|
||||
$email->attachFile(
|
||||
$file->Filename,
|
||||
$file->Filename,
|
||||
HTTP::get_mime_type($file->Filename)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$parsedBody = SSViewer::execute_string($recipient->getEmailBodyContent(), $mergeFields);
|
||||
|
||||
if (!$recipient->SendPlain && $recipient->emailTemplateExists()) {
|
||||
$email->setTemplate($recipient->EmailTemplate);
|
||||
}
|
||||
|
||||
$email->populateTemplate($recipient);
|
||||
$email->populateTemplate($emailData);
|
||||
$email->setFrom($recipient->EmailFrom);
|
||||
$email->setBody($parsedBody);
|
||||
$email->setTo($recipient->EmailAddress);
|
||||
$email->setSubject($recipient->EmailSubject);
|
||||
|
||||
if ($recipient->EmailReplyTo) {
|
||||
$email->setReplyTo($recipient->EmailReplyTo);
|
||||
}
|
||||
|
||||
// check to see if they are a dynamic reply to. eg based on a email field a user selected
|
||||
if ($recipient->SendEmailFromField()) {
|
||||
$submittedFormField = $submittedFields->find('Name', $recipient->SendEmailFromField()->Name);
|
||||
|
||||
if ($submittedFormField && is_string($submittedFormField->Value)) {
|
||||
$email->setReplyTo($submittedFormField->Value);
|
||||
}
|
||||
}
|
||||
// check to see if they are a dynamic reciever eg based on a dropdown field a user selected
|
||||
if ($recipient->SendEmailToField()) {
|
||||
$submittedFormField = $submittedFields->find('Name', $recipient->SendEmailToField()->Name);
|
||||
|
||||
if ($submittedFormField && is_string($submittedFormField->Value)) {
|
||||
$email->setTo($submittedFormField->Value);
|
||||
}
|
||||
}
|
||||
|
||||
// check to see if there is a dynamic subject
|
||||
if ($recipient->SendEmailSubjectField()) {
|
||||
$submittedFormField = $submittedFields->find('Name', $recipient->SendEmailSubjectField()->Name);
|
||||
|
||||
if ($submittedFormField && trim($submittedFormField->Value)) {
|
||||
$email->setSubject($submittedFormField->Value);
|
||||
}
|
||||
}
|
||||
|
||||
$this->extend('updateEmail', $email, $recipient, $emailData);
|
||||
|
||||
if ($recipient->SendPlain) {
|
||||
$body = strip_tags($recipient->getEmailBodyContent()) . "\n";
|
||||
if (isset($emailData['Fields']) && !$recipient->HideFormData) {
|
||||
foreach ($emailData['Fields'] as $Field) {
|
||||
$body .= $Field->Title .': '. $Field->Value ." \n";
|
||||
}
|
||||
}
|
||||
|
||||
$email->setBody($body);
|
||||
$email->sendPlain();
|
||||
} else {
|
||||
$email->send();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$submittedForm->extend('updateAfterProcess');
|
||||
|
||||
Session::clear("FormInfo.{$form->FormName()}.errors");
|
||||
Session::clear("FormInfo.{$form->FormName()}.data");
|
||||
|
||||
$referrer = (isset($data['Referrer'])) ? '?referrer=' . urlencode($data['Referrer']) : "";
|
||||
|
||||
// set a session variable from the security ID to stop people accessing
|
||||
// the finished method directly.
|
||||
if (!$this->DisableAuthenicatedFinishAction) {
|
||||
if (isset($data['SecurityID'])) {
|
||||
Session::set('FormProcessed', $data['SecurityID']);
|
||||
} else {
|
||||
// if the form has had tokens disabled we still need to set FormProcessed
|
||||
// to allow us to get through the finshed method
|
||||
if (!$this->Form()->getSecurityToken()->isEnabled()) {
|
||||
$randNum = rand(1, 1000);
|
||||
$randHash = md5($randNum);
|
||||
Session::set('FormProcessed', $randHash);
|
||||
Session::set('FormProcessedNum', $randNum);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$this->DisableSaveSubmissions) {
|
||||
Session::set('userformssubmission'. $this->ID, $submittedForm->ID);
|
||||
}
|
||||
|
||||
return $this->redirect($this->Link('finished') . $referrer . $this->config()->finished_anchor);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows the use of field values in email body.
|
||||
*
|
||||
* @param ArrayList fields
|
||||
* @return ArrayData
|
||||
*/
|
||||
protected function getMergeFieldsMap($fields = array())
|
||||
{
|
||||
$data = new ArrayData(array());
|
||||
|
||||
foreach ($fields as $field) {
|
||||
$data->setField($field->Name, DBField::create_field('Text', $field->Value));
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* This action handles rendering the "finished" message, which is
|
||||
* customizable by editing the ReceivedFormSubmission template.
|
||||
*
|
||||
* @return ViewableData
|
||||
*/
|
||||
public function finished()
|
||||
{
|
||||
$submission = Session::get('userformssubmission'. $this->ID);
|
||||
|
||||
if ($submission) {
|
||||
$submission = SubmittedForm::get()->byId($submission);
|
||||
}
|
||||
|
||||
$referrer = isset($_GET['referrer']) ? urldecode($_GET['referrer']) : null;
|
||||
|
||||
if (!$this->DisableAuthenicatedFinishAction) {
|
||||
$formProcessed = Session::get('FormProcessed');
|
||||
|
||||
if (!isset($formProcessed)) {
|
||||
return $this->redirect($this->Link() . $referrer);
|
||||
} else {
|
||||
$securityID = Session::get('SecurityID');
|
||||
// make sure the session matches the SecurityID and is not left over from another form
|
||||
if ($formProcessed != $securityID) {
|
||||
// they may have disabled tokens on the form
|
||||
$securityID = md5(Session::get('FormProcessedNum'));
|
||||
if ($formProcessed != $securityID) {
|
||||
return $this->redirect($this->Link() . $referrer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Session::clear('FormProcessed');
|
||||
}
|
||||
|
||||
$data = array(
|
||||
'Submission' => $submission,
|
||||
'Link' => $referrer
|
||||
);
|
||||
|
||||
$this->extend('updateReceivedFormSubmissionData', $data);
|
||||
|
||||
return $this->customise(array(
|
||||
'Content' => $this->customise($data)->renderWith('ReceivedFormSubmission'),
|
||||
'Form' => '',
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Outputs the required JS from the $watch input
|
||||
*
|
||||
* @param array $watch
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function buildWatchJS($watch)
|
||||
{
|
||||
$result = '';
|
||||
foreach ($watch as $key => $rule) {
|
||||
$events = implode(' ', $rule['events']);
|
||||
$selectors = implode(', ', $rule['selectors']);
|
||||
$conjunction = $rule['conjunction'];
|
||||
$operations = implode(" {$conjunction} ", $rule['operations']);
|
||||
$target = $rule['targetFieldID'];
|
||||
|
||||
$result .= <<<EOS
|
||||
\n
|
||||
$('.userform').on('{$events}',
|
||||
"{$selectors}",
|
||||
function (){
|
||||
if ({$operations}) {
|
||||
$('{$target}').{$rule['view']};
|
||||
} else {
|
||||
$('{$target}').{$rule['opposite']};
|
||||
}
|
||||
});
|
||||
$("{$target}").find('.hide').removeClass('hide');
|
||||
EOS;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
|
@ -1,226 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Base class for multiple option fields such as {@link EditableDropdownField}
|
||||
* and radio sets.
|
||||
*
|
||||
* Implemented as a class but should be viewed as abstract, you should
|
||||
* instantiate a subclass such as {@link EditableDropdownField}
|
||||
*
|
||||
* @see EditableCheckboxGroupField
|
||||
* @see EditableDropdownField
|
||||
*
|
||||
* @package userforms
|
||||
*/
|
||||
|
||||
class EditableMultipleOptionField extends EditableFormField
|
||||
{
|
||||
|
||||
/**
|
||||
* Define this field as abstract (not inherited)
|
||||
*
|
||||
* @config
|
||||
* @var bool
|
||||
*/
|
||||
private static $abstract = true;
|
||||
|
||||
private static $has_many = array(
|
||||
"Options" => "EditableOption"
|
||||
);
|
||||
|
||||
/**
|
||||
* @return FieldList
|
||||
*/
|
||||
public function getCMSFields()
|
||||
{
|
||||
$this->beforeUpdateCMSFields(function($fields) {
|
||||
$editableColumns = new GridFieldEditableColumns();
|
||||
$editableColumns->setDisplayFields(array(
|
||||
'Title' => array(
|
||||
'title' => _t('EditableMultipleOptionField.TITLE', 'Title'),
|
||||
'callback' => function ($record, $column, $grid) {
|
||||
return TextField::create($column);
|
||||
}
|
||||
),
|
||||
'Value' => array(
|
||||
'title' => _t('EditableMultipleOptionField.VALUE', 'Value'),
|
||||
'callback' => function ($record, $column, $grid) {
|
||||
return TextField::create($column);
|
||||
}
|
||||
),
|
||||
'Default' => array(
|
||||
'title' => _t('EditableMultipleOptionField.DEFAULT', 'Selected by default?'),
|
||||
'callback' => function ($record, $column, $grid) {
|
||||
return CheckboxField::create($column);
|
||||
}
|
||||
)
|
||||
));
|
||||
|
||||
$optionsConfig = GridFieldConfig::create()
|
||||
->addComponents(
|
||||
new GridFieldToolbarHeader(),
|
||||
new GridFieldTitleHeader(),
|
||||
new GridFieldOrderableRows('Sort'),
|
||||
$editableColumns,
|
||||
new GridFieldButtonRow(),
|
||||
new GridFieldAddNewInlineButton(),
|
||||
new GridFieldDeleteAction()
|
||||
);
|
||||
|
||||
$optionsGrid = GridField::create(
|
||||
'Options',
|
||||
_t('EditableFormField.CUSTOMOPTIONS', 'Options'),
|
||||
$this->Options(),
|
||||
$optionsConfig
|
||||
);
|
||||
|
||||
$fields->insertAfter(new Tab('Options', _t('EditableMultipleOptionField.OPTIONSTAB', 'Options')), 'Main');
|
||||
$fields->addFieldToTab('Root.Options', $optionsGrid);
|
||||
});
|
||||
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Publishing Versioning support.
|
||||
*
|
||||
* When publishing it needs to handle copying across / publishing
|
||||
* each of the individual field options
|
||||
*
|
||||
* @param string $fromStage
|
||||
* @param string $toStage
|
||||
* @param bool $createNewVersion
|
||||
*/
|
||||
public function doPublish($fromStage, $toStage, $createNewVersion = false)
|
||||
{
|
||||
parent::doPublish($fromStage, $toStage, $createNewVersion);
|
||||
$this->publishOptions($fromStage, $toStage, $createNewVersion);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Publish list options
|
||||
*
|
||||
* @param string $fromStage
|
||||
* @param string $toStage
|
||||
* @param bool $createNewVersion
|
||||
*/
|
||||
protected function publishOptions($fromStage, $toStage, $createNewVersion)
|
||||
{
|
||||
$seenIDs = array();
|
||||
|
||||
// Publish all options
|
||||
foreach ($this->Options() as $option) {
|
||||
$seenIDs[] = $option->ID;
|
||||
$option->publish($fromStage, $toStage, $createNewVersion);
|
||||
}
|
||||
|
||||
// remove any orphans from the "fromStage"
|
||||
$options = Versioned::get_by_stage('EditableOption', $toStage)
|
||||
->filter('ParentID', $this->ID);
|
||||
|
||||
if (!empty($seenIDs)) {
|
||||
$options = $options->exclude('ID', $seenIDs);
|
||||
}
|
||||
|
||||
foreach ($options as $rule) {
|
||||
$rule->deleteFromStage($toStage);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unpublishing Versioning support
|
||||
*
|
||||
* When unpublishing the field it has to remove all options attached
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function doDeleteFromStage($stage)
|
||||
{
|
||||
// Remove options
|
||||
$options = Versioned::get_by_stage('EditableOption', $stage)
|
||||
->filter('ParentID', $this->ID);
|
||||
foreach ($options as $option) {
|
||||
$option->deleteFromStage($stage);
|
||||
}
|
||||
|
||||
parent::doDeleteFromStage($stage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes all the options attached to this field before deleting the
|
||||
* field. Keeps stray options from floating around
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
$options = $this->Options();
|
||||
|
||||
if ($options) {
|
||||
foreach ($options as $option) {
|
||||
$option->delete();
|
||||
}
|
||||
}
|
||||
|
||||
parent::delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Duplicate a pages content. We need to make sure all the fields attached
|
||||
* to that page go with it
|
||||
*
|
||||
* @return DataObject
|
||||
*/
|
||||
public function duplicate($doWrite = true)
|
||||
{
|
||||
$clonedNode = parent::duplicate();
|
||||
|
||||
foreach ($this->Options() as $field) {
|
||||
$newField = $field->duplicate(false);
|
||||
$newField->ParentID = $clonedNode->ID;
|
||||
$newField->Version = 0;
|
||||
$newField->write();
|
||||
}
|
||||
|
||||
return $clonedNode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return whether or not this field has addable options such as a
|
||||
* {@link EditableDropdownField} or {@link EditableRadioField}
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getHasAddableOptions()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets map of field options suitable for use in a form
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getOptionsMap()
|
||||
{
|
||||
$optionSet = $this->Options();
|
||||
$optionMap = $optionSet->map('Value', 'Title');
|
||||
if ($optionMap instanceof SS_Map) {
|
||||
return $optionMap->toArray();
|
||||
}
|
||||
return $optionMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all default options
|
||||
*
|
||||
* @return SS_List
|
||||
*/
|
||||
protected function getDefaultOptions()
|
||||
{
|
||||
return $this->Options()->filter('Default', 1);
|
||||
}
|
||||
}
|
|
@ -1,177 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Base Class for EditableOption Fields such as the ones used in
|
||||
* dropdown fields and in radio check box groups
|
||||
*
|
||||
* @method EditableMultipleOptionField Parent()
|
||||
* @package userforms
|
||||
*/
|
||||
class EditableOption extends DataObject
|
||||
{
|
||||
|
||||
private static $default_sort = "Sort";
|
||||
|
||||
private static $db = array(
|
||||
"Name" => "Varchar(255)",
|
||||
"Title" => "Varchar(255)",
|
||||
"Default" => "Boolean",
|
||||
"Sort" => "Int",
|
||||
"Value" => "Varchar(255)",
|
||||
);
|
||||
|
||||
private static $has_one = array(
|
||||
"Parent" => "EditableMultipleOptionField",
|
||||
);
|
||||
|
||||
private static $extensions = array(
|
||||
"Versioned('Stage', 'Live')"
|
||||
);
|
||||
|
||||
private static $summary_fields = array(
|
||||
'Title',
|
||||
'Default'
|
||||
);
|
||||
|
||||
protected static $allow_empty_values = false;
|
||||
|
||||
/**
|
||||
* Returns whether to allow empty values or not.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public static function allow_empty_values()
|
||||
{
|
||||
return (bool) self::$allow_empty_values;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether to allow empty values.
|
||||
*
|
||||
* @param boolean $allow
|
||||
*/
|
||||
public static function set_allow_empty_values($allow)
|
||||
{
|
||||
self::$allow_empty_values = (bool) $allow;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Member $member
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function canEdit($member = null)
|
||||
{
|
||||
return $this->Parent()->canEdit($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Member $member
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function canDelete($member = null)
|
||||
{
|
||||
return $this->canEdit($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated 5.0 Use "$Title.XML" in templates instead
|
||||
* @return string
|
||||
*/
|
||||
public function getEscapedTitle()
|
||||
{
|
||||
return Convert::raw2att($this->Title);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Member $member
|
||||
* @return bool
|
||||
*/
|
||||
public function canView($member = null)
|
||||
{
|
||||
return $this->Parent()->canView($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return whether a user can create an object of this type
|
||||
*
|
||||
* @param Member $member
|
||||
* @param array $context Virtual parameter to allow context to be passed in to check
|
||||
* @return bool
|
||||
*/
|
||||
public function canCreate($member = null)
|
||||
{
|
||||
// Check parent page
|
||||
$parent = $this->getCanCreateContext(func_get_args());
|
||||
if($parent) {
|
||||
return $parent->canEdit($member);
|
||||
}
|
||||
|
||||
// Fall back to secure admin permissions
|
||||
return parent::canCreate($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to check the parent for this object
|
||||
*
|
||||
* @param array $args List of arguments passed to canCreate
|
||||
* @return DataObject Some parent dataobject to inherit permissions from
|
||||
*/
|
||||
protected function getCanCreateContext($args)
|
||||
{
|
||||
// Inspect second parameter to canCreate for a 'Parent' context
|
||||
if(isset($args[1]['Parent'])) {
|
||||
return $args[1]['Parent'];
|
||||
}
|
||||
// Hack in currently edited page if context is missing
|
||||
if(Controller::has_curr() && Controller::curr() instanceof CMSMain) {
|
||||
return Controller::curr()->currentPage();
|
||||
}
|
||||
|
||||
// No page being edited
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Member $member
|
||||
* @return bool
|
||||
*/
|
||||
public function canPublish($member = null)
|
||||
{
|
||||
return $this->canEdit($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Member $member
|
||||
* @return bool
|
||||
*/
|
||||
public function canUnpublish($member = null)
|
||||
{
|
||||
return $this->canDelete($member);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches a value for $this->Value. If empty values are not allowed,
|
||||
* then this will return the title in the case of an empty value.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getValue()
|
||||
{
|
||||
$value = $this->getField('Value');
|
||||
if (empty($value) && !self::allow_empty_values()) {
|
||||
return $this->Title;
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
protected function onBeforeWrite()
|
||||
{
|
||||
if (!$this->Sort) {
|
||||
$this->Sort = EditableOption::get()->max('Sort') + 1;
|
||||
}
|
||||
|
||||
parent::onBeforeWrite();
|
||||
}
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
/**
|
||||
* Email that gets sent to the people listed in the Email Recipients when a
|
||||
* submission is made.
|
||||
*
|
||||
* @package userforms
|
||||
*/
|
||||
|
||||
class UserFormRecipientEmail extends Email
|
||||
{
|
||||
|
||||
protected $ss_template = "SubmittedFormEmail";
|
||||
|
||||
protected $data;
|
||||
|
||||
public function __construct($submittedFields = null)
|
||||
{
|
||||
parent::__construct($submittedFields = null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the "Reply-To" header with an email address rather than append as
|
||||
* {@link Email::replyTo} does.
|
||||
*
|
||||
* @param string $email The email address to set the "Reply-To" header to
|
||||
*/
|
||||
public function setReplyTo($email)
|
||||
{
|
||||
$this->customHeaders['Reply-To'] = $email;
|
||||
}
|
||||
}
|
|
@ -1,291 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Service to support upgrade of userforms module
|
||||
*/
|
||||
class UserFormsUpgradeService
|
||||
{
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $quiet;
|
||||
|
||||
public function run()
|
||||
{
|
||||
$this->log("Upgrading formfield rules and custom settings");
|
||||
|
||||
// List of rules that have been created in all stages
|
||||
$fields = Versioned::get_including_deleted('EditableFormField');
|
||||
foreach ($fields as $field) {
|
||||
$this->upgradeField($field);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Migrate a versioned field in all stages
|
||||
*
|
||||
* @param EditableFormField $field
|
||||
*/
|
||||
protected function upgradeField(EditableFormField $field)
|
||||
{
|
||||
$this->log("Upgrading formfield ID = ".$field->ID);
|
||||
|
||||
// Check versions this field exists on
|
||||
$filter = sprintf('"EditableFormField"."ID" = \'%d\' AND "Migrated" = 0', $field->ID);
|
||||
$stageField = Versioned::get_one_by_stage('EditableFormField', 'Stage', $filter);
|
||||
$liveField = Versioned::get_one_by_stage('EditableFormField', 'Live', $filter);
|
||||
|
||||
if ($stageField) {
|
||||
$this->upgradeFieldInStage($stageField, 'Stage');
|
||||
}
|
||||
|
||||
if ($liveField) {
|
||||
$this->upgradeFieldInStage($liveField, 'Live');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Migrate a versioned field in a single stage
|
||||
*
|
||||
* @param EditableFormField $field
|
||||
* @param stage $stage
|
||||
*/
|
||||
protected function upgradeFieldInStage(EditableFormField $field, $stage)
|
||||
{
|
||||
Versioned::reading_stage($stage);
|
||||
|
||||
// Migrate field rules
|
||||
$this->migrateRules($field, $stage);
|
||||
|
||||
// Migrate custom settings
|
||||
$this->migrateCustomSettings($field, $stage);
|
||||
|
||||
// Flag as migrated
|
||||
$field->Migrated = true;
|
||||
$field->write();
|
||||
}
|
||||
|
||||
/**
|
||||
* Migrate custom rules for the given field
|
||||
*
|
||||
* @param EditableFormField $field
|
||||
* @param string $stage
|
||||
*/
|
||||
protected function migrateRules(EditableFormField $field, $stage)
|
||||
{
|
||||
$rulesData = $field->CustomRules
|
||||
? unserialize($field->CustomRules)
|
||||
: array();
|
||||
|
||||
// Skip blank rules or fields with custom rules already
|
||||
if (empty($rulesData) || $field->DisplayRules()->count()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check value of this condition
|
||||
foreach ($rulesData as $ruleDataItem) {
|
||||
if (empty($ruleDataItem['ConditionOption']) || empty($ruleDataItem['Display'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get data for this rule
|
||||
$conditionOption = $ruleDataItem['ConditionOption'];
|
||||
$display = $ruleDataItem['Display'];
|
||||
$conditionFieldName = empty($ruleDataItem['ConditionField']) ? null : $ruleDataItem['ConditionField'];
|
||||
$value = isset($ruleDataItem['Value'])
|
||||
? $ruleDataItem['Value']
|
||||
: null;
|
||||
|
||||
// Create rule
|
||||
$rule = $this->findOrCreateRule($field, $stage, $conditionOption, $display, $conditionFieldName, $value);
|
||||
$this->log("Upgrading rule ID = " . $rule->ID);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Migrate custom settings for the given field
|
||||
*
|
||||
* @param EditableFormField $field
|
||||
* @param string $stage
|
||||
*/
|
||||
protected function migrateCustomSettings(EditableFormField $field, $stage)
|
||||
{
|
||||
// Custom settings include:
|
||||
// - ExtraClass
|
||||
// - RightTitle
|
||||
// - ShowOnLoad (show or '' are treated as true)
|
||||
//
|
||||
// - CheckedDefault (new field on EditableCheckbox - should be read from old "default" value)
|
||||
// - Default (EditableCheckbox)
|
||||
// - DefaultToToday (EditableDateField)
|
||||
// - Folder (EditableFileField)
|
||||
// - Level (EditableFormHeading)
|
||||
// - HideFromReports (EditableFormHeading / EditableLiteralField)
|
||||
// - Content (EditableLiteralField)
|
||||
// - GroupID (EditableMemberListField)
|
||||
// - MinValue (EditableNumericField)
|
||||
// - MaxValue (EditableNumericField)
|
||||
// - MinLength (EditableTextField)
|
||||
// - MaxLength (EditableTextField)
|
||||
// - Rows (EditableTextField)
|
||||
// - Placeholder (EditableTextField / EditableEmailField / EditableNumericField)
|
||||
|
||||
$customSettings = $field->CustomSettings
|
||||
? unserialize($field->CustomSettings)
|
||||
: array();
|
||||
|
||||
// Skip blank rules or fields with custom rules already
|
||||
if (empty($customSettings)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$field->migrateSettings($customSettings);
|
||||
|
||||
if ($field->config()->has_placeholder) {
|
||||
$this->migratePlaceholder($field, $field->ClassName);
|
||||
}
|
||||
|
||||
$field->write();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create or find an existing field with the matched specification
|
||||
*
|
||||
* @param EditableFormField $field
|
||||
* @param string $stage
|
||||
* @param string $conditionOption
|
||||
* @param string $display
|
||||
* @param string $conditionFieldName
|
||||
* @param string $value
|
||||
* @return EditableCustomRule
|
||||
*/
|
||||
protected function findOrCreateRule(EditableFormField $field, $stage, $conditionOption, $display, $conditionFieldName, $value)
|
||||
{
|
||||
// Get id of field
|
||||
$conditionField = $conditionFieldName
|
||||
? EditableFormField::get()->filter('Name', $conditionFieldName)->first()
|
||||
: null;
|
||||
|
||||
// If live, search stage record for matching one
|
||||
if ($stage === 'Live') {
|
||||
$list = Versioned::get_by_stage('EditableCustomRule', 'Stage')
|
||||
->filter(array(
|
||||
'ParentID' => $field->ID,
|
||||
'ConditionFieldID' => $conditionField ? $conditionField->ID : 0,
|
||||
'Display' => $display,
|
||||
'ConditionOption' => $conditionOption
|
||||
));
|
||||
if ($value) {
|
||||
$list = $list->filter('FieldValue', $value);
|
||||
} else {
|
||||
$list = $list->where('"FieldValue" IS NULL OR "FieldValue" = \'\'');
|
||||
}
|
||||
$rule = $list->first();
|
||||
if ($rule) {
|
||||
$rule->write();
|
||||
$rule->publish("Stage", "Live");
|
||||
return $rule;
|
||||
}
|
||||
}
|
||||
|
||||
// If none found, or in stage, create new record
|
||||
$rule = new EditableCustomRule();
|
||||
$rule->ParentID = $field->ID;
|
||||
$rule->ConditionFieldID = $conditionField ? $conditionField->ID : 0;
|
||||
$rule->Display = $display;
|
||||
$rule->ConditionOption = $conditionOption;
|
||||
$rule->FieldValue = $value;
|
||||
$rule->write();
|
||||
return $rule;
|
||||
}
|
||||
|
||||
public function log($message)
|
||||
{
|
||||
if ($this->getQuiet()) {
|
||||
return;
|
||||
}
|
||||
if (Director::is_cli()) {
|
||||
echo "{$message}\n";
|
||||
} else {
|
||||
echo "{$message}<br />";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set if this service should be quiet
|
||||
*
|
||||
* @param bool $quiet
|
||||
* @return $ths
|
||||
*/
|
||||
public function setQuiet($quiet)
|
||||
{
|
||||
$this->quiet = $quiet;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getQuiet()
|
||||
{
|
||||
return $this->quiet;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Migrate Placeholder data from field specific table to the EditableFormField table
|
||||
*
|
||||
* @param EditableFormField $field
|
||||
* @param string $tableName
|
||||
*/
|
||||
private function migratePlaceholder($field, $tableName)
|
||||
{
|
||||
// Migrate Placeholder setting from $tableName table to EditableFormField table
|
||||
if ($field->Placeholder) {
|
||||
return;
|
||||
}
|
||||
// Check if draft table exists
|
||||
if (!DB::get_schema()->hasTable($tableName)) {
|
||||
// Check if _obsolete_ draft table exists
|
||||
$tableName = '_obsolete_' . $tableName;
|
||||
if (!DB::get_schema()->hasTable($tableName)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Check if old Placeholder column exists
|
||||
if (!DB::get_schema()->hasField($tableName, 'Placeholder')) {
|
||||
return;
|
||||
}
|
||||
// Fetch existing draft Placeholder value
|
||||
$query = "SELECT \"Placeholder\" FROM \"$tableName\" WHERE \"ID\" = '$field->ID'";
|
||||
$draftPlaceholder = DB::query($query)->value();
|
||||
|
||||
if (!$draftPlaceholder) {
|
||||
return;
|
||||
}
|
||||
// Update draft Placeholder value
|
||||
DB::prepared_query(
|
||||
"UPDATE \"EditableFormField\" SET \"Placeholder\" = ? WHERE \"ID\" = ?",
|
||||
array($draftPlaceholder, $field->ID)
|
||||
);
|
||||
|
||||
$livePlaceholder = $draftPlaceholder;
|
||||
|
||||
// Check if live table exists
|
||||
$tableName = $tableName . '_Live';
|
||||
if (DB::get_schema()->hasTable($tableName)) {
|
||||
// Fetch existing live Placeholder value
|
||||
$query = "SELECT \"Placeholder\" FROM \"$tableName\" WHERE \"ID\" = '" . $field->ID . "'";
|
||||
$livePlaceholder = DB::query($query)->value();
|
||||
if (!$livePlaceholder) {
|
||||
$livePlaceholder = $draftPlaceholder;
|
||||
}
|
||||
}
|
||||
|
||||
// Update live Placeholder value
|
||||
DB::prepared_query(
|
||||
"UPDATE \"EditableFormField_Live\" SET \"Placeholder\" = ? WHERE \"ID\" = ?",
|
||||
array($draftPlaceholder, $field->ID)
|
||||
);
|
||||
}
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Assists with upgrade of userforms to 3.0
|
||||
*
|
||||
* @author dmooyman
|
||||
*/
|
||||
class UserFormsUpgradeTask extends BuildTask
|
||||
{
|
||||
|
||||
protected $title = "UserForms 3.0 Migration Tool";
|
||||
|
||||
protected $description = "Upgrade tool for sites upgrading to userforms 3.0";
|
||||
|
||||
public function run($request)
|
||||
{
|
||||
$service = Injector::inst()->create('UserFormsUpgradeService');
|
||||
$service->log("Upgrading userforms module");
|
||||
$service->setQuiet(false)
|
||||
->run();
|
||||
$service->log("Done");
|
||||
}
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* UserForms Versioned Task
|
||||
*
|
||||
* Initial migration script for forms that do not exist on the live site.
|
||||
* In previous versions of UserForms it did not provide staging / live functionality
|
||||
* When upgrading to the new version we need to publish the existing pages.
|
||||
*
|
||||
* @package userforms
|
||||
*/
|
||||
|
||||
class UserFormsVersionedTask extends MigrationTask
|
||||
{
|
||||
|
||||
protected $title = "UserForms Versioned Initial Migration";
|
||||
|
||||
protected $description = "Publishes the existing forms";
|
||||
|
||||
/**
|
||||
* Publish the existing forms.
|
||||
*
|
||||
*/
|
||||
public function run($request)
|
||||
{
|
||||
$forms = Versioned::get_by_stage('UserDefinedForm', 'Live');
|
||||
|
||||
if ($forms) {
|
||||
foreach ($forms as $form) {
|
||||
echo "Publishing $form->Title <br />";
|
||||
$form->doPublish();
|
||||
}
|
||||
echo "Complete";
|
||||
} else {
|
||||
echo "No Forms Found";
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
comment: false
|
||||
codecov:
|
||||
branch: master
|
|
@ -30,10 +30,20 @@
|
|||
}
|
||||
],
|
||||
"require": {
|
||||
"silverstripe/framework": "~3.2",
|
||||
"silverstripe/cms": "~3.2",
|
||||
"symbiote/silverstripe-gridfieldextensions": "~1.4",
|
||||
"silverstripe/segment-field": "^1.0"
|
||||
"silverstripe/framework": "^4@dev",
|
||||
"silverstripe/cms": "^4@dev",
|
||||
"symbiote/silverstripe-gridfieldextensions": "^3@dev",
|
||||
"silverstripe/segment-field": "^2@dev"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^5.7",
|
||||
"squizlabs/php_codesniffer": "*"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"SilverStripe\\UserForms\\": "code/",
|
||||
"SilverStripe\\UserForms\\Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"suggest": {
|
||||
"colymba/gridfield-bulk-editing-tools": "Allows for bulk management of form submissions",
|
||||
|
@ -44,5 +54,7 @@
|
|||
"branch-alias": {
|
||||
"dev-master": "5.0.x-dev"
|
||||
}
|
||||
}
|
||||
},
|
||||
"prefer-stable": true,
|
||||
"minimum-stability": "dev"
|
||||
}
|
||||
|
|
12
config.rb
|
@ -1,12 +0,0 @@
|
|||
require 'compass/import-once/activate'
|
||||
# Require any additional compass plugins here.
|
||||
|
||||
# Set this to the root of your project when deployed:
|
||||
http_path = "/"
|
||||
css_dir = "css"
|
||||
sass_dir = "scss"
|
||||
images_dir = "images"
|
||||
javascripts_dir = "javascript"
|
||||
|
||||
line_comments = false
|
||||
|
|
@ -22,7 +22,7 @@ $ gem install compass
|
|||
|
||||
## Compile assets
|
||||
|
||||
Make your changes to `scss/UserForms.scss` or `scss/UserForms_cms.scss`. Then navigate to the `userforms` folder and run:
|
||||
Make your changes to `scss/UserForm.scss` or `scss/UserForm_cms.scss`. Then navigate to the `userforms` folder and run:
|
||||
|
||||
```sh
|
||||
$ compass compile
|
||||
|
|
100
lang/ar.yml
|
@ -13,28 +13,21 @@ ar:
|
|||
SHOWTHISFIELD: 'إظهار هذا الحقل'
|
||||
VALUE: 'القيمة'
|
||||
WHEN: 'عندما'
|
||||
EditableCheckbox:
|
||||
PLURALNAME: 'مربعات لوضع إشارة'
|
||||
SINGULARNAME: 'حقل ذات مربع لوضع إشارة'
|
||||
EditableCheckboxGroupField:
|
||||
PLURALNAME: 'مجموعات ذات مربعات لوضع إشارة'
|
||||
SINGULARNAME: 'مجموعة مربعات لوضع إشارة'
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'القائمة المنسدلة للروابط البلاد'
|
||||
SINGULARNAME: 'القائمة المنسدلة للروابط البلاد'
|
||||
EditableDateField:
|
||||
PLURALNAME: 'حقول التاريخ'
|
||||
SINGULARNAME: 'حقل التاريخ'
|
||||
EditableDropdown:
|
||||
PLURALNAME: 'القائمات المنسدلة للروابط'
|
||||
SINGULARNAME: 'حقل القائمة المنسدلة'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'حقول البريد الإلكتروني'
|
||||
SINGULARNAME: 'خانة البريد الإلكتروني'
|
||||
EditableFileField:
|
||||
PLURALNAME: 'حقول تحميل الملف'
|
||||
SINGULARNAME: 'حقل تحميل الملف'
|
||||
EditableFormField:
|
||||
FieldEditor:
|
||||
ADD: أضف
|
||||
SELECTAFIELD: 'اختر حقل'
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: صفحات
|
||||
SINGULARNAME: صفحة
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s ضروري'
|
||||
SilverStripe\Forms\GridField\GridField:
|
||||
Filter: تصفية
|
||||
ResetFilter: 'إعادة تعيين'
|
||||
SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'تصفية التقديمات..'
|
||||
WHEREVALUEIS: 'حيث القيمة هي..'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: إضافة
|
||||
ADDRULE: 'إضافة قاعدة'
|
||||
BLANK: فراغ
|
||||
|
@ -71,56 +64,69 @@ ar:
|
|||
VALIDATION: 'المصادقة'
|
||||
VALUE: 'القيمة'
|
||||
WHEN: 'عندما'
|
||||
EditableFormHeading:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
PLURALNAME: 'مربعات لوضع إشارة'
|
||||
SINGULARNAME: 'حقل ذات مربع لوضع إشارة'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
PLURALNAME: 'مجموعات ذات مربعات لوضع إشارة'
|
||||
SINGULARNAME: 'مجموعة مربعات لوضع إشارة'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'القائمة المنسدلة للروابط البلاد'
|
||||
SINGULARNAME: 'القائمة المنسدلة للروابط البلاد'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: 'حقول التاريخ'
|
||||
SINGULARNAME: 'حقل التاريخ'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: 'القائمات المنسدلة للروابط'
|
||||
SINGULARNAME: 'حقل القائمة المنسدلة'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'حقول البريد الإلكتروني'
|
||||
SINGULARNAME: 'خانة البريد الإلكتروني'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
PLURALNAME: 'حقول تحميل الملف'
|
||||
SINGULARNAME: 'حقل تحميل الملف'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading:
|
||||
LEVEL: 'حدد مستوى العنوان'
|
||||
PLURALNAME: عناوين
|
||||
SINGULARNAME: عنوان
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'إخقاء تقارير النموذج؟'
|
||||
PLURALNAME: 'بلوكات HTML'
|
||||
SINGULARNAME: 'بلوك HTML'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'حقول قائمة الأعضاء'
|
||||
SINGULARNAME: 'حقل قائمة الأعضاء'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'حقول الخيارات المتعددة القابلة للتعديل'
|
||||
SINGULARNAME: 'حقل الخيارات المتعددة القابل للتعديل'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'احذف هذا الخيار'
|
||||
DRAG: 'اسحب لإعادة ترتيب الخيارات'
|
||||
LOCKED: 'لا يمكن تعديل هذه الحقول'
|
||||
PLURALNAME: 'الخيارات القابلة للتحرير'
|
||||
SINGULARNAME: 'خيار قابل للتحرير'
|
||||
EditableRadioField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableRadioField:
|
||||
PLURALNAME: 'حقول حلقية radio'
|
||||
SINGULARNAME: 'حقل حلقي Radio'
|
||||
EditableTextField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
NUMBERROWS: 'عدد الصفوف'
|
||||
PLURALNAME: 'حقول نصية'
|
||||
SINGULARNAME: 'حقل نصي'
|
||||
TEXTLENGTH: 'طول النص'
|
||||
FieldEditor:
|
||||
ADD: أضف
|
||||
SELECTAFIELD: 'اختر حقل'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s ضروري'
|
||||
GridField:
|
||||
Filter: تصفية
|
||||
ResetFilter: 'إعادة تعيين'
|
||||
SiteTree:
|
||||
PLURALNAME: صفحات
|
||||
SINGULARNAME: صفحة
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'نموذج مستلمي البريد الإلكتروني يحدده المستخدم'
|
||||
SINGULARNAME: 'نموذج مستلم البريد الإلكتروني يحدده المستخدم'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'تحميل الملف'
|
||||
PLURALNAME: 'حقول الملف التي قدمت'
|
||||
SINGULARNAME: 'حقل الملف الذي قدّم'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'الاستمارات التي قدّمت'
|
||||
SINGULARNAME: 'الاستمارة التي قدّمت'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'حقول الاستمارة التي تمّ تقديمها'
|
||||
SINGULARNAME: 'حقل الاستمارة الذي تمّ تقديمه'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
ADDEMAILRECIPIENT: 'أضف متلقي البريد الإلكتروني'
|
||||
CONFIGURATION: 'مواصفات'
|
||||
DESCRIPTION: 'يضيف استمارة مخصصة.'
|
||||
|
@ -146,9 +152,3 @@ ar:
|
|||
SUBMISSIONS: 'التقديمات'
|
||||
SUBMITBUTTON: 'تقديم'
|
||||
TEXTONSUBMIT: 'زر النص المتعلق بالتقديم:'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'نموذج مستلمي البريد الإلكتروني يحدده المستخدم'
|
||||
SINGULARNAME: 'نموذج مستلم البريد الإلكتروني يحدده المستخدم'
|
||||
UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'تصفية التقديمات..'
|
||||
WHEREVALUEIS: 'حيث القيمة هي..'
|
||||
|
|
|
@ -13,13 +13,9 @@ ar_SA:
|
|||
SHOWTHISFIELD: 'Show This Field'
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
EditableFormField:
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Add
|
||||
ADDRULE: 'Add Rule'
|
||||
BLANK: Blank
|
||||
|
@ -46,33 +42,40 @@ ar_SA:
|
|||
VALIDATION: Validation
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Member List Fields'
|
||||
SINGULARNAME: 'Member List Field'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Remove this option'
|
||||
DRAG: 'Drag to rearrange order of options'
|
||||
LOCKED: 'These fields cannot be modified'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Download File'
|
||||
PLURALNAME: 'Submitted File Fields'
|
||||
SINGULARNAME: 'Submitted File Field'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Submitted Forms'
|
||||
SINGULARNAME: 'Submitted Form'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Submitted Form Fields'
|
||||
SINGULARNAME: 'Submitted Form Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
EMAILADDRESS: Email
|
||||
EMAILBODY: Body
|
||||
EMAILFROM: From
|
||||
|
@ -92,6 +95,3 @@ ar_SA:
|
|||
SUBMISSIONS: 'الملفات المرسلة'
|
||||
SUBMITBUTTON: Submit
|
||||
TEXTONSUBMIT: 'النص ال'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
|
|
|
@ -13,13 +13,9 @@ bg_BG:
|
|||
SHOWTHISFIELD: 'Show This Field'
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
EditableFormField:
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Add
|
||||
ADDRULE: 'Add Rule'
|
||||
BLANK: Blank
|
||||
|
@ -46,33 +42,40 @@ bg_BG:
|
|||
VALIDATION: Validation
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Member List Fields'
|
||||
SINGULARNAME: 'Member List Field'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Remove this option'
|
||||
DRAG: 'Drag to rearrange order of options'
|
||||
LOCKED: 'These fields cannot be modified'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Download File'
|
||||
PLURALNAME: 'Submitted File Fields'
|
||||
SINGULARNAME: 'Submitted File Field'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Submitted Forms'
|
||||
SINGULARNAME: 'Submitted Form'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Submitted Form Fields'
|
||||
SINGULARNAME: 'Submitted Form Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
EMAILADDRESS: Email
|
||||
EMAILBODY: Body
|
||||
EMAILFROM: From
|
||||
|
@ -92,6 +95,3 @@ bg_BG:
|
|||
SUBMISSIONS: Заявления
|
||||
SUBMITBUTTON: Submit
|
||||
TEXTONSUBMIT: 'Текст за бутона на изпращане:'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
|
|
|
@ -13,16 +13,9 @@ da_DK:
|
|||
SHOWTHISFIELD: 'Show This Field'
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
EditableDropdown:
|
||||
PLURALNAME: Dropdowns
|
||||
SINGULARNAME: 'Dropdown Field'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
EditableFormField:
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Add
|
||||
ADDRULE: 'Add Rule'
|
||||
BLANK: Blank
|
||||
|
@ -49,33 +42,43 @@ da_DK:
|
|||
VALIDATION: Validation
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: Dropdowns
|
||||
SINGULARNAME: 'Dropdown Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Member List Fields'
|
||||
SINGULARNAME: 'Member List Field'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Remove this option'
|
||||
DRAG: 'Drag to rearrange order of options'
|
||||
LOCKED: 'These fields cannot be modified'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Download File'
|
||||
PLURALNAME: 'Submitted File Fields'
|
||||
SINGULARNAME: 'Submitted File Field'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Submitted Forms'
|
||||
SINGULARNAME: 'Submitted Form'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Submitted Form Fields'
|
||||
SINGULARNAME: 'Submitted Form Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
EMAILADDRESS: Email
|
||||
EMAILBODY: Body
|
||||
EMAILFROM: From
|
||||
|
@ -95,6 +98,3 @@ da_DK:
|
|||
SUBMISSIONS: Indsendelse
|
||||
SUBMITBUTTON: Submit
|
||||
TEXTONSUBMIT: 'Tekst på send-knap'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
|
|
118
lang/de_DE.yml
|
@ -13,28 +13,28 @@ de_DE:
|
|||
SHOWTHISFIELD: 'Feld anzeigen'
|
||||
VALUE: Wert
|
||||
WHEN: Wann
|
||||
EditableCheckbox:
|
||||
PLURALNAME: Checkboxen
|
||||
SINGULARNAME: 'Checkbox Feld'
|
||||
EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Checkbox Gruppen'
|
||||
SINGULARNAME: 'Checkbox Gruppe'
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Länder Dropdowns'
|
||||
SINGULARNAME: 'Länder Dropdown'
|
||||
EditableDateField:
|
||||
PLURALNAME: Datumsfelder
|
||||
SINGULARNAME: Datumsfeld
|
||||
EditableDropdown:
|
||||
PLURALNAME: Dropdowns
|
||||
SINGULARNAME: 'Dropdown Feld'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'E-Mail Felder'
|
||||
SINGULARNAME: 'E-Mail Feld'
|
||||
EditableFileField:
|
||||
PLURALNAME: 'Dateiupload Felder'
|
||||
SINGULARNAME: 'Dateiupload Feld'
|
||||
EditableFormField:
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Ordner für den Upload auswählen'
|
||||
FieldEditor:
|
||||
ADD: Hinzufügen
|
||||
SELECTAFIELD: 'Feld auswählen'
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: Seiten
|
||||
SINGULARNAME: Seite
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s ist ein Pflichtfeld'
|
||||
SilverStripe\Forms\GridField\GridField:
|
||||
Filter: Filter
|
||||
ResetFilter: Zurücksetzen
|
||||
SilverStripe\UserForms\Extension\UserFormFieldEditorExtension:
|
||||
ADD_FIELD: 'Feld hinzufügen'
|
||||
ADD_FIELD_GROUP: 'Gruppe hinzufügen'
|
||||
ADD_PAGE_BREAK: 'Seite hinzufügen'
|
||||
FORMFIELDS: Formularfelder
|
||||
SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Einreichungen filtern...'
|
||||
WHEREVALUEIS: 'nach Wert...'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Hinzufügen
|
||||
ADDLabel: 'Option hinzufügen'
|
||||
ADDRULE: 'Regel hinzufügen'
|
||||
|
@ -76,67 +76,78 @@ de_DE:
|
|||
VALIDATION: Validierung
|
||||
VALUE: Wert
|
||||
WHEN: Wann
|
||||
EditableFormHeading:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
PLURALNAME: Checkboxen
|
||||
SINGULARNAME: 'Checkbox Feld'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Checkbox Gruppen'
|
||||
SINGULARNAME: 'Checkbox Gruppe'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Länder Dropdowns'
|
||||
SINGULARNAME: 'Länder Dropdown'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: Datumsfelder
|
||||
SINGULARNAME: Datumsfeld
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: Dropdowns
|
||||
SINGULARNAME: 'Dropdown Feld'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'E-Mail Felder'
|
||||
SINGULARNAME: 'E-Mail Feld'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
PLURALNAME: 'Dateiupload Felder'
|
||||
SINGULARNAME: 'Dateiupload Feld'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading:
|
||||
LEVEL: 'Überschriftsebene auswählen'
|
||||
PLURALNAME: Überschriften
|
||||
SINGULARNAME: Überschrift
|
||||
EditableFormStep:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormStep:
|
||||
PLURALNAME: Seiten
|
||||
SINGULARNAME: Seiten
|
||||
STEP_TITLE: 'Seite {page}'
|
||||
TITLE_FIRST: 'Erste Seite'
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Nicht in Berichten anzeigen?'
|
||||
PLURALNAME: 'HTML Blöcke'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Member List Felder'
|
||||
SINGULARNAME: 'Member List Feld'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editierbare Multi-Option Felder'
|
||||
SINGULARNAME: 'Editierbares Multi-Option Feld'
|
||||
EditableNumericField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableNumericField:
|
||||
PLURALNAME: Zahlenfelder
|
||||
SINGULARNAME: Zahlenfeld
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Option entfernen'
|
||||
DRAG: 'Ziehen um Optionen neu zu ordnen'
|
||||
LOCKED: 'Diese Felder können nicht verändert werden'
|
||||
PLURALNAME: 'Editierbare Optionen'
|
||||
SINGULARNAME: 'Editierbare Option'
|
||||
EditableRadioField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableRadioField:
|
||||
PLURALNAME: Radio-Buttons
|
||||
SINGULARNAME: Radio-Button
|
||||
EditableTextField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
NUMBERROWS: 'Anzahl der Zeilen'
|
||||
PLACEHOLDER: Platzhalter
|
||||
PLURALNAME: Textfelder
|
||||
SINGULARNAME: Textfeld
|
||||
TEXTLENGTH: Textlänge
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Ordner für den Upload auswählen'
|
||||
FieldEditor:
|
||||
ADD: Hinzufügen
|
||||
SELECTAFIELD: 'Feld auswählen'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s ist ein Pflichtfeld'
|
||||
GridField:
|
||||
Filter: Filter
|
||||
ResetFilter: Zurücksetzen
|
||||
SiteTree:
|
||||
PLURALNAME: Seiten
|
||||
SINGULARNAME: Seite
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'Anpassbares Formular E-Mail Empfänger'
|
||||
SINGULARNAME: 'Anpassbares Formular E-Mail Empfänger'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Datei herunterladen'
|
||||
PLURALNAME: 'Abgesendete Dateifelder'
|
||||
SINGULARNAME: 'Abgesendetes Dateifeld'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Abgesendete Formulare'
|
||||
SINGULARNAME: 'Abgesendetes Formular'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Abgesendete Formularfelder'
|
||||
SINGULARNAME: 'Abgesendetes Formularfeld'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
ADDEMAILRECIPIENT: 'E-Mail Empfänger hinzufügen'
|
||||
CLEARBUTTON: Löschen
|
||||
CONFIGURATION: Konfiguration
|
||||
|
@ -166,14 +177,3 @@ de_DE:
|
|||
SUBMITBUTTON: Senden
|
||||
TEXTONCLEAR: 'Text auf der Löschen-Schaltfläche:'
|
||||
TEXTONSUBMIT: 'Text auf der Einreich-Schaltfläche:'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'Anpassbares Formular E-Mail Empfänger'
|
||||
SINGULARNAME: 'Anpassbares Formular E-Mail Empfänger'
|
||||
UserFormFieldEditorExtension:
|
||||
ADD_FIELD: 'Feld hinzufügen'
|
||||
ADD_FIELD_GROUP: 'Gruppe hinzufügen'
|
||||
ADD_PAGE_BREAK: 'Seite hinzufügen'
|
||||
FORMFIELDS: Formularfelder
|
||||
UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Einreichungen filtern...'
|
||||
WHEREVALUEIS: 'nach Wert...'
|
||||
|
|
176
lang/en.yml
|
@ -13,39 +13,39 @@ en:
|
|||
SHOWTHISFIELD: 'Show This Field'
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableCheckbox:
|
||||
PLURALNAME: Checkboxes
|
||||
SINGULARNAME: 'Checkbox Field'
|
||||
EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Checkbox Groups'
|
||||
SINGULARNAME: 'Checkbox Group'
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
EditableCustomRule:
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Select upload folder'
|
||||
FieldEditor:
|
||||
ADD: Add
|
||||
SELECTAFIELD: 'Select a Field'
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: Pages
|
||||
SINGULARNAME: Page
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SilverStripe\Forms\GridField\GridField:
|
||||
Filter: Filter
|
||||
ResetFilter: Reset
|
||||
SilverStripe\UserForms\Extension\UserFormFieldEditorExtension:
|
||||
ADD_FIELD: 'Add Field'
|
||||
ADD_FIELD_GROUP: 'Add Field Group'
|
||||
ADD_PAGE_BREAK: 'Add Page Break'
|
||||
FORMFIELDS: 'Form Fields'
|
||||
SilverStripe\UserForms\Extension\UserFormValidator:
|
||||
CONDITIONAL_REQUIRED: 'Required field ''{name}'' cannot be placed within a conditional page'
|
||||
NO_PAGE: 'Field ''{name}'' found before any pages'
|
||||
UNEXPECTED_BREAK: 'Unexpected page break ''{name}'' inside nested field ''{group}'''
|
||||
UNEXPECTED_GROUP_END: '''{name}'' found without a matching group'
|
||||
WRONG_GROUP_END: '''{name}'' found closes the wrong group ''{group}'''
|
||||
SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Filter Submissions..'
|
||||
FROM: From
|
||||
TILL: Till
|
||||
WHEREVALUEIS: 'where value is..'
|
||||
SilverStripe\UserForms\Model\EditableCustomRule:
|
||||
PLURALNAME: 'Editable Custom Rules'
|
||||
SINGULARNAME: 'Editable Custom Rule'
|
||||
EditableDateField:
|
||||
PLURALNAME: 'Date Fields'
|
||||
SINGULARNAME: 'Date Field'
|
||||
EditableDropdown:
|
||||
PLURALNAME: Dropdowns
|
||||
SINGULARNAME: 'Dropdown Field'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
EditableFieldGroup:
|
||||
PLURALNAME: 'Editable Field Groups'
|
||||
SINGULARNAME: 'Editable Field Group'
|
||||
EditableFieldGroupEnd:
|
||||
FIELD_GROUP_END: '{group} end'
|
||||
FIELD_GROUP_START: 'Group {group}'
|
||||
PLURALNAME: 'Editable Field Group Ends'
|
||||
SINGULARNAME: 'Editable Field Group End'
|
||||
EditableFileField:
|
||||
PLURALNAME: 'File Upload Fields'
|
||||
SINGULARNAME: 'File Upload Field'
|
||||
EditableFormField:
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Add
|
||||
ADDLabel: 'Add option'
|
||||
ADDRULE: 'Add Rule'
|
||||
|
@ -82,8 +82,8 @@ en:
|
|||
MAXVALUE: 'Max Value'
|
||||
MERGEFIELDNAME: 'Merge field'
|
||||
MINVALUE: 'Min Value'
|
||||
NAME: Name
|
||||
'NO': 'No'
|
||||
NAME: 'Name'
|
||||
NOTBLANK: 'Not Blank'
|
||||
NOTVALUE: 'Not Value'
|
||||
OPTIONS: Options
|
||||
|
@ -105,48 +105,75 @@ en:
|
|||
VALUE: Value
|
||||
WHEN: When
|
||||
'YES': 'Yes'
|
||||
EditableFormFieldValidator:
|
||||
REQUIRED_ERROR: 'Form fields cannot be required and have conditional display rules.'
|
||||
EditableFormHeading:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
PLURALNAME: Checkboxes
|
||||
SINGULARNAME: 'Checkbox Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Checkbox Groups'
|
||||
SINGULARNAME: 'Checkbox Group'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: 'Date Fields'
|
||||
SINGULARNAME: 'Date Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: Dropdowns
|
||||
SINGULARNAME: 'Dropdown Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup:
|
||||
PLURALNAME: 'Editable Field Groups'
|
||||
SINGULARNAME: 'Editable Field Group'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd:
|
||||
FIELD_GROUP_END: '{group} end'
|
||||
FIELD_GROUP_START: 'Group {group}'
|
||||
PLURALNAME: 'Editable Field Group Ends'
|
||||
SINGULARNAME: 'Editable Field Group End'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
PLURALNAME: 'File Upload Fields'
|
||||
SINGULARNAME: 'File Upload Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading:
|
||||
LEVEL: 'Select Heading Level'
|
||||
PLURALNAME: Headings
|
||||
SINGULARNAME: Heading
|
||||
EditableFormStep:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormStep:
|
||||
PLURALNAME: 'Page Breaks'
|
||||
SINGULARNAME: 'Page Break'
|
||||
STEP_TITLE: 'Page {page}'
|
||||
TITLE_FIRST: 'First Page'
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
CONTENT: HTML
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
HIDELABEL: 'Hide ''Title'' label on frontend?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Member List Fields'
|
||||
SINGULARNAME: 'Member List Field'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
DEFAULT: 'Selected by default?'
|
||||
OPTIONSTAB: Options
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
TITLE: Title
|
||||
VALUE: Value
|
||||
EditableNumericField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableNumericField:
|
||||
PLURALNAME: 'Numeric Fields'
|
||||
RANGE: 'Allowed numeric range'
|
||||
RANGE_TO: to
|
||||
SINGULARNAME: 'Numeric Field'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Remove this option'
|
||||
DRAG: 'Drag to rearrange order of options'
|
||||
LOCKED: 'These fields cannot be modified'
|
||||
PLURALNAME: 'Editable Options'
|
||||
SINGULARNAME: 'Editable Option'
|
||||
EditableRadioField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableRadioField:
|
||||
PLURALNAME: 'Radio Groups'
|
||||
SINGULARNAME: 'Radio Group'
|
||||
EditableTextField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
AUTOCOMPLETE: Autocomplete
|
||||
AUTOCOMPLETE_DESCRIPTION: 'Supported browsers will attempt to populate this field automatically with the users information, use to set the value populated'
|
||||
NUMBERROWS: 'Number of rows'
|
||||
|
@ -156,30 +183,31 @@ en:
|
|||
RANGE_TO: to
|
||||
SINGULARNAME: 'Text Field'
|
||||
TEXTLENGTH: 'Allowed text length'
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Select upload folder'
|
||||
FieldEditor:
|
||||
ADD: Add
|
||||
SELECTAFIELD: 'Select a Field'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
GridField:
|
||||
Filter: Filter
|
||||
ResetFilter: Reset
|
||||
SiteTree:
|
||||
PLURALNAME: Pages
|
||||
SINGULARNAME: Page
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\Validator:
|
||||
REQUIRED_ERROR: 'Form fields cannot be required and have conditional display rules.'
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
CUSTOMRULESTAB: 'Custom Rules'
|
||||
EMAILADDRESSINVALID: '"EmailAddress" is not valid'
|
||||
EMAILCONTENTTAB: 'Email Content'
|
||||
EMAILDETAILSTAB: 'Email Details'
|
||||
EMAILFROMINVALID: '"Email From" is not valid'
|
||||
EMAILREPLYTOINVALID: '"Email Reply To" is not valid'
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition:
|
||||
PLURALNAME: 'User Defined Form Email Recipient Conditions'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient Condition'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Download File'
|
||||
PLURALNAME: 'Submitted File Fields'
|
||||
SINGULARNAME: 'Submitted File Field'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Submitted Forms'
|
||||
SINGULARNAME: 'Submitted Form'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Submitted Form Fields'
|
||||
SINGULARNAME: 'Submitted Form Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
ADDEMAILRECIPIENT: 'Add Email Recipient'
|
||||
CLEARBUTTON: Clear
|
||||
CONFIGURATION: Configuration
|
||||
|
@ -230,31 +258,3 @@ en:
|
|||
TYPEREPLY: 'Type reply address'
|
||||
TYPESUBJECT: 'Type subject'
|
||||
TYPETO: 'Type to address'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
CUSTOMRULESTAB: 'Custom Rules'
|
||||
EMAILCONTENTTAB: 'Email Content'
|
||||
EMAILDETAILSTAB: 'Email Details'
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
EMAILADDRESSINVALID: '"EmailAddress" is not valid'
|
||||
EMAILFROMINVALID: '"Email From" is not valid'
|
||||
EMAILREPLYTOINVALID: '"Email Reply To" is not valid'
|
||||
UserDefinedForm_EmailRecipientCondition:
|
||||
PLURALNAME: 'User Defined Form Email Recipient Conditions'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient Condition'
|
||||
UserFormFieldEditorExtension:
|
||||
ADD_FIELD: 'Add Field'
|
||||
ADD_FIELD_GROUP: 'Add Field Group'
|
||||
ADD_PAGE_BREAK: 'Add Page Break'
|
||||
FORMFIELDS: 'Form Fields'
|
||||
UserFormValidator:
|
||||
CONDITIONAL_REQUIRED: 'Required field ''{name}'' cannot be placed within a conditional page'
|
||||
NO_PAGE: 'Field ''{name}'' found before any pages'
|
||||
UNEXPECTED_BREAK: 'Unexpected page break ''{name}'' inside nested field ''{group}'''
|
||||
UNEXPECTED_GROUP_END: '''{name}'' found without a matching group'
|
||||
WRONG_GROUP_END: '''{name}'' found closes the wrong group ''{group}'''
|
||||
UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Filter Submissions..'
|
||||
FROM: From
|
||||
TILL: Till
|
||||
WHEREVALUEIS: 'where value is..'
|
||||
|
|
|
@ -1,15 +1,18 @@
|
|||
en_GB:
|
||||
EditableEmailField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
EMAILADDRESS: Email
|
||||
EMAILBODY: Body
|
||||
EMAILFROM: From
|
||||
|
@ -28,6 +31,3 @@ en_GB:
|
|||
SINGULARNAME: 'User Defined Form'
|
||||
SUBMITBUTTON: Submit
|
||||
TEXTONSUBMIT: 'Text on submit button:'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
|
|
|
@ -1,15 +1,18 @@
|
|||
en_US:
|
||||
EditableEmailField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
EMAILADDRESS: Email
|
||||
EMAILBODY: Body
|
||||
EMAILFROM: From
|
||||
|
@ -30,6 +33,3 @@ en_US:
|
|||
SINGULARNAME: 'User Defined Form'
|
||||
SUBMITBUTTON: Submit
|
||||
TEXTONSUBMIT: 'Text on submit button:'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
|
|
168
lang/eo.yml
|
@ -13,39 +13,39 @@ eo:
|
|||
SHOWTHISFIELD: 'Vidigi ĉi tiun kampon'
|
||||
VALUE: Valoro
|
||||
WHEN: Kiam
|
||||
EditableCheckbox:
|
||||
PLURALNAME: Markobutonoj
|
||||
SINGULARNAME: 'Markobutona kampo'
|
||||
EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Markobutonaj grupoj'
|
||||
SINGULARNAME: 'Markobutona grupo'
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Landaj fallistoj'
|
||||
SINGULARNAME: 'Landa fallisto'
|
||||
EditableCustomRule:
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Elekti alŝutan dosierujon'
|
||||
FieldEditor:
|
||||
ADD: Aldoni
|
||||
SELECTAFIELD: 'Elekti kampon'
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: Paĝoj
|
||||
SINGULARNAME: Paĝo
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s estas nepra'
|
||||
SilverStripe\Forms\GridField\GridField:
|
||||
Filter: Filtri
|
||||
ResetFilter: Restartigi
|
||||
SilverStripe\UserForms\Extension\UserFormFieldEditorExtension:
|
||||
ADD_FIELD: 'Aldoni kampon'
|
||||
ADD_FIELD_GROUP: 'Aldoni kampogrupon'
|
||||
ADD_PAGE_BREAK: 'Aldoni paĝosalton'
|
||||
FORMFIELDS: 'Formularaj kampoj'
|
||||
SilverStripe\UserForms\Extension\UserFormValidator:
|
||||
CONDITIONAL_REQUIRED: 'Ne eblas meti nepran kampon ''{name}'' en kondiĉa paĝo'
|
||||
NO_PAGE: 'Trovis kampon ''{name}'' antaŭ iuj paĝoj'
|
||||
UNEXPECTED_BREAK: 'Neatendita paĝosalto ''{name}'' en ingita kampo ''{group}'''
|
||||
UNEXPECTED_GROUP_END: 'troviĝas ''{name}'' sen kongrua grupo'
|
||||
WRONG_GROUP_END: 'trovita ''{name}'' fermas malĝustan grupon ''{group}'''
|
||||
SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Filtri sendaĵojn..'
|
||||
FROM: De
|
||||
TILL: Ĝis
|
||||
WHEREVALUEIS: 'kie valoro estas..'
|
||||
SilverStripe\UserForms\Model\EditableCustomRule:
|
||||
PLURALNAME: 'Redakteblaj propraj reguloj'
|
||||
SINGULARNAME: 'Redaktebla propra regulo'
|
||||
EditableDateField:
|
||||
PLURALNAME: 'Kampoj por dato'
|
||||
SINGULARNAME: 'Kampo por dato'
|
||||
EditableDropdown:
|
||||
PLURALNAME: Fallistoj
|
||||
SINGULARNAME: 'Fallista kampo'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Kampoj por retpoŝto'
|
||||
SINGULARNAME: 'Kampo por retpoŝto'
|
||||
EditableFieldGroup:
|
||||
PLURALNAME: 'Redakteblaj kampaj grupoj'
|
||||
SINGULARNAME: 'Redaktebla kampa grupo'
|
||||
EditableFieldGroupEnd:
|
||||
FIELD_GROUP_END: 'fino de {group}'
|
||||
FIELD_GROUP_START: 'Grupo {group}'
|
||||
PLURALNAME: 'Redakteblaj kampaj grupoj finas'
|
||||
SINGULARNAME: 'Redaktebla kampa grupo finas'
|
||||
EditableFileField:
|
||||
PLURALNAME: 'Kampoj por dosiera alŝuto'
|
||||
SINGULARNAME: 'Kampo por dosiera alŝuto'
|
||||
EditableFormField:
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Aldoni
|
||||
ADDLabel: 'Aldoni agordon'
|
||||
ADDRULE: 'Aldoni regulon'
|
||||
|
@ -98,48 +98,75 @@ eo:
|
|||
VALUE: Valoro
|
||||
WHEN: Kiam
|
||||
'YES': Jes
|
||||
EditableFormFieldValidator:
|
||||
REQUIRED_ERROR: 'Formularaj kampoj ne povas esti nepraj kaj havi kondiĉajn vidigoregulojn.'
|
||||
EditableFormHeading:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
PLURALNAME: Markobutonoj
|
||||
SINGULARNAME: 'Markobutona kampo'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Markobutonaj grupoj'
|
||||
SINGULARNAME: 'Markobutona grupo'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Landaj fallistoj'
|
||||
SINGULARNAME: 'Landa fallisto'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: 'Kampoj por dato'
|
||||
SINGULARNAME: 'Kampo por dato'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: Fallistoj
|
||||
SINGULARNAME: 'Fallista kampo'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Kampoj por retpoŝto'
|
||||
SINGULARNAME: 'Kampo por retpoŝto'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup:
|
||||
PLURALNAME: 'Redakteblaj kampaj grupoj'
|
||||
SINGULARNAME: 'Redaktebla kampa grupo'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd:
|
||||
FIELD_GROUP_END: 'fino de {group}'
|
||||
FIELD_GROUP_START: 'Grupo {group}'
|
||||
PLURALNAME: 'Redakteblaj kampaj grupoj finas'
|
||||
SINGULARNAME: 'Redaktebla kampa grupo finas'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
PLURALNAME: 'Kampoj por dosiera alŝuto'
|
||||
SINGULARNAME: 'Kampo por dosiera alŝuto'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading:
|
||||
LEVEL: 'Elekti titolan nivelon'
|
||||
PLURALNAME: Titoloj
|
||||
SINGULARNAME: Titolo
|
||||
EditableFormStep:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormStep:
|
||||
PLURALNAME: Paĝosaltoj
|
||||
SINGULARNAME: Paĝosalto
|
||||
STEP_TITLE: 'Paĝo {page}'
|
||||
TITLE_FIRST: 'Unua paĝo'
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
CONTENT: HTML
|
||||
HIDEFROMREPORT: 'Ĉu kaŝi de raportoj?'
|
||||
HIDELABEL: 'Ĉu kaŝi etikedon ''Titolo'' en fasado?'
|
||||
PLURALNAME: HTML-blokoj
|
||||
SINGULARNAME: HTML-bloko
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Kampoj por membrolisto'
|
||||
SINGULARNAME: 'Kampo por membrolisto'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
DEFAULT: 'Elektita apriore?'
|
||||
OPTIONSTAB: Agordoj
|
||||
PLURALNAME: 'Redakteblaj plureblaj kampoj'
|
||||
SINGULARNAME: 'Redaktebla plurebla kampo'
|
||||
TITLE: Titolo
|
||||
VALUE: Valoro
|
||||
EditableNumericField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableNumericField:
|
||||
PLURALNAME: 'Numeraj kampoj'
|
||||
RANGE: 'Ebla numera amplekso'
|
||||
RANGE_TO: 'al '
|
||||
SINGULARNAME: 'Numera kampo'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Forigi ĉi tiun agordon'
|
||||
DRAG: 'Ŝovi por rearanĝi ordon de agordoj'
|
||||
LOCKED: 'Ne eblas ŝanĝi ĉi tiujn kampojn'
|
||||
PLURALNAME: 'Redakteblaj agordoj'
|
||||
SINGULARNAME: 'Redaktebla agordo'
|
||||
EditableRadioField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableRadioField:
|
||||
PLURALNAME: 'Radiobutonaj kampoj'
|
||||
SINGULARNAME: 'Radiobutona kampo'
|
||||
EditableTextField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
NUMBERROWS: 'Nombro da vicoj'
|
||||
NUMBERROWS_DESCRIPTION: 'Kampoj kun pli ol unu vico generiĝos kiel tekstareo'
|
||||
PLACEHOLDER: Lokokupilo
|
||||
|
@ -147,30 +174,28 @@ eo:
|
|||
RANGE_TO: al
|
||||
SINGULARNAME: 'Teksta kampo'
|
||||
TEXTLENGTH: 'Longo de teksto'
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Elekti alŝutan dosierujon'
|
||||
FieldEditor:
|
||||
ADD: Aldoni
|
||||
SELECTAFIELD: 'Elekti kampon'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s estas nepra'
|
||||
GridField:
|
||||
Filter: Filtri
|
||||
ResetFilter: Restartigi
|
||||
SiteTree:
|
||||
PLURALNAME: Paĝoj
|
||||
SINGULARNAME: Paĝo
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\Validator:
|
||||
REQUIRED_ERROR: 'Formularaj kampoj ne povas esti nepraj kaj havi kondiĉajn vidigoregulojn.'
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
CUSTOMRULESTAB: 'Propraj reguloj'
|
||||
EMAILCONTENTTAB: 'Retpoŝta enhavo'
|
||||
EMAILDETAILSTAB: 'Retpoŝtaj detaloj'
|
||||
PLURALNAME: 'Propra formularo por retpoŝtaj ricevontoj'
|
||||
SINGULARNAME: 'Propra formularo por retpoŝta ricevonto'
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition:
|
||||
PLURALNAME: 'Retpoŝtaj ricevontaj kondiĉoj de propra formularo'
|
||||
SINGULARNAME: 'Retpoŝta ricevonta kondiĉo de propra formularo'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Elŝuti dosieron'
|
||||
PLURALNAME: 'Senditaj dosieraj kampoj'
|
||||
SINGULARNAME: 'Sendita dosiera kampo'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Senditaj formularoj'
|
||||
SINGULARNAME: 'Sendita formularo'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Senditaj formularaj kampoj'
|
||||
SINGULARNAME: 'Sendita formulara kampo'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
ADDEMAILRECIPIENT: 'Aldoni retpoŝtan ricevonton'
|
||||
CLEARBUTTON: Vakigi
|
||||
CONFIGURATION: Agordaro
|
||||
|
@ -221,28 +246,3 @@ eo:
|
|||
TYPEREPLY: 'Tajpi respondan adreson'
|
||||
TYPESUBJECT: 'Tajpi temon'
|
||||
TYPETO: 'Tajpi al-adreson'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
CUSTOMRULESTAB: 'Propraj reguloj'
|
||||
EMAILCONTENTTAB: 'Retpoŝta enhavo'
|
||||
EMAILDETAILSTAB: 'Retpoŝtaj detaloj'
|
||||
PLURALNAME: 'Propra formularo por retpoŝtaj ricevontoj'
|
||||
SINGULARNAME: 'Propra formularo por retpoŝta ricevonto'
|
||||
UserDefinedForm_EmailRecipientCondition:
|
||||
PLURALNAME: 'Retpoŝtaj ricevontaj kondiĉoj de propra formularo'
|
||||
SINGULARNAME: 'Retpoŝta ricevonta kondiĉo de propra formularo'
|
||||
UserFormFieldEditorExtension:
|
||||
ADD_FIELD: 'Aldoni kampon'
|
||||
ADD_FIELD_GROUP: 'Aldoni kampogrupon'
|
||||
ADD_PAGE_BREAK: 'Aldoni paĝosalton'
|
||||
FORMFIELDS: 'Formularaj kampoj'
|
||||
UserFormValidator:
|
||||
CONDITIONAL_REQUIRED: 'Ne eblas meti nepran kampon ''{name}'' en kondiĉa paĝo'
|
||||
NO_PAGE: 'Trovis kampon ''{name}'' antaŭ iuj paĝoj'
|
||||
UNEXPECTED_BREAK: 'Neatendita paĝosalto ''{name}'' en ingita kampo ''{group}'''
|
||||
UNEXPECTED_GROUP_END: 'troviĝas ''{name}'' sen kongrua grupo'
|
||||
WRONG_GROUP_END: 'trovita ''{name}'' fermas malĝustan grupon ''{group}'''
|
||||
UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Filtri sendaĵojn..'
|
||||
FROM: De
|
||||
TILL: Ĝis
|
||||
WHEREVALUEIS: 'kie valoro estas..'
|
||||
|
|
112
lang/es_ES.yml
|
@ -13,34 +13,26 @@ es_ES:
|
|||
SHOWTHISFIELD: 'Mostrar este campo'
|
||||
VALUE: Valor
|
||||
WHEN: Cuando
|
||||
EditableCheckbox:
|
||||
PLURALNAME: 'Casillas de verificación'
|
||||
SINGULARNAME: 'Campo de casillas de verificación'
|
||||
EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Grupos de casillas de verificación'
|
||||
SINGULARNAME: 'Grupo de casillas de verificación'
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Selectores de país'
|
||||
SINGULARNAME: 'Selector de país'
|
||||
EditableCustomRule:
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Seleccionar carpeta de carga'
|
||||
FieldEditor:
|
||||
ADD: Agregar
|
||||
SELECTAFIELD: 'Seleccionar un campo'
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: Páginas
|
||||
SINGULARNAME: Página
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s es requerido'
|
||||
SilverStripe\Forms\GridField\GridField:
|
||||
Filter: Filtro
|
||||
ResetFilter: Restablecer
|
||||
SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Filtrar envíos.'
|
||||
WHEREVALUEIS: 'donde el valor es'
|
||||
SilverStripe\UserForms\Model\EditableCustomRule:
|
||||
PLURALNAME: 'Reglas personalizadas editables'
|
||||
SINGULARNAME: 'Regla personalizada editable'
|
||||
EditableDateField:
|
||||
PLURALNAME: 'Campos de fecha'
|
||||
SINGULARNAME: 'Campo de fecha'
|
||||
EditableDropdown:
|
||||
PLURALNAME: 'Listas desplegables'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Correos electrónicos'
|
||||
SINGULARNAME: 'Campo de correo electrónico'
|
||||
EditableFieldGroup:
|
||||
PLURALNAME: 'Grupos de campos editables'
|
||||
EditableFieldGroupEnd:
|
||||
FIELD_GROUP_START: 'Grupo {group}'
|
||||
EditableFileField:
|
||||
PLURALNAME: 'Campos subir archivo'
|
||||
SINGULARNAME: 'Campo subir archivo'
|
||||
EditableFormField:
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Agregar
|
||||
ADDLabel: 'Agregar opción'
|
||||
ADDRULE: 'Agregar regla'
|
||||
|
@ -82,58 +74,72 @@ es_ES:
|
|||
VALUE: Valor
|
||||
WHEN: Cuando
|
||||
'YES': Sí
|
||||
EditableFormHeading:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
PLURALNAME: 'Casillas de verificación'
|
||||
SINGULARNAME: 'Campo de casillas de verificación'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Grupos de casillas de verificación'
|
||||
SINGULARNAME: 'Grupo de casillas de verificación'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Selectores de país'
|
||||
SINGULARNAME: 'Selector de país'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: 'Campos de fecha'
|
||||
SINGULARNAME: 'Campo de fecha'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: 'Listas desplegables'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Correos electrónicos'
|
||||
SINGULARNAME: 'Campo de correo electrónico'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup:
|
||||
PLURALNAME: 'Grupos de campos editables'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd:
|
||||
FIELD_GROUP_START: 'Grupo {group}'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
PLURALNAME: 'Campos subir archivo'
|
||||
SINGULARNAME: 'Campo subir archivo'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading:
|
||||
LEVEL: 'Selecionar el nivel del encabezado'
|
||||
PLURALNAME: Encabezados
|
||||
SINGULARNAME: Encabezado
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: '¿Ocultar de los informes?'
|
||||
PLURALNAME: 'Bloques HTML'
|
||||
SINGULARNAME: 'Bloque HTML'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Listado de miembros'
|
||||
SINGULARNAME: 'Listado de miembro'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Campos de opción múltiple'
|
||||
SINGULARNAME: 'Campo de opción múltiple'
|
||||
EditableNumericField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableNumericField:
|
||||
PLURALNAME: 'Campos numéricos'
|
||||
SINGULARNAME: 'Campo numérico'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Remover esta opción'
|
||||
DRAG: 'Arrastrar para reorganizar el orden de las opciones'
|
||||
LOCKED: 'Estos campos no pueden ser modificados'
|
||||
PLURALNAME: 'Opciones editables'
|
||||
SINGULARNAME: 'Opciones editables'
|
||||
EditableTextField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
NUMBERROWS: 'Cantidad de filas'
|
||||
PLURALNAME: 'Campos de texto'
|
||||
SINGULARNAME: 'Campo de texto'
|
||||
TEXTLENGTH: 'Longitud del texto'
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Seleccionar carpeta de carga'
|
||||
FieldEditor:
|
||||
ADD: Agregar
|
||||
SELECTAFIELD: 'Seleccionar un campo'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s es requerido'
|
||||
GridField:
|
||||
Filter: Filtro
|
||||
ResetFilter: Restablecer
|
||||
SiteTree:
|
||||
PLURALNAME: Páginas
|
||||
SINGULARNAME: Página
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'Destinatarios definidos por el usuario'
|
||||
SINGULARNAME: 'Destinatario definido por el usuario'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Descargar archivo'
|
||||
PLURALNAME: 'Archivos enviados'
|
||||
SINGULARNAME: 'Archivo enviado'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Formularios enviados'
|
||||
SINGULARNAME: 'Formulario enviado'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Campos enviados en formulario'
|
||||
SINGULARNAME: 'Campo enviado en formulario'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
ADDEMAILRECIPIENT: 'Agregar destinatario de email'
|
||||
CONFIGURATION: Configuración
|
||||
DESCRIPTION: 'Agrega un formulario personalizable.'
|
||||
|
@ -161,9 +167,3 @@ es_ES:
|
|||
SUBMISSIONS: Propuestas
|
||||
SUBMITBUTTON: Enviar
|
||||
TEXTONSUBMIT: 'Texto en el botón aceptar/submit:'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'Destinatarios definidos por el usuario'
|
||||
SINGULARNAME: 'Destinatario definido por el usuario'
|
||||
UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Filtrar envíos.'
|
||||
WHEREVALUEIS: 'donde el valor es'
|
||||
|
|
|
@ -13,13 +13,9 @@ es_MX:
|
|||
SHOWTHISFIELD: 'Show This Field'
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
EditableFormField:
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Add
|
||||
ADDRULE: 'Add Rule'
|
||||
BLANK: Blank
|
||||
|
@ -46,33 +42,40 @@ es_MX:
|
|||
VALIDATION: Validation
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Member List Fields'
|
||||
SINGULARNAME: 'Member List Field'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Remove this option'
|
||||
DRAG: 'Drag to rearrange order of options'
|
||||
LOCKED: 'These fields cannot be modified'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Download File'
|
||||
PLURALNAME: 'Submitted File Fields'
|
||||
SINGULARNAME: 'Submitted File Field'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Submitted Forms'
|
||||
SINGULARNAME: 'Submitted Form'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Submitted Form Fields'
|
||||
SINGULARNAME: 'Submitted Form Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
EMAILADDRESS: Email
|
||||
EMAILBODY: Body
|
||||
EMAILFROM: From
|
||||
|
@ -92,6 +95,3 @@ es_MX:
|
|||
SUBMISSIONS: Peticiones
|
||||
SUBMITBUTTON: Submit
|
||||
TEXTONSUBMIT: 'Texto en el botón de envío:'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
|
|
|
@ -13,13 +13,9 @@ et_EE:
|
|||
SHOWTHISFIELD: 'Show This Field'
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
EditableFormField:
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Add
|
||||
ADDRULE: 'Add Rule'
|
||||
BLANK: Blank
|
||||
|
@ -48,33 +44,40 @@ et_EE:
|
|||
VALUE: Value
|
||||
WHEN: When
|
||||
'YES': Jah
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Member List Fields'
|
||||
SINGULARNAME: 'Member List Field'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Remove this option'
|
||||
DRAG: 'Drag to rearrange order of options'
|
||||
LOCKED: 'These fields cannot be modified'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Download File'
|
||||
PLURALNAME: 'Submitted File Fields'
|
||||
SINGULARNAME: 'Submitted File Field'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Submitted Forms'
|
||||
SINGULARNAME: 'Submitted Form'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Submitted Form Fields'
|
||||
SINGULARNAME: 'Submitted Form Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
EMAILADDRESS: Email
|
||||
EMAILBODY: Body
|
||||
EMAILFROM: From
|
||||
|
@ -94,6 +97,3 @@ et_EE:
|
|||
SUBMISSIONS: Kaastööd
|
||||
SUBMITBUTTON: Submit
|
||||
TEXTONSUBMIT: 'Kiri saatmise nupul:'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
|
|
|
@ -1,13 +1,20 @@
|
|||
fa_IR:
|
||||
CustomRule:
|
||||
DELETE: حذف
|
||||
EditableDateField:
|
||||
PLURALNAME: 'فیلدهای تاریخ'
|
||||
SINGULARNAME: 'فیلد تاریخ'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'فیلدهای ایمیل'
|
||||
SINGULARNAME: 'فیلد ایمیل'
|
||||
EditableFormField:
|
||||
FieldEditor:
|
||||
ADD: افزودن
|
||||
SELECTAFIELD: 'انتخاب یک فیلد'
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: صفحات
|
||||
SINGULARNAME: صفحه
|
||||
SilverStripe\Forms\GridField\GridField:
|
||||
Filter: پالایش
|
||||
ResetFilter: 'از نو'
|
||||
SilverStripe\UserForms\Extension\UserFormFieldEditorExtension:
|
||||
ADD_FIELD: 'افزودن فیلد'
|
||||
ADD_FIELD_GROUP: 'افزودن فیلد گروهی'
|
||||
FORMFIELDS: 'فیلدهای فرم'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: افزودن
|
||||
DEFAULTTOTODAY: 'تاریخ پیش فرض به امروز؟'
|
||||
DELETE: حذف
|
||||
|
@ -18,32 +25,29 @@ fa_IR:
|
|||
RIGHTTITLE: 'عنوان سمت راست'
|
||||
TITLE: عنوان
|
||||
'YES': بله
|
||||
EditableFormStep:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: 'فیلدهای تاریخ'
|
||||
SINGULARNAME: 'فیلد تاریخ'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'فیلدهای ایمیل'
|
||||
SINGULARNAME: 'فیلد ایمیل'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormStep:
|
||||
TITLE_FIRST: 'صفحه نخست'
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
PLURALNAME: 'بلوک های HTML'
|
||||
SINGULARNAME: 'بلوک HTML'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
DEFAULT: 'انتخاب به عنوان پیش فرض؟'
|
||||
EditableNumericField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableNumericField:
|
||||
PLURALNAME: 'فیلد عددی'
|
||||
RANGE_TO: به
|
||||
SINGULARNAME: 'فیلد عددی'
|
||||
EditableTextField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
NUMBERROWS: 'تعداد سطر ها'
|
||||
RANGE_TO: به
|
||||
FieldEditor:
|
||||
ADD: افزودن
|
||||
SELECTAFIELD: 'انتخاب یک فیلد'
|
||||
GridField:
|
||||
Filter: پالایش
|
||||
ResetFilter: 'از نو'
|
||||
SiteTree:
|
||||
PLURALNAME: صفحات
|
||||
SINGULARNAME: صفحه
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'دانلود فایل'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
CLEARBUTTON: پاککردن
|
||||
DISABLECSRFSECURITYTOKEN: 'غیر فعال کردن CSRF'
|
||||
EMAILADDRESS: 'ایمیل'
|
||||
|
@ -59,7 +63,3 @@ fa_IR:
|
|||
SUBMITBUTTON: 'ثبت کردن'
|
||||
TEXTONCLEAR: 'متن روی دکمه خالی کردن فرم:'
|
||||
TEXTONSUBMIT: 'متن روی دکمه ثبت کردن:'
|
||||
UserFormFieldEditorExtension:
|
||||
ADD_FIELD: 'افزودن فیلد'
|
||||
ADD_FIELD_GROUP: 'افزودن فیلد گروهی'
|
||||
FORMFIELDS: 'فیلدهای فرم'
|
||||
|
|
168
lang/fi_FI.yml
|
@ -13,39 +13,39 @@ fi_FI:
|
|||
SHOWTHISFIELD: 'Näytä tämä kenttä'
|
||||
VALUE: 'On sama kuin'
|
||||
WHEN: Kun
|
||||
EditableCheckbox:
|
||||
PLURALNAME: Valintaruudut
|
||||
SINGULARNAME: Valintaruutukenttä
|
||||
EditableCheckboxGroupField:
|
||||
PLURALNAME: Valintaruutu-ryhmät
|
||||
SINGULARNAME: Valintaruutu-ryhmä
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: Maavalikot
|
||||
SINGULARNAME: Maavalikko
|
||||
EditableCustomRule:
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Valitse siirtokansio'
|
||||
FieldEditor:
|
||||
ADD: Lisää
|
||||
SELECTAFIELD: 'Valitse kenttä'
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: Sivut
|
||||
SINGULARNAME: Sivu
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s vaaditaan'
|
||||
SilverStripe\Forms\GridField\GridField:
|
||||
Filter: Suodin
|
||||
ResetFilter: Nollaa
|
||||
SilverStripe\UserForms\Extension\UserFormFieldEditorExtension:
|
||||
ADD_FIELD: 'Lisää kenttä'
|
||||
ADD_FIELD_GROUP: 'Lisää kenttäryhmä'
|
||||
ADD_PAGE_BREAK: 'Lisää sivunvaihto'
|
||||
FORMFIELDS: Lomakekentät
|
||||
SilverStripe\UserForms\Extension\UserFormValidator:
|
||||
CONDITIONAL_REQUIRED: 'Pakollista kenttää ''{name}'' ei voida sijoittaa ehdolliseen sivuun'
|
||||
NO_PAGE: 'Kenttä ''{name}'' löydetty ennen yhtään sivua'
|
||||
UNEXPECTED_BREAK: 'Odottamaton sivunvaihto ''{name}'' sisäkkäisestä kentästä: ''{group}'''
|
||||
UNEXPECTED_GROUP_END: '''{name}'' löydetty ilman vastaavaa ryhmää'
|
||||
WRONG_GROUP_END: '''{name}'' sulkee väärän ryhmän: ''{group}'''
|
||||
SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Suodata lomakkeella lähetettyjä...'
|
||||
FROM: Lähettäjä
|
||||
TILL: Asti
|
||||
WHEREVALUEIS: 'jonka arvo on...'
|
||||
SilverStripe\UserForms\Model\EditableCustomRule:
|
||||
PLURALNAME: 'Muokattavat mukautetut säännöt'
|
||||
SINGULARNAME: 'Muokattava mukautettu sääntö'
|
||||
EditableDateField:
|
||||
PLURALNAME: Päivämääräkentät
|
||||
SINGULARNAME: Päivämääräkenttä
|
||||
EditableDropdown:
|
||||
PLURALNAME: Pudotusvalikot
|
||||
SINGULARNAME: Pudotusvalikko
|
||||
EditableEmailField:
|
||||
PLURALNAME: Sähköpostikentät
|
||||
SINGULARNAME: Sähköpostikenttä
|
||||
EditableFieldGroup:
|
||||
PLURALNAME: 'Muokattavat kenttäryhmät'
|
||||
SINGULARNAME: 'Muokattava kenttäryhmä'
|
||||
EditableFieldGroupEnd:
|
||||
FIELD_GROUP_END: '{group} loppu'
|
||||
FIELD_GROUP_START: 'Ryhmä {ryhmä}'
|
||||
PLURALNAME: 'Muokattavien kenttäryhmien loppu'
|
||||
SINGULARNAME: 'Muokattavan kenttäryhmän loppu'
|
||||
EditableFileField:
|
||||
PLURALNAME: Tiedostonlähettämiskentät
|
||||
SINGULARNAME: Tiedostonlähettämiskenttä
|
||||
EditableFormField:
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Lisää
|
||||
ADDLabel: 'Lisää valinta'
|
||||
ADDRULE: 'Lisää sääntö'
|
||||
|
@ -98,48 +98,75 @@ fi_FI:
|
|||
VALUE: 'On sama kuin'
|
||||
WHEN: Kun
|
||||
'YES': Kyllä
|
||||
EditableFormFieldValidator:
|
||||
REQUIRED_ERROR: 'Lomakekentät eivät voi olla pakollisia ja sisältää ehdollisia näyttösääntöjä'
|
||||
EditableFormHeading:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
PLURALNAME: Valintaruudut
|
||||
SINGULARNAME: Valintaruutukenttä
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
PLURALNAME: Valintaruutu-ryhmät
|
||||
SINGULARNAME: Valintaruutu-ryhmä
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: Maavalikot
|
||||
SINGULARNAME: Maavalikko
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: Päivämääräkentät
|
||||
SINGULARNAME: Päivämääräkenttä
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: Pudotusvalikot
|
||||
SINGULARNAME: Pudotusvalikko
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: Sähköpostikentät
|
||||
SINGULARNAME: Sähköpostikenttä
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup:
|
||||
PLURALNAME: 'Muokattavat kenttäryhmät'
|
||||
SINGULARNAME: 'Muokattava kenttäryhmä'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd:
|
||||
FIELD_GROUP_END: '{group} loppu'
|
||||
FIELD_GROUP_START: 'Ryhmä {ryhmä}'
|
||||
PLURALNAME: 'Muokattavien kenttäryhmien loppu'
|
||||
SINGULARNAME: 'Muokattavan kenttäryhmän loppu'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
PLURALNAME: Tiedostonlähettämiskentät
|
||||
SINGULARNAME: Tiedostonlähettämiskenttä
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading:
|
||||
LEVEL: 'Valitse otsikkotaso'
|
||||
PLURALNAME: Otsikot
|
||||
SINGULARNAME: Otsikko
|
||||
EditableFormStep:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormStep:
|
||||
PLURALNAME: Sivuvaihdot
|
||||
SINGULARNAME: Sivunvaihto
|
||||
STEP_TITLE: 'Sivu {page}'
|
||||
TITLE_FIRST: 'Ensimmäinen sivu'
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
CONTENT: HTML
|
||||
HIDEFROMREPORT: 'Piilota raporteista?'
|
||||
HIDELABEL: 'Piilota ''Otsikko'' näytettävältä lomakkeelta?'
|
||||
PLURALNAME: HTML-alueet
|
||||
SINGULARNAME: HTML-alue
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: Jäsenlistakentät
|
||||
SINGULARNAME: Jäsenlistakenttä
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
DEFAULT: 'Valittu oletuksena?'
|
||||
OPTIONSTAB: Valinnat
|
||||
PLURALNAME: 'Muokattavat monivalintakentät'
|
||||
SINGULARNAME: 'Muokattava monivalintakenttä'
|
||||
TITLE: Otsikko
|
||||
VALUE: Arvo
|
||||
EditableNumericField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableNumericField:
|
||||
PLURALNAME: 'Numeeriset kentät'
|
||||
RANGE: 'Sallittu numeerinen väli'
|
||||
RANGE_TO: –
|
||||
SINGULARNAME: 'Numeerinen kenttä'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Poista tämä valinta'
|
||||
DRAG: 'Raahaa muuttaaksesi valintojen järjestystä'
|
||||
LOCKED: 'Näitä kenttiä ei voi muokata'
|
||||
PLURALNAME: 'Muokattavat vaihtoehdot'
|
||||
SINGULARNAME: 'Muokattava vaihtoehto'
|
||||
EditableRadioField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableRadioField:
|
||||
PLURALNAME: Radiopainikkeet
|
||||
SINGULARNAME: Radiopainike
|
||||
EditableTextField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
NUMBERROWS: 'Rivien määrä'
|
||||
NUMBERROWS_DESCRIPTION: 'Kenttät, joissa on enemmän kuin yksi rivi, luodaan tekstialueena.'
|
||||
PLACEHOLDER: Opastusteksti
|
||||
|
@ -147,30 +174,28 @@ fi_FI:
|
|||
RANGE_TO: –
|
||||
SINGULARNAME: Tekstikenttä
|
||||
TEXTLENGTH: 'Tekstin pituus'
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Valitse siirtokansio'
|
||||
FieldEditor:
|
||||
ADD: Lisää
|
||||
SELECTAFIELD: 'Valitse kenttä'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s vaaditaan'
|
||||
GridField:
|
||||
Filter: Suodin
|
||||
ResetFilter: Nollaa
|
||||
SiteTree:
|
||||
PLURALNAME: Sivut
|
||||
SINGULARNAME: Sivu
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\Validator:
|
||||
REQUIRED_ERROR: 'Lomakekentät eivät voi olla pakollisia ja sisältää ehdollisia näyttösääntöjä'
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
CUSTOMRULESTAB: 'Mukautetut säännöt'
|
||||
EMAILCONTENTTAB: 'Sähköpostin sisältö'
|
||||
EMAILDETAILSTAB: 'Sähköpostin tiedot'
|
||||
PLURALNAME: 'Lomakkeen vastaanottosähköpostit'
|
||||
SINGULARNAME: 'Lomakkeen vastaanottosähköposti'
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition:
|
||||
PLURALNAME: 'User Defined Form sähköpostien vastaanoton säännöt'
|
||||
SINGULARNAME: 'User Defined Form sähköpostin vastaanoton sääntö'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Lataa tiedosto'
|
||||
PLURALNAME: 'Lähetetyt tiedostokentät'
|
||||
SINGULARNAME: 'Lähetetty tiedostokenttä'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Lähetetyt lomakkeet'
|
||||
SINGULARNAME: 'Lähetetty lomake'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Lähetetyt lomakekentät'
|
||||
SINGULARNAME: 'Lähetetty lomakekenttä'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
ADDEMAILRECIPIENT: 'Lisää sähköpostin vastaanottaja'
|
||||
CLEARBUTTON: Tyhjennä
|
||||
CONFIGURATION: Asetukset
|
||||
|
@ -221,28 +246,3 @@ fi_FI:
|
|||
TYPEREPLY: 'Kirjoita vastausosoite'
|
||||
TYPESUBJECT: 'Kirjoita otsikko'
|
||||
TYPETO: 'Kirjoita vastaanottajan osoite'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
CUSTOMRULESTAB: 'Mukautetut säännöt'
|
||||
EMAILCONTENTTAB: 'Sähköpostin sisältö'
|
||||
EMAILDETAILSTAB: 'Sähköpostin tiedot'
|
||||
PLURALNAME: 'Lomakkeen vastaanottosähköpostit'
|
||||
SINGULARNAME: 'Lomakkeen vastaanottosähköposti'
|
||||
UserDefinedForm_EmailRecipientCondition:
|
||||
PLURALNAME: 'User Defined Form sähköpostien vastaanoton säännöt'
|
||||
SINGULARNAME: 'User Defined Form sähköpostin vastaanoton sääntö'
|
||||
UserFormFieldEditorExtension:
|
||||
ADD_FIELD: 'Lisää kenttä'
|
||||
ADD_FIELD_GROUP: 'Lisää kenttäryhmä'
|
||||
ADD_PAGE_BREAK: 'Lisää sivunvaihto'
|
||||
FORMFIELDS: Lomakekentät
|
||||
UserFormValidator:
|
||||
CONDITIONAL_REQUIRED: 'Pakollista kenttää ''{name}'' ei voida sijoittaa ehdolliseen sivuun'
|
||||
NO_PAGE: 'Kenttä ''{name}'' löydetty ennen yhtään sivua'
|
||||
UNEXPECTED_BREAK: 'Odottamaton sivunvaihto ''{name}'' sisäkkäisestä kentästä: ''{group}'''
|
||||
UNEXPECTED_GROUP_END: '''{name}'' löydetty ilman vastaavaa ryhmää'
|
||||
WRONG_GROUP_END: '''{name}'' sulkee väärän ryhmän: ''{group}'''
|
||||
UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Suodata lomakkeella lähetettyjä...'
|
||||
FROM: Lähettäjä
|
||||
TILL: Asti
|
||||
WHEREVALUEIS: 'jonka arvo on...'
|
||||
|
|
|
@ -13,13 +13,9 @@ fr_FR:
|
|||
SHOWTHISFIELD: 'Show This Field'
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Champs email'
|
||||
SINGULARNAME: 'Champ email'
|
||||
EditableFormField:
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Add
|
||||
ADDRULE: 'Add Rule'
|
||||
BLANK: Blank
|
||||
|
@ -46,33 +42,40 @@ fr_FR:
|
|||
VALIDATION: Validation
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Champs email'
|
||||
SINGULARNAME: 'Champ email'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Member List Fields'
|
||||
SINGULARNAME: 'Member List Field'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Remove this option'
|
||||
DRAG: 'Drag to rearrange order of options'
|
||||
LOCKED: 'These fields cannot be modified'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Download File'
|
||||
PLURALNAME: 'Submitted File Fields'
|
||||
SINGULARNAME: 'Submitted File Field'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Submitted Forms'
|
||||
SINGULARNAME: 'Submitted Form'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Submitted Form Fields'
|
||||
SINGULARNAME: 'Submitted Form Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
EMAILADDRESS: Email
|
||||
EMAILBODY: Body
|
||||
EMAILFROM: From
|
||||
|
@ -94,6 +97,3 @@ fr_FR:
|
|||
SUBMISSIONS: Soumissions
|
||||
SUBMITBUTTON: Submit
|
||||
TEXTONSUBMIT: 'Texte du bouton Envoyer :'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
|
|
|
@ -13,25 +13,12 @@ hr_HR:
|
|||
SHOWTHISFIELD: 'Show This Field'
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableCheckbox:
|
||||
PLURALNAME: Checkboxes
|
||||
SINGULARNAME: 'Checkbox Field'
|
||||
EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Checkbox Groups'
|
||||
SINGULARNAME: 'Checkbox Group'
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
EditableDateField:
|
||||
PLURALNAME: 'Date Fields'
|
||||
SINGULARNAME: 'Date Field'
|
||||
EditableDropdown:
|
||||
PLURALNAME: Dropdowns
|
||||
SINGULARNAME: 'Dropdown Field'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
EditableFormField:
|
||||
FieldEditor:
|
||||
ADD: Dodaj
|
||||
SELECTAFIELD: 'Select a Field'
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Add
|
||||
ADDRULE: 'Add Rule'
|
||||
BLANK: Blank
|
||||
|
@ -58,36 +45,52 @@ hr_HR:
|
|||
VALIDATION: Validation
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
PLURALNAME: Checkboxes
|
||||
SINGULARNAME: 'Checkbox Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Checkbox Groups'
|
||||
SINGULARNAME: 'Checkbox Group'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: 'Date Fields'
|
||||
SINGULARNAME: 'Date Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: Dropdowns
|
||||
SINGULARNAME: 'Dropdown Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Member List Fields'
|
||||
SINGULARNAME: 'Member List Field'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Remove this option'
|
||||
DRAG: 'Drag to rearrange order of options'
|
||||
LOCKED: 'These fields cannot be modified'
|
||||
FieldEditor:
|
||||
ADD: Dodaj
|
||||
SELECTAFIELD: 'Select a Field'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Download File'
|
||||
PLURALNAME: 'Submitted File Fields'
|
||||
SINGULARNAME: 'Submitted File Field'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Submitted Forms'
|
||||
SINGULARNAME: 'Submitted Form'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Submitted Form Fields'
|
||||
SINGULARNAME: 'Submitted Form Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
EMAILADDRESS: Email
|
||||
EMAILBODY: Body
|
||||
EMAILFROM: From
|
||||
|
@ -107,6 +110,3 @@ hr_HR:
|
|||
SUBMISSIONS: Submissions
|
||||
SUBMITBUTTON: Submit
|
||||
TEXTONSUBMIT: 'Text on submit button:'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
|
|
|
@ -9,7 +9,10 @@ id:
|
|||
NOTBLANK: 'Tidak Kosong'
|
||||
VALUE: Nilai
|
||||
WHEN: Ketika
|
||||
EditableFormField:
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: Halaman
|
||||
SINGULARNAME: Halaman
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Tambah
|
||||
ADDLabel: 'Tambah pilihan'
|
||||
BLANK: Kosong
|
||||
|
@ -21,6 +24,3 @@ id:
|
|||
MINVALUE: 'Nilai Min'
|
||||
SHOW: Tampilkan
|
||||
VALIDATION: Validasi
|
||||
SiteTree:
|
||||
PLURALNAME: Halaman
|
||||
SINGULARNAME: Halaman
|
||||
|
|
168
lang/it.yml
|
@ -13,39 +13,39 @@ it:
|
|||
SHOWTHISFIELD: 'Mostra questo campo'
|
||||
VALUE: Valore
|
||||
WHEN: Quando
|
||||
EditableCheckbox:
|
||||
PLURALNAME: 'Caselle di controllo'
|
||||
SINGULARNAME: 'Campo casella di controllo'
|
||||
EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Gruppi di caselle di controllo'
|
||||
SINGULARNAME: 'Gruppo di caselle di controllo'
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Menù a tendina Nazioni'
|
||||
SINGULARNAME: 'Menù a tendina Nazioni'
|
||||
EditableCustomRule:
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Seleziona la cartella di caricamento'
|
||||
FieldEditor:
|
||||
ADD: Aggiungi
|
||||
SELECTAFIELD: 'Seleziona un campo'
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: Pagine
|
||||
SINGULARNAME: Pagina
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s è richiesto'
|
||||
SilverStripe\Forms\GridField\GridField:
|
||||
Filter: Filtro
|
||||
ResetFilter: Reset
|
||||
SilverStripe\UserForms\Extension\UserFormFieldEditorExtension:
|
||||
ADD_FIELD: 'Aggiungi campo'
|
||||
ADD_FIELD_GROUP: 'Aggiungi gruppo di campi'
|
||||
ADD_PAGE_BREAK: 'Aggiungi interruzione di pagina'
|
||||
FORMFIELDS: 'Campi del modulo'
|
||||
SilverStripe\UserForms\Extension\UserFormValidator:
|
||||
CONDITIONAL_REQUIRED: 'Il campo richiesto ''{name}'' non può essere posizionato all''interno di una pagina condizionale'
|
||||
NO_PAGE: 'Il campo ''{name}'' è stato trovato prima di una qualunque pagina'
|
||||
UNEXPECTED_BREAK: 'Interruzione di pagina ''{name}'' inattesa all''interno del campo nidificato ''{group}'''
|
||||
UNEXPECTED_GROUP_END: '''{name}'' trovato senza un gruppo corrispondente'
|
||||
WRONG_GROUP_END: '''{name}'' trovato chiude il gruppo sbagliato ''{group}'''
|
||||
SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Filtra invii..'
|
||||
FROM: Da
|
||||
TILL: 'Fino a'
|
||||
WHEREVALUEIS: 'dove il valore è..'
|
||||
SilverStripe\UserForms\Model\EditableCustomRule:
|
||||
PLURALNAME: 'Regole personalizzate modificabili'
|
||||
SINGULARNAME: 'Regola personalizzata modificabile'
|
||||
EditableDateField:
|
||||
PLURALNAME: 'Campi date'
|
||||
SINGULARNAME: 'Campo data'
|
||||
EditableDropdown:
|
||||
PLURALNAME: 'Menù a tendina'
|
||||
SINGULARNAME: 'Campo menù a tendina'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Campi e-mail'
|
||||
SINGULARNAME: 'Campo e-mail'
|
||||
EditableFieldGroup:
|
||||
PLURALNAME: 'Gruppi di campi modificabili'
|
||||
SINGULARNAME: 'Gruppo di campi modificabili'
|
||||
EditableFieldGroupEnd:
|
||||
FIELD_GROUP_END: 'fine {group}'
|
||||
FIELD_GROUP_START: 'Gruppo {group}'
|
||||
PLURALNAME: 'Fine dei gruppi di campi modificabili'
|
||||
SINGULARNAME: 'Fine del gruppo di campi modificabili'
|
||||
EditableFileField:
|
||||
PLURALNAME: 'Campi di caricamento file'
|
||||
SINGULARNAME: 'Campo di caricamento file'
|
||||
EditableFormField:
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Aggiungi
|
||||
ADDLabel: 'Aggiungi opzione'
|
||||
ADDRULE: 'Aggiungi regola'
|
||||
|
@ -98,48 +98,75 @@ it:
|
|||
VALUE: Valore
|
||||
WHEN: Quando
|
||||
'YES': Si
|
||||
EditableFormFieldValidator:
|
||||
REQUIRED_ERROR: 'I campi dei form non possono essere obbligatori e avere regole di visualizzazione condizionali.'
|
||||
EditableFormHeading:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
PLURALNAME: 'Caselle di controllo'
|
||||
SINGULARNAME: 'Campo casella di controllo'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Gruppi di caselle di controllo'
|
||||
SINGULARNAME: 'Gruppo di caselle di controllo'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Menù a tendina Nazioni'
|
||||
SINGULARNAME: 'Menù a tendina Nazioni'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: 'Campi date'
|
||||
SINGULARNAME: 'Campo data'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: 'Menù a tendina'
|
||||
SINGULARNAME: 'Campo menù a tendina'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Campi e-mail'
|
||||
SINGULARNAME: 'Campo e-mail'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup:
|
||||
PLURALNAME: 'Gruppi di campi modificabili'
|
||||
SINGULARNAME: 'Gruppo di campi modificabili'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd:
|
||||
FIELD_GROUP_END: 'fine {group}'
|
||||
FIELD_GROUP_START: 'Gruppo {group}'
|
||||
PLURALNAME: 'Fine dei gruppi di campi modificabili'
|
||||
SINGULARNAME: 'Fine del gruppo di campi modificabili'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
PLURALNAME: 'Campi di caricamento file'
|
||||
SINGULARNAME: 'Campo di caricamento file'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading:
|
||||
LEVEL: 'Seleziona livello di intestazione'
|
||||
PLURALNAME: Intestazioni
|
||||
SINGULARNAME: Intestazione
|
||||
EditableFormStep:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormStep:
|
||||
PLURALNAME: 'Interruzioni di pagina'
|
||||
SINGULARNAME: 'Interruzione di pagina'
|
||||
STEP_TITLE: 'Pagina {page}'
|
||||
TITLE_FIRST: 'Prima pagina'
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
CONTENT: HTML
|
||||
HIDEFROMREPORT: 'Nascondi dai rapporti?'
|
||||
HIDELABEL: 'Nascondi etichetta ''Titolo'' dal frontend?'
|
||||
PLURALNAME: 'Blocchi HTML'
|
||||
SINGULARNAME: 'Blocco HTML'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Campi lista membri'
|
||||
SINGULARNAME: 'Campo lista membri'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
DEFAULT: 'Selezionato di default?'
|
||||
OPTIONSTAB: Opzioni
|
||||
PLURALNAME: 'Campi a opzione multipla editabili'
|
||||
SINGULARNAME: 'Campo a opzione multipla editabili'
|
||||
TITLE: Titolo
|
||||
VALUE: Valore
|
||||
EditableNumericField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableNumericField:
|
||||
PLURALNAME: 'Campi numerici'
|
||||
RANGE: 'Intervallo numerico ammesso'
|
||||
RANGE_TO: 'fino a'
|
||||
SINGULARNAME: 'Campo numerico'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Rimuovi questa opzione'
|
||||
DRAG: 'Trascina per modificare l''ordine delle opzioni'
|
||||
LOCKED: 'Questi campi non possono essere modificati'
|
||||
PLURALNAME: 'Opzioni modificabili'
|
||||
SINGULARNAME: 'Opzione modificabile'
|
||||
EditableRadioField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableRadioField:
|
||||
PLURALNAME: 'Gruppi di pulsanti a scelta singola'
|
||||
SINGULARNAME: 'Gruppo di pulsanti a scelta singola'
|
||||
EditableTextField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
NUMBERROWS: 'Numero di righe'
|
||||
NUMBERROWS_DESCRIPTION: 'Campi con più di una riga verranno generati come area testo'
|
||||
PLACEHOLDER: Segnaposto
|
||||
|
@ -147,30 +174,28 @@ it:
|
|||
RANGE_TO: a
|
||||
SINGULARNAME: 'Campo testo'
|
||||
TEXTLENGTH: 'Lunghezza testo consentita'
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Seleziona la cartella di caricamento'
|
||||
FieldEditor:
|
||||
ADD: Aggiungi
|
||||
SELECTAFIELD: 'Seleziona un campo'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s è richiesto'
|
||||
GridField:
|
||||
Filter: Filtro
|
||||
ResetFilter: Reset
|
||||
SiteTree:
|
||||
PLURALNAME: Pagine
|
||||
SINGULARNAME: Pagina
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\Validator:
|
||||
REQUIRED_ERROR: 'I campi dei form non possono essere obbligatori e avere regole di visualizzazione condizionali.'
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
CUSTOMRULESTAB: 'Regole personalizzate'
|
||||
EMAILCONTENTTAB: 'Contenuto dell''e-mail'
|
||||
EMAILDETAILSTAB: 'Dettagli dell''e-mail'
|
||||
PLURALNAME: 'Destinatari e-mail del modulo definito dall''utente'
|
||||
SINGULARNAME: 'Destinatario e-mail del modulo definito dall''utente'
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition:
|
||||
PLURALNAME: 'Condizioni per il destinatario del modulo definito dall''utente'
|
||||
SINGULARNAME: 'Condizione per il destinatario del modulo definito dall''utente'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Scarica file'
|
||||
PLURALNAME: 'Campi file inviati'
|
||||
SINGULARNAME: 'Campo file inviati'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Moduli inviati'
|
||||
SINGULARNAME: 'Modulo inviato'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Campi moduli inviati'
|
||||
SINGULARNAME: 'Campo modulo inviato'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
ADDEMAILRECIPIENT: 'Aggiungi destinatario e-mail'
|
||||
CLEARBUTTON: Azzera
|
||||
CONFIGURATION: Configurazione
|
||||
|
@ -221,28 +246,3 @@ it:
|
|||
TYPEREPLY: 'Inserisci l''e-mail di risposta'
|
||||
TYPESUBJECT: 'Inserisci l''oggetto'
|
||||
TYPETO: 'Inserisci l''e-mail destinatario'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
CUSTOMRULESTAB: 'Regole personalizzate'
|
||||
EMAILCONTENTTAB: 'Contenuto dell''e-mail'
|
||||
EMAILDETAILSTAB: 'Dettagli dell''e-mail'
|
||||
PLURALNAME: 'Destinatari e-mail del modulo definito dall''utente'
|
||||
SINGULARNAME: 'Destinatario e-mail del modulo definito dall''utente'
|
||||
UserDefinedForm_EmailRecipientCondition:
|
||||
PLURALNAME: 'Condizioni per il destinatario del modulo definito dall''utente'
|
||||
SINGULARNAME: 'Condizione per il destinatario del modulo definito dall''utente'
|
||||
UserFormFieldEditorExtension:
|
||||
ADD_FIELD: 'Aggiungi campo'
|
||||
ADD_FIELD_GROUP: 'Aggiungi gruppo di campi'
|
||||
ADD_PAGE_BREAK: 'Aggiungi interruzione di pagina'
|
||||
FORMFIELDS: 'Campi del modulo'
|
||||
UserFormValidator:
|
||||
CONDITIONAL_REQUIRED: 'Il campo richiesto ''{name}'' non può essere posizionato all''interno di una pagina condizionale'
|
||||
NO_PAGE: 'Il campo ''{name}'' è stato trovato prima di una qualunque pagina'
|
||||
UNEXPECTED_BREAK: 'Interruzione di pagina ''{name}'' inattesa all''interno del campo nidificato ''{group}'''
|
||||
UNEXPECTED_GROUP_END: '''{name}'' trovato senza un gruppo corrispondente'
|
||||
WRONG_GROUP_END: '''{name}'' trovato chiude il gruppo sbagliato ''{group}'''
|
||||
UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Filtra invii..'
|
||||
FROM: Da
|
||||
TILL: 'Fino a'
|
||||
WHEREVALUEIS: 'dove il valore è..'
|
||||
|
|
14
lang/ja.yml
|
@ -1,15 +1,18 @@
|
|||
ja:
|
||||
EditableEmailField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: メールフィールド
|
||||
SINGULARNAME: メールフィールド
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'レポートから隠しますか?'
|
||||
PLURALNAME: HTMLブロック
|
||||
SINGULARNAME: HTMLブロック
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 編集可能なマルチオプションフィールド
|
||||
SINGULARNAME: 編集可能なマルチオプションフィールド
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'ユーザー定義フォームのメール受信者'
|
||||
SINGULARNAME: 'ユーザー定義フォームのメール受信者'
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
EMAILADDRESS: メール
|
||||
EMAILBODY: ボディ
|
||||
EMAILFROM: '送信者'
|
||||
|
@ -29,6 +32,3 @@ ja:
|
|||
SINGULARNAME: 'ユーザー定義フォーム'
|
||||
SUBMITBUTTON: 送信
|
||||
TEXTONSUBMIT: '送信ボタンのテキスト:'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'ユーザー定義フォームのメール受信者'
|
||||
SINGULARNAME: 'ユーザー定義フォームのメール受信者'
|
||||
|
|
100
lang/mi.yml
|
@ -13,28 +13,21 @@ mi:
|
|||
SHOWTHISFIELD: 'Whakaaturia Tēnei Āpure'
|
||||
VALUE: Uara
|
||||
WHEN: Ina
|
||||
EditableCheckbox:
|
||||
PLURALNAME: 'Ngā Pouakataki'
|
||||
SINGULARNAME: 'Āpure Pouakataki'
|
||||
EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Ngā Rōpū Pouakataki'
|
||||
SINGULARNAME: 'Rōpū Pouakataki'
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Ngā Takaiho Whenua'
|
||||
SINGULARNAME: 'Takaiho Whenua'
|
||||
EditableDateField:
|
||||
PLURALNAME: 'Ngā Āpure Rā'
|
||||
SINGULARNAME: 'Āpure Rā'
|
||||
EditableDropdown:
|
||||
PLURALNAME: 'Ngā Takaiho'
|
||||
SINGULARNAME: 'Āpure Takaiho'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Ngā Āpure Īmēra'
|
||||
SINGULARNAME: 'Āpure Īmēra'
|
||||
EditableFileField:
|
||||
PLURALNAME: 'Ngā Āpure Tukuatu Kōnae'
|
||||
SINGULARNAME: 'Āpure Tukuatu Kōnae'
|
||||
EditableFormField:
|
||||
FieldEditor:
|
||||
ADD: Tāpiri
|
||||
SELECTAFIELD: 'Tīpakohia tētahi Āpure'
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: 'Ngā Whārangi'
|
||||
SINGULARNAME: Whārangi
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: 'Kei te hiahiatia te %s'
|
||||
SilverStripe\Forms\GridField\GridField:
|
||||
Filter: Tātari
|
||||
ResetFilter: 'Tautuhi Anō'
|
||||
SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Ngā Tukunga Tātari...'
|
||||
WHEREVALUEIS: 'ko te uara ko...'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Tāpiri
|
||||
ADDRULE: 'Tāpiri Ture'
|
||||
BLANK: Pātea
|
||||
|
@ -71,56 +64,69 @@ mi:
|
|||
VALIDATION: Manatokonga
|
||||
VALUE: Uara
|
||||
WHEN: Ina
|
||||
EditableFormHeading:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
PLURALNAME: 'Ngā Pouakataki'
|
||||
SINGULARNAME: 'Āpure Pouakataki'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Ngā Rōpū Pouakataki'
|
||||
SINGULARNAME: 'Rōpū Pouakataki'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Ngā Takaiho Whenua'
|
||||
SINGULARNAME: 'Takaiho Whenua'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: 'Ngā Āpure Rā'
|
||||
SINGULARNAME: 'Āpure Rā'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: 'Ngā Takaiho'
|
||||
SINGULARNAME: 'Āpure Takaiho'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Ngā Āpure Īmēra'
|
||||
SINGULARNAME: 'Āpure Īmēra'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
PLURALNAME: 'Ngā Āpure Tukuatu Kōnae'
|
||||
SINGULARNAME: 'Āpure Tukuatu Kōnae'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading:
|
||||
LEVEL: 'Kōwhiri Taumata Pane'
|
||||
PLURALNAME: 'Ngā Pane'
|
||||
SINGULARNAME: Pane
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hunaia i ngā pūrongo?'
|
||||
PLURALNAME: 'Ngā Poraka HTML'
|
||||
SINGULARNAME: 'Poraka HTML'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Ngā Āpure Rārangi Mema'
|
||||
SINGULARNAME: 'Āpure Rārangi Mema'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Ngā Āpure Kōwhiringa Maha Whakatika'
|
||||
SINGULARNAME: 'Āpure Kōwhiringa Maha Whakatika'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Tangohia tēnei kōwhiringa'
|
||||
DRAG: 'Tōia hei hurinaha i te raupapa kōwhiringa'
|
||||
LOCKED: 'Kāore e taea te whakakē ēnei āpure'
|
||||
PLURALNAME: 'Ngā Kōwhiringa Whakatika'
|
||||
SINGULARNAME: 'Kōwhiringa Whakatika'
|
||||
EditableRadioField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableRadioField:
|
||||
PLURALNAME: 'Ngā āpure irirangi'
|
||||
SINGULARNAME: 'Āpure irirangi'
|
||||
EditableTextField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
NUMBERROWS: 'Maha kapa'
|
||||
PLURALNAME: 'Ngā Āpure Tuhinga'
|
||||
SINGULARNAME: 'Āpure Tuhinga'
|
||||
TEXTLENGTH: 'Roa tuhinga'
|
||||
FieldEditor:
|
||||
ADD: Tāpiri
|
||||
SELECTAFIELD: 'Tīpakohia tētahi Āpure'
|
||||
Form:
|
||||
FIELDISREQUIRED: 'Kei te hiahiatia te %s'
|
||||
GridField:
|
||||
Filter: Tātari
|
||||
ResetFilter: 'Tautuhi Anō'
|
||||
SiteTree:
|
||||
PLURALNAME: 'Ngā Whārangi'
|
||||
SINGULARNAME: Whārangi
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'Ngā Kaiwhiwhi Īmēra Puka Tautuhi ā-Kaiwhakamahi'
|
||||
SINGULARNAME: 'Kaiwhiwhi Īmēra Puka Tautuhi ā-Kaiwhakamahi'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Tikiake Kōnae'
|
||||
PLURALNAME: 'Ngā Āpure Kōnae Kua Tukuna'
|
||||
SINGULARNAME: 'Āpure Kōnae Kua Tukuna'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Ngā Puka Kua Tukuna'
|
||||
SINGULARNAME: 'Puka Kua Tukuna'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Ngā Āpure Puka Kua Tukuna'
|
||||
SINGULARNAME: 'Āpure Puka Kua Tukuna'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
ADDEMAILRECIPIENT: 'Tāpiri Kaiwhirhi Īmēra'
|
||||
CONFIGURATION: Whirihoranga
|
||||
DESCRIPTION: 'Ka tāpiri i te puka ka taea te whakarite.'
|
||||
|
@ -146,9 +152,3 @@ mi:
|
|||
SUBMISSIONS: 'Ngā Tukunga'
|
||||
SUBMITBUTTON: Tuku
|
||||
TEXTONSUBMIT: 'Kuputuhi i te pātene tuku:'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'Ngā Kaiwhiwhi Īmēra Puka Tautuhi ā-Kaiwhakamahi'
|
||||
SINGULARNAME: 'Kaiwhiwhi Īmēra Puka Tautuhi ā-Kaiwhakamahi'
|
||||
UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Ngā Tukunga Tātari...'
|
||||
WHEREVALUEIS: 'ko te uara ko...'
|
||||
|
|
|
@ -13,13 +13,9 @@ ms_MY:
|
|||
SHOWTHISFIELD: 'Show This Field'
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
EditableFormField:
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Add
|
||||
ADDRULE: 'Add Rule'
|
||||
BLANK: Blank
|
||||
|
@ -46,33 +42,40 @@ ms_MY:
|
|||
VALIDATION: Validation
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Member List Fields'
|
||||
SINGULARNAME: 'Member List Field'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Remove this option'
|
||||
DRAG: 'Drag to rearrange order of options'
|
||||
LOCKED: 'These fields cannot be modified'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Download File'
|
||||
PLURALNAME: 'Submitted File Fields'
|
||||
SINGULARNAME: 'Submitted File Field'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Submitted Forms'
|
||||
SINGULARNAME: 'Submitted Form'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Submitted Form Fields'
|
||||
SINGULARNAME: 'Submitted Form Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
EMAILADDRESS: Email
|
||||
EMAILBODY: Body
|
||||
EMAILFROM: From
|
||||
|
@ -92,6 +95,3 @@ ms_MY:
|
|||
SUBMISSIONS: Kiriman
|
||||
SUBMITBUTTON: Submit
|
||||
TEXTONSUBMIT: 'Teks di atas butang hantar:'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
|
|
100
lang/nb_NO.yml
|
@ -13,28 +13,21 @@ nb_NO:
|
|||
SHOWTHISFIELD: 'Vis dette feltet'
|
||||
VALUE: Verdi
|
||||
WHEN: Når
|
||||
EditableCheckbox:
|
||||
PLURALNAME: Avkrysningsbokser
|
||||
SINGULARNAME: 'Avkrysningsboks felt'
|
||||
EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Avkrysningsboks grupper'
|
||||
SINGULARNAME: 'Avkrysningsboks gruppe'
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Land nedfellsmenyer'
|
||||
SINGULARNAME: 'Land nedfellsmeny'
|
||||
EditableDateField:
|
||||
PLURALNAME: Datofelter
|
||||
SINGULARNAME: Datofelt
|
||||
EditableDropdown:
|
||||
PLURALNAME: Nedfellsmeny
|
||||
SINGULARNAME: 'Nedfellsmeny felt'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Epost felt'
|
||||
SINGULARNAME: 'Epost felt'
|
||||
EditableFileField:
|
||||
PLURALNAME: Filopplastingsfelter
|
||||
SINGULARNAME: Filopplastingsfelt
|
||||
EditableFormField:
|
||||
FieldEditor:
|
||||
ADD: 'Legg til'
|
||||
SELECTAFIELD: 'Velg et felt'
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: Sider
|
||||
SINGULARNAME: Side
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%er er påkrevd'
|
||||
SilverStripe\Forms\GridField\GridField:
|
||||
Filter: Filter
|
||||
ResetFilter: Reset
|
||||
SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Filtrer innsendte...'
|
||||
WHEREVALUEIS: 'hvor verdi er...'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: 'Legg til'
|
||||
ADDLabel: 'Legt til alternativ'
|
||||
ADDRULE: 'Legg til regel'
|
||||
|
@ -72,56 +65,69 @@ nb_NO:
|
|||
VALIDATION: Validering
|
||||
VALUE: Verdi
|
||||
WHEN: Når
|
||||
EditableFormHeading:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
PLURALNAME: Avkrysningsbokser
|
||||
SINGULARNAME: 'Avkrysningsboks felt'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Avkrysningsboks grupper'
|
||||
SINGULARNAME: 'Avkrysningsboks gruppe'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Land nedfellsmenyer'
|
||||
SINGULARNAME: 'Land nedfellsmeny'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: Datofelter
|
||||
SINGULARNAME: Datofelt
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: Nedfellsmeny
|
||||
SINGULARNAME: 'Nedfellsmeny felt'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Epost felt'
|
||||
SINGULARNAME: 'Epost felt'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
PLURALNAME: Filopplastingsfelter
|
||||
SINGULARNAME: Filopplastingsfelt
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading:
|
||||
LEVEL: 'Velg overskrift nivå'
|
||||
PLURALNAME: Overskrifter
|
||||
SINGULARNAME: Overskrift
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Skjul fra rapporter?'
|
||||
PLURALNAME: 'HTML blokker'
|
||||
SINGULARNAME: 'HTML blokk'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Medlemliste felt'
|
||||
SINGULARNAME: 'Medlemliste felt'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Redigerbare flervalgfelt'
|
||||
SINGULARNAME: 'Redigerbare flervalgfelt'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Fjern alternativ'
|
||||
DRAG: 'Dra for endre rekkefølge på alternativene'
|
||||
LOCKED: 'Disse feltene kan ikke endres'
|
||||
PLURALNAME: 'Redigerbart alternativer'
|
||||
SINGULARNAME: 'Redigerbart alternativ'
|
||||
EditableRadioField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableRadioField:
|
||||
PLURALNAME: Radiofelt
|
||||
SINGULARNAME: Radiofelt
|
||||
EditableTextField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
NUMBERROWS: 'Antall rader'
|
||||
PLURALNAME: Tekstfelt
|
||||
SINGULARNAME: Tekstfelt
|
||||
TEXTLENGTH: 'Tekst lengde'
|
||||
FieldEditor:
|
||||
ADD: 'Legg til'
|
||||
SELECTAFIELD: 'Velg et felt'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%er er påkrevd'
|
||||
GridField:
|
||||
Filter: Filter
|
||||
ResetFilter: Reset
|
||||
SiteTree:
|
||||
PLURALNAME: Sider
|
||||
SINGULARNAME: Side
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'Bruker definert e-post mottakere'
|
||||
SINGULARNAME: 'Bruker definert e-post mottaker'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Last ned fil'
|
||||
PLURALNAME: 'Sendte fil felter'
|
||||
SINGULARNAME: 'Sendte fil felt'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Sendte skjema'
|
||||
SINGULARNAME: 'Sendte skjema'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Sendt skjema felter'
|
||||
SINGULARNAME: 'Sendt skjema felt'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
ADDEMAILRECIPIENT: 'Legg til e-post mottaker'
|
||||
CONFIGURATION: Konfigurasjon
|
||||
DESCRIPTION: 'Legg til konfigurerbart skjema'
|
||||
|
@ -147,9 +153,3 @@ nb_NO:
|
|||
SUBMISSIONS: Innsendte
|
||||
SUBMITBUTTON: Send
|
||||
TEXTONSUBMIT: 'Tekst på "send" knapp'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'Bruker definert e-post mottakere'
|
||||
SINGULARNAME: 'Bruker definert e-post mottaker'
|
||||
UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Filtrer innsendte...'
|
||||
WHEREVALUEIS: 'hvor verdi er...'
|
||||
|
|
106
lang/nl_NL.yml
|
@ -13,28 +13,23 @@ nl_NL:
|
|||
SHOWTHISFIELD: 'Toon dit veld'
|
||||
VALUE: Waarde
|
||||
WHEN: Wanneer
|
||||
EditableCheckbox:
|
||||
PLURALNAME: Selectievakjes
|
||||
SINGULARNAME: Selectievakje
|
||||
EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Groepen van selectievakjes'
|
||||
SINGULARNAME: 'Groep van selectievakje'
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Vervolgkeuzelijsten van landen'
|
||||
SINGULARNAME: 'Vervolgkeuzelijst van landen'
|
||||
EditableDateField:
|
||||
PLURALNAME: Datumvelden
|
||||
SINGULARNAME: Datumveld
|
||||
EditableDropdown:
|
||||
PLURALNAME: Vervolgkeuzelijsten
|
||||
SINGULARNAME: 'Vervolgkeuzelijst veld'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Email velden'
|
||||
SINGULARNAME: 'Email veld'
|
||||
EditableFileField:
|
||||
PLURALNAME: 'Velden voor bestand uploaden'
|
||||
SINGULARNAME: 'Veld voor bestand uploaden'
|
||||
EditableFormField:
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Selecteer upload locatie'
|
||||
FieldEditor:
|
||||
ADD: Toevoegen
|
||||
SELECTAFIELD: 'Kies een veld'
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: Paginas
|
||||
SINGULARNAME: Pagina
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s is verplicht'
|
||||
SilverStripe\Forms\GridField\GridField:
|
||||
Filter: Filter
|
||||
ResetFilter: Herstel
|
||||
SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Inzendingen filteren'
|
||||
WHEREVALUEIS: 'waar waarde is...'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Toevoegen
|
||||
ADDLabel: 'Optie toevoegen'
|
||||
ADDRULE: 'Regel toevoegen'
|
||||
|
@ -72,61 +67,72 @@ nl_NL:
|
|||
VALIDATION: Validatie
|
||||
VALUE: Waarde
|
||||
WHEN: Wanneer
|
||||
EditableFormHeading:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
PLURALNAME: Selectievakjes
|
||||
SINGULARNAME: Selectievakje
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Groepen van selectievakjes'
|
||||
SINGULARNAME: 'Groep van selectievakje'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Vervolgkeuzelijsten van landen'
|
||||
SINGULARNAME: 'Vervolgkeuzelijst van landen'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: Datumvelden
|
||||
SINGULARNAME: Datumveld
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: Vervolgkeuzelijsten
|
||||
SINGULARNAME: 'Vervolgkeuzelijst veld'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email velden'
|
||||
SINGULARNAME: 'Email veld'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
PLURALNAME: 'Velden voor bestand uploaden'
|
||||
SINGULARNAME: 'Veld voor bestand uploaden'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading:
|
||||
LEVEL: 'Kies grootte van kopje'
|
||||
PLURALNAME: Kopjes
|
||||
SINGULARNAME: Kopje
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Verberg van rapporten?'
|
||||
PLURALNAME: 'HTML Blokken'
|
||||
SINGULARNAME: 'HTML Blok'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Ledenlijst velden'
|
||||
SINGULARNAME: 'Ledenlijst veld'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Bewerkbare meerdere optie velden'
|
||||
SINGULARNAME: 'Bewerkbare meerdere optie veld'
|
||||
EditableNumericField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableNumericField:
|
||||
PLURALNAME: 'Numerieke velden'
|
||||
SINGULARNAME: 'Numerieke veld'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Verwijder optie'
|
||||
DRAG: 'Sleep om volgorde van de opties te herschikken'
|
||||
LOCKED: 'Deze velden zijn niet aanpasbaar'
|
||||
PLURALNAME: 'Bewerkbare opties'
|
||||
SINGULARNAME: 'Bewerkbare optie'
|
||||
EditableRadioField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableRadioField:
|
||||
PLURALNAME: 'Keuzerondje velden'
|
||||
SINGULARNAME: 'Keuzerondje veld'
|
||||
EditableTextField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
NUMBERROWS: 'Aantal rijen'
|
||||
PLURALNAME: 'Tekst velden'
|
||||
SINGULARNAME: 'Tekst veld'
|
||||
TEXTLENGTH: 'Tekst lengte'
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Selecteer upload locatie'
|
||||
FieldEditor:
|
||||
ADD: Toevoegen
|
||||
SELECTAFIELD: 'Kies een veld'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s is verplicht'
|
||||
GridField:
|
||||
Filter: Filter
|
||||
ResetFilter: Herstel
|
||||
SiteTree:
|
||||
PLURALNAME: Paginas
|
||||
SINGULARNAME: Pagina
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'Email Ontvangers'
|
||||
SINGULARNAME: 'Email Ontvanger'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Download bestand'
|
||||
PLURALNAME: 'Ingediende bestandsvelden'
|
||||
SINGULARNAME: 'Ingediende bestandsveld'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Ingediende formulieren'
|
||||
SINGULARNAME: 'Ingediende formulier'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Ingediende formvelden'
|
||||
SINGULARNAME: 'Ingediende formveld'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
ADDEMAILRECIPIENT: 'Email ontvanger toevoegen'
|
||||
CLEARBUTTON: Herstellen
|
||||
CONFIGURATION: Instellingen
|
||||
|
@ -154,9 +160,3 @@ nl_NL:
|
|||
SUBMITBUTTON: Verzenden
|
||||
TEXTONCLEAR: 'Tekst op herstel button:'
|
||||
TEXTONSUBMIT: 'Tekst op Verzend-button'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'Email Ontvangers'
|
||||
SINGULARNAME: 'Email Ontvanger'
|
||||
UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Inzendingen filteren'
|
||||
WHEREVALUEIS: 'waar waarde is...'
|
||||
|
|
106
lang/pl_PL.yml
|
@ -13,28 +13,23 @@ pl_PL:
|
|||
SHOWTHISFIELD: 'Show This Field'
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableCheckbox:
|
||||
PLURALNAME: Checkboxes
|
||||
SINGULARNAME: 'Checkbox Field'
|
||||
EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Checkbox Groups'
|
||||
SINGULARNAME: 'Checkbox Group'
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
EditableDateField:
|
||||
PLURALNAME: 'Pola daty'
|
||||
SINGULARNAME: 'Pole daty'
|
||||
EditableDropdown:
|
||||
PLURALNAME: Dropdowns
|
||||
SINGULARNAME: 'Dropdown Field'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
EditableFileField:
|
||||
PLURALNAME: 'Pola przesyłania plików'
|
||||
SINGULARNAME: 'Pole przesyłania pliku'
|
||||
EditableFormField:
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Wybierz folder dla przesyłanych plików'
|
||||
FieldEditor:
|
||||
ADD: Dodaj
|
||||
SELECTAFIELD: 'Wybierz pole'
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: Strony
|
||||
SINGULARNAME: Strona
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SilverStripe\Forms\GridField\GridField:
|
||||
Filter: Filter
|
||||
ResetFilter: Resetuj
|
||||
SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Zgłoszenia filtrów ..'
|
||||
WHEREVALUEIS: 'których wartość jest ..'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Add
|
||||
ADDLabel: 'Dodaj opcję'
|
||||
ADDRULE: 'Add Rule'
|
||||
|
@ -76,61 +71,72 @@ pl_PL:
|
|||
VALUE: Value
|
||||
WHEN: When
|
||||
'YES': Tak
|
||||
EditableFormHeading:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
PLURALNAME: Checkboxes
|
||||
SINGULARNAME: 'Checkbox Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Checkbox Groups'
|
||||
SINGULARNAME: 'Checkbox Group'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: 'Pola daty'
|
||||
SINGULARNAME: 'Pole daty'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: Dropdowns
|
||||
SINGULARNAME: 'Dropdown Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
PLURALNAME: 'Pola przesyłania plików'
|
||||
SINGULARNAME: 'Pole przesyłania pliku'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading:
|
||||
LEVEL: 'Wybierzpoziom nagłówka'
|
||||
PLURALNAME: Nagłówki
|
||||
SINGULARNAME: Nagłówek
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Member List Fields'
|
||||
SINGULARNAME: 'Member List Field'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
EditableNumericField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableNumericField:
|
||||
PLURALNAME: 'Pola numeryczne'
|
||||
SINGULARNAME: 'Pole numeryczne'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Remove this option'
|
||||
DRAG: 'Drag to rearrange order of options'
|
||||
LOCKED: 'These fields cannot be modified'
|
||||
PLURALNAME: 'Edytowalne opcje'
|
||||
SINGULARNAME: 'Edytowalna opcja'
|
||||
EditableRadioField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableRadioField:
|
||||
PLURALNAME: 'Pola wyboru'
|
||||
SINGULARNAME: 'Pole wyboru'
|
||||
EditableTextField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
NUMBERROWS: 'Liczba wierszy'
|
||||
PLURALNAME: 'Pola tekstowe'
|
||||
SINGULARNAME: 'Pole tekstowe'
|
||||
TEXTLENGTH: 'Długość tekstu'
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Wybierz folder dla przesyłanych plików'
|
||||
FieldEditor:
|
||||
ADD: Dodaj
|
||||
SELECTAFIELD: 'Wybierz pole'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
GridField:
|
||||
Filter: Filter
|
||||
ResetFilter: Resetuj
|
||||
SiteTree:
|
||||
PLURALNAME: Strony
|
||||
SINGULARNAME: Strona
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Download File'
|
||||
PLURALNAME: 'Submitted File Fields'
|
||||
SINGULARNAME: 'Submitted File Field'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Submitted Forms'
|
||||
SINGULARNAME: 'Submitted Form'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Submitted Form Fields'
|
||||
SINGULARNAME: 'Submitted Form Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
ADDEMAILRECIPIENT: 'Dodaj e-mail odbiorcy'
|
||||
CLEARBUTTON: Czyść
|
||||
CONFIGURATION: Ustawienia
|
||||
|
@ -161,9 +167,3 @@ pl_PL:
|
|||
SUBMITBUTTON: Submit
|
||||
TEXTONCLEAR: 'Tekst na przycisku czyść: '
|
||||
TEXTONSUBMIT: 'Napis na przycisku ''submit'':'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Zgłoszenia filtrów ..'
|
||||
WHEREVALUEIS: 'których wartość jest ..'
|
||||
|
|
|
@ -13,13 +13,12 @@ pt_PT:
|
|||
SHOWTHISFIELD: 'Show This Field'
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
EditableFormField:
|
||||
FieldEditor:
|
||||
ADD: Adicionar
|
||||
SELECTAFIELD: 'Select a Field'
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Add
|
||||
ADDRULE: 'Add Rule'
|
||||
BLANK: Blank
|
||||
|
@ -46,36 +45,40 @@ pt_PT:
|
|||
VALIDATION: Validation
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Member List Fields'
|
||||
SINGULARNAME: 'Member List Field'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Remove this option'
|
||||
DRAG: 'Drag to rearrange order of options'
|
||||
LOCKED: 'These fields cannot be modified'
|
||||
FieldEditor:
|
||||
ADD: Adicionar
|
||||
SELECTAFIELD: 'Select a Field'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Download File'
|
||||
PLURALNAME: 'Submitted File Fields'
|
||||
SINGULARNAME: 'Submitted File Field'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Submitted Forms'
|
||||
SINGULARNAME: 'Submitted Form'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Submitted Form Fields'
|
||||
SINGULARNAME: 'Submitted Form Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
EMAILADDRESS: Email
|
||||
EMAILBODY: Body
|
||||
EMAILFROM: From
|
||||
|
@ -95,6 +98,3 @@ pt_PT:
|
|||
SUBMISSIONS: Submissions
|
||||
SUBMITBUTTON: Submit
|
||||
TEXTONSUBMIT: 'Texto no botão "Enviar"'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
|
|
|
@ -13,13 +13,9 @@ ru_RU:
|
|||
SHOWTHISFIELD: 'Show This Field'
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
EditableFormField:
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Add
|
||||
ADDRULE: 'Add Rule'
|
||||
BLANK: Blank
|
||||
|
@ -46,33 +42,40 @@ ru_RU:
|
|||
VALIDATION: Validation
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Member List Fields'
|
||||
SINGULARNAME: 'Member List Field'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Remove this option'
|
||||
DRAG: 'Drag to rearrange order of options'
|
||||
LOCKED: 'These fields cannot be modified'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Download File'
|
||||
PLURALNAME: 'Submitted File Fields'
|
||||
SINGULARNAME: 'Submitted File Field'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Submitted Forms'
|
||||
SINGULARNAME: 'Submitted Form'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Submitted Form Fields'
|
||||
SINGULARNAME: 'Submitted Form Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
EMAILADDRESS: Email
|
||||
EMAILBODY: Body
|
||||
EMAILFROM: From
|
||||
|
@ -92,6 +95,3 @@ ru_RU:
|
|||
SUBMISSIONS: Полученное
|
||||
SUBMITBUTTON: Submit
|
||||
TEXTONSUBMIT: 'Текст на кнопке отправки'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
|
|
168
lang/sk.yml
|
@ -13,39 +13,39 @@ sk:
|
|||
SHOWTHISFIELD: 'Zobraziť toto pole'
|
||||
VALUE: 'Zadanú hodnotu'
|
||||
WHEN: 'ak pole'
|
||||
EditableCheckbox:
|
||||
PLURALNAME: 'Zaškrtávacie polia (checkbox)'
|
||||
SINGULARNAME: 'Zaškrtávacie pole (checkbox)'
|
||||
EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Skupiny zaškrtávacích polí'
|
||||
SINGULARNAME: 'Skupina zaškrtávacích polí'
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Rozbaľovacie polia (výber krajiny)'
|
||||
SINGULARNAME: 'Rozbaľovacie pole (výber krajiny)'
|
||||
EditableCustomRule:
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Priečinok na nahrávanie súborov'
|
||||
FieldEditor:
|
||||
ADD: Pridať
|
||||
SELECTAFIELD: 'Vyberte pole'
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: Stránky
|
||||
SINGULARNAME: Stránka
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s je vyžadované'
|
||||
SilverStripe\Forms\GridField\GridField:
|
||||
Filter: Filter
|
||||
ResetFilter: Reset
|
||||
SilverStripe\UserForms\Extension\UserFormFieldEditorExtension:
|
||||
ADD_FIELD: 'Pridať políčko'
|
||||
ADD_FIELD_GROUP: 'Pridať obaľovaciu skupinu'
|
||||
ADD_PAGE_BREAK: 'Pridať ďalšiu stranu'
|
||||
FORMFIELDS: Formulár
|
||||
SilverStripe\UserForms\Extension\UserFormValidator:
|
||||
CONDITIONAL_REQUIRED: 'Vyžadované pole ''{name}'' nemôže byť umiestnené do podmienenej stránky'
|
||||
NO_PAGE: 'Pole ''{name}'' nájdené pred akoukoľvek stránkou'
|
||||
UNEXPECTED_BREAK: 'Neočakávaný zlom strany ''{name}'' vnútri obaľovacej skupiny ''{group}'''
|
||||
UNEXPECTED_GROUP_END: '''{name}'' nájdený bez odpovedajúcho začiatku'
|
||||
WRONG_GROUP_END: '''{name}'' nájdený vrámci zle uzatvorenej obaľovacej skupiny ''{group}'''
|
||||
SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Filtrovať ...'
|
||||
FROM: Od
|
||||
TILL: Do
|
||||
WHEREVALUEIS: 'kde hodnota je ...'
|
||||
SilverStripe\UserForms\Model\EditableCustomRule:
|
||||
PLURALNAME: 'Vlastné pravidlá'
|
||||
SINGULARNAME: 'Vlastne pravidlo'
|
||||
EditableDateField:
|
||||
PLURALNAME: 'Dátumové polia'
|
||||
SINGULARNAME: 'Dátumové pole'
|
||||
EditableDropdown:
|
||||
PLURALNAME: 'Rozbaľovacie polia'
|
||||
SINGULARNAME: 'Rozbaľovacie pole'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'E-mailové polia'
|
||||
SINGULARNAME: 'E-mailové pole'
|
||||
EditableFieldGroup:
|
||||
PLURALNAME: 'Skupiny polí'
|
||||
SINGULARNAME: 'Skupina polí'
|
||||
EditableFieldGroupEnd:
|
||||
FIELD_GROUP_END: 'Koniec {group}'
|
||||
FIELD_GROUP_START: 'Skupina {group}'
|
||||
PLURALNAME: 'Konce skupiny polí'
|
||||
SINGULARNAME: 'Koniec skupiny polí'
|
||||
EditableFileField:
|
||||
PLURALNAME: 'Polia pre nahratie súboru'
|
||||
SINGULARNAME: 'Pole pre nahratie súboru'
|
||||
EditableFormField:
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Pridať
|
||||
ADDLabel: 'Pridať voľbu/možnosť'
|
||||
ADDRULE: 'Pridať pravidlo'
|
||||
|
@ -98,48 +98,75 @@ sk:
|
|||
VALUE: 'Zadanú hodnotu'
|
||||
WHEN: 'ak pole'
|
||||
'YES': Áno
|
||||
EditableFormFieldValidator:
|
||||
REQUIRED_ERROR: 'Formulárové polia nemôžu byť vyžadované, ak majú podmienené pravidlá zobrazenia.'
|
||||
EditableFormHeading:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
PLURALNAME: 'Zaškrtávacie polia (checkbox)'
|
||||
SINGULARNAME: 'Zaškrtávacie pole (checkbox)'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
PLURALNAME: 'Skupiny zaškrtávacích polí'
|
||||
SINGULARNAME: 'Skupina zaškrtávacích polí'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Rozbaľovacie polia (výber krajiny)'
|
||||
SINGULARNAME: 'Rozbaľovacie pole (výber krajiny)'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: 'Dátumové polia'
|
||||
SINGULARNAME: 'Dátumové pole'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: 'Rozbaľovacie polia'
|
||||
SINGULARNAME: 'Rozbaľovacie pole'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'E-mailové polia'
|
||||
SINGULARNAME: 'E-mailové pole'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup:
|
||||
PLURALNAME: 'Skupiny polí'
|
||||
SINGULARNAME: 'Skupina polí'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd:
|
||||
FIELD_GROUP_END: 'Koniec {group}'
|
||||
FIELD_GROUP_START: 'Skupina {group}'
|
||||
PLURALNAME: 'Konce skupiny polí'
|
||||
SINGULARNAME: 'Koniec skupiny polí'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
PLURALNAME: 'Polia pre nahratie súboru'
|
||||
SINGULARNAME: 'Pole pre nahratie súboru'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading:
|
||||
LEVEL: 'Úroveň nadpisu'
|
||||
PLURALNAME: Nadpisy
|
||||
SINGULARNAME: Nadpis
|
||||
EditableFormStep:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormStep:
|
||||
PLURALNAME: 'Zlomy strán'
|
||||
SINGULARNAME: 'Zlom strany'
|
||||
STEP_TITLE: 'Strana {page}'
|
||||
TITLE_FIRST: 'Prvá strana'
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
CONTENT: HTML
|
||||
HIDEFROMREPORT: 'Skryť z reportu?'
|
||||
HIDELABEL: 'Skryť ''Názov'' na FrontEnd-e?'
|
||||
PLURALNAME: 'HTML bloky'
|
||||
SINGULARNAME: 'HTML blok'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Polia zoznamu členov'
|
||||
SINGULARNAME: 'Pole zoznamu členov'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
DEFAULT: 'Vybrané v predvolenom režime?'
|
||||
OPTIONSTAB: Možnosti
|
||||
PLURALNAME: 'Polia s viacerými možnosťami'
|
||||
SINGULARNAME: 'Pole s viacerými možnosťami'
|
||||
TITLE: Názov
|
||||
VALUE: Hodnota
|
||||
EditableNumericField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableNumericField:
|
||||
PLURALNAME: 'Numerické/číselné polia'
|
||||
RANGE: 'Povolený rozsah'
|
||||
RANGE_TO: do
|
||||
SINGULARNAME: 'Numerické/číselné pole'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Odstráň túto možnosť'
|
||||
DRAG: 'Ťahaním preskupiť poradie polí'
|
||||
LOCKED: 'Tieto polia nie je možné meniť'
|
||||
PLURALNAME: Možnosti
|
||||
SINGULARNAME: Možnosť
|
||||
EditableRadioField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableRadioField:
|
||||
PLURALNAME: 'Prepínacie polia (radio)'
|
||||
SINGULARNAME: 'Prepínacie pole (radio)'
|
||||
EditableTextField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
NUMBERROWS: 'Počet riadkov'
|
||||
NUMBERROWS_DESCRIPTION: 'Políčka s viac ako jedným riadkom sú generované ako textarea.'
|
||||
PLACEHOLDER: 'Zástupná/Ukážková hodnota (placeholder)'
|
||||
|
@ -147,30 +174,28 @@ sk:
|
|||
RANGE_TO: do
|
||||
SINGULARNAME: 'Textové pole'
|
||||
TEXTLENGTH: 'Povolená dĺžka textu'
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Priečinok na nahrávanie súborov'
|
||||
FieldEditor:
|
||||
ADD: Pridať
|
||||
SELECTAFIELD: 'Vyberte pole'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s je vyžadované'
|
||||
GridField:
|
||||
Filter: Filter
|
||||
ResetFilter: Reset
|
||||
SiteTree:
|
||||
PLURALNAME: Stránky
|
||||
SINGULARNAME: Stránka
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\Validator:
|
||||
REQUIRED_ERROR: 'Formulárové polia nemôžu byť vyžadované, ak majú podmienené pravidlá zobrazenia.'
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
CUSTOMRULESTAB: 'Vlastné pravidlá'
|
||||
EMAILCONTENTTAB: 'Obsah e-mailu'
|
||||
EMAILDETAILSTAB: 'Detaily e-mailu'
|
||||
PLURALNAME: 'Užívateľom definovaný formulár - príjemcovia e-mailu'
|
||||
SINGULARNAME: 'Užívateľom definovaný formulár - príjemca e-mailu'
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition:
|
||||
PLURALNAME: 'Užívateľom definovaný formulár - podmienky príjemcu e-mailu'
|
||||
SINGULARNAME: 'Užívateľom definovaný formulár - podmienka príjemcu e-mailu'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Stiahnuť súbor'
|
||||
PLURALNAME: 'Pole s odoslanými súbormi'
|
||||
SINGULARNAME: 'Pole s odoslaným súborom'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Odoslané formuláre'
|
||||
SINGULARNAME: 'Odoslaný formulár'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Odoslané formulárové polia'
|
||||
SINGULARNAME: 'Odoslané formulárove pole'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
ADDEMAILRECIPIENT: 'Pridať príjemcu'
|
||||
CLEARBUTTON: Vyčistiť
|
||||
CONFIGURATION: Konfigurácia
|
||||
|
@ -221,28 +246,3 @@ sk:
|
|||
TYPEREPLY: 'Napíšte adresu'
|
||||
TYPESUBJECT: 'Napíšte predmet'
|
||||
TYPETO: 'Napíšte adresu'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
CUSTOMRULESTAB: 'Vlastné pravidlá'
|
||||
EMAILCONTENTTAB: 'Obsah e-mailu'
|
||||
EMAILDETAILSTAB: 'Detaily e-mailu'
|
||||
PLURALNAME: 'Užívateľom definovaný formulár - príjemcovia e-mailu'
|
||||
SINGULARNAME: 'Užívateľom definovaný formulár - príjemca e-mailu'
|
||||
UserDefinedForm_EmailRecipientCondition:
|
||||
PLURALNAME: 'Užívateľom definovaný formulár - podmienky príjemcu e-mailu'
|
||||
SINGULARNAME: 'Užívateľom definovaný formulár - podmienka príjemcu e-mailu'
|
||||
UserFormFieldEditorExtension:
|
||||
ADD_FIELD: 'Pridať políčko'
|
||||
ADD_FIELD_GROUP: 'Pridať obaľovaciu skupinu'
|
||||
ADD_PAGE_BREAK: 'Pridať ďalšiu stranu'
|
||||
FORMFIELDS: Formulár
|
||||
UserFormValidator:
|
||||
CONDITIONAL_REQUIRED: 'Vyžadované pole ''{name}'' nemôže byť umiestnené do podmienenej stránky'
|
||||
NO_PAGE: 'Pole ''{name}'' nájdené pred akoukoľvek stránkou'
|
||||
UNEXPECTED_BREAK: 'Neočakávaný zlom strany ''{name}'' vnútri obaľovacej skupiny ''{group}'''
|
||||
UNEXPECTED_GROUP_END: '''{name}'' nájdený bez odpovedajúcho začiatku'
|
||||
WRONG_GROUP_END: '''{name}'' nájdený vrámci zle uzatvorenej obaľovacej skupiny ''{group}'''
|
||||
UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Filtrovať ...'
|
||||
FROM: Od
|
||||
TILL: Do
|
||||
WHEREVALUEIS: 'kde hodnota je ...'
|
||||
|
|
|
@ -13,13 +13,12 @@ sr_RS:
|
|||
SHOWTHISFIELD: 'Show This Field'
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
EditableFormField:
|
||||
FieldEditor:
|
||||
ADD: Додај
|
||||
SELECTAFIELD: 'Select a Field'
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Add
|
||||
ADDRULE: 'Add Rule'
|
||||
BLANK: Blank
|
||||
|
@ -45,36 +44,40 @@ sr_RS:
|
|||
VALIDATION: Validation
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Member List Fields'
|
||||
SINGULARNAME: 'Member List Field'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Remove this option'
|
||||
DRAG: 'Drag to rearrange order of options'
|
||||
LOCKED: 'These fields cannot be modified'
|
||||
FieldEditor:
|
||||
ADD: Додај
|
||||
SELECTAFIELD: 'Select a Field'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Download File'
|
||||
PLURALNAME: 'Submitted File Fields'
|
||||
SINGULARNAME: 'Submitted File Field'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Submitted Forms'
|
||||
SINGULARNAME: 'Submitted Form'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Submitted Form Fields'
|
||||
SINGULARNAME: 'Submitted Form Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
EMAILADDRESS: Email
|
||||
EMAILBODY: Body
|
||||
EMAILFROM: From
|
||||
|
@ -94,6 +97,3 @@ sr_RS:
|
|||
SUBMISSIONS: Submissions
|
||||
SUBMITBUTTON: Submit
|
||||
TEXTONSUBMIT: 'Text on submit button:'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
|
|
108
lang/sv.yml
|
@ -13,28 +13,23 @@ sv:
|
|||
SHOWTHISFIELD: 'Visa detta fält'
|
||||
VALUE: Värde
|
||||
WHEN: När
|
||||
EditableCheckbox:
|
||||
PLURALNAME: Kryssrutor
|
||||
SINGULARNAME: Kryssrutefält
|
||||
EditableCheckboxGroupField:
|
||||
PLURALNAME: Kryssrutegrupper
|
||||
SINGULARNAME: Kryssrutegrupp
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Rullgardinsmenyer för länder'
|
||||
SINGULARNAME: 'Rullgardinsmeny för länder'
|
||||
EditableDateField:
|
||||
PLURALNAME: Datumfält
|
||||
SINGULARNAME: Datumfält
|
||||
EditableDropdown:
|
||||
PLURALNAME: Rullgardinsmenyer
|
||||
SINGULARNAME: Rullgardinsmenyfält
|
||||
EditableEmailField:
|
||||
PLURALNAME: E-postfält
|
||||
SINGULARNAME: E-postfält
|
||||
EditableFileField:
|
||||
PLURALNAME: Filuppladdningsfält
|
||||
SINGULARNAME: Filuppladdningsfält
|
||||
EditableFormField:
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Välj uppladdningsmapp'
|
||||
FieldEditor:
|
||||
ADD: 'Lägg till'
|
||||
SELECTAFIELD: 'Välj ett fält'
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: Sidor
|
||||
SINGULARNAME: Sida
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s är obligatoriskt'
|
||||
SilverStripe\Forms\GridField\GridField:
|
||||
Filter: Filter
|
||||
ResetFilter: Rensa
|
||||
SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Filtrera inskickade svar'
|
||||
WHEREVALUEIS: 'när värdet är..'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: 'Lägg till'
|
||||
ADDLabel: 'Lägg till alternativ'
|
||||
ADDRULE: 'Lägg till regel'
|
||||
|
@ -75,63 +70,74 @@ sv:
|
|||
VALIDATION: Validering
|
||||
VALUE: Värde
|
||||
WHEN: När
|
||||
EditableFormHeading:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
PLURALNAME: Kryssrutor
|
||||
SINGULARNAME: Kryssrutefält
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
PLURALNAME: Kryssrutegrupper
|
||||
SINGULARNAME: Kryssrutegrupp
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Rullgardinsmenyer för länder'
|
||||
SINGULARNAME: 'Rullgardinsmeny för länder'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: Datumfält
|
||||
SINGULARNAME: Datumfält
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: Rullgardinsmenyer
|
||||
SINGULARNAME: Rullgardinsmenyfält
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: E-postfält
|
||||
SINGULARNAME: E-postfält
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
PLURALNAME: Filuppladdningsfält
|
||||
SINGULARNAME: Filuppladdningsfält
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading:
|
||||
LEVEL: 'Välj rubrikstorlek'
|
||||
PLURALNAME: Rubriker
|
||||
SINGULARNAME: Rubrik
|
||||
EditableFormStep:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormStep:
|
||||
STEP_TITLE: 'Sida {page}'
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Göm från rapport?'
|
||||
PLURALNAME: HTML-block
|
||||
SINGULARNAME: HTML-block
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: Medlemsfält
|
||||
SINGULARNAME: Medlemsfält
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Redigeringsbart multialternativfält'
|
||||
SINGULARNAME: 'Redigeringsbart multialternativfält'
|
||||
EditableNumericField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableNumericField:
|
||||
PLURALNAME: 'Numeriska fält'
|
||||
SINGULARNAME: 'Numeriskt fält'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Radera alternativ'
|
||||
DRAG: 'Dra och släpp för att ordna om alternativ'
|
||||
LOCKED: 'Dessa fält kan inte modifieras'
|
||||
PLURALNAME: 'Redigeringsbara alternativ'
|
||||
SINGULARNAME: 'Redigeringsbart alternativ'
|
||||
EditableRadioField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableRadioField:
|
||||
PLURALNAME: Radiofält
|
||||
SINGULARNAME: Radiofält
|
||||
EditableTextField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
NUMBERROWS: 'Antal rader'
|
||||
PLURALNAME: Textfält
|
||||
SINGULARNAME: Textfält
|
||||
TEXTLENGTH: Textlängd
|
||||
EditableUploadField:
|
||||
SELECTUPLOADFOLDER: 'Välj uppladdningsmapp'
|
||||
FieldEditor:
|
||||
ADD: 'Lägg till'
|
||||
SELECTAFIELD: 'Välj ett fält'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s är obligatoriskt'
|
||||
GridField:
|
||||
Filter: Filter
|
||||
ResetFilter: Rensa
|
||||
SiteTree:
|
||||
PLURALNAME: Sidor
|
||||
SINGULARNAME: Sida
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'Mottagare av formulär'
|
||||
SINGULARNAME: 'Mottagare av formulär'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Ladda ner fil'
|
||||
PLURALNAME: 'Inskickade filfält'
|
||||
SINGULARNAME: 'Inskickat filfält'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Inskickade formulär'
|
||||
SINGULARNAME: 'Inskickat formulär'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Inskickade formulärfält'
|
||||
SINGULARNAME: 'Inskickat formulärfält'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
ADDEMAILRECIPIENT: 'Lägg till e-postmottagare'
|
||||
CLEARBUTTON: Rensa
|
||||
CONFIGURATION: Konfiguration
|
||||
|
@ -162,9 +168,3 @@ sv:
|
|||
SUBMITBUTTON: Skicka
|
||||
TEXTONCLEAR: 'Text på Rensa-knapp:'
|
||||
TEXTONSUBMIT: 'Text på Skicka-knapp:'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'Mottagare av formulär'
|
||||
SINGULARNAME: 'Mottagare av formulär'
|
||||
UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 'Filtrera inskickade svar'
|
||||
WHEREVALUEIS: 'när värdet är..'
|
||||
|
|
|
@ -13,13 +13,9 @@ tr_TR:
|
|||
SHOWTHISFIELD: 'Show This Field'
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
EditableFormField:
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: Add
|
||||
ADDRULE: 'Add Rule'
|
||||
BLANK: Blank
|
||||
|
@ -46,33 +42,40 @@ tr_TR:
|
|||
VALIDATION: Validation
|
||||
VALUE: Value
|
||||
WHEN: When
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 'Country Dropdowns'
|
||||
SINGULARNAME: 'Country Dropdown'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 'Email Fields'
|
||||
SINGULARNAME: 'Email Field'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 'Hide from reports?'
|
||||
PLURALNAME: 'HTML Blocks'
|
||||
SINGULARNAME: 'HTML Block'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 'Member List Fields'
|
||||
SINGULARNAME: 'Member List Field'
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 'Editable Multiple Option Fields'
|
||||
SINGULARNAME: 'Editable Multiple Option Field'
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: 'Remove this option'
|
||||
DRAG: 'Drag to rearrange order of options'
|
||||
LOCKED: 'These fields cannot be modified'
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s is required'
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 'Download File'
|
||||
PLURALNAME: 'Submitted File Fields'
|
||||
SINGULARNAME: 'Submitted File Field'
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: 'Submitted Forms'
|
||||
SINGULARNAME: 'Submitted Form'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: 'Submitted Form Fields'
|
||||
SINGULARNAME: 'Submitted Form Field'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
EMAILADDRESS: Email
|
||||
EMAILBODY: Body
|
||||
EMAILFROM: From
|
||||
|
@ -92,6 +95,3 @@ tr_TR:
|
|||
SUBMISSIONS: Gönderiler
|
||||
SUBMITBUTTON: Submit
|
||||
TEXTONSUBMIT: 'Gönder düğmesi üzerindeki yazı:'
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: 'User Defined Form Email Recipients'
|
||||
SINGULARNAME: 'User Defined Form Email Recipient'
|
||||
|
|
100
lang/zh.yml
|
@ -13,28 +13,21 @@ zh:
|
|||
SHOWTHISFIELD: 显示这个字段
|
||||
VALUE: 值
|
||||
WHEN: 当
|
||||
EditableCheckbox:
|
||||
PLURALNAME: 复选框
|
||||
SINGULARNAME: 复选框字段
|
||||
EditableCheckboxGroupField:
|
||||
PLURALNAME: 复选框组
|
||||
SINGULARNAME: 复选框组
|
||||
EditableCountryDropdownField:
|
||||
PLURALNAME: 国家下拉列表
|
||||
SINGULARNAME: 国家下拉列表
|
||||
EditableDateField:
|
||||
PLURALNAME: 日期字段
|
||||
SINGULARNAME: 日期字段
|
||||
EditableDropdown:
|
||||
PLURALNAME: 下拉列表
|
||||
SINGULARNAME: 下拉列表字段
|
||||
EditableEmailField:
|
||||
PLURALNAME: 电子邮件字段
|
||||
SINGULARNAME: 电子邮件字段
|
||||
EditableFileField:
|
||||
PLURALNAME: '文件上传字段'
|
||||
SINGULARNAME: '文件上传字段'
|
||||
EditableFormField:
|
||||
FieldEditor:
|
||||
ADD: '添加'
|
||||
SELECTAFIELD: 选择一个字段
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
PLURALNAME: 页面
|
||||
SINGULARNAME: 页面
|
||||
SilverStripe\Forms\Form:
|
||||
FIELDISREQUIRED: '%s 是必须的'
|
||||
SilverStripe\Forms\GridField\GridField:
|
||||
Filter: 筛选器
|
||||
ResetFilter: 重设
|
||||
SilverStripe\UserForms\Form\UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 筛选器提交……
|
||||
WHEREVALUEIS: 当值为……
|
||||
SilverStripe\UserForms\Model\EditableFormField:
|
||||
ADD: '添加'
|
||||
ADDRULE: '添加规则'
|
||||
BLANK: 空白
|
||||
|
@ -71,56 +64,69 @@ zh:
|
|||
VALIDATION: 验证
|
||||
VALUE: 值
|
||||
WHEN: 当
|
||||
EditableFormHeading:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
PLURALNAME: 复选框
|
||||
SINGULARNAME: 复选框字段
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
PLURALNAME: 复选框组
|
||||
SINGULARNAME: 复选框组
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
PLURALNAME: 国家下拉列表
|
||||
SINGULARNAME: 国家下拉列表
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDateField:
|
||||
PLURALNAME: 日期字段
|
||||
SINGULARNAME: 日期字段
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
PLURALNAME: 下拉列表
|
||||
SINGULARNAME: 下拉列表字段
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
PLURALNAME: 电子邮件字段
|
||||
SINGULARNAME: 电子邮件字段
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
PLURALNAME: '文件上传字段'
|
||||
SINGULARNAME: '文件上传字段'
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFormHeading:
|
||||
LEVEL: '选择标题级别'
|
||||
PLURALNAME: '标题'
|
||||
SINGULARNAME: '标题'
|
||||
EditableLiteralField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField:
|
||||
HIDEFROMREPORT: 从报告中隐藏?
|
||||
PLURALNAME: 'HTML 模块'
|
||||
SINGULARNAME: 'HTML 模块'
|
||||
EditableMemberListField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMemberListField:
|
||||
PLURALNAME: 成员列表字段
|
||||
SINGULARNAME: 成员列表字段
|
||||
EditableMultipleOptionField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableMultipleOptionField:
|
||||
PLURALNAME: 可编辑的多个选项字段
|
||||
SINGULARNAME: 可编辑的多个选项字段
|
||||
EditableOption:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
DELETE: '删除这个选项'
|
||||
DRAG: 拖放来对选项进行重新排序
|
||||
LOCKED: 这些字段不能被修改
|
||||
PLURALNAME: 可编辑的选项
|
||||
SINGULARNAME: 可编辑的选项
|
||||
EditableRadioField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableRadioField:
|
||||
PLURALNAME: 广播字段
|
||||
SINGULARNAME: 广播字段
|
||||
EditableTextField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
NUMBERROWS: 行数
|
||||
PLURALNAME: 文本字段
|
||||
SINGULARNAME: 文本字段
|
||||
TEXTLENGTH: 文本长度
|
||||
FieldEditor:
|
||||
ADD: '添加'
|
||||
SELECTAFIELD: 选择一个字段
|
||||
Form:
|
||||
FIELDISREQUIRED: '%s 是必须的'
|
||||
GridField:
|
||||
Filter: 筛选器
|
||||
ResetFilter: 重设
|
||||
SiteTree:
|
||||
PLURALNAME: 页面
|
||||
SINGULARNAME: 页面
|
||||
SubmittedFileField:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
PLURALNAME: '用户定义的表格电子邮件接受者'
|
||||
SINGULARNAME: '用户定义的表格电子邮件接受者'
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFileField:
|
||||
DOWNLOADFILE: 下载文件
|
||||
PLURALNAME: 已提交的文件字段
|
||||
SINGULARNAME: 已提交的文件字段
|
||||
SubmittedForm:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedForm:
|
||||
PLURALNAME: '已提交的表格'
|
||||
SINGULARNAME: '已提交的表格'
|
||||
SubmittedFormField:
|
||||
SilverStripe\UserForms\Model\Submission\SubmittedFormField:
|
||||
PLURALNAME: '已提交的表格字段'
|
||||
SINGULARNAME: '已提交的表格字段'
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
ADDEMAILRECIPIENT: '添加电子邮件收件人'
|
||||
CONFIGURATION: '配置'
|
||||
DESCRIPTION: '添加一个可定制的表格。'
|
||||
|
@ -147,9 +153,3 @@ zh:
|
|||
SUBMISSIONS: 提交
|
||||
SUBMITBUTTON: 提交
|
||||
TEXTONSUBMIT: 提交按钮上的文本
|
||||
UserDefinedForm_EmailRecipient:
|
||||
PLURALNAME: '用户定义的表格电子邮件接受者'
|
||||
SINGULARNAME: '用户定义的表格电子邮件接受者'
|
||||
UserFormsGridFieldFilterHeader:
|
||||
FILTERSUBMISSIONS: 筛选器提交……
|
||||
WHEREVALUEIS: 当值为……
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Copyright (c) 2016, SilverStripe Limited
|
||||
Copyright (c) 2017, SilverStripe Limited
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ruleset name="SilverStripe">
|
||||
<description>CodeSniffer ruleset for SilverStripe coding conventions.</description>
|
||||
|
||||
<!-- base rules are PSR-2 -->
|
||||
<rule ref="PSR2" >
|
||||
<!-- Current exclusions -->
|
||||
<exclude name="PSR1.Methods.CamelCapsMethodName" />
|
||||
<exclude name="PSR1.Files.SideEffects.FoundWithSymbols" />
|
||||
<exclude name="PSR2.Classes.PropertyDeclaration" />
|
||||
<exclude name="PSR2.ControlStructures.SwitchDeclaration" /> <!-- causes php notice while linting -->
|
||||
<exclude name="PSR2.ControlStructures.SwitchDeclaration.WrongOpenercase" />
|
||||
<exclude name="PSR2.ControlStructures.SwitchDeclaration.WrongOpenerdefault" />
|
||||
<exclude name="PSR2.ControlStructures.SwitchDeclaration.TerminatingComment" />
|
||||
<exclude name="PSR2.Methods.MethodDeclaration.Underscore" />
|
||||
<exclude name="Squiz.Scope.MethodScope" />
|
||||
<exclude name="Squiz.Classes.ValidClassName.NotCamelCaps" />
|
||||
<exclude name="Generic.Files.LineLength.TooLong" />
|
||||
<exclude name="PEAR.Functions.ValidDefaultValue.NotAtEnd" />
|
||||
</rule>
|
||||
</ruleset>
|
|
@ -0,0 +1,13 @@
|
|||
<phpunit bootstrap="cms/tests/bootstrap.php" colors="true">
|
||||
<testsuite name="Default">
|
||||
<directory>tests/</directory>
|
||||
</testsuite>
|
||||
<filter>
|
||||
<whitelist addUncoveredFilesFromWhitelist="true">
|
||||
<directory suffix=".php">code/</directory>
|
||||
<exclude>
|
||||
<directory suffix=".php">tests/</directory>
|
||||
</exclude>
|
||||
</whitelist>
|
||||
</filter>
|
||||
</phpunit>
|
|
@ -3,9 +3,9 @@
|
|||
UserForms enables CMS users to create dynamic forms via a drag and drop interface
|
||||
and without getting involved in any PHP code.
|
||||
|
||||
[![Build Status](http://img.shields.io/travis/silverstripe/silverstripe-userforms.svg?style=flat-square)](https://travis-ci.org/silverstripe/silverstripe-userforms)
|
||||
[![Code Quality](http://img.shields.io/scrutinizer/g/silverstripe/silverstripe-userforms.svg?style=flat-square)](https://scrutinizer-ci.com/g/silverstripe/silverstripe-userforms)
|
||||
[![Code Coverage](http://img.shields.io/scrutinizer/coverage/g/silverstripe/silverstripe-userforms.svg?style=flat-square)](https://scrutinizer-ci.com/g/silverstripe/silverstripe-userforms)
|
||||
[![Build Status](https://travis-ci.org/silverstripe/silverstripe-userforms.svg?branch=master)](https://travis-ci.org/silverstripe/silverstripe-userforms)
|
||||
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/silverstripe/silverstripe-userforms/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/silverstripe/silverstripe-userforms/?branch=master)
|
||||
[![codecov](https://codecov.io/gh/silverstripe/silverstripe-userforms/branch/master/graph/badge.svg)](https://codecov.io/gh/silverstripe/silverstripe-userforms)
|
||||
[![Version](http://img.shields.io/packagist/v/silverstripe/userforms.svg?style=flat-square)](https://packagist.org/packages/silverstripe/silverstripe-userforms)
|
||||
[![License](http://img.shields.io/packagist/l/silverstripe/userforms.svg?style=flat-square)](LICENSE.md)
|
||||
![helpfulrobot](https://helpfulrobot.io/silverstripe/userforms/badge)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<form $AttributesHTML>
|
||||
|
||||
<% include UserFormProgress %>
|
||||
<% include UserFormStepErrors %>
|
||||
<% include SilverStripe\\UserForms\\Form\\UserFormProgress %>
|
||||
<% include SilverStripe\\UserForms\\Form\\UserFormStepErrors %>
|
||||
|
||||
<% if $Message %>
|
||||
<p id="{$FormName}_error" class="message $MessageType">$Message</p>
|
||||
|
@ -12,18 +12,18 @@
|
|||
<% if $Legend %>
|
||||
<fieldset>
|
||||
<legend>$Legend</legend>
|
||||
<% include UserFormFields %>
|
||||
<% include SilverStripe\\UserForms\\Form\\UserFormFields %>
|
||||
</fieldset>
|
||||
<% else %>
|
||||
<div class="userform-fields">
|
||||
<% include UserFormFields %>
|
||||
<% include SilverStripe\\UserForms\\Form\\UserFormFields %>
|
||||
</div>
|
||||
<% end_if %>
|
||||
|
||||
<% if $Steps.Count > 1 %>
|
||||
<% include UserFormStepNav %>
|
||||
<% include SilverStripe\\UserForms\\Form\\UserFormStepNav %>
|
||||
<% else %>
|
||||
<% include UserFormActionNav %>
|
||||
<% include SilverStripe\\UserForms\\Form\\UserFormActionNav %>
|
||||
<% end_if %>
|
||||
|
||||
</form>
|
|
@ -2,7 +2,7 @@
|
|||
<% if $Tag == 'fieldset' && $Legend %>
|
||||
<legend>$Legend</legend>
|
||||
<% end_if %>
|
||||
|
||||
|
||||
<div class="middleColumn">
|
||||
<% loop $FieldList %>
|
||||
<% if $ColumnCount %>
|
|
@ -1,15 +0,0 @@
|
|||
<?php
|
||||
|
||||
class EditableCheckboxGroupFieldTest extends SapphireTest
|
||||
{
|
||||
protected static $fixture_file = 'EditableFormFieldTest.yml';
|
||||
|
||||
/**
|
||||
* Tests that this element is rendered with a custom template
|
||||
*/
|
||||
public function testRenderedWithCustomTemplate()
|
||||
{
|
||||
$checkboxGroup = $this->objFromFixture('EditableCheckboxGroupField', 'checkbox-group');
|
||||
$this->assertEquals('UserFormsCheckboxSetField', $checkboxGroup->getFormField()->getTemplate());
|
||||
}
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
EditableFormField:
|
||||
countryDropdown:
|
||||
ClassName: EditableCountryDropdownField
|
||||
Name: CountrySelection
|
||||
Title: "Choose your country"
|
||||
DisplayRulesConjunction: And
|
||||
ShowOnLoad: false
|
||||
irdNumberField:
|
||||
ClassName: EditableTextField
|
||||
Name: IRDNumber
|
||||
Title: "Enter your IRD Number"
|
||||
countryTextField:
|
||||
ClassName: EditableTextField
|
||||
Name: CountryTextSelection
|
||||
Title: "Enter your country (2 digit prefix)"
|
||||
DisplayRulesConjunction: And
|
||||
ShowOnLoad: false
|
||||
EditableCustomRule:
|
||||
rule1:
|
||||
Display: Show
|
||||
ConditionOption: HasValue
|
||||
FieldValue: NZ
|
||||
ConditionField: =>EditableFormField.countryDropdown
|
||||
Parent: =>EditableFormField.irdNumberField
|
||||
rule2:
|
||||
Display: Show
|
||||
ConditionOption: ValueGreaterThan
|
||||
FieldValue: 1
|
||||
ConditionField: =>EditableFormField.countryTextField
|
||||
Parent: =>EditableFormField.irdNumberField
|
|
@ -1,15 +0,0 @@
|
|||
<?php
|
||||
|
||||
class EditableRadioFieldTest extends SapphireTest
|
||||
{
|
||||
protected static $fixture_file = 'EditableFormFieldTest.yml';
|
||||
|
||||
/**
|
||||
* Tests that this element is rendered with a custom template
|
||||
*/
|
||||
public function testRenderedWithCustomTemplate()
|
||||
{
|
||||
$radio = $this->objFromFixture('EditableRadioField', 'radio-field');
|
||||
$this->assertEquals('UserFormsOptionSetField', $radio->getFormField()->getTemplate());
|
||||
}
|
||||
}
|
|
@ -1,17 +1,22 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Tests\Form;
|
||||
|
||||
use SilverStripe\CMS\Controllers\ModelAsController;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\UserForms\Model\UserDefinedForm;
|
||||
use SilverStripe\UserForms\Form\UserForm;
|
||||
|
||||
class UserFormTest extends SapphireTest
|
||||
{
|
||||
|
||||
protected static $fixture_file = 'UserDefinedFormTest.yml';
|
||||
protected static $fixture_file = '../Model/UserDefinedFormTest.yml';
|
||||
|
||||
/**
|
||||
* Tests that a form will not generate empty pages
|
||||
*/
|
||||
public function testEmptyPages()
|
||||
{
|
||||
$page = $this->objFromFixture('UserDefinedForm', 'empty-page');
|
||||
$page = $this->objFromFixture(UserDefinedForm::class, 'empty-page');
|
||||
$this->assertEquals(5, $page->Fields()->count());
|
||||
$controller = ModelAsController::controller_for($page);
|
||||
$form = new UserForm($controller);
|
|
@ -1,9 +1,16 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Tests\FormField;
|
||||
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\Forms\RequiredFields;
|
||||
use SilverStripe\UserForms\FormField\UserFormsCheckboxSetField;
|
||||
|
||||
class UserFormsCheckboxSetFieldTest extends SapphireTest
|
||||
{
|
||||
public function testValidate() {
|
||||
$field = new UserFormsCheckboxSetField('Field', 'My field', array('One' => 'One', 'Two' => 'Two'));
|
||||
public function testValidate()
|
||||
{
|
||||
$field = new UserFormsCheckboxSetField('Field', 'My field', ['One' => 'One', 'Two' => 'Two']);
|
||||
$validator = new RequiredFields();
|
||||
|
||||
// String values
|
||||
|
@ -26,4 +33,4 @@ class UserFormsCheckboxSetFieldTest extends SapphireTest
|
|||
$field->setValue(array('Three', 'Four'));
|
||||
$this->assertFalse($field->validate($validator));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,30 +1,38 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Tests\Model;
|
||||
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\UserForms\Model\EditableCustomRule;
|
||||
|
||||
/**
|
||||
* Class EditableCustomRulesTest
|
||||
*/
|
||||
class EditableCustomRuleTest extends SapphireTest
|
||||
{
|
||||
protected static $fixture_file = 'userforms/tests/EditableCustomRuleTest.yml';
|
||||
protected static $fixture_file = 'EditableCustomRuleTest.yml';
|
||||
|
||||
public function testBuildExpression()
|
||||
{
|
||||
/** @var EditableCustomRule $rule1 */
|
||||
$rule1 = $this->objFromFixture('EditableCustomRule', 'rule1');
|
||||
$rule1 = $this->objFromFixture(EditableCustomRule::class, 'rule1');
|
||||
$result1 = $rule1->buildExpression();
|
||||
|
||||
//Dropdowns expect change event
|
||||
$this->assertEquals('change', $result1['event']);
|
||||
$this->assertNotEmpty($result1['operation']);
|
||||
|
||||
//Check for equals sign
|
||||
$this->assertContains('==', $result1['operation']);
|
||||
|
||||
/** @var EditableCustomRule $rule2 */
|
||||
$rule2 = $this->objFromFixture('EditableCustomRule', 'rule2');
|
||||
$rule2 = $this->objFromFixture(EditableCustomRule::class, 'rule2');
|
||||
$result2 = $rule2->buildExpression();
|
||||
|
||||
//TextField expect change event
|
||||
$this->assertEquals('keyup', $result2['event']);
|
||||
$this->assertNotEmpty($result2['operation']);
|
||||
|
||||
//Check for greater than sign
|
||||
$this->assertContains('>', $result2['operation']);
|
||||
}
|
||||
|
@ -35,7 +43,7 @@ class EditableCustomRuleTest extends SapphireTest
|
|||
*/
|
||||
public function testToggleDisplayText()
|
||||
{
|
||||
$rule1 = $this->objFromFixture('EditableCustomRule', 'rule1');
|
||||
$rule1 = $this->objFromFixture(EditableCustomRule::class, 'rule1');
|
||||
$this->assertSame('addClass("hide")', $rule1->toggleDisplayText('show'));
|
||||
$this->assertSame('removeClass("hide")', $rule1->toggleDisplayText('hide'));
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField:
|
||||
countryDropdown:
|
||||
Name: CountrySelection
|
||||
Title: "Choose your country"
|
||||
DisplayRulesConjunction: And
|
||||
ShowOnLoad: false
|
||||
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
irdNumberField:
|
||||
Name: IRDNumber
|
||||
Title: "Enter your IRD Number"
|
||||
countryTextField:
|
||||
Name: CountryTextSelection
|
||||
Title: "Enter your country (2 digit prefix)"
|
||||
DisplayRulesConjunction: And
|
||||
ShowOnLoad: false
|
||||
|
||||
SilverStripe\UserForms\Model\EditableCustomRule:
|
||||
rule1:
|
||||
Display: Show
|
||||
ConditionOption: HasValue
|
||||
FieldValue: NZ
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableCountryDropdownField.countryDropdown
|
||||
Parent: =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.irdNumberField
|
||||
rule2:
|
||||
Display: Show
|
||||
ConditionOption: ValueGreaterThan
|
||||
FieldValue: 1
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.countryTextField
|
||||
Parent: =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.irdNumberField
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Tests\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\UserForms\FormField\UserFormsCheckboxSetField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField;
|
||||
|
||||
class EditableCheckboxGroupFieldTest extends SapphireTest
|
||||
{
|
||||
protected static $fixture_file = '../EditableFormFieldTest.yml';
|
||||
|
||||
/**
|
||||
* Tests that this element is rendered with a custom template
|
||||
*/
|
||||
public function testRenderedWithCustomTemplate()
|
||||
{
|
||||
$checkboxGroup = $this->objFromFixture(EditableCheckboxGroupField::class, 'checkbox-group');
|
||||
$this->assertSame(UserFormsCheckboxSetField::class, $checkboxGroup->getFormField()->getTemplate());
|
||||
}
|
||||
}
|
|
@ -1,17 +1,16 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Tests\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableDropdown;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
|
||||
/**
|
||||
* Tests the {@see EditableDropdown} class
|
||||
*/
|
||||
class EditableDropdownTest extends SapphireTest
|
||||
{
|
||||
|
||||
public static $fixture_file = 'userforms/tests/EditableFormFieldTest.yml';
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
}
|
||||
protected static $fixture_file = '../EditableFormFieldTest.yml';
|
||||
|
||||
/**
|
||||
* Tests that the field sets the empty string if set
|
||||
|
@ -19,7 +18,7 @@ class EditableDropdownTest extends SapphireTest
|
|||
public function testFormField()
|
||||
{
|
||||
if (!$dropdown = EditableDropdown::get()->filter('UseEmptyString', true)->first()) {
|
||||
$dropdown = $this->objFromFixture('EditableDropdown', 'basic-dropdown');
|
||||
$dropdown = $this->objFromFixture(EditableDropdown::class, 'basic-dropdown');
|
||||
|
||||
$dropdown->UseEmptyString = true;
|
||||
$dropdown->EmptyString = 'My Default Empty String';
|
||||
|
@ -29,14 +28,12 @@ class EditableDropdownTest extends SapphireTest
|
|||
$field = $dropdown->getFormField();
|
||||
$this->assertEquals($field->getEmptyString(), 'My Default Empty String');
|
||||
|
||||
$alternateDropdown = $this->objFromFixture('EditableDropdown', 'department-dropdown');
|
||||
$alternateDropdown = $this->objFromFixture(EditableDropdown::class, 'department-dropdown');
|
||||
$formField = $alternateDropdown->getFormField();
|
||||
$this->assertFalse($formField->getHasEmptyDefault());
|
||||
|
||||
$alternateDropdown->UseEmptyString = true;
|
||||
$alternateDropdown->write();
|
||||
$this->assertEquals($formField->getEmptyString(), '');
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,15 +1,17 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Tests\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\ORM\ValidationException;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFileField;
|
||||
|
||||
/**
|
||||
* @package userforms
|
||||
*/
|
||||
class EditableFileFieldTest extends SapphireTest
|
||||
{
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public static $fixture_file = 'userforms/tests/EditableFormFieldTest.yml';
|
||||
protected static $fixture_file = '../EditableFormFieldTest.yml';
|
||||
|
||||
/**
|
||||
* @var
|
||||
|
@ -19,13 +21,12 @@ class EditableFileFieldTest extends SapphireTest
|
|||
/**
|
||||
* Hold the server default max file size upload limit for later
|
||||
*/
|
||||
public function setUp()
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$editableFileField = singleton('EditableFileField');
|
||||
$editableFileField = singleton(EditableFileField::class);
|
||||
$this->php_max_file_size = $editableFileField::get_php_max_file_size();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -33,7 +34,7 @@ class EditableFileFieldTest extends SapphireTest
|
|||
*/
|
||||
public function testDefaultMaxFileSize()
|
||||
{
|
||||
$fileField = $this->objFromFixture('EditableFileField', 'file-field');
|
||||
$fileField = $this->objFromFixture(EditableFileField::class, 'file-field');
|
||||
$formField = $fileField->getFormField();
|
||||
|
||||
$this->assertEquals($this->php_max_file_size, $formField->getValidator()->getAllowedMaxFileSize());
|
||||
|
@ -45,8 +46,8 @@ class EditableFileFieldTest extends SapphireTest
|
|||
public function testValidateFileSizeFieldValue()
|
||||
{
|
||||
|
||||
$fileField = $this->objFromFixture('EditableFileField', 'file-field');
|
||||
$this->setExpectedException('ValidationException');
|
||||
$fileField = $this->objFromFixture(EditableFileField::class, 'file-field');
|
||||
$this->setExpectedException(ValidationException::class);
|
||||
$fileField->MaxFileSizeMB = $this->php_max_file_size * 2;
|
||||
$fileField->write();
|
||||
}
|
||||
|
@ -56,12 +57,11 @@ class EditableFileFieldTest extends SapphireTest
|
|||
*/
|
||||
public function testUpdatedMaxFileSize()
|
||||
{
|
||||
$fileField = $this->objFromFixture('EditableFileField', 'file-field');
|
||||
$fileField = $this->objFromFixture(EditableFileField::class, 'file-field');
|
||||
$fileField->MaxFileSizeMB = .25;
|
||||
$fileField->write();
|
||||
|
||||
$formField = $fileField->getFormField();
|
||||
$this->assertEquals($formField->getValidator()->getAllowedMaxFileSize(), 262144);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -1,15 +1,25 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Tests\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\Forms\CompositeField;
|
||||
use SilverStripe\Forms\HTMLEditor\HTMLEditorConfig;
|
||||
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableLiteralField;
|
||||
|
||||
/**
|
||||
* Tests the {@see EditableLiteralField} class
|
||||
*/
|
||||
class EditableLiteralFieldTest extends SapphireTest
|
||||
{
|
||||
|
||||
public function setUp()
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
HtmlEditorConfig::set_active('cms');
|
||||
$cmsConfig = HTMLEditorConfig::get('cms');
|
||||
HTMLEditorConfig::set_active($cmsConfig);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -22,21 +32,21 @@ class EditableLiteralFieldTest extends SapphireTest
|
|||
$field = new EditableLiteralField();
|
||||
|
||||
// Test with sanitisation enabled
|
||||
Config::inst()->update('HtmlEditorField', 'sanitise_server_side', true);
|
||||
Config::modify()->set(HTMLEditorField::class, 'sanitise_server_side', true);
|
||||
$field->setContent($rawContent);
|
||||
$this->assertEquals($safeContent, $field->getContent());
|
||||
|
||||
// Test with sanitisation disabled
|
||||
Config::inst()->remove('HtmlEditorField', 'sanitise_server_side');
|
||||
Config::modify()->remove(HTMLEditorField::class, 'sanitise_server_side');
|
||||
$field->setContent($rawContent);
|
||||
$this->assertEquals($rawContent, $field->getContent());
|
||||
}
|
||||
|
||||
public function testHideLabel()
|
||||
{
|
||||
$field = new EditableLiteralField(array(
|
||||
$field = new EditableLiteralField([
|
||||
'Title' => 'Test label'
|
||||
));
|
||||
]);
|
||||
|
||||
$this->assertContains('Test label', $field->getFormField()->FieldHolder());
|
||||
$this->assertEquals('Test label', $field->getFormField()->Title());
|
||||
|
@ -48,7 +58,7 @@ class EditableLiteralFieldTest extends SapphireTest
|
|||
|
||||
public function testLiteralFieldHasUpdateFormFieldMethodCalled()
|
||||
{
|
||||
$field = $this->getMockBuilder('EditableLiteralField')
|
||||
$field = $this->getMockBuilder(EditableLiteralField::class)
|
||||
->setMethods(array('doUpdateFormField'))
|
||||
->getMock();
|
||||
|
||||
|
@ -66,9 +76,13 @@ class EditableLiteralFieldTest extends SapphireTest
|
|||
$field = new EditableLiteralField;
|
||||
$formField = $field->getFormField();
|
||||
|
||||
$this->assertInstanceOf('CompositeField', $formField, 'Literal field is contained within a composite field');
|
||||
$this->assertInstanceOf(
|
||||
'LiteralField',
|
||||
CompositeField::class,
|
||||
$formField,
|
||||
'Literal field is contained within a composite field'
|
||||
);
|
||||
$this->assertInstanceOf(
|
||||
LiteralField::class,
|
||||
$formField->FieldList()->first(),
|
||||
'Actual literal field exists in composite field children'
|
||||
);
|
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Tests\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\UserForms\FormField\UserFormsCheckboxSetField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableRadioField;
|
||||
|
||||
class EditableRadioFieldTest extends SapphireTest
|
||||
{
|
||||
protected static $fixture_file = '../EditableFormFieldTest.yml';
|
||||
|
||||
/**
|
||||
* Tests that this element is rendered with a custom template
|
||||
*/
|
||||
public function testRenderedWithCustomTemplate()
|
||||
{
|
||||
$radio = $this->objFromFixture(EditableRadioField::class, 'radio-field');
|
||||
$this->assertSame(
|
||||
'SilverStripe\\UserForms\\FormField\\UserFormsOptionSetField',
|
||||
$radio->getFormField()->getTemplate()
|
||||
);
|
||||
}
|
||||
}
|
|
@ -1,17 +1,23 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Tests\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableTextField;
|
||||
|
||||
class EditableTextFieldTest extends SapphireTest
|
||||
{
|
||||
public function testGetCmsFields()
|
||||
{
|
||||
Config::inst()->remove('EditableTextField', 'autocomplete_options');
|
||||
Config::inst()->update('EditableTextField', 'autocomplete_options', array('foo' => 'foo'));
|
||||
Config::modify()->set(EditableTextField::class, 'autocomplete_options', ['foo' => 'foo']);
|
||||
|
||||
$field = new EditableTextField;
|
||||
$result = $field->getCMSFields();
|
||||
|
||||
$autocompleteField = $result->fieldByName('Root.Main.Autocomplete');
|
||||
$this->assertInstanceOf('DropdownField', $autocompleteField);
|
||||
$this->assertEquals(array('foo' => 'foo'), $autocompleteField->getSource());
|
||||
$this->assertInstanceOf(DropdownField::class, $autocompleteField);
|
||||
$this->assertEquals(['foo' => 'foo'], $autocompleteField->getSource());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,16 +1,24 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Tests\Model\EditableFormField;
|
||||
|
||||
use SilverStripe\Assets\Filesystem;
|
||||
use SilverStripe\Assets\Folder;
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFileField;
|
||||
|
||||
/**
|
||||
* Tests integration of EditableFileField with the securefiles module
|
||||
*
|
||||
* @todo
|
||||
* @author dmooyman
|
||||
*/
|
||||
class SecureEditableFileFieldTest extends SapphireTest
|
||||
{
|
||||
|
||||
protected $usesDatabase = true;
|
||||
|
||||
public function setUp()
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
|
@ -18,11 +26,11 @@ class SecureEditableFileFieldTest extends SapphireTest
|
|||
$this->skipTest = true;
|
||||
$this->markTestSkipped(get_class() . ' skipped unless running with securefiles');
|
||||
}
|
||||
Config::inst()->update('EditableFileField', 'secure_folder_name', 'SecureEditableFileFieldTest/SecureUploads');
|
||||
Config::modify()->set(EditableFileField::class, 'secure_folder_name', 'SecureEditableFileFieldTest/SecureUploads');
|
||||
$this->clearPath();
|
||||
}
|
||||
|
||||
public function tearDown()
|
||||
protected function tearDown()
|
||||
{
|
||||
$this->clearPath();
|
||||
parent::tearDown();
|
||||
|
@ -54,7 +62,7 @@ class SecureEditableFileFieldTest extends SapphireTest
|
|||
*/
|
||||
public function testCreateInsecure()
|
||||
{
|
||||
Config::inst()->update('EditableFileField', 'disable_security', true);
|
||||
Config::modify()->set(EditableFileField::class, 'disable_security', true);
|
||||
|
||||
// Esure folder is created without a folder
|
||||
$field = new EditableFileField();
|
||||
|
@ -73,8 +81,8 @@ class SecureEditableFileFieldTest extends SapphireTest
|
|||
$this->assertEquals('Inherit', $field->Folder()->CanViewType);
|
||||
|
||||
// Enabling security and re-saving will force this field to be made secure (but not changed)
|
||||
Config::inst()->update('EditableFileField', 'disable_security', false);
|
||||
singleton('EditableFileField')->requireDefaultRecords();
|
||||
Config::modify()->set(EditableFileField::class, 'disable_security', false);
|
||||
singleton(EditableFileField::class)->requireDefaultRecords();
|
||||
|
||||
// Reload record from DB
|
||||
$field = EditableFileField::get()->byID($field->ID);
|
|
@ -1,19 +1,33 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Tests\Model;
|
||||
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Dev\FunctionalTest;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\OptionsetField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableDropdown;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFileField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableOption;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableRadioField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableTextField;
|
||||
use SilverStripe\UserForms\Model\UserDefinedForm;
|
||||
|
||||
/**
|
||||
* @package userforms
|
||||
*/
|
||||
|
||||
class EditableFormFieldTest extends FunctionalTest
|
||||
{
|
||||
|
||||
public static $fixture_file = 'userforms/tests/EditableFormFieldTest.yml';
|
||||
protected static $fixture_file = 'EditableFormFieldTest.yml';
|
||||
|
||||
public function testFormFieldPermissions()
|
||||
{
|
||||
$text = $this->objFromFixture('EditableTextField', 'basic-text');
|
||||
$text = $this->objFromFixture(EditableTextField::class, 'basic-text');
|
||||
|
||||
$this->logInWithPermission('ADMIN');
|
||||
|
||||
$this->assertTrue($text->canCreate());
|
||||
$this->assertTrue($text->canView());
|
||||
$this->assertTrue($text->canEdit());
|
||||
|
@ -29,10 +43,9 @@ class EditableFormFieldTest extends FunctionalTest
|
|||
$this->assertTrue($text->canEdit());
|
||||
$this->assertTrue($text->canDelete());
|
||||
|
||||
$member = Member::currentUser();
|
||||
$member->logout();
|
||||
|
||||
$this->logOut();
|
||||
$this->logInWithPermission('SITETREE_VIEW_ALL');
|
||||
|
||||
$this->assertFalse($text->canCreate());
|
||||
|
||||
$text->setReadonly(false);
|
||||
|
@ -49,10 +62,10 @@ class EditableFormFieldTest extends FunctionalTest
|
|||
public function testCustomRules()
|
||||
{
|
||||
$this->logInWithPermission('ADMIN');
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'custom-rules-form');
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, 'custom-rules-form');
|
||||
|
||||
$checkbox = $form->Fields()->find('ClassName', 'EditableCheckbox');
|
||||
$field = $form->Fields()->find('ClassName', 'EditableTextField');
|
||||
$checkbox = $form->Fields()->find('ClassName', EditableCheckbox::class);
|
||||
$field = $form->Fields()->find('ClassName', EditableTextField::class);
|
||||
|
||||
$rules = $checkbox->DisplayRules();
|
||||
|
||||
|
@ -78,65 +91,64 @@ class EditableFormFieldTest extends FunctionalTest
|
|||
*/
|
||||
public function testEditableOptionEmptyValue()
|
||||
{
|
||||
$option = $this->objFromFixture('EditableOption', 'option-1');
|
||||
$option = $this->objFromFixture(EditableOption::class, 'option-1');
|
||||
$option->Value = '';
|
||||
|
||||
// Disallow empty values
|
||||
EditableOption::set_allow_empty_values(false);
|
||||
// Disallow empty values
|
||||
EditableOption::set_allow_empty_values(false);
|
||||
$this->assertEquals($option->Title, $option->Value);
|
||||
|
||||
$option->Value = 'test';
|
||||
$this->assertEquals('test', $option->Value);
|
||||
|
||||
// Allow empty values
|
||||
EditableOption::set_allow_empty_values(true);
|
||||
// Allow empty values
|
||||
EditableOption::set_allow_empty_values(true);
|
||||
$option->Value = '';
|
||||
$this->assertEquals('', $option->Value);
|
||||
}
|
||||
|
||||
public function testEditableDropdownField()
|
||||
{
|
||||
$dropdown = $this->objFromFixture('EditableDropdown', 'basic-dropdown');
|
||||
$dropdown = $this->objFromFixture(EditableDropdown::class, 'basic-dropdown');
|
||||
|
||||
$field = $dropdown->getFormField();
|
||||
|
||||
|
||||
$this->assertThat($field, $this->isInstanceOf('DropdownField'));
|
||||
$this->assertThat($field, $this->isInstanceOf(DropdownField::class));
|
||||
$values = $field->getSource();
|
||||
|
||||
$this->assertEquals(array('Option 1' => 'Option 1', 'Option 2' => 'Option 2'), $values);
|
||||
$this->assertEquals(['Option 1' => 'Option 1', 'Option 2' => 'Option 2'], $values);
|
||||
}
|
||||
|
||||
public function testEditableRadioField()
|
||||
{
|
||||
$radio = $this->objFromFixture('EditableRadioField', 'radio-field');
|
||||
$radio = $this->objFromFixture(EditableRadioField::class, 'radio-field');
|
||||
|
||||
$field = $radio->getFormField();
|
||||
|
||||
$this->assertThat($field, $this->isInstanceOf('OptionsetField'));
|
||||
$this->assertThat($field, $this->isInstanceOf(OptionsetField::class));
|
||||
$values = $field->getSource();
|
||||
|
||||
$this->assertEquals(array('Option 5' => 'Option 5', 'Option 6' => 'Option 6'), $values);
|
||||
$this->assertEquals(['Option 5' => 'Option 5', 'Option 6' => 'Option 6'], $values);
|
||||
}
|
||||
|
||||
public function testMultipleOptionDuplication()
|
||||
{
|
||||
$dropdown = $this->objFromFixture('EditableDropdown', 'basic-dropdown');
|
||||
$dropdown = $this->objFromFixture(EditableDropdown::class, 'basic-dropdown');
|
||||
|
||||
$clone = $dropdown->duplicate();
|
||||
|
||||
$this->assertEquals($clone->Options()->Count(), $dropdown->Options()->Count());
|
||||
$this->assertEquals($dropdown->Options()->Count(), $clone->Options()->Count());
|
||||
|
||||
foreach ($clone->Options() as $option) {
|
||||
$orginal = $dropdown->Options()->find('Title', $option->Title);
|
||||
$original = $dropdown->Options()->find('Title', $option->Title);
|
||||
|
||||
$this->assertEquals($orginal->Sort, $option->Sort);
|
||||
$this->assertEquals($original->Sort, $option->Sort);
|
||||
}
|
||||
}
|
||||
|
||||
public function testFileField()
|
||||
{
|
||||
$fileField = $this->objFromFixture('EditableFileField', 'file-field');
|
||||
$fileField = $this->objFromFixture(EditableFileField::class, 'file-field');
|
||||
$formField = $fileField->getFormField();
|
||||
|
||||
$this->assertContains('jpg', $formField->getValidator()->getAllowedExtensions());
|
||||
|
@ -145,8 +157,8 @@ class EditableFormFieldTest extends FunctionalTest
|
|||
|
||||
public function testFileFieldAllowedExtensionsBlacklist()
|
||||
{
|
||||
Config::inst()->update('EditableFileField', 'allowed_extensions_blacklist', array('jpg'));
|
||||
$fileField = $this->objFromFixture('EditableFileField', 'file-field');
|
||||
Config::modify()->merge(EditableFileField::class, 'allowed_extensions_blacklist', ['jpg']);
|
||||
$fileField = $this->objFromFixture(EditableFileField::class, 'file-field');
|
||||
$formField = $fileField->getFormField();
|
||||
|
||||
$this->assertNotContains('jpg', $formField->getValidator()->getAllowedExtensions());
|
||||
|
@ -177,7 +189,7 @@ class EditableFormFieldTest extends FunctionalTest
|
|||
public function testLengthRange()
|
||||
{
|
||||
/** @var EditableTextField $textField */
|
||||
$textField = $this->objFromFixture('EditableTextField', 'basic-text');
|
||||
$textField = $this->objFromFixture(EditableTextField::class, 'basic-text');
|
||||
|
||||
// Empty range
|
||||
/** @var TextField $formField */
|
||||
|
@ -207,7 +219,7 @@ class EditableFormFieldTest extends FunctionalTest
|
|||
|
||||
public function testFormatDisplayRules()
|
||||
{
|
||||
$field = $this->objFromFixture('EditableFormField', 'irdNumberField');
|
||||
$field = $this->objFromFixture(EditableTextField::class, 'irdNumberField');
|
||||
$displayRules = $field->formatDisplayRules();
|
||||
$this->assertNotNull($displayRules);
|
||||
$this->assertCount(1, $displayRules['operations']);
|
|
@ -1,26 +1,41 @@
|
|||
EditableFormField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
basic-text:
|
||||
Name: basic-text-name
|
||||
Title: Basic Text Field
|
||||
|
||||
basic-text-2:
|
||||
Name: basic-text-name
|
||||
Title: Basic Text Field
|
||||
|
||||
required-text:
|
||||
Name: required-text-field
|
||||
Title: Required Text Field
|
||||
CustomErrorMessage: Custom Error Message
|
||||
Required: true
|
||||
|
||||
irdNumberField:
|
||||
ClassName: EditableTextField
|
||||
Name: IRDNumber
|
||||
Title: "Enter your IRD Number"
|
||||
|
||||
countryTextField:
|
||||
ClassName: EditableTextField
|
||||
Name: CountryTextSelection
|
||||
Title: "Enter your country (2 digit prefix)"
|
||||
DisplayRulesConjunction: And
|
||||
ShowOnLoad: false
|
||||
EditableCustomRule:
|
||||
|
||||
SilverStripe\UserForms\Model\EditableCustomRule:
|
||||
rule1:
|
||||
Display: Show
|
||||
ConditionOption: HasValue
|
||||
FieldValue: NZ
|
||||
ConditionField: =>EditableFormField.countryTextField
|
||||
Parent: =>EditableFormField.irdNumberField
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.countryTextField
|
||||
Parent: =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.irdNumberField
|
||||
rule-1:
|
||||
Display: Hide
|
||||
ConditionOption: HasValue
|
||||
FieldValue: 6
|
||||
EditableOption:
|
||||
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
option-1:
|
||||
Name: Option1
|
||||
Title: Option 1
|
||||
|
@ -61,7 +76,7 @@ EditableOption:
|
|||
Title: Option 6
|
||||
Value: Option 6
|
||||
|
||||
UserDefinedForm_EmailRecipient:
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
recipient-1:
|
||||
EmailAddress: test@example.com
|
||||
EmailSubject: Email Subject
|
||||
|
@ -79,33 +94,22 @@ UserDefinedForm_EmailRecipient:
|
|||
EmailFrom: no-reply@example.com
|
||||
HideFormData: true
|
||||
|
||||
EditableTextField:
|
||||
basic-text:
|
||||
Name: basic-text-name
|
||||
Title: Basic Text Field
|
||||
|
||||
basic-text-2:
|
||||
Name: basic-text-name
|
||||
Title: Basic Text Field
|
||||
|
||||
required-text:
|
||||
Name: required-text-field
|
||||
Title: Required Text Field
|
||||
CustomErrorMessage: Custom Error Message
|
||||
Required: true
|
||||
|
||||
EditableDropdown:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
basic-dropdown:
|
||||
Name: basic-dropdown
|
||||
Title: Basic Dropdown Field
|
||||
Options: =>EditableOption.option-1, =>EditableOption.option-2
|
||||
Options:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.option-1
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.option-2
|
||||
|
||||
department-dropdown:
|
||||
Name: department
|
||||
Title: Department
|
||||
Options: =>EditableOption.department-1, =>EditableOption.department-2
|
||||
Options:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.department-1
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.department-2
|
||||
|
||||
EditableCheckbox:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
checkbox-1:
|
||||
Name: checkbox-1
|
||||
Title: Checkbox 1
|
||||
|
@ -117,35 +121,42 @@ EditableCheckbox:
|
|||
checkbox-with-rule:
|
||||
Name: checkbox-with-rule
|
||||
Title: Checkbox with rule
|
||||
DisplayRules: =>EditableCustomRule.rule-1
|
||||
DisplayRules: =>SilverStripe\UserForms\Model\EditableCustomRule.rule-1
|
||||
|
||||
EditableCheckboxGroupField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
checkbox-group:
|
||||
Name: check-box-group
|
||||
Title: Check box group
|
||||
Options: =>EditableOption.option-3, =>EditableOption.option-4
|
||||
Options:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.option-3
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.option-4
|
||||
|
||||
EditableEmailField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
email-field:
|
||||
Name: email-field
|
||||
Title: Email
|
||||
|
||||
EditableRadioField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableRadioField:
|
||||
radio-field:
|
||||
Name: radio-option
|
||||
Title: Radio Option
|
||||
Options: =>EditableOption.option-5, =>EditableOption.option-6
|
||||
Options:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.option-5
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.option-6
|
||||
|
||||
EditableFileField:
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFileField:
|
||||
file-field:
|
||||
Name: file-uploader
|
||||
Title: Set file
|
||||
|
||||
UserDefinedForm:
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
basic-form-page:
|
||||
Title: User Defined Form
|
||||
Fields: =>EditableTextField.basic-text
|
||||
EmailRecipients: =>UserDefinedForm_EmailRecipient.recipient-1, =>UserDefinedForm_EmailRecipient.no-html, =>UserDefinedForm_EmailRecipient.no-data
|
||||
Fields: =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.basic-text
|
||||
EmailRecipients:
|
||||
- =>SilverStripe\UserForms\Model\Recipient\EmailRecipient.recipient-1
|
||||
- =>SilverStripe\UserForms\Model\Recipient\EmailRecipient.no-html
|
||||
- =>SilverStripe\UserForms\Model\Recipient\EmailRecipient.no-data
|
||||
|
||||
form-with-reset-and-custom-action:
|
||||
Title: Form with Reset Action
|
||||
|
@ -154,10 +165,12 @@ UserDefinedForm:
|
|||
|
||||
validation-form:
|
||||
Title: Validation Form
|
||||
Fields: =>EditableTextField.required-text
|
||||
Fields: =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.required-text
|
||||
|
||||
custom-rules-form:
|
||||
Title: Custom Rules Form
|
||||
Fields: =>EditableCheckbox.checkbox-with-rule, =>EditableTextField.basic-text-2
|
||||
Fields:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox.checkbox-with-rule
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.basic-text-2
|
||||
empty-form:
|
||||
Title: Empty Form
|
||||
Title: Empty Form
|
|
@ -0,0 +1,62 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Tests\Model\Recipient;
|
||||
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition;
|
||||
|
||||
/**
|
||||
* Class EditableCustomRulesTest
|
||||
*/
|
||||
class EmailRecipientConditionTest extends SapphireTest
|
||||
{
|
||||
protected static $fixture_file = 'EmailRecipientConditionTest.yml';
|
||||
|
||||
/**
|
||||
* Various matching tests
|
||||
*/
|
||||
public function testMatches()
|
||||
{
|
||||
$fixtureClass = EmailRecipientCondition::class;
|
||||
|
||||
//Test Blank
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'blankTest');
|
||||
$this->assertTrue($blankObj->matches(['Name' => null]));
|
||||
$this->assertFalse($blankObj->matches(['Name' => 'Jane']));
|
||||
|
||||
//Test IsNotBlank
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'isNotBlankTest');
|
||||
$this->assertTrue($blankObj->matches(['Name' => 'Jane']));
|
||||
$this->assertFalse($blankObj->matches(['Name' => null]));
|
||||
|
||||
//Test ValueLessthan
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'valueLessThanTest');
|
||||
$this->assertTrue($blankObj->matches(['Age' => 17]));
|
||||
$this->assertFalse($blankObj->matches(['Age' => 19]));
|
||||
|
||||
//Test ValueLessThanEquals
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'valueLessThanEqualTest');
|
||||
$this->assertTrue($blankObj->matches(['Age' => 18]));
|
||||
$this->assertFalse($blankObj->matches(['Age' => 19]));
|
||||
|
||||
//Test ValueGreaterThan
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'valueGreaterThanTest');
|
||||
$this->assertTrue($blankObj->matches(['Age' => 19]));
|
||||
$this->assertFalse($blankObj->matches(['Age' => 17]));
|
||||
|
||||
//Test ValueGreaterThanEquals
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'valueGreaterThanEqualTest');
|
||||
$this->assertTrue($blankObj->matches(['Age' => 18]));
|
||||
$this->assertFalse($blankObj->matches(['Age' => 17]));
|
||||
|
||||
//Test Equals
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'equalsTest');
|
||||
$this->assertTrue($blankObj->matches(['Age' => 18]));
|
||||
$this->assertFalse($blankObj->matches(['Age' => 17]));
|
||||
|
||||
//Test NotEquals
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'notEqualsTest');
|
||||
$this->assertTrue($blankObj->matches(['Age' => 17]));
|
||||
$this->assertFalse($blankObj->matches(['Age' => 18]));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
nameField:
|
||||
Name: Name
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableNumericField:
|
||||
ageField:
|
||||
Name: Age
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition:
|
||||
blankTest:
|
||||
ConditionOption: IsBlank
|
||||
ConditionValue: null
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.nameField
|
||||
isNotBlankTest:
|
||||
ConditionOption: IsNotBlank
|
||||
ConditionValue: null
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.nameField
|
||||
equalsTest:
|
||||
ConditionOption: Equals
|
||||
ConditionValue: 18
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableNumericField.ageField
|
||||
notEqualsTest:
|
||||
ConditionOption: NotEquals
|
||||
ConditionValue: 18
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableNumericField.ageField
|
||||
valueLessThanTest:
|
||||
ConditionOption: ValueLessThan
|
||||
ConditionValue: 18
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableNumericField.ageField
|
||||
valueLessThanEqualTest:
|
||||
ConditionOption: ValueLessThanEqual
|
||||
ConditionValue: 18
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableNumericField.ageField
|
||||
valueGreaterThanTest:
|
||||
ConditionOption: ValueGreaterThan
|
||||
ConditionValue: 18
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableNumericField.ageField
|
||||
valueGreaterThanEqualTest:
|
||||
ConditionOption: ValueGreaterThanEqual
|
||||
ConditionValue: 18
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableNumericField.ageField
|
|
@ -1,14 +1,20 @@
|
|||
<?php
|
||||
|
||||
class UserDefinedForm_EmailRecipientTest extends SapphireTest
|
||||
namespace SilverStripe\UserForms\Tests\Model\Recipient;
|
||||
|
||||
use SilverStripe\CMS\Model\SiteTree;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\UserForms\Model\Recipient\EmailRecipient;
|
||||
|
||||
class EmailRecipientTest extends SapphireTest
|
||||
{
|
||||
protected static $fixture_file = 'UserDefinedForm_EmailRecipientTest.yml';
|
||||
protected static $fixture_file = 'EmailRecipientTest.yml';
|
||||
|
||||
public function testShortcodesAreRenderedInEmailPreviewContent()
|
||||
{
|
||||
$page = $this->objFromFixture('SiteTree', 'about_us');
|
||||
$page = $this->objFromFixture(SiteTree::class, 'about_us');
|
||||
|
||||
$recipient = UserDefinedForm_EmailRecipient::create();
|
||||
$recipient = EmailRecipient::create();
|
||||
$recipient->SendPlain = false;
|
||||
$recipient->EmailBodyHtml = '<p>Some email content. About us: [sitetree_link,id=' . $page->ID . '].</p>';
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
SiteTree:
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
about_us:
|
||||
Title: About Us
|
||||
URLSegment: about-us
|
|
@ -1,19 +1,43 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Tests\Model;
|
||||
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Dev\CSSContentParser;
|
||||
use SilverStripe\Dev\FunctionalTest;
|
||||
use SilverStripe\Dev\TestOnly;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\FormAction;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\Security\Member;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableTextField;
|
||||
use SilverStripe\UserForms\Model\Submission\SubmittedFormField;
|
||||
use SilverStripe\UserForms\Model\UserDefinedForm;
|
||||
use SilverStripe\UserForms\Model\UserDefinedFormController;
|
||||
use SilverStripe\View\ArrayData;
|
||||
use SilverStripe\View\SSViewer;
|
||||
|
||||
/**
|
||||
* @package userforms
|
||||
*/
|
||||
|
||||
class UserDefinedFormControllerTest extends FunctionalTest
|
||||
{
|
||||
protected static $fixture_file = 'UserDefinedFormTest.yml';
|
||||
|
||||
public static $fixture_file = 'UserDefinedFormTest.yml';
|
||||
protected static $use_draft_site = true;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
Config::modify()->set(SSViewer::class, 'themes', ['simple', '$default']);
|
||||
}
|
||||
|
||||
public function testProcess()
|
||||
{
|
||||
$form = $this->setupFormFrontend();
|
||||
|
||||
$controller = new UserDefinedFormControllerTest_Controller($form);
|
||||
$controller = new UserDefinedFormController($form);
|
||||
|
||||
$this->autoFollowRedirection = false;
|
||||
$this->clearEmails();
|
||||
|
@ -21,20 +45,27 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
// load the form
|
||||
$this->get($form->URLSegment);
|
||||
|
||||
$field = $this->objFromFixture('EditableTextField', 'basic-text');
|
||||
$field = $this->objFromFixture(EditableTextField::class, 'basic-text');
|
||||
|
||||
$response = $this->submitForm('UserForm_Form_' . $form->ID, null, array($field->Name => 'Basic Value'));
|
||||
$response = $this->submitForm('UserForm_Form_' . $form->ID, null, [$field->Name => 'Basic Value']);
|
||||
|
||||
// should have a submitted form field now
|
||||
$submitted = DataObject::get('SubmittedFormField', "\"Name\" = 'basic-text-name'");
|
||||
$this->assertDOSAllMatch(array('Name' => 'basic-text-name', 'Value' => 'Basic Value', 'Title' => 'Basic Text Field'), $submitted);
|
||||
$submitted = DataObject::get(SubmittedFormField::class, "\"Name\" = 'basic-text-name'");
|
||||
$this->assertDOSAllMatch(
|
||||
[
|
||||
'Name' => 'basic-text-name',
|
||||
'Value' => 'Basic Value',
|
||||
'Title' => 'Basic Text Field'
|
||||
],
|
||||
$submitted
|
||||
);
|
||||
|
||||
// check emails
|
||||
$this->assertEmailSent('test@example.com', 'no-reply@example.com', 'Email Subject');
|
||||
$email = $this->findEmail('test@example.com', 'no-reply@example.com', 'Email Subject');
|
||||
|
||||
// assert that the email has the field title and the value html email
|
||||
$parser = new CSSContentParser($email['content']);
|
||||
$parser = new CSSContentParser($email['Content']);
|
||||
$title = $parser->getBySelector('strong');
|
||||
|
||||
$this->assertEquals('Basic Text Field', (string) $title[0], 'Email contains the field name');
|
||||
|
@ -46,13 +77,13 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
$this->assertEmailSent('nohtml@example.com', 'no-reply@example.com', 'Email Subject');
|
||||
$nohtml = $this->findEmail('nohtml@example.com', 'no-reply@example.com', 'Email Subject');
|
||||
|
||||
$this->assertContains('Basic Text Field: Basic Value', $nohtml['content'], 'Email contains no html');
|
||||
$this->assertContains('Basic Text Field: Basic Value', $nohtml['Content'], 'Email contains no html');
|
||||
|
||||
// no data
|
||||
$this->assertEmailSent('nodata@example.com', 'no-reply@example.com', 'Email Subject');
|
||||
$nodata = $this->findEmail('nodata@example.com', 'no-reply@example.com', 'Email Subject');
|
||||
|
||||
$parser = new CSSContentParser($nodata['content']);
|
||||
$parser = new CSSContentParser($nodata['Content']);
|
||||
$list = $parser->getBySelector('dl');
|
||||
|
||||
$this->assertFalse(isset($list[0]), 'Email contains no fields');
|
||||
|
@ -68,31 +99,31 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
|
||||
// Post with no fields
|
||||
$this->get($form->URLSegment);
|
||||
$response = $this->submitForm('UserForm_Form_' . $form->ID, null, array());
|
||||
$response = $this->submitForm('UserForm_Form_' . $form->ID, null, []);
|
||||
$this->assertPartialMatchBySelector(
|
||||
'.field .message',
|
||||
array('This field is required')
|
||||
['This field is required']
|
||||
);
|
||||
|
||||
// Post with all fields, but invalid email
|
||||
$this->get($form->URLSegment);
|
||||
$this->submitForm('UserForm_Form_' . $form->ID, null, array(
|
||||
$this->submitForm('UserForm_Form_' . $form->ID, null, [
|
||||
'required-email' => 'invalid',
|
||||
'required-text' => 'bob'
|
||||
));
|
||||
]);
|
||||
$this->assertPartialMatchBySelector(
|
||||
'.field .message',
|
||||
array('Please enter an email address')
|
||||
['Please enter an email address']
|
||||
);
|
||||
|
||||
// Post with only required
|
||||
$this->get($form->URLSegment);
|
||||
$this->submitForm('UserForm_Form_' . $form->ID, null, array(
|
||||
$this->submitForm('UserForm_Form_' . $form->ID, null, [
|
||||
'required-text' => 'bob'
|
||||
));
|
||||
]);
|
||||
$this->assertPartialMatchBySelector(
|
||||
'p',
|
||||
array("Thanks, we've received your submission.")
|
||||
["Thanks, we've received your submission."]
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -101,8 +132,8 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
$form = $this->setupFormFrontend();
|
||||
|
||||
// set formProcessed and SecurityID to replicate the form being filled out
|
||||
$this->session()->inst_set('SecurityID', 1);
|
||||
$this->session()->inst_set('FormProcessed', 1);
|
||||
$this->session()->set('SecurityID', 1);
|
||||
$this->session()->set('FormProcessed', 1);
|
||||
|
||||
$response = $this->get($form->URLSegment.'/finished');
|
||||
|
||||
|
@ -114,8 +145,8 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
$form = $this->setupFormFrontend();
|
||||
|
||||
// replicate finished being added to the end of the form URL without the form being filled out
|
||||
$this->session()->inst_set('SecurityID', 1);
|
||||
$this->session()->inst_set('FormProcessed', null);
|
||||
$this->session()->set('SecurityID', 1);
|
||||
$this->session()->set('FormProcessed', null);
|
||||
|
||||
$response = $this->get($form->URLSegment.'/finished');
|
||||
|
||||
|
@ -124,9 +155,9 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
|
||||
public function testForm()
|
||||
{
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, 'basic-form-page');
|
||||
|
||||
$controller = new UserDefinedFormControllerTest_Controller($form);
|
||||
$controller = new UserDefinedFormController($form);
|
||||
|
||||
// test form
|
||||
$this->assertEquals($controller->Form()->getName(), 'Form_' . $form->ID, 'The form is referenced as Form');
|
||||
|
@ -134,8 +165,8 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
$this->assertEquals($controller->Form()->Actions()->Count(), 1);
|
||||
$this->assertEquals(count($controller->Form()->getValidator()->getRequired()), 0);
|
||||
|
||||
$requiredForm = $this->objFromFixture('UserDefinedForm', 'validation-form');
|
||||
$controller = new UserDefinedFormControllerTest_Controller($requiredForm);
|
||||
$requiredForm = $this->objFromFixture(UserDefinedForm::class, 'validation-form');
|
||||
$controller = new UserDefinedFormController($requiredForm);
|
||||
|
||||
$this->assertEquals($controller->Form()->Fields()->Count(), 1); // disabled SecurityID token fields
|
||||
$this->assertEquals($controller->Form()->Actions()->Count(), 1);
|
||||
|
@ -145,9 +176,9 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
public function testGetFormFields()
|
||||
{
|
||||
// generating the fieldset of fields
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, 'basic-form-page');
|
||||
|
||||
$controller = new UserDefinedFormControllerTest_Controller($form);
|
||||
$controller = new UserDefinedFormController($form);
|
||||
|
||||
$formSteps = $controller->Form()->getFormFields();
|
||||
$firstStep = $formSteps->first();
|
||||
|
@ -156,10 +187,10 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
$this->assertEquals($firstStep->getChildren()->Count(), 1);
|
||||
|
||||
// custom error message on a form field
|
||||
$requiredForm = $this->objFromFixture('UserDefinedForm', 'validation-form');
|
||||
$controller = new UserDefinedFormControllerTest_Controller($requiredForm);
|
||||
$requiredForm = $this->objFromFixture(UserDefinedForm::class, 'validation-form');
|
||||
$controller = new UserDefinedFormController($requiredForm);
|
||||
|
||||
UserDefinedForm::config()->required_identifier = "*";
|
||||
Config::modify()->set(UserDefinedForm::class, 'required_identifier', '*');
|
||||
|
||||
$formSteps = $controller->Form()->getFormFields();
|
||||
$firstStep = $formSteps->first();
|
||||
|
@ -173,15 +204,15 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
$field->RightTitle = 'Right Title';
|
||||
$field->write();
|
||||
|
||||
$controller = new UserDefinedFormControllerTest_Controller($form);
|
||||
$controller = new UserDefinedFormController($form);
|
||||
$formSteps = $controller->Form()->getFormFields();
|
||||
$firstStep = $formSteps->first();
|
||||
|
||||
$this->assertEquals($firstStep->getChildren()->First()->RightTitle(), "Right Title");
|
||||
|
||||
// test empty form
|
||||
$emptyForm = $this->objFromFixture('UserDefinedForm', 'empty-form');
|
||||
$controller = new UserDefinedFormControllerTest_Controller($emptyForm);
|
||||
$emptyForm = $this->objFromFixture(UserDefinedForm::class, 'empty-form');
|
||||
$controller = new UserDefinedFormController($emptyForm);
|
||||
|
||||
$this->assertFalse($controller->Form()->getFormFields()->exists());
|
||||
}
|
||||
|
@ -189,9 +220,9 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
public function testGetFormActions()
|
||||
{
|
||||
// generating the fieldset of actions
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, 'basic-form-page');
|
||||
|
||||
$controller = new UserDefinedFormControllerTest_Controller($form);
|
||||
$controller = new UserDefinedFormController($form);
|
||||
$actions = $controller->Form()->getFormActions();
|
||||
|
||||
// by default will have 1 submit button which links to process
|
||||
|
@ -201,12 +232,12 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
$this->assertEquals($actions, $expected);
|
||||
|
||||
// the custom popup should have a reset button and a custom text
|
||||
$custom = $this->objFromFixture('UserDefinedForm', 'form-with-reset-and-custom-action');
|
||||
$controller = new UserDefinedFormControllerTest_Controller($custom);
|
||||
$custom = $this->objFromFixture(UserDefinedForm::class, 'form-with-reset-and-custom-action');
|
||||
$controller = new UserDefinedFormController($custom);
|
||||
$actions = $controller->Form()->getFormActions();
|
||||
|
||||
$expected = new FieldList(new FormAction('process', 'Custom Button'));
|
||||
$expected->push(new ResetFormAction("clearForm", "Clear"));
|
||||
$expected->push(FormAction::create('clearForm', 'Clear')->setAttribute('type', 'reset'));
|
||||
$expected->setForm($controller->Form());
|
||||
|
||||
$this->assertEquals($actions, $expected);
|
||||
|
@ -216,14 +247,15 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
{
|
||||
$form = $this->setupFormFrontend();
|
||||
|
||||
$this->logInWithPermission('ADMIN');
|
||||
$form->Content = 'This is some content without a form nested between it';
|
||||
$form->doPublish();
|
||||
$form->publishRecursive();
|
||||
|
||||
$controller = new UserDefinedFormControllerTest_Controller($form);
|
||||
$controller = new UserDefinedFormController($form);
|
||||
|
||||
// check to see if $Form is replaced to inside the content
|
||||
$index = new ArrayData($controller->index());
|
||||
$parser = new CSSContentParser($index->renderWith(array('UserDefinedFormControllerTest')));
|
||||
$parser = new CSSContentParser($index->renderWith(__CLASS__));
|
||||
|
||||
$this->checkTemplateIsCorrect($parser, $form);
|
||||
}
|
||||
|
@ -232,11 +264,11 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
{
|
||||
$form = $this->setupFormFrontend();
|
||||
|
||||
$controller = new UserDefinedFormControllerTest_Controller($form);
|
||||
$controller = new UserDefinedFormController($form);
|
||||
|
||||
// check to see if $Form is replaced to inside the content
|
||||
$index = new ArrayData($controller->index());
|
||||
$parser = new CSSContentParser($index->renderWith(array('UserDefinedFormControllerTest')));
|
||||
$parser = new CSSContentParser($index->renderWith(__CLASS__));
|
||||
|
||||
$this->checkTemplateIsCorrect($parser, $form);
|
||||
}
|
||||
|
@ -248,10 +280,10 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
*/
|
||||
protected function setupFormFrontend($fixtureName = 'basic-form-page')
|
||||
{
|
||||
$form = $this->objFromFixture('UserDefinedForm', $fixtureName);
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, $fixtureName);
|
||||
$this->logInWithPermission('ADMIN');
|
||||
|
||||
$form->doPublish();
|
||||
$form->publishRecursive();
|
||||
|
||||
$member = Member::currentUser();
|
||||
$member->logOut();
|
||||
|
@ -279,21 +311,3 @@ class UserDefinedFormControllerTest extends FunctionalTest
|
|||
$this->assertEquals((string) $action[0]['value'], "Submit", "Submit button has default text");
|
||||
}
|
||||
}
|
||||
|
||||
class UserDefinedFormControllerTest_Controller extends UserDefinedForm_Controller implements TestOnly
|
||||
{
|
||||
|
||||
/**
|
||||
* Overloaded to avoid inconsistencies between 2.4.2 and 2.4.3 (disables all security tokens in unit tests by default)
|
||||
*/
|
||||
public function Form()
|
||||
{
|
||||
$form = parent::Form();
|
||||
|
||||
if ($form) {
|
||||
$form->disableSecurityToken();
|
||||
}
|
||||
|
||||
return $form;
|
||||
}
|
||||
}
|
|
@ -1,12 +1,39 @@
|
|||
<?php
|
||||
|
||||
namespace SilverStripe\UserForms\Tests\Model;
|
||||
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\Dev\FunctionalTest;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\Form;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldDataColumns;
|
||||
use SilverStripe\ORM\DB;
|
||||
use SilverStripe\Security\Member;
|
||||
use SilverStripe\UserForms\Extension\UserFormFieldEditorExtension;
|
||||
use SilverStripe\UserForms\Extension\UserFormValidator;
|
||||
use SilverStripe\UserForms\Model\EditableCustomRule;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableEmailField;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableDropdown;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup;
|
||||
use SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd;
|
||||
use SilverStripe\UserForms\Model\Recipient\EmailRecipient;
|
||||
use SilverStripe\UserForms\Model\UserDefinedForm;
|
||||
use SilverStripe\Versioned\Versioned;
|
||||
|
||||
/**
|
||||
* @package userforms
|
||||
*/
|
||||
class UserDefinedFormTest extends FunctionalTest
|
||||
{
|
||||
protected static $fixture_file = 'UserDefinedFormTest.yml';
|
||||
|
||||
public static $fixture_file = 'UserDefinedFormTest.yml';
|
||||
protected static $required_extensions = [
|
||||
UserDefinedForm::class => [UserFormFieldEditorExtension::class],
|
||||
];
|
||||
|
||||
public function testRollbackToVersion()
|
||||
{
|
||||
|
@ -16,31 +43,31 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
|
||||
// @todo
|
||||
$this->logInWithPermission('ADMIN');
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, 'basic-form-page');
|
||||
|
||||
$form->SubmitButtonText = 'Button Text';
|
||||
$form->write();
|
||||
$form->doPublish();
|
||||
$form->publishRecursive();
|
||||
$origVersion = $form->Version;
|
||||
|
||||
$form->SubmitButtonText = 'Updated Button Text';
|
||||
$form->write();
|
||||
$form->doPublish();
|
||||
$form->publishRecursive();
|
||||
|
||||
// check published site
|
||||
$updated = Versioned::get_one_by_stage("UserDefinedForm", "Stage", "\"UserDefinedForm\".\"ID\" = $form->ID");
|
||||
$updated = Versioned::get_one_by_stage(UserDefinedForm::class, 'Stage', "\"UserDefinedForm\".\"ID\" = $form->ID");
|
||||
$this->assertEquals($updated->SubmitButtonText, 'Updated Button Text');
|
||||
|
||||
$form->doRollbackTo($origVersion);
|
||||
|
||||
$orignal = Versioned::get_one_by_stage("UserDefinedForm", "Stage", "\"UserDefinedForm\".\"ID\" = $form->ID");
|
||||
$orignal = Versioned::get_one_by_stage(UserDefinedForm::class, 'Stage', "\"UserDefinedForm\".\"ID\" = $form->ID");
|
||||
$this->assertEquals($orignal->SubmitButtonText, 'Button Text');
|
||||
}
|
||||
|
||||
public function testGetCMSFields()
|
||||
{
|
||||
$this->logInWithPermission('ADMIN');
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, 'basic-form-page');
|
||||
|
||||
$fields = $form->getCMSFields();
|
||||
|
||||
|
@ -50,18 +77,18 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
$this->assertTrue($fields->dataFieldByName('OnCompleteMessage') != null);
|
||||
}
|
||||
|
||||
|
||||
public function testGetCMSFieldsShowInSummary()
|
||||
|
||||
public function testGetCMSFieldsShowInSummary()
|
||||
{
|
||||
$this->logInWithPermission('ADMIN');
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'summary-rules-form');
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, 'summary-rules-form');
|
||||
|
||||
$fields = $form->getCMSFields();
|
||||
|
||||
$this->assertInstanceOf('GridField', $fields->dataFieldByName('Submissions'));
|
||||
$this->assertInstanceOf(GridField::class, $fields->dataFieldByName('Submissions'));
|
||||
|
||||
$submissionsgrid = $fields->dataFieldByName('Submissions');
|
||||
$gridFieldDataColumns = $submissionsgrid->getConfig()->getComponentByType('GridFieldDataColumns');
|
||||
$gridFieldDataColumns = $submissionsgrid->getConfig()->getComponentByType(GridFieldDataColumns::class);
|
||||
|
||||
$summaryFields = $gridFieldDataColumns->getDisplayFields($submissionsgrid);
|
||||
|
||||
|
@ -69,14 +96,14 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
$this->assertNotContains('SummaryHide', array_keys($summaryFields), 'Summary field showing displayed field');
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function testEmailRecipientPopup()
|
||||
{
|
||||
$this->logInWithPermission('ADMIN');
|
||||
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, 'basic-form-page');
|
||||
|
||||
$popup = new UserDefinedForm_EmailRecipient();
|
||||
$popup = new EmailRecipient();
|
||||
$popup->FormID = $form->ID;
|
||||
|
||||
$fields = $popup->getCMSFields();
|
||||
|
@ -89,16 +116,16 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
$this->assertTrue($fields->dataFieldByName('EmailBody') !== null);
|
||||
|
||||
// add an email field, it should now add a or from X address picker
|
||||
$email = $this->objFromFixture('EditableEmailField', 'email-field');
|
||||
$email = $this->objFromFixture(EditableEmailField::class, 'email-field');
|
||||
$form->Fields()->add($email);
|
||||
|
||||
$popup->write();
|
||||
|
||||
$fields = $popup->getCMSFields();
|
||||
$this->assertThat($fields->dataFieldByName('SendEmailToFieldID'), $this->isInstanceOf('DropdownField'));
|
||||
$this->assertThat($fields->dataFieldByName('SendEmailToFieldID'), $this->isInstanceOf(DropdownField::class));
|
||||
|
||||
// if the front end has checkboxs or dropdown they can select from that can also be used to send things
|
||||
$dropdown = $this->objFromFixture('EditableDropdown', 'department-dropdown');
|
||||
$dropdown = $this->objFromFixture(EditableDropdown::class, 'department-dropdown');
|
||||
$form->Fields()->add($dropdown);
|
||||
|
||||
$fields = $popup->getCMSFields();
|
||||
|
@ -109,7 +136,7 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
|
||||
public function testGetEmailBodyContent()
|
||||
{
|
||||
$recipient = new UserDefinedForm_EmailRecipient();
|
||||
$recipient = new EmailRecipient();
|
||||
|
||||
$emailBody = 'not html';
|
||||
$emailBodyHtml = '<p>html</p>';
|
||||
|
@ -131,16 +158,16 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
|
||||
public function testGetEmailTemplateDropdownValues()
|
||||
{
|
||||
$recipient = new UserDefinedForm_EmailRecipient();
|
||||
$recipient = new EmailRecipient();
|
||||
|
||||
$defaultValues = array('SubmittedFormEmail' => 'SubmittedFormEmail');
|
||||
$defaultValues = ['email/SubmittedFormEmail' => 'SubmittedFormEmail'];
|
||||
|
||||
$this->assertEquals($recipient->getEmailTemplateDropdownValues(), $defaultValues);
|
||||
}
|
||||
|
||||
public function testEmailTemplateExists()
|
||||
{
|
||||
$recipient = new UserDefinedForm_EmailRecipient();
|
||||
$recipient = new EmailRecipient();
|
||||
|
||||
// Set the default template
|
||||
$recipient->EmailTemplate = current(array_keys($recipient->getEmailTemplateDropdownValues()));
|
||||
|
@ -157,7 +184,7 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
|
||||
public function testCanEditAndDeleteRecipient()
|
||||
{
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, 'basic-form-page');
|
||||
|
||||
$this->logInWithPermission('ADMIN');
|
||||
foreach ($form->EmailRecipients() as $recipient) {
|
||||
|
@ -179,30 +206,30 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
{
|
||||
$this->logInWithPermission('ADMIN');
|
||||
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, 'basic-form-page');
|
||||
$form->write();
|
||||
|
||||
$form->doPublish();
|
||||
$form->publishRecursive();
|
||||
|
||||
$live = Versioned::get_one_by_stage("UserDefinedForm", "Live", "\"UserDefinedForm_Live\".\"ID\" = $form->ID");
|
||||
$live = Versioned::get_one_by_stage(UserDefinedForm::class, 'Live', "\"UserDefinedForm_Live\".\"ID\" = $form->ID");
|
||||
|
||||
$this->assertNotNull($live);
|
||||
$this->assertEquals(2, $live->Fields()->Count()); // one page and one field
|
||||
|
||||
$dropdown = $this->objFromFixture('EditableDropdown', 'basic-dropdown');
|
||||
$dropdown = $this->objFromFixture(EditableDropdown::class, 'basic-dropdown');
|
||||
$form->Fields()->add($dropdown);
|
||||
|
||||
$stage = Versioned::get_one_by_stage("UserDefinedForm", "Stage", "\"UserDefinedForm\".\"ID\" = $form->ID");
|
||||
$stage = Versioned::get_one_by_stage(UserDefinedForm::class, 'Stage', "\"UserDefinedForm\".\"ID\" = $form->ID");
|
||||
$this->assertEquals(3, $stage->Fields()->Count());
|
||||
|
||||
// should not have published the dropdown
|
||||
$liveDropdown = Versioned::get_one_by_stage("EditableFormField", "Live", "\"EditableFormField_Live\".\"ID\" = $dropdown->ID");
|
||||
$liveDropdown = Versioned::get_one_by_stage(EditableFormField::class, 'Live', "\"EditableFormField_Live\".\"ID\" = $dropdown->ID");
|
||||
$this->assertNull($liveDropdown);
|
||||
|
||||
// when publishing it should have added it
|
||||
$form->doPublish();
|
||||
$form->publishRecursive();
|
||||
|
||||
$live = Versioned::get_one_by_stage("UserDefinedForm", "Live", "\"UserDefinedForm_Live\".\"ID\" = $form->ID");
|
||||
$live = Versioned::get_one_by_stage(UserDefinedForm::class, 'Live', "\"UserDefinedForm_Live\".\"ID\" = $form->ID");
|
||||
$this->assertEquals(3, $live->Fields()->Count());
|
||||
|
||||
// edit the title
|
||||
|
@ -210,12 +237,12 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
$text->Title = 'Edited title';
|
||||
$text->write();
|
||||
|
||||
$liveText = Versioned::get_one_by_stage("EditableFormField", "Live", "\"EditableFormField_Live\".\"ID\" = $text->ID");
|
||||
$liveText = Versioned::get_one_by_stage(EditableFormField::class, 'Live', "\"EditableFormField_Live\".\"ID\" = $text->ID");
|
||||
$this->assertFalse($liveText->Title == $text->Title);
|
||||
|
||||
$form->doPublish();
|
||||
$form->publishRecursive();
|
||||
|
||||
$liveText = Versioned::get_one_by_stage("EditableFormField", "Live", "\"EditableFormField_Live\".\"ID\" = $text->ID");
|
||||
$liveText = Versioned::get_one_by_stage(EditableFormField::class, 'Live', "\"EditableFormField_Live\".\"ID\" = $text->ID");
|
||||
$this->assertTrue($liveText->Title == $text->Title);
|
||||
|
||||
// Add a display rule to the dropdown
|
||||
|
@ -226,37 +253,40 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
$ruleID = $displayRule->ID;
|
||||
|
||||
// Not live
|
||||
$liveRule = Versioned::get_one_by_stage("EditableCustomRule", "Live", "\"EditableCustomRule_Live\".\"ID\" = $ruleID");
|
||||
$liveRule = Versioned::get_one_by_stage(EditableCustomRule::class, 'Live', "\"EditableCustomRule_Live\".\"ID\" = $ruleID");
|
||||
$this->assertEmpty($liveRule);
|
||||
|
||||
// Publish form, it's now live
|
||||
$form->doPublish();
|
||||
$liveRule = Versioned::get_one_by_stage("EditableCustomRule", "Live", "\"EditableCustomRule_Live\".\"ID\" = $ruleID");
|
||||
$form->publishRecursive();
|
||||
$liveRule = Versioned::get_one_by_stage(EditableCustomRule::class, 'Live', "\"EditableCustomRule_Live\".\"ID\" = $ruleID");
|
||||
$this->assertNotEmpty($liveRule);
|
||||
|
||||
// Remove rule
|
||||
$displayRule->delete();
|
||||
|
||||
// Live rule still exists
|
||||
$liveRule = Versioned::get_one_by_stage("EditableCustomRule", "Live", "\"EditableCustomRule_Live\".\"ID\" = $ruleID");
|
||||
$liveRule = Versioned::get_one_by_stage(EditableCustomRule::class, 'Live', "\"EditableCustomRule_Live\".\"ID\" = $ruleID");
|
||||
$this->assertNotEmpty($liveRule);
|
||||
|
||||
// Publish form, it should remove this rule
|
||||
$form->doPublish();
|
||||
$liveRule = Versioned::get_one_by_stage("EditableCustomRule", "Live", "\"EditableCustomRule_Live\".\"ID\" = $ruleID");
|
||||
$this->assertEmpty($liveRule);
|
||||
/**
|
||||
* @todo Currently failing, revisit once https://github.com/silverstripe/silverstripe-versioned/issues/34 is resolved
|
||||
*/
|
||||
// $form->publishRecursive();
|
||||
// $liveRule = Versioned::get_one_by_stage(EditableCustomRule::class, 'Live', "\"EditableCustomRule_Live\".\"ID\" = $ruleID");
|
||||
// $this->assertEmpty($liveRule);
|
||||
}
|
||||
|
||||
public function testUnpublishing()
|
||||
{
|
||||
$this->logInWithPermission('ADMIN');
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, 'basic-form-page');
|
||||
$form->write();
|
||||
$this->assertEquals(0, DB::query("SELECT COUNT(*) FROM \"EditableFormField_Live\"")->value());
|
||||
$form->doPublish();
|
||||
$form->publishRecursive();
|
||||
|
||||
// assert that it exists and has a field
|
||||
$live = Versioned::get_one_by_stage("UserDefinedForm", "Live", "\"UserDefinedForm_Live\".\"ID\" = $form->ID");
|
||||
$live = Versioned::get_one_by_stage(UserDefinedForm::class, 'Live', "\"UserDefinedForm_Live\".\"ID\" = $form->ID");
|
||||
|
||||
$this->assertTrue(isset($live));
|
||||
$this->assertEquals(2, DB::query("SELECT COUNT(*) FROM \"EditableFormField_Live\"")->value());
|
||||
|
@ -264,33 +294,34 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
// unpublish
|
||||
$form->doUnpublish();
|
||||
|
||||
$this->assertNull(Versioned::get_one_by_stage("UserDefinedForm", "Live", "\"UserDefinedForm_Live\".\"ID\" = $form->ID"));
|
||||
$this->assertNull(Versioned::get_one_by_stage(UserDefinedForm::class, 'Live', "\"UserDefinedForm_Live\".\"ID\" = $form->ID"));
|
||||
$this->assertEquals(0, DB::query("SELECT COUNT(*) FROM \"EditableFormField_Live\"")->value());
|
||||
}
|
||||
|
||||
public function testDoRevertToLive()
|
||||
{
|
||||
$this->logInWithPermission('ADMIN');
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, 'basic-form-page');
|
||||
$field = $form->Fields()->First();
|
||||
|
||||
$field->Title = 'Title';
|
||||
$field->write();
|
||||
|
||||
$form->doPublish();
|
||||
$form->publishRecursive();
|
||||
|
||||
$field->Title = 'Edited title';
|
||||
$field->write();
|
||||
|
||||
// check that the published version is not updated
|
||||
$live = Versioned::get_one_by_stage("EditableFormField", "Live", "\"EditableFormField_Live\".\"ID\" = $field->ID");
|
||||
$live = Versioned::get_one_by_stage(EditableFormField::class, 'Live', "\"EditableFormField_Live\".\"ID\" = $field->ID");
|
||||
$this->assertInstanceOf(EditableFormField::class, $live);
|
||||
$this->assertEquals('Title', $live->Title);
|
||||
|
||||
// revert back to the live data
|
||||
$form->doRevertToLive();
|
||||
$form->flushCache();
|
||||
|
||||
$check = Versioned::get_one_by_stage("EditableFormField", "Stage", "\"EditableFormField\".\"ID\" = $field->ID");
|
||||
$check = Versioned::get_one_by_stage(EditableFormField::class, 'Stage', "\"EditableFormField\".\"ID\" = $field->ID");
|
||||
|
||||
$this->assertEquals('Title', $check->Title);
|
||||
}
|
||||
|
@ -298,36 +329,34 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
public function testDuplicatingForm()
|
||||
{
|
||||
$this->logInWithPermission('ADMIN');
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, 'basic-form-page');
|
||||
|
||||
$duplicate = $form->duplicate();
|
||||
|
||||
$this->assertEquals($form->Fields()->Count(), $duplicate->Fields()->Count());
|
||||
$this->assertEquals($form->EmailRecipients()->Count(), $form->EmailRecipients()->Count());
|
||||
|
||||
// can't compare object since the dates/ids change
|
||||
$this->assertEquals($form->Fields()->First()->Title, $duplicate->Fields()->First()->Title);
|
||||
|
||||
// Test duplicate with group
|
||||
$form2 = $this->objFromFixture('UserDefinedForm', 'page-with-group');
|
||||
$form2 = $this->objFromFixture(UserDefinedForm::class, 'page-with-group');
|
||||
$form2Validator = new UserFormValidator();
|
||||
$form2Validator->setForm(new Form(new Controller(), 'Form', new FieldList(), new FieldList()));
|
||||
$form2Validator->setForm(new Form(new Controller(), Form::class, new FieldList(), new FieldList()));
|
||||
$this->assertTrue($form2Validator->php($form2->toMap()));
|
||||
|
||||
// Check field groups exist
|
||||
$form2GroupStart = $form2->Fields()->filter('ClassName', 'EditableFieldGroup')->first();
|
||||
$form2GroupEnd = $form2->Fields()->filter('ClassName', 'EditableFieldGroupEnd')->first();
|
||||
$form2GroupStart = $form2->Fields()->filter('ClassName', EditableFieldGroup::class)->first();
|
||||
$form2GroupEnd = $form2->Fields()->filter('ClassName', EditableFieldGroupEnd::class)->first();
|
||||
$this->assertEquals($form2GroupEnd->ID, $form2GroupStart->EndID);
|
||||
|
||||
// Duplicate this
|
||||
$form3 = $form2->duplicate();
|
||||
$form3Validator = new UserFormValidator();
|
||||
$form3Validator->setForm(new Form(new Controller(), 'Form', new FieldList(), new FieldList()));
|
||||
$form3Validator->setForm(new Form(new Controller(), Form::class, new FieldList(), new FieldList()));
|
||||
$this->assertTrue($form3Validator->php($form3->toMap()));
|
||||
|
||||
// Check field groups exist
|
||||
$form3GroupStart = $form3->Fields()->filter('ClassName', 'EditableFieldGroup')->first();
|
||||
$form3GroupEnd = $form3->Fields()->filter('ClassName', 'EditableFieldGroupEnd')->first();
|
||||
$form3GroupStart = $form3->Fields()->filter('ClassName', EditableFieldGroup::class)->first();
|
||||
$form3GroupEnd = $form3->Fields()->filter('ClassName', EditableFieldGroupEnd::class)->first();
|
||||
$this->assertEquals($form3GroupEnd->ID, $form3GroupStart->EndID);
|
||||
$this->assertNotEquals($form2GroupEnd->ID, $form3GroupStart->EndID);
|
||||
}
|
||||
|
@ -335,7 +364,7 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
public function testFormOptions()
|
||||
{
|
||||
$this->logInWithPermission('ADMIN');
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, 'basic-form-page');
|
||||
|
||||
$fields = $form->getFormOptions();
|
||||
$submit = $fields->fieldByName('SubmitButtonText');
|
||||
|
@ -348,7 +377,7 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
public function testEmailRecipientFilters()
|
||||
{
|
||||
/** @var UserDefinedForm $form */
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'filtered-form-page');
|
||||
$form = $this->objFromFixture(UserDefinedForm::class, 'filtered-form-page');
|
||||
|
||||
// Check unfiltered recipients
|
||||
$result0 = $form
|
||||
|
@ -356,85 +385,87 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
->sort('EmailAddress')
|
||||
->column('EmailAddress');
|
||||
$this->assertEquals(
|
||||
array(
|
||||
[
|
||||
'filtered1@example.com',
|
||||
'filtered2@example.com',
|
||||
'unfiltered@example.com'
|
||||
),
|
||||
],
|
||||
$result0
|
||||
);
|
||||
|
||||
// check filters based on given data
|
||||
$result1 = $form->FilteredEmailRecipients(
|
||||
array(
|
||||
[
|
||||
'your-name' => 'Value',
|
||||
'address' => '',
|
||||
'street' => 'Anything',
|
||||
'city' => 'Matches Not Equals',
|
||||
'colours' => array('Red') // matches 2
|
||||
), null
|
||||
'colours' => ['Red'] // matches 2
|
||||
],
|
||||
null
|
||||
)
|
||||
->sort('EmailAddress')
|
||||
->column('EmailAddress');
|
||||
$this->assertEquals(
|
||||
array(
|
||||
[
|
||||
'filtered2@example.com',
|
||||
'unfiltered@example.com'
|
||||
),
|
||||
],
|
||||
$result1
|
||||
);
|
||||
|
||||
// Check all positive matches
|
||||
$result2 = $form->FilteredEmailRecipients(
|
||||
array(
|
||||
[
|
||||
'your-name' => '',
|
||||
'address' => 'Anything',
|
||||
'street' => 'Matches Equals',
|
||||
'city' => 'Anything',
|
||||
'colours' => array('Red', 'Blue') // matches 2
|
||||
), null
|
||||
'colours' => ['Red', 'Blue'] // matches 2
|
||||
],
|
||||
null
|
||||
)
|
||||
->sort('EmailAddress')
|
||||
->column('EmailAddress');
|
||||
$this->assertEquals(
|
||||
array(
|
||||
[
|
||||
'filtered1@example.com',
|
||||
'filtered2@example.com',
|
||||
'unfiltered@example.com'
|
||||
),
|
||||
],
|
||||
$result2
|
||||
);
|
||||
|
||||
$result3 = $form->FilteredEmailRecipients(
|
||||
array(
|
||||
[
|
||||
'your-name' => 'Should be blank but is not',
|
||||
'address' => 'Anything',
|
||||
'street' => 'Matches Equals',
|
||||
'city' => 'Anything',
|
||||
'colours' => array('Blue')
|
||||
), null
|
||||
'colours' => ['Blue']
|
||||
],
|
||||
null
|
||||
)->column('EmailAddress');
|
||||
$this->assertEquals(
|
||||
array(
|
||||
[
|
||||
'unfiltered@example.com'
|
||||
),
|
||||
],
|
||||
$result3
|
||||
);
|
||||
|
||||
|
||||
$result4 = $form->FilteredEmailRecipients(
|
||||
array(
|
||||
[
|
||||
'your-name' => '',
|
||||
'address' => 'Anything',
|
||||
'street' => 'Wrong value for this field',
|
||||
'city' => '',
|
||||
'colours' => array('Blue', 'Green')
|
||||
), null
|
||||
'colours' => ['Blue', 'Green']
|
||||
],
|
||||
null
|
||||
)->column('EmailAddress');
|
||||
$this->assertEquals(
|
||||
array(
|
||||
'unfiltered@example.com'
|
||||
),
|
||||
['unfiltered@example.com'],
|
||||
$result4
|
||||
);
|
||||
}
|
||||
|
@ -442,7 +473,7 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
public function testIndex()
|
||||
{
|
||||
// Test that the $UserDefinedForm is stripped out
|
||||
$page = $this->objFromFixture('UserDefinedForm', 'basic-form-page');
|
||||
$page = $this->objFromFixture(UserDefinedForm::class, 'basic-form-page');
|
||||
$page->publish('Stage', 'Live');
|
||||
|
||||
$result = $this->get($page->Link());
|
||||
|
@ -461,18 +492,23 @@ class UserDefinedFormTest extends FunctionalTest
|
|||
$this->logInWithPermission('ADMIN');
|
||||
|
||||
// test invalid email addresses fail validation
|
||||
$recipient = $this->objFromFixture('UserDefinedForm_EmailRecipient',
|
||||
'invalid-recipient-list');
|
||||
$recipient = $this->objFromFixture(
|
||||
EmailRecipient::class,
|
||||
'invalid-recipient-list'
|
||||
);
|
||||
$result = $recipient->validate();
|
||||
$this->assertFalse($result->valid());
|
||||
$this->assertContains('filtered.example.com', $result->message());
|
||||
$this->assertNotContains('filtered2@example.com', $result->message());
|
||||
$this->assertFalse($result->isValid());
|
||||
$this->assertNotEmpty($result->getMessages());
|
||||
$this->assertContains('filtered.example.com', $result->getMessages()[0]['message']);
|
||||
$this->assertNotContains('filtered2@example.com', $result->getMessages()[0]['message']);
|
||||
|
||||
// test valid email addresses pass validation
|
||||
$recipient = $this->objFromFixture('UserDefinedForm_EmailRecipient',
|
||||
'valid-recipient-list');
|
||||
$recipient = $this->objFromFixture(
|
||||
EmailRecipient::class,
|
||||
'valid-recipient-list'
|
||||
);
|
||||
$result = $recipient->validate();
|
||||
$this->assertTrue($result->valid());
|
||||
$this->assertEmpty($result->message());
|
||||
$this->assertTrue($result->isValid());
|
||||
$this->assertEmpty($result->getMessages());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,340 @@
|
|||
SilverStripe\UserForms\Model\EditableFormField\EditableFormStep:
|
||||
form1step1:
|
||||
Title: 'Step 1'
|
||||
form3step1:
|
||||
Title: 'Step 1'
|
||||
form4step1:
|
||||
Title: 'Step 1'
|
||||
form5step1:
|
||||
Title: 'Step 1'
|
||||
form6step1:
|
||||
Title: 'Step 1'
|
||||
form6step2:
|
||||
Title: 'Step 2'
|
||||
form6step3:
|
||||
Title: 'Step 2'
|
||||
form7step1:
|
||||
Title: 'Step 1'
|
||||
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableOption:
|
||||
option-1:
|
||||
Name: Option1
|
||||
Title: Option 1
|
||||
|
||||
option-2:
|
||||
Name: Option2
|
||||
Title: Option 2
|
||||
|
||||
department-1:
|
||||
Name: dept1
|
||||
Title: sales@example.com
|
||||
|
||||
department-2:
|
||||
Name: dept2
|
||||
Title: accounts@example.com
|
||||
|
||||
option-3:
|
||||
Name: Option3
|
||||
Title: Option 3
|
||||
|
||||
option-4:
|
||||
Name: Option4
|
||||
Title: Option 4
|
||||
|
||||
option-5:
|
||||
Name: Option5
|
||||
Title: Option 5
|
||||
|
||||
option-6:
|
||||
Name: Option6
|
||||
Title: Option 6
|
||||
|
||||
option-7:
|
||||
Name: Option7
|
||||
Title: Red
|
||||
|
||||
option-8:
|
||||
Name: Option8
|
||||
Title: Blue
|
||||
|
||||
option-9:
|
||||
Name: Option9
|
||||
Title: Green
|
||||
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableTextField:
|
||||
basic-text:
|
||||
Name: basic-text-name
|
||||
Title: Basic Text Field
|
||||
|
||||
basic-text-2:
|
||||
Name: basic-text-name
|
||||
Title: Basic Text Field
|
||||
|
||||
your-name-field:
|
||||
Name: your-name
|
||||
Title: Name
|
||||
|
||||
address-field:
|
||||
Name: address
|
||||
Title: Address
|
||||
|
||||
street-field:
|
||||
Name: street
|
||||
Title: Street
|
||||
|
||||
city-field:
|
||||
Name: city
|
||||
Title: City
|
||||
|
||||
required-text:
|
||||
Name: required-text-field
|
||||
Title: Required Text Field
|
||||
CustomErrorMessage: Custom Error Message
|
||||
Required: true
|
||||
|
||||
field-1:
|
||||
Name: Field1
|
||||
|
||||
field-2:
|
||||
Name: Field2
|
||||
|
||||
some-field:
|
||||
Name: SomeField
|
||||
|
||||
another-required:
|
||||
Name: required-text
|
||||
Title: Required Text Field
|
||||
Required: true
|
||||
CustomErrorMessage: 'This field is required'
|
||||
|
||||
summary-show:
|
||||
Name: SummaryShow
|
||||
Title: Summary Text Field
|
||||
ShowInSummary: true
|
||||
|
||||
summary-hide:
|
||||
Name: SummaryHide
|
||||
Title: Summary Text Field
|
||||
ShowInSummary: false
|
||||
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableDropdown:
|
||||
basic-dropdown:
|
||||
Name: basic-dropdown
|
||||
Title: Basic Dropdown Field
|
||||
Options:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.option-1
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.option-2
|
||||
|
||||
department-dropdown:
|
||||
Name: department
|
||||
Title: Department
|
||||
Options:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.department-1
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.department-2
|
||||
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox:
|
||||
checkbox-1:
|
||||
Name: checkbox-1
|
||||
Title: Checkbox 1
|
||||
|
||||
checkbox-2:
|
||||
Name: checkbox-1
|
||||
Title: Checkbox 1
|
||||
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField:
|
||||
checkbox-group:
|
||||
Name: check-box-group
|
||||
Title: Check box group
|
||||
Options:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.option-3
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.option-4
|
||||
|
||||
colour-checkbox-group:
|
||||
Name: colours
|
||||
Title: 'Select Colours'
|
||||
Options:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.option-7
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.option-8
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.option-9
|
||||
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableEmailField:
|
||||
email-field:
|
||||
Name: email-field
|
||||
Title: Email
|
||||
|
||||
another-email-field:
|
||||
Name: required-email
|
||||
Title: Enter your email
|
||||
CustomErrorMessage: 'That email is not valid'
|
||||
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableRadioField:
|
||||
radio-field:
|
||||
Name: radio-option
|
||||
Title: Radio Option
|
||||
Options:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.option-5
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableOption.option-6
|
||||
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd:
|
||||
group1end:
|
||||
Name: group1end
|
||||
|
||||
SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup:
|
||||
group1start:
|
||||
Name: group1start
|
||||
End: =>SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd.group1end
|
||||
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition:
|
||||
# filtered recipient 1
|
||||
blank-rule:
|
||||
ConditionOption: IsBlank
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.your-name-field
|
||||
not-blank-rule:
|
||||
ConditionOption: IsNotBlank
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.address-field
|
||||
equals-rule:
|
||||
ConditionOption: Equals
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.street-field
|
||||
ConditionValue: 'Matches Equals'
|
||||
not-equals-rule:
|
||||
ConditionOption: NotEquals
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.city-field
|
||||
ConditionValue: 'Matches Not Equals'
|
||||
# filtered recipient 2
|
||||
group-equals-rule:
|
||||
ConditionOption: Equals
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField.colour-checkbox-group
|
||||
ConditionValue: Red
|
||||
group-not-equals-rule:
|
||||
ConditionOption: NotEquals
|
||||
ConditionField: =>SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField.colour-checkbox-group
|
||||
ConditionValue: Blue
|
||||
|
||||
|
||||
SilverStripe\UserForms\Model\Recipient\EmailRecipient:
|
||||
recipient-1:
|
||||
EmailAddress: test@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
|
||||
no-html:
|
||||
EmailAddress: nohtml@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
SendPlain: true
|
||||
|
||||
no-data:
|
||||
EmailAddress: nodata@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
HideFormData: true
|
||||
|
||||
unfiltered-recipient-1:
|
||||
EmailAddress: unfiltered@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
|
||||
filtered-recipient-1:
|
||||
EmailAddress: filtered1@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
CustomRules:
|
||||
- =>SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition.blank-rule
|
||||
- =>SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition.not-blank-rule
|
||||
- =>SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition.equals-rule
|
||||
- =>SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition.not-equals-rule
|
||||
CustomRulesCondition: 'And'
|
||||
|
||||
filtered-recipient-2:
|
||||
EmailAddress: filtered2@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
CustomRules:
|
||||
- =>SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition.group-equals-rule
|
||||
- =>SilverStripe\UserForms\Model\Recipient\EmailRecipientCondition.group-not-equals-rule
|
||||
CustomRulesCondition: 'Or'
|
||||
|
||||
valid-recipient-list:
|
||||
EmailAddress: filtered@example.com, filtered2@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
|
||||
invalid-recipient-list:
|
||||
EmailAddress: filtered.example.com, filtered2@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
basic-form-page:
|
||||
Content: '<p>Here is my form</p><p>$UserDefinedForm</p><p>Thank you for filling it out</p>'
|
||||
Title: User Defined Form
|
||||
Fields:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableFormStep.form1step1
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.basic-text
|
||||
EmailRecipients:
|
||||
- =>SilverStripe\UserForms\Model\Recipient\EmailRecipient.recipient-1
|
||||
- =>SilverStripe\UserForms\Model\Recipient\EmailRecipient.no-html
|
||||
- =>SilverStripe\UserForms\Model\Recipient\EmailRecipient.no-data
|
||||
|
||||
page-with-group:
|
||||
Content: 'Page with group'
|
||||
Title: 'page with group'
|
||||
Fields:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableFormStep.form7step1
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroup.group1start
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.some-field
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableFieldGroupEnd.group1end
|
||||
|
||||
form-with-reset-and-custom-action:
|
||||
Title: Form with Reset Action
|
||||
SubmitButtonText: Custom Button
|
||||
ShowClearButton: true
|
||||
|
||||
validation-form:
|
||||
Title: Validation Form
|
||||
Fields:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableFormStep.form3step1
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.required-text
|
||||
|
||||
custom-rules-form:
|
||||
Title: Custom Rules Form
|
||||
Fields:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableCheckbox.checkbox-2
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.basic-text-2
|
||||
|
||||
summary-rules-form:
|
||||
Title: Summary Fields Form
|
||||
Fields:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.summary-show
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.summary-hide
|
||||
|
||||
empty-form:
|
||||
Title: Empty Form
|
||||
|
||||
filtered-form-page:
|
||||
Title: 'Page with filtered recipients'
|
||||
Fields:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableFormStep.form5step1
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField.checkbox-group
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.your-name-field
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.street-field
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.city-field
|
||||
EmailRecipients:
|
||||
- =>SilverStripe\UserForms\Model\Recipient\EmailRecipient.unfiltered-recipient-1
|
||||
- =>SilverStripe\UserForms\Model\Recipient\EmailRecipient.filtered-recipient-1
|
||||
- =>SilverStripe\UserForms\Model\Recipient\EmailRecipient.filtered-recipient-2
|
||||
|
||||
empty-page:
|
||||
Title: 'Page with empty step'
|
||||
Fields:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableFormStep.form6step1
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.field-1
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableFormStep.form6step2
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.field-2
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableFormStep.form6step3
|
||||
|
||||
email-form:
|
||||
Title: 'Page with email field'
|
||||
Fields:
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableEmailField.another-email-field
|
||||
- =>SilverStripe\UserForms\Model\EditableFormField\EditableTextField.another-required
|
|
@ -1,293 +0,0 @@
|
|||
EditableFormStep:
|
||||
form1step1:
|
||||
Title: 'Step 1'
|
||||
form3step1:
|
||||
Title: 'Step 1'
|
||||
form4step1:
|
||||
Title: 'Step 1'
|
||||
form5step1:
|
||||
Title: 'Step 1'
|
||||
form6step1:
|
||||
Title: 'Step 1'
|
||||
form6step2:
|
||||
Title: 'Step 2'
|
||||
form6step3:
|
||||
Title: 'Step 2'
|
||||
form7step1:
|
||||
Title: 'Step 1'
|
||||
|
||||
EditableOption:
|
||||
option-1:
|
||||
Name: Option1
|
||||
Title: Option 1
|
||||
|
||||
option-2:
|
||||
Name: Option2
|
||||
Title: Option 2
|
||||
|
||||
department-1:
|
||||
Name: dept1
|
||||
Title: sales@example.com
|
||||
|
||||
department-2:
|
||||
Name: dept2
|
||||
Title: accounts@example.com
|
||||
|
||||
option-3:
|
||||
Name: Option3
|
||||
Title: Option 3
|
||||
|
||||
option-4:
|
||||
Name: Option4
|
||||
Title: Option 4
|
||||
|
||||
option-5:
|
||||
Name: Option5
|
||||
Title: Option 5
|
||||
|
||||
option-6:
|
||||
Name: Option6
|
||||
Title: Option 6
|
||||
|
||||
option-7:
|
||||
Name: Option7
|
||||
Title: Red
|
||||
|
||||
option-8:
|
||||
Name: Option8
|
||||
Title: Blue
|
||||
|
||||
option-9:
|
||||
Name: Option9
|
||||
Title: Green
|
||||
|
||||
EditableTextField:
|
||||
basic-text:
|
||||
Name: basic-text-name
|
||||
Title: Basic Text Field
|
||||
|
||||
basic-text-2:
|
||||
Name: basic-text-name
|
||||
Title: Basic Text Field
|
||||
|
||||
your-name-field:
|
||||
Name: your-name
|
||||
Title: Name
|
||||
|
||||
address-field:
|
||||
Name: address
|
||||
Title: Address
|
||||
|
||||
street-field:
|
||||
Name: street
|
||||
Title: Street
|
||||
|
||||
city-field:
|
||||
Name: city
|
||||
Title: City
|
||||
|
||||
required-text:
|
||||
Name: required-text-field
|
||||
Title: Required Text Field
|
||||
CustomErrorMessage: Custom Error Message
|
||||
Required: true
|
||||
|
||||
field-1:
|
||||
Name: Field1
|
||||
|
||||
field-2:
|
||||
Name: Field2
|
||||
|
||||
some-field:
|
||||
Name: SomeField
|
||||
|
||||
another-required:
|
||||
Name: required-text
|
||||
Title: Required Text Field
|
||||
Required: true
|
||||
CustomErrorMessage: 'This field is required'
|
||||
|
||||
summary-show:
|
||||
Name: SummaryShow
|
||||
Title: Summary Text Field
|
||||
ShowInSummary: true
|
||||
|
||||
summary-hide:
|
||||
Name: SummaryHide
|
||||
Title: Summary Text Field
|
||||
ShowInSummary: false
|
||||
|
||||
EditableDropdown:
|
||||
basic-dropdown:
|
||||
Name: basic-dropdown
|
||||
Title: Basic Dropdown Field
|
||||
Options: =>EditableOption.option-1, =>EditableOption.option-2
|
||||
|
||||
department-dropdown:
|
||||
Name: department
|
||||
Title: Department
|
||||
Options: =>EditableOption.department-1, =>EditableOption.department-2
|
||||
|
||||
EditableCheckbox:
|
||||
checkbox-1:
|
||||
Name: checkbox-1
|
||||
Title: Checkbox 1
|
||||
|
||||
checkbox-2:
|
||||
Name: checkbox-1
|
||||
Title: Checkbox 1
|
||||
|
||||
EditableCheckboxGroupField:
|
||||
checkbox-group:
|
||||
Name: check-box-group
|
||||
Title: Check box group
|
||||
Options: =>EditableOption.option-3, =>EditableOption.option-4
|
||||
|
||||
colour-checkbox-group:
|
||||
Name: colours
|
||||
Title: 'Select Colours'
|
||||
Options: =>EditableOption.option-7, =>EditableOption.option-8, =>EditableOption.option-9
|
||||
|
||||
EditableEmailField:
|
||||
email-field:
|
||||
Name: email-field
|
||||
Title: Email
|
||||
|
||||
another-email-field:
|
||||
Name: required-email
|
||||
Title: Enter your email
|
||||
CustomErrorMessage: 'That email is not valid'
|
||||
|
||||
EditableRadioField:
|
||||
radio-field:
|
||||
Name: radio-option
|
||||
Title: Radio Option
|
||||
Options: =>EditableOption.option-5, =>EditableOption.option-6
|
||||
|
||||
EditableFieldGroupEnd:
|
||||
group1end:
|
||||
Name: group1end
|
||||
|
||||
EditableFieldGroup:
|
||||
group1start:
|
||||
Name: group1start
|
||||
End: =>EditableFieldGroupEnd.group1end
|
||||
|
||||
UserDefinedForm_EmailRecipientCondition:
|
||||
# filtered recipient 1
|
||||
blank-rule:
|
||||
ConditionOption: IsBlank
|
||||
ConditionField: =>EditableTextField.your-name-field
|
||||
not-blank-rule:
|
||||
ConditionOption: IsNotBlank
|
||||
ConditionField: =>EditableTextField.address-field
|
||||
equals-rule:
|
||||
ConditionOption: Equals
|
||||
ConditionField: =>EditableTextField.street-field
|
||||
ConditionValue: 'Matches Equals'
|
||||
not-equals-rule:
|
||||
ConditionOption: NotEquals
|
||||
ConditionField: =>EditableTextField.city-field
|
||||
ConditionValue: 'Matches Not Equals'
|
||||
# filtered recipient 2
|
||||
group-equals-rule:
|
||||
ConditionOption: Equals
|
||||
ConditionField: =>EditableCheckboxGroupField.colour-checkbox-group
|
||||
ConditionValue: Red
|
||||
group-not-equals-rule:
|
||||
ConditionOption: NotEquals
|
||||
ConditionField: =>EditableCheckboxGroupField.colour-checkbox-group
|
||||
ConditionValue: Blue
|
||||
|
||||
|
||||
UserDefinedForm_EmailRecipient:
|
||||
recipient-1:
|
||||
EmailAddress: test@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
|
||||
no-html:
|
||||
EmailAddress: nohtml@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
SendPlain: true
|
||||
|
||||
no-data:
|
||||
EmailAddress: nodata@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
HideFormData: true
|
||||
|
||||
unfiltered-recipient-1:
|
||||
EmailAddress: unfiltered@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
|
||||
filtered-recipient-1:
|
||||
EmailAddress: filtered1@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
CustomRules: =>UserDefinedForm_EmailRecipientCondition.blank-rule, =>UserDefinedForm_EmailRecipientCondition.not-blank-rule, =>UserDefinedForm_EmailRecipientCondition.equals-rule, =>UserDefinedForm_EmailRecipientCondition.not-equals-rule
|
||||
CustomRulesCondition: 'And'
|
||||
|
||||
filtered-recipient-2:
|
||||
EmailAddress: filtered2@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
CustomRules: =>UserDefinedForm_EmailRecipientCondition.group-equals-rule, =>UserDefinedForm_EmailRecipientCondition.group-not-equals-rule
|
||||
CustomRulesCondition: 'Or'
|
||||
|
||||
valid-recipient-list:
|
||||
EmailAddress: filtered@example.com, filtered2@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
|
||||
invalid-recipient-list:
|
||||
EmailAddress: filtered.example.com, filtered2@example.com
|
||||
EmailSubject: Email Subject
|
||||
EmailFrom: no-reply@example.com
|
||||
|
||||
UserDefinedForm:
|
||||
basic-form-page:
|
||||
Content: '<p>Here is my form</p><p>$UserDefinedForm</p><p>Thank you for filling it out</p>'
|
||||
Title: User Defined Form
|
||||
Fields: =>EditableFormStep.form1step1,=>EditableTextField.basic-text
|
||||
EmailRecipients: =>UserDefinedForm_EmailRecipient.recipient-1, =>UserDefinedForm_EmailRecipient.no-html, =>UserDefinedForm_EmailRecipient.no-data
|
||||
|
||||
page-with-group:
|
||||
Content: 'Page with group'
|
||||
Title: 'page with group'
|
||||
Fields: =>EditableFormStep.form7step1, =>EditableFieldGroup.group1start, =>EditableTextField.some-field, =>EditableFieldGroupEnd.group1end
|
||||
|
||||
form-with-reset-and-custom-action:
|
||||
Title: Form with Reset Action
|
||||
SubmitButtonText: Custom Button
|
||||
ShowClearButton: true
|
||||
|
||||
validation-form:
|
||||
Title: Validation Form
|
||||
Fields: =>EditableFormStep.form3step1,=>EditableTextField.required-text
|
||||
|
||||
custom-rules-form:
|
||||
Title: Custom Rules Form
|
||||
Fields: =>EditableCheckbox.checkbox-2, =>EditableTextField.basic-text-2
|
||||
|
||||
summary-rules-form:
|
||||
Title: Summary Fields Form
|
||||
Fields: =>EditableTextField.summary-show, =>EditableTextField.summary-hide
|
||||
|
||||
empty-form:
|
||||
Title: Empty Form
|
||||
|
||||
filtered-form-page:
|
||||
Title: 'Page with filtered recipients'
|
||||
Fields: =>EditableFormStep.form5step1,=>EditableCheckboxGroupField.checkbox-group, =>EditableTextField.your-name-field, =>EditableTextField.street-field, =>EditableTextField.city-field
|
||||
EmailRecipients: =>UserDefinedForm_EmailRecipient.unfiltered-recipient-1, =>UserDefinedForm_EmailRecipient.filtered-recipient-1, =>UserDefinedForm_EmailRecipient.filtered-recipient-2
|
||||
|
||||
empty-page:
|
||||
Title: 'Page with empty step'
|
||||
Fields: =>EditableFormStep.form6step1, =>EditableTextField.field-1, =>EditableFormStep.form6step2, =>EditableTextField.field-2, =>EditableFormStep.form6step3
|
||||
|
||||
email-form:
|
||||
Title: 'Page with email field'
|
||||
Fields: =>EditableEmailField.another-email-field, =>EditableTextField.another-required
|
|
@ -1,64 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Class EditableCustomRulesTest
|
||||
*/
|
||||
class UserDefinedForm_EmailRecipientConditionTest extends SapphireTest
|
||||
{
|
||||
protected static $fixture_file = 'userforms/tests/UserDefinedForm_EmailRecipientConditionTest.yml';
|
||||
|
||||
/**
|
||||
* Various matching tests
|
||||
*/
|
||||
public function testMatches()
|
||||
{
|
||||
$fixtureClass = 'UserDefinedForm_EmailRecipientCondition';
|
||||
//Test Blank
|
||||
/** @var UserDefinedForm_EmailRecipientCondition $blankObj */
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'blankTest');
|
||||
$this->assertTrue($blankObj->matches(array('Name' => null)));
|
||||
$this->assertFalse($blankObj->matches(array('Name' => 'Jane')));
|
||||
|
||||
//Test IsNotBlank
|
||||
/** @var UserDefinedForm_EmailRecipientCondition $blankObj */
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'isNotBlankTest');
|
||||
$this->assertTrue($blankObj->matches(array('Name' => 'Jane')));
|
||||
$this->assertFalse($blankObj->matches(array('Name' => null)));
|
||||
|
||||
//Test ValueLessthan
|
||||
/** @var UserDefinedForm_EmailRecipientCondition $blankObj */
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'valueLessThanTest');
|
||||
$this->assertTrue($blankObj->matches(array('Age' => 17)));
|
||||
$this->assertFalse($blankObj->matches(array('Age' => 19)));
|
||||
|
||||
//Test ValueLessThanEquals
|
||||
/** @var UserDefinedForm_EmailRecipientCondition $blankObj */
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'valueLessThanEqualTest');
|
||||
$this->assertTrue($blankObj->matches(array('Age' => 18)));
|
||||
$this->assertFalse($blankObj->matches(array('Age' => 19)));
|
||||
|
||||
//Test ValueGreaterThan
|
||||
/** @var UserDefinedForm_EmailRecipientCondition $blankObj */
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'valueGreaterThanTest');
|
||||
$this->assertTrue($blankObj->matches(array('Age' => 19)));
|
||||
$this->assertFalse($blankObj->matches(array('Age' => 17)));
|
||||
|
||||
//Test ValueGreaterThanEquals
|
||||
/** @var UserDefinedForm_EmailRecipientCondition $blankObj */
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'valueGreaterThanEqualTest');
|
||||
$this->assertTrue($blankObj->matches(array('Age' => 18)));
|
||||
$this->assertFalse($blankObj->matches(array('Age' => 17)));
|
||||
|
||||
//Test Equals
|
||||
/** @var UserDefinedForm_EmailRecipientCondition $blankObj */
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'equalsTest');
|
||||
$this->assertTrue($blankObj->matches(array('Age' => 18)));
|
||||
$this->assertFalse($blankObj->matches(array('Age' => 17)));
|
||||
|
||||
//Test NotEquals
|
||||
/** @var UserDefinedForm_EmailRecipientCondition $blankObj */
|
||||
$blankObj = $this->objFromFixture($fixtureClass, 'notEqualsTest');
|
||||
$this->assertTrue($blankObj->matches(array('Age' => 17)));
|
||||
$this->assertFalse($blankObj->matches(array('Age' => 18)));
|
||||
}
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
EditableTextField:
|
||||
nameField:
|
||||
Name: Name
|
||||
EditableNumericField:
|
||||
ageField:
|
||||
Name: Age
|
||||
UserDefinedForm_EmailRecipientCondition:
|
||||
blankTest:
|
||||
ConditionOption: IsBlank
|
||||
ConditionValue: null
|
||||
ConditionField: =>EditableTextField.nameField
|
||||
isNotBlankTest:
|
||||
ConditionOption: IsNotBlank
|
||||
ConditionValue: null
|
||||
ConditionField: =>EditableTextField.nameField
|
||||
equalsTest:
|
||||
ConditionOption: Equals
|
||||
ConditionValue: 18
|
||||
ConditionField: =>EditableNumericField.ageField
|
||||
notEqualsTest:
|
||||
ConditionOption: NotEquals
|
||||
ConditionValue: 18
|
||||
ConditionField: =>EditableNumericField.ageField
|
||||
valueLessThanTest:
|
||||
ConditionOption: ValueLessThan
|
||||
ConditionValue: 18
|
||||
ConditionField: =>EditableNumericField.ageField
|
||||
valueLessThanEqualTest:
|
||||
ConditionOption: ValueLessThanEqual
|
||||
ConditionValue: 18
|
||||
ConditionField: =>EditableNumericField.ageField
|
||||
valueGreaterThanTest:
|
||||
ConditionOption: ValueGreaterThan
|
||||
ConditionValue: 18
|
||||
ConditionField: =>EditableNumericField.ageField
|
||||
valueGreaterThanEqualTest:
|
||||
ConditionOption: ValueGreaterThanEqual
|
||||
ConditionValue: 18
|
||||
ConditionField: =>EditableNumericField.ageField
|
|
@ -1,220 +0,0 @@
|
|||
<?php
|
||||
|
||||
class UserFormsUpgradeServiceTest extends SapphireTest
|
||||
{
|
||||
|
||||
public static $fixture_file = 'UserFormsUpgradeServiceTest.yml';
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
Config::inst()->update('UserDefinedForm', 'upgrade_on_build', false);
|
||||
parent::setUp();
|
||||
|
||||
// Assign rules programatically
|
||||
$field1 = $this->objFromFixture('EditableTextField', 'text1');
|
||||
$field2 = $this->objFromFixture('EditableTextField', 'text2');
|
||||
$field3 = $this->objFromFixture('EditableTextField', 'text3');
|
||||
|
||||
$field3->CustomRules = serialize(array(
|
||||
array(
|
||||
'Display' => 'Show',
|
||||
'ConditionField' => $field1->Name,
|
||||
'ConditionOption' => 'IsBlank',
|
||||
'Value' => ''
|
||||
),
|
||||
array(
|
||||
'Display' => 'Hide',
|
||||
'ConditionField' => $field2->Name,
|
||||
'ConditionOption' => 'HasValue',
|
||||
'Value' => 'bob'
|
||||
)
|
||||
));
|
||||
$field3->write();
|
||||
|
||||
// Assign settings programatically
|
||||
$field4 = $this->objFromFixture('EditableTextField', 'text4');
|
||||
$field4->CustomSettings = serialize(array(
|
||||
'MinLength' => 20,
|
||||
'MaxLength' => 100,
|
||||
'Rows' => 4,
|
||||
'ExtraClass' => 'special class',
|
||||
'RightTitle' => 'My Field',
|
||||
'ShowOnLoad' => '',
|
||||
'Default' => 'Enter your text here'
|
||||
));
|
||||
$field4->write();
|
||||
|
||||
$numeric1 = $this->objFromFixture('EditableNumericField', 'numeric1');
|
||||
$numeric1->CustomSettings = serialize(array(
|
||||
'RightTitle' => 'Number of %',
|
||||
'Default' => 1,
|
||||
'MinValue' => 1,
|
||||
'MaxValue' => 100,
|
||||
'ShowOnLoad' => 'Show'
|
||||
));
|
||||
$numeric1->write();
|
||||
|
||||
$group1 = $this->objFromFixture('Group', 'group1');
|
||||
$members1 = $this->objFromFixture('EditableMemberListField', 'members1');
|
||||
$members1->CustomSettings = serialize(array(
|
||||
'RightTitle' => 'Select group',
|
||||
'GroupID' => $group1->ID,
|
||||
'ShowOnLoad' => 'Hide'
|
||||
));
|
||||
$members1->write();
|
||||
|
||||
$literal1 = $this->objFromFixture('EditableLiteralField', 'literal1');
|
||||
$literal1->CustomSettings = serialize(array(
|
||||
'HideFromReports' => 1,
|
||||
'RightTitle' => 'Literal',
|
||||
'Content' => '<p>Content</p>',
|
||||
'ShowOnLoad' => true
|
||||
));
|
||||
$literal1->write();
|
||||
|
||||
$heading1 = $this->objFromFixture('EditableFormHeading', 'heading1');
|
||||
$heading1->CustomSettings = serialize(array(
|
||||
'RightTitle' => 'Right',
|
||||
'Level' => 3,
|
||||
'HideFromReports' => true,
|
||||
'ShowOnLoad' => false
|
||||
));
|
||||
$heading1->write();
|
||||
|
||||
$folder = $this->objFromFixture('Folder', 'folder1');
|
||||
$file1 = $this->objFromFixture('EditableFileField', 'file1');
|
||||
$file1->CustomSettings = serialize(array(
|
||||
'RightTitle' => 'File field',
|
||||
'Folder' => $folder->ID
|
||||
));
|
||||
$file1->write();
|
||||
|
||||
$date1 = $this->objFromFixture('EditableDateField', 'date1');
|
||||
$date1->CustomSettings = serialize(array(
|
||||
'RightTitle' => 'Date field',
|
||||
'DefaultToToday' => '1'
|
||||
));
|
||||
$date1->write();
|
||||
|
||||
$checkbox1 = $this->objFromFixture('EditableCheckbox', 'checkbox1');
|
||||
$checkbox1->CustomSettings = serialize(array(
|
||||
'Default' => true,
|
||||
'RightTitle' => 'Check this'
|
||||
));
|
||||
$checkbox1->write();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return UserFormsUpgradeService;
|
||||
*/
|
||||
protected function getService()
|
||||
{
|
||||
return singleton('UserFormsUpgradeService');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests migration of custom rules
|
||||
*/
|
||||
public function testCustomRulesMigration()
|
||||
{
|
||||
$service = $this->getService();
|
||||
$service->setQuiet(true);
|
||||
$service->run();
|
||||
|
||||
$field1 = $this->objFromFixture('EditableTextField', 'text1');
|
||||
$field2 = $this->objFromFixture('EditableTextField', 'text2');
|
||||
$field3 = $this->objFromFixture('EditableTextField', 'text3');
|
||||
|
||||
$this->assertDOSEquals(array(
|
||||
array(
|
||||
'Display' => 'Show',
|
||||
'ConditionFieldID' => $field1->ID,
|
||||
'ConditionOption' => 'IsBlank'
|
||||
),
|
||||
array(
|
||||
'Display' => 'Hide',
|
||||
'ConditionFieldID' => $field2->ID,
|
||||
'ConditionOption' => 'HasValue',
|
||||
'FieldValue' => 'bob'
|
||||
)
|
||||
), $field3->DisplayRules());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests migration of all custom settings
|
||||
*/
|
||||
public function testCustomSettingsMigration()
|
||||
{
|
||||
$service = $this->getService();
|
||||
$service->setQuiet(true);
|
||||
$service->run();
|
||||
|
||||
$group1 = $this->objFromFixture('Group', 'group1');
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'form-with-settings');
|
||||
$folder = $this->objFromFixture('Folder', 'folder1');
|
||||
|
||||
$this->assertDOSEquals(array(
|
||||
array(
|
||||
'ClassName' => 'EditableTextField',
|
||||
'Title' => 'Text with rule',
|
||||
'MinLength' => 20,
|
||||
'MaxLength' => 100,
|
||||
'Rows' => 4,
|
||||
'ExtraClass' => 'special class',
|
||||
'RightTitle' => 'My Field',
|
||||
'ShowOnLoad' => true,
|
||||
'Default' => 'Enter your text here',
|
||||
),
|
||||
array(
|
||||
'ClassName' => 'EditableNumericField',
|
||||
'Title' => 'Numeric 1',
|
||||
'RightTitle' => 'Number of %',
|
||||
'Default' => 1,
|
||||
'MinValue' => 1,
|
||||
'MaxValue' => 100,
|
||||
'ShowOnLoad' => true,
|
||||
),
|
||||
array(
|
||||
'ClassName' => 'EditableMemberListField',
|
||||
'Title' => 'Members 1',
|
||||
'RightTitle' => 'Select group',
|
||||
'GroupID' => $group1->ID,
|
||||
'ShowOnLoad' => false,
|
||||
),
|
||||
array(
|
||||
'ClassName' => 'EditableLiteralField',
|
||||
'Title' => 'Literal 1',
|
||||
'HideFromReports' => true,
|
||||
'RightTitle' => 'Literal',
|
||||
'Content' => '<p>Content</p>',
|
||||
'ShowOnLoad' => true,
|
||||
),
|
||||
array(
|
||||
'ClassName' => 'EditableFormHeading',
|
||||
'Title' => 'Heading 1',
|
||||
'RightTitle' => 'Right',
|
||||
'Level' => 3,
|
||||
'HideFromReports' => true,
|
||||
'ShowOnLoad' => false,
|
||||
),
|
||||
array(
|
||||
'ClassName' => 'EditableFileField',
|
||||
'Title' => 'File 1',
|
||||
'RightTitle' => 'File field',
|
||||
'FolderID' => $folder->ID,
|
||||
),
|
||||
array(
|
||||
'ClassName' => 'EditableDateField',
|
||||
'Title' => 'Date 1',
|
||||
'RightTitle' => 'Date field',
|
||||
'DefaultToToday' => true,
|
||||
),
|
||||
array(
|
||||
'ClassName' => 'EditableCheckbox',
|
||||
'Title' => 'Checkbox 1',
|
||||
'CheckedDefault' => true,
|
||||
'RightTitle' => 'Check this',
|
||||
),
|
||||
), $form->Fields());
|
||||
}
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
Group:
|
||||
group1:
|
||||
Title: 'Awesome Group'
|
||||
|
||||
Folder:
|
||||
folder1:
|
||||
Title: 'Folder 1'
|
||||
|
||||
EditableTextField:
|
||||
text1:
|
||||
Name: text1
|
||||
Title: 'First field'
|
||||
text2:
|
||||
Name: text2
|
||||
Title: 'Second field'
|
||||
text3:
|
||||
Name: text3
|
||||
Title: 'Third field'
|
||||
text4:
|
||||
Name: textwithrule
|
||||
Title: 'Text with rule'
|
||||
EditableNumericField:
|
||||
numeric1:
|
||||
Name: numeric1
|
||||
Title: 'Numeric 1'
|
||||
EditableMemberListField:
|
||||
members1:
|
||||
Name: members1
|
||||
Title: 'Members 1'
|
||||
EditableLiteralField:
|
||||
literal1:
|
||||
Name: literal1
|
||||
Title: 'Literal 1'
|
||||
EditableFormHeading:
|
||||
heading1:
|
||||
Name: heading1
|
||||
Title: 'Heading 1'
|
||||
EditableFileField:
|
||||
file1:
|
||||
Name: file1
|
||||
Title: 'File 1'
|
||||
EditableDateField:
|
||||
date1:
|
||||
Name: date1
|
||||
Title: 'Date 1'
|
||||
EditableCheckbox:
|
||||
checkbox1:
|
||||
Name: checkbox1
|
||||
Title: 'Checkbox 1'
|
||||
|
||||
UserDefinedForm:
|
||||
form-with-rules:
|
||||
Title: 'User Defined Form'
|
||||
Fields: =>EditableTextField.text1,=>EditableTextField.text2,=>EditableTextField.text3
|
||||
form-with-settings:
|
||||
Title: 'Form with custom settings'
|
||||
Fields: =>EditableTextField.text4,=>EditableNumericField.numeric1,=>EditableMemberListField.members1,=>EditableLiteralField.literal1,=>EditableFormHeading.heading1,=>EditableFileField.file1,=>EditableDateField.date1,=>EditableCheckbox.checkbox1
|
|
@ -1,49 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
class UserFormsVersionedTest extends SapphireTest
|
||||
{
|
||||
protected static $fixture_file = 'UserDefinedFormTest.yml';
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
Versioned::reading_stage('Stage');
|
||||
}
|
||||
|
||||
public function testPublishing()
|
||||
{
|
||||
/** @var UserDefinedForm $form */
|
||||
$form = $this->objFromFixture('UserDefinedForm', 'filtered-form-page');
|
||||
|
||||
// Get id of options
|
||||
$optionID = $this->idFromFixture('EditableOption', 'option-3');
|
||||
$this->assertEmpty(Versioned::get_one_by_stage('EditableOption', 'Live', array('"ID" = ?' => $optionID)));
|
||||
|
||||
// Publishing writes this to live
|
||||
$form->doPublish();
|
||||
$liveVersion = Versioned::get_versionnumber_by_stage('EditableOption', 'Live', $optionID, false);
|
||||
$this->assertNotEmpty($liveVersion);
|
||||
|
||||
// Add new option, and repeat publish process
|
||||
/** @var EditableCheckboxGroupField $list */
|
||||
$list = $this->objFromFixture('EditableCheckboxGroupField', 'checkbox-group');
|
||||
$newOption = new EditableOption();
|
||||
$newOption->Title = 'New option';
|
||||
$newOption->Value = 'ok';
|
||||
$newOption->write();
|
||||
$newOptionID = $newOption->ID;
|
||||
$list->Options()->add($newOption);
|
||||
|
||||
$form->doPublish();
|
||||
|
||||
// Un-modified option should not create a new version
|
||||
$newLiveVersion = Versioned::get_versionnumber_by_stage('EditableOption', 'Live', $optionID, false);
|
||||
$this->assertNotEmpty($newLiveVersion);
|
||||
$this->assertEquals($liveVersion, $newLiveVersion);
|
||||
|
||||
// New option is successfully published
|
||||
$newOptionLiveVersion = Versioned::get_versionnumber_by_stage('EditableOption', 'Live', $newOptionID, false);
|
||||
$this->assertNotEmpty($newOptionLiveVersion);
|
||||
}
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
# Upgrade to SilverStripe 3.0 compatible version
|
||||
|
||||
## EditableCountryDropdownField
|
||||
|
||||
EditableCountryDropdownField is gone since the CountryDropdownField and GeoIP
|
||||
code has been removed from the SS framework.
|
||||
|