Merge branch '4'

This commit is contained in:
Robbie Averill 2017-08-21 15:39:05 +12:00
commit 8d4cd036f7
21 changed files with 144 additions and 71 deletions

View File

@ -4,9 +4,6 @@ sudo: false
language: php
# Support PHP 5.3
dist: precise
matrix:
include:
- php: 5.3

View File

@ -8,8 +8,8 @@
$(".uf-field-editor tbody").entwine({
onmatch: function() {
var i,
thisLevel,
var i,
thisLevel,
depth = 0,
$buttonrow = $('.uf-field-editor .ss-gridfield-buttonrow').addClass('stickyButtons'),
navHeight = $('.cms-content-header.north').height() + parseInt($('.stickyButtons').css('padding-top'), 10),
@ -17,7 +17,7 @@
self = this;
this._super();
// Loop through all rows and set necessary styles
this.find('.ss-gridfield-item').each(function() {
switch($(this).data('class')) {
@ -37,7 +37,7 @@
thisLevel = depth;
}
}
$(this).toggleClass('inFieldGroup', thisLevel > 0);
for(i = 1; i <= 5; i++) {
$(this).toggleClass('inFieldGroup-level-'+i, thisLevel >= i);
@ -76,7 +76,7 @@
var self = this;
this._super();
// When the 'Add field' button is clicked set a one time listener.
// When the GridField is reloaded focus on the newly added field.
this.on('addnewinline', function () {
@ -92,19 +92,11 @@
$newField.find('.col-Title input').focus();
}
// animate the row positioning (add the first class)
if (document.createElement('div').style.animationName !== void 0) {
$newField.addClass('newField');
$newField.addClass('flashBackground');
$(".cms-content-fields").scrollTop($(".cms-content-fields")[0].scrollHeight);
if($groupEnd) {
$groupEnd.css('visibility', 'visible');
}
// Once the animation has completed
setTimeout(function () {
$newField.removeClass('newField').addClass('flashBackground');
$(".cms-content-fields").scrollTop($(".cms-content-fields")[0].scrollHeight);
if($groupEnd) {
$groupEnd.css('visibility', 'visible');
}
}, 500);
});
});
},

View File

@ -5,12 +5,11 @@
(function ($) {
$(document).ready(function () {
var sendPlain = $('input[name="SendPlain"]');
var recipient = {
// Some fields are only visible when HTML email are being sent.
updateFormatSpecificFields: function () {
var sendPlainChecked = $('#SendPlain')
.find('input[type="checkbox"]')
.is(':checked');
var sendPlainChecked = sendPlain.is(':checked');
$(".field.toggle-html-only")[sendPlainChecked ? 'hide' : 'show']();
$(".field.toggle-plain-only")[sendPlainChecked ? 'show' : 'hide']();
@ -27,7 +26,7 @@
}
});
$('#SendPlain').entwine({
sendPlain.entwine({
onchange: function () {
recipient.updateFormatSpecificFields();
}

View File

@ -2,11 +2,6 @@
* Animations
*/
@keyframes rowSlide {
0% {top: 20%;}
100% {top: 80%;}
}
@keyframes flashBackground {
0% {background-color: white;}
10% {background-color: #dcfedd;}
@ -44,11 +39,6 @@
min-height: 46px;
}
&.newField {
position: fixed;
animation: rowSlide .5s ease forwards;
}
&.flashBackground {
animation: flashBackground 2s linear;
}

View File

@ -18,8 +18,9 @@ class EditableCheckboxGroupField extends EditableMultipleOptionField
public function getFormField()
{
$field = new UserFormsCheckboxSetField($this->Name, $this->EscapedTitle, $this->getOptionsMap());
$field->setFieldHolderTemplate('UserFormsMultipleOptionField_holder');
$field = UserFormsCheckboxSetField::create($this->Name, $this->EscapedTitle, $this->getOptionsMap())
->setFieldHolderTemplate('UserFormsMultipleOptionField_holder')
->setTemplate('UserFormsCheckboxSetField');
// Set the default checked items
$defaultCheckedItems = $this->getDefaultOptions();

View File

@ -45,10 +45,14 @@ class EditableFileField extends EditableFormField
)
);
$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", 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',
@ -57,6 +61,8 @@ class EditableFileField extends EditableFormField
->setDescription("Note: Maximum php allowed size is {$this->getPHPMaxFileSizeMB()} MB")
);
$fields->removeByName('Default');
return $fields;
}

View File

@ -28,8 +28,9 @@ class EditableRadioField extends EditableMultipleOptionField
public function getFormField()
{
$field = OptionsetField::create($this->Name, $this->EscapedTitle, $this->getOptionsMap());
$field->setFieldHolderTemplate('UserFormsMultipleOptionField_holder');
$field = OptionsetField::create($this->Name, $this->EscapedTitle, $this->getOptionsMap())
->setFieldHolderTemplate('UserFormsMultipleOptionField_holder')
->setTemplate('UserFormsOptionSetField');
// Set default item
$defaultOption = $this->getDefaultOptions()->first();

View File

@ -261,12 +261,9 @@ class UserDefinedForm_EmailRecipient extends DataObject
->addExtraClass('toggle-html-only'),
TextareaField::create('EmailBody', _t('UserDefinedForm.EMAILBODY', 'Body'))
->addExtraClass('toggle-plain-only'),
LiteralField::create(
'EmailPreview',
'<div id="EmailPreview" class="field toggle-html-only">' . $preview . '</div>'
)
LiteralField::create('EmailPreview', $preview)
));
$fields->fieldByName('Root.EmailContent')->setTitle(_t('UserDefinedForm_EmailRecipient.EMAILCONTENTTAB', 'Email Content'));
// Custom rules for sending this field
@ -291,7 +288,7 @@ class UserDefinedForm_EmailRecipient extends DataObject
),
$grid
));
$fields->fieldByName('Root.CustomRules')->setTitle(_t('UserDefinedForm_EmailRecipient.CUSTOMRULESTAB', 'Custom Rules'));
$this->extend('updateCMSFields', $fields);
@ -421,7 +418,10 @@ class UserDefinedForm_EmailRecipient extends DataObject
*/
public function getEmailBodyContent()
{
return $this->SendPlain ? $this->EmailBody : $this->EmailBodyHtml;
if ($this->SendPlain) {
return DBField::create_field('HTMLText', $this->EmailBody)->NoHTML();
}
return DBField::create_field('HTMLText', $this->EmailBodyHtml)->RAW();
}
/**

View File

@ -55,7 +55,7 @@ class SubmittedFileField extends SubmittedFormField
{
if ($file = $this->UploadedFile()) {
if (trim($file->getFilename(), '/') != trim(ASSETS_DIR, '/')) {
return $this->UploadedFile()->URL;
return $this->UploadedFile()->AbsoluteLink();
}
}
}

View File

@ -75,15 +75,20 @@ class SubmittedForm extends DataObject
)
);
$values = new GridField(
$values = GridField::create(
'Values',
'SubmittedFormField',
$self->Values()->sort('Created', 'ASC')
);
$exportColumns = array(
'Title' => 'Title',
'ExportValue' => 'Value'
);
$config = new GridFieldConfig();
$config->addComponent(new GridFieldDataColumns());
$config->addComponent(new GridFieldExportButton());
$config->addComponent(new GridFieldExportButton('after', $exportColumns));
$config->addComponent(new GridFieldPrintButton());
$values->setConfig($config);

View File

@ -1,5 +1,5 @@
<form $AttributesHTML>
<% include UserFormProgress %>
<% include UserFormStepErrors %>
@ -9,13 +9,16 @@
<p id="{$FormName}_error" class="message $MessageType" aria-hidden="true" style="display: none;"></p>
<% end_if %>
<fieldset>
<% if $Legend %><legend>$Legend</legend><% end_if %>
<% loop $Fields %>
$FieldHolder
<% end_loop %>
<div class="clear"><!-- --></div>
</fieldset>
<% if $Legend %>
<fieldset>
<legend>$Legend</legend>
<% include UserFormFields %>
</fieldset>
<% else %>
<div class="userform-fields">
<% include UserFormFields %>
</div>
<% end_if %>
<% if $Steps.Count > 1 %>
<% include UserFormStepNav %>

View File

@ -0,0 +1,5 @@
<% loop $Fields %>
$FieldHolder
<% end_loop %>
<div class="clear"><!-- --></div>

View File

@ -1,8 +1,6 @@
<% if $Steps.Count > 1 %>
<fieldset class="error-container form-wide-errors" aria-hidden="true" style="display: none;">
<div>
<h4></h4>
<ul class="error-list"></ul>
</div>
</fieldset>
<div class="error-container form-wide-errors" aria-hidden="true" style="display: none;">
<h4></h4>
<ul class="error-list"></ul>
</div>
<% end_if %>

View File

@ -0,0 +1,7 @@
<% loop $Options %>
<div class="$Class">
<input id="$ID" class="radio" name="$Name" type="radio" value="$Value.ATT"<% if $isChecked %>
checked<% end_if %><% if $isDisabled %> disabled<% end_if %> <% if $Up.Required %>required<% end_if %> />
<label for="$ID">$Title</label>
</div>
<% end_loop %>

View File

@ -0,0 +1,11 @@
<% if $Options.Count %>
<% loop $Options %>
<div class="$Class">
<input id="$ID" class="checkbox" name="$Name" type="checkbox" value="$Value.ATT"<% if $isChecked %>
checked="checked"<% end_if %><% if $isDisabled %> disabled="disabled"<% end_if %> />
<label for="$ID">$Title</label>
</div>
<% end_loop %>
<% else %>
<p>No options available</p>
<% end_if %>

View File

@ -1,5 +1,5 @@
<div id="$Name" class="field<% if $extraClass %> $extraClass<% end_if %>">
<% if $Title %><label class="left">$Title</label><% end_if %>
<% if $Title %><p class="left">$Title</p><% end_if %>
<div class="middleColumn">
<% loop $FieldList %>
$Field

View File

@ -1,15 +1,15 @@
<fieldset id="$Name" class="form-step $extraClass" data-title="$Title">
<div id="$Name" class="form-step $extraClass" data-title="$Title">
<% if $Form.DisplayErrorMessagesAtTop %>
<fieldset class="error-container" aria-hidden="true" style="display: none;">
<div class="error-container" aria-hidden="true" style="display: none;">
<div>
<h4></h4>
<ul class="error-list"></ul>
</div>
</fieldset>
</div>
<% end_if %>
<% loop $Children %>
$FieldHolder
<% end_loop %>
</fieldset>
</div>

View File

@ -0,0 +1,15 @@
<?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());
}
}

View File

@ -0,0 +1,15 @@
<?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());
}
}

View File

@ -0,0 +1,24 @@
<?php
class UserDefinedForm_EmailRecipientTest extends SapphireTest
{
protected static $fixture_file = 'UserDefinedForm_EmailRecipientTest.yml';
public function testShortcodesAreRenderedInEmailPreviewContent()
{
$page = $this->objFromFixture('SiteTree', 'about_us');
$recipient = UserDefinedForm_EmailRecipient::create();
$recipient->SendPlain = false;
$recipient->EmailBodyHtml = '<p>Some email content. About us: [sitetree_link,id=' . $page->ID . '].</p>';
$result = $recipient->getEmailBodyContent();
$this->assertContains('/about-us/', $result);
$recipient->SendPlain = true;
$recipient->EmailBody = 'Some email content. About us: [sitetree_link,id=' . $page->ID . '].';
$result = $recipient->getEmailBodyContent();
$this->assertContains('/about-us/', $result);
}
}

View File

@ -0,0 +1,4 @@
SiteTree:
about_us:
Title: About Us
URLSegment: about-us