mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
Removing deprecated FileIFrameField, use UploadField instead
This commit is contained in:
parent
5a98cddd87
commit
594faf71b2
@ -1,58 +0,0 @@
|
||||
/*
|
||||
typography.css has been removed from framework, why shall we still has this? a dynamic typographp.css should be used by
|
||||
server side call, like Requirements::css();
|
||||
@import url("typography.css");
|
||||
*/
|
||||
html, body { padding: 0; margin: 0; border-style: none; height: 100%; overflow: hidden; }
|
||||
|
||||
form { margin: 0; padding: 0; }
|
||||
|
||||
h2 { margin: 0; font-size: 1.4em; }
|
||||
|
||||
/** Selection Groups */
|
||||
.SelectionGroup { padding: 0; margin: 10px 0 0 0; }
|
||||
|
||||
.SelectionGroup li { list-style-type: none; margin: 0 0 4px; }
|
||||
|
||||
.SelectionGroup li label { font-size: 11px; }
|
||||
|
||||
.SelectionGroup li input.selector { width: 20px; margin-top: 0; }
|
||||
|
||||
.SelectionGroup li div.field { display: none; }
|
||||
|
||||
.SelectionGroup li.selected div.field { display: block; margin-left: 30px; margin-bottom: 1em; margin-top: 4px; }
|
||||
|
||||
.mainblock .SelectionGroup li.selected div.field { margin-left: 27px; margin-bottom: 4px; }
|
||||
|
||||
.SelectionGroup li.selected label.selector { font-weight: bold; }
|
||||
|
||||
/** TreeDropdownField stying */
|
||||
.SelectionGroup div.TreeDropdownField { width: 241px; padding: 0; }
|
||||
|
||||
html > body div.TreeDropdownField { position: relative; }
|
||||
|
||||
.SelectionGroup div.TreeDropdownField span.items { display: block; height: 100%; border: 1px #7f9db9 solid; cursor: pointer; width: 214px; float: left; padding-top: 2px; padding-bottom: 2px; background-color: white; }
|
||||
|
||||
.SelectionGroup div.TreeDropdownField div.tree_holder { clear: left; cursor: default; border: 1px black solid; margin: 0; height: 180px; overflow: auto; background-color: white; /** HACK IE6, see http://www.hedgerwow.com/360/bugs/css-select-free.html */ position: absolute; z-index: 10; width: 238px; /*must have for any value*/ }
|
||||
|
||||
html > body div.TreeDropdownField div.tree_holder { top: 20px; left: 0px; z-index: 1000; }
|
||||
|
||||
/** HACK IE6, see http://www.hedgerwow.com/360/bugs/css-select-free.html */
|
||||
.SelectionGroup div.TreeDropdownField div.tree_holder iframe { display: none; /* IE5*/ display/**/: block; /* IE5*/ position: absolute; top: 0; left: 0; z-index: -1; filter: mask(); width: 180px; /*must have for any big value*/ height: 200px; border: 0; }
|
||||
|
||||
div.TreeDropdownField a.editLink { border-width: 1px 1px 1px 0; background: url(../images/TreeDropdownField_button.gif) left top no-repeat; width: 19px; height: 21px; margin: 0; padding: 0; float: left; clear: right; z-index: 0; overflow: hidden; }
|
||||
|
||||
/* added block/width so tree values don't disappear in ie7 */
|
||||
.SelectionGroup div.TreeDropdownField ul.tree li { display: block; width: 100%; }
|
||||
|
||||
.Actions { text-align: right; margin: 0; position: absolute; right: 5px; bottom: 5px; }
|
||||
|
||||
.mainblock { float: left; border: 1px solid #ccc; padding: 5px; margin-right: 5px; height: 140px; position: relative; }
|
||||
|
||||
.mainblock.editform { width: 275px; }
|
||||
|
||||
.mainblock.attached { position: absolute; left: 270px; width: 100px; }
|
||||
|
||||
.mainblock form fieldset { border: none; }
|
||||
|
||||
.mainblock form div.Actions input { font-size: 11px; }
|
@ -1,277 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* A field that allows you to attach a file to a DataObject without submitting the form it is part of, through the use
|
||||
* of an iframe.
|
||||
*
|
||||
* If all you need is a simple file upload, it is reccomended you use {@link FileField}
|
||||
*
|
||||
* @deprecated 3.0 Use UploadField
|
||||
*
|
||||
* @package forms
|
||||
* @subpackage fields-files
|
||||
*/
|
||||
class FileIFrameField extends FileField {
|
||||
|
||||
public static $allowed_actions = array (
|
||||
'iframe',
|
||||
'EditFileForm',
|
||||
'DeleteFileForm'
|
||||
);
|
||||
|
||||
/**
|
||||
* Flag that controls whether or not new files
|
||||
* can be uploaded by the user from their local computer.
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
protected $canUploadNewFile = true;
|
||||
|
||||
/**
|
||||
* Sets whether or not files can be uploaded into the CMS from the user's local computer
|
||||
*
|
||||
* @param boolean
|
||||
*/
|
||||
public function setCanUploadNewFile($can) {
|
||||
$this->canUploadNewFile = $can;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return boolean
|
||||
*/
|
||||
public function getCanUploadNewFile() {
|
||||
return $this->canUploadNewFile;
|
||||
}
|
||||
|
||||
/**
|
||||
* The data class that this field is editing.
|
||||
* @return string Class name
|
||||
*/
|
||||
public function dataClass() {
|
||||
if($this->form && $this->form->getRecord()) {
|
||||
$class = $this->form->getRecord()->has_one($this->getName());
|
||||
return ($class) ? $class : 'File';
|
||||
} else {
|
||||
return 'File';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function Field($properties = array()) {
|
||||
Deprecation::notice('3.0', 'Use UploadField');
|
||||
|
||||
Requirements::css(FRAMEWORK_DIR . '/thirdparty/jquery-ui-themes/smoothness/jquery-ui.css');
|
||||
Requirements::add_i18n_javascript(FRAMEWORK_DIR . '/javascript/lang');
|
||||
Requirements::javascript(FRAMEWORK_DIR . '/thirdparty/jquery/jquery.js');
|
||||
Requirements::javascript(FRAMEWORK_DIR . '/thirdparty/jquery-ui/jquery-ui.js');
|
||||
|
||||
|
||||
if($this->form->getRecord() && $this->form->getRecord()->exists()) {
|
||||
$record = $this->form->getRecord();
|
||||
if(class_exists('Translatable') && SiteTree::has_extension('Translatable') && $record->Locale){
|
||||
$iframe = "iframe?locale=".$record->Locale;
|
||||
}else{
|
||||
$iframe = "iframe";
|
||||
}
|
||||
|
||||
return $this->createTag (
|
||||
'iframe',
|
||||
array (
|
||||
'name' => $this->getName() . '_iframe',
|
||||
'src' => Controller::join_links($this->Link(), $iframe),
|
||||
'style' => 'height: 152px; width: 100%; border: none;'
|
||||
)
|
||||
) . $this->createTag (
|
||||
'input',
|
||||
array (
|
||||
'type' => 'hidden',
|
||||
'id' => $this->ID(),
|
||||
'name' => $this->getName() . 'ID',
|
||||
'value' => $this->attrValue()
|
||||
)
|
||||
);
|
||||
} else {
|
||||
return _t(
|
||||
'FileIFrameField.ATTACHONCESAVED',
|
||||
'{type}s can be attached once you have saved the record for the first time.',
|
||||
array('type' => $this->FileTypeName())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to retreive a File object that has already been attached to this forms data record
|
||||
*
|
||||
* @return File|null
|
||||
*/
|
||||
public function AttachedFile() {
|
||||
return $this->form->getRecord() ? $this->form->getRecord()->{$this->getName()}() : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function iframe() {
|
||||
// clear the requirements added by any parent controllers
|
||||
Requirements::clear();
|
||||
Requirements::add_i18n_javascript(FRAMEWORK_DIR . '/javascript/lang');
|
||||
Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js');
|
||||
Requirements::javascript(FRAMEWORK_DIR . '/javascript/FileIFrameField.js');
|
||||
|
||||
Requirements::css(FRAMEWORK_DIR . '/css/FileIFrameField.css');
|
||||
|
||||
return $this->renderWith('FileIframeField_iframe');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Form
|
||||
*/
|
||||
public function EditFileForm() {
|
||||
$uploadFile = _t('FileIFrameField.FROMCOMPUTER', 'From your Computer');
|
||||
$selectFile = _t('FileIFrameField.FROMFILESTORE', 'From the File Store');
|
||||
|
||||
if($this->AttachedFile() && $this->AttachedFile()->ID) {
|
||||
$title = _t('FileIFrameField.REPLACE', 'Replace {type}', array('type' => $this->FileTypeName()));
|
||||
} else {
|
||||
$title = _t('FileIFrameField.ATTACH', 'Attach {type}', array('type' => $this->FileTypeName()));
|
||||
}
|
||||
|
||||
$fileSources = array();
|
||||
|
||||
if(singleton($this->dataClass())->canCreate()) {
|
||||
if($this->canUploadNewFile) {
|
||||
$fileSources["new//$uploadFile"] = new FileField('Upload', '');
|
||||
}
|
||||
}
|
||||
|
||||
$fileSources["existing//$selectFile"] = new TreeDropdownField('ExistingFile', '', 'File');
|
||||
|
||||
$fields = new FieldList (
|
||||
new HeaderField('EditFileHeader', $title),
|
||||
new SelectionGroup('FileSource', $fileSources)
|
||||
);
|
||||
|
||||
// locale needs to be passed through from the iframe source
|
||||
if(isset($_GET['locale'])) {
|
||||
$fields->push(new HiddenField('locale', '', $_GET['locale']));
|
||||
}
|
||||
|
||||
return new Form (
|
||||
$this,
|
||||
'EditFileForm',
|
||||
$fields,
|
||||
new FieldList(
|
||||
new FormAction('save', $title)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function save($data, $form) {
|
||||
// check the user has entered all the required information
|
||||
if (
|
||||
!isset($data['FileSource'])
|
||||
|| ($data['FileSource'] == 'new' && (!isset($_FILES['Upload']) || !$_FILES['Upload']))
|
||||
|| ($data['FileSource'] == 'existing' && (!isset($data['ExistingFile']) || !$data['ExistingFile']))
|
||||
) {
|
||||
$form->sessionMessage(_t('FileIFrameField.NOSOURCE', 'Please select a source file to attach'), 'required');
|
||||
$form->getController()->redirectBack();
|
||||
return;
|
||||
}
|
||||
|
||||
$desiredClass = $this->dataClass();
|
||||
$controller = $this->form->getController();
|
||||
|
||||
// upload a new file
|
||||
if($data['FileSource'] == 'new') {
|
||||
$fileObject = Object::create($desiredClass);
|
||||
|
||||
try {
|
||||
$this->upload->loadIntoFile($_FILES['Upload'], $fileObject, $this->folderName);
|
||||
} catch (Exception $e){
|
||||
$form->sessionMessage(_t('FileIFrameField.DISALLOWEDFILETYPE',
|
||||
'This filetype is not allowed to be uploaded'), 'bad');
|
||||
$controller->redirectBack();
|
||||
return;
|
||||
}
|
||||
|
||||
if($this->upload->isError()) {
|
||||
$controller->redirectBack();
|
||||
return;
|
||||
}
|
||||
|
||||
$this->form->getRecord()->{$this->getName() . 'ID'} = $fileObject->ID;
|
||||
|
||||
$fileObject->write();
|
||||
}
|
||||
|
||||
// attach an existing file from the assets store
|
||||
if($data['FileSource'] == 'existing') {
|
||||
$fileObject = DataObject::get_by_id('File', $data['ExistingFile']);
|
||||
|
||||
// dont allow the user to attach a folder by default
|
||||
if(!$fileObject || ($fileObject instanceof Folder && $desiredClass != 'Folder')) {
|
||||
$controller->redirectBack();
|
||||
return;
|
||||
}
|
||||
|
||||
$this->form->getRecord()->{$this->getName() . 'ID'} = $fileObject->ID;
|
||||
|
||||
if(!$fileObject instanceof $desiredClass) {
|
||||
$fileObject->ClassName = $desiredClass;
|
||||
$fileObject->write();
|
||||
}
|
||||
}
|
||||
|
||||
$this->form->getRecord()->write();
|
||||
$controller->redirectBack();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Form
|
||||
*/
|
||||
public function DeleteFileForm() {
|
||||
$form = new Form (
|
||||
$this,
|
||||
'DeleteFileForm',
|
||||
new FieldList (
|
||||
new HiddenField('DeleteFile', null, false)
|
||||
),
|
||||
new FieldList (
|
||||
$deleteButton = new FormAction (
|
||||
'delete', _t('FileIFrameField.DELETE', 'Delete {type}', array('type' => $this->FileTypeName()))
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
$deleteButton->addExtraClass('delete');
|
||||
return $form;
|
||||
}
|
||||
|
||||
public function delete($data, $form) {
|
||||
// delete the actual file, or just un-attach it?
|
||||
if(isset($data['DeleteFile']) && $data['DeleteFile']) {
|
||||
$file = DataObject::get_by_id('File', $this->form->getRecord()->{$this->getName() . 'ID'});
|
||||
|
||||
if($file) {
|
||||
$file->delete();
|
||||
}
|
||||
}
|
||||
|
||||
// then un-attach file from this record
|
||||
$this->form->getRecord()->{$this->getName() . 'ID'} = 0;
|
||||
$this->form->getRecord()->write();
|
||||
|
||||
$this->form->getController()->redirectBack();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the type of file this field is used to attach (e.g. File, Image)
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function FileTypeName() {
|
||||
return _t('FileIFrameField.FILE', 'File');
|
||||
}
|
||||
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
(function($) {
|
||||
|
||||
$('#Form_DeleteFileForm_action_delete').click(function(e) {
|
||||
var deleteMessage = ss.i18n._t('FILEIFRAMEFIELD.CONFIRMDELETE', 'Are you sure you want to delete this file?');
|
||||
|
||||
if(typeof(parent.jQuery.fn.dialog) != 'undefined') {
|
||||
var buttons = {};
|
||||
var $dialog = undefined;
|
||||
var $deleteForm = $('#Form_DeleteFileForm');
|
||||
var $deleteFile = $('#Form_DeleteFileForm_DeleteFile');
|
||||
|
||||
buttons[ss.i18n._t('FILEIFRAMEFIELD.DELETEFILE', 'Delete File')] = function() {
|
||||
$deleteFile.attr('value', 'true');
|
||||
$deleteForm.submit();
|
||||
|
||||
$dialog.dialog('close');
|
||||
};
|
||||
|
||||
buttons[ss.i18n._t('FILEIFRAMEFIELD.UNATTACHFILE', 'Un-Attach File')] = function() {
|
||||
$deleteForm.submit();
|
||||
$dialog.dialog('close');
|
||||
};
|
||||
|
||||
buttons[ss.i18n._t('CANCEL', 'Cancel')] = function() {
|
||||
$dialog.dialog('close');
|
||||
};
|
||||
|
||||
$dialog = parent.jQuery('<p><span class="ui-icon ui-icon-alert" style="float:left;margin-right:5px;"></span>' + deleteMessage + '</p>').dialog({
|
||||
bgiframe: true,
|
||||
resizable: false,
|
||||
modal: true,
|
||||
height: 140,
|
||||
overlay: {
|
||||
backgroundColor: '#000',
|
||||
opacity: 0.5
|
||||
},
|
||||
title: ss.i18n._t('FILEIFRAMEFIELD.DELETEIMAGE', 'Delete Image'),
|
||||
buttons: buttons
|
||||
});
|
||||
|
||||
e.preventDefault();
|
||||
} else if(!confirm(deleteMessage)) {
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
})(jQuery);
|
@ -1,175 +0,0 @@
|
||||
/*
|
||||
typography.css has been removed from framework, why shall we still has this? a dynamic typographp.css should be used by
|
||||
server side call, like Requirements::css();
|
||||
@import url("typography.css");
|
||||
*/
|
||||
|
||||
html,body {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border-style: none;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
form {
|
||||
margin: 0; padding: 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
margin: 0;
|
||||
font-size: 1.4em;
|
||||
}
|
||||
|
||||
/**
|
||||
* Selection Groups
|
||||
*/
|
||||
.SelectionGroup {
|
||||
padding: 0;
|
||||
margin: 10px 0 0 0;
|
||||
}
|
||||
.SelectionGroup li {
|
||||
list-style-type: none;
|
||||
margin: 0 0 4px;
|
||||
}
|
||||
.SelectionGroup li label {
|
||||
font-size: 11px;
|
||||
}
|
||||
.SelectionGroup li input.selector {
|
||||
width: 20px;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
|
||||
.SelectionGroup li div.field {
|
||||
display: none;
|
||||
}
|
||||
.SelectionGroup li.selected div.field {
|
||||
display: block;
|
||||
margin-left: 30px;
|
||||
margin-bottom: 1em;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.mainblock .SelectionGroup li.selected div.field {
|
||||
margin-left: 27px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.SelectionGroup li.selected label.selector {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* TreeDropdownField stying
|
||||
*/
|
||||
.SelectionGroup div.TreeDropdownField {
|
||||
width: 241px;
|
||||
padding: 0;
|
||||
}
|
||||
html>body div.TreeDropdownField {
|
||||
position:relative;
|
||||
}
|
||||
|
||||
.SelectionGroup div.TreeDropdownField span.items {
|
||||
display: block;
|
||||
height: 100%;
|
||||
border: 1px #7f9db9 solid;
|
||||
cursor: pointer;
|
||||
width: 214px;
|
||||
float: left;
|
||||
padding-top: 2px;
|
||||
padding-bottom: 2px;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.SelectionGroup div.TreeDropdownField div.tree_holder {
|
||||
clear: left;
|
||||
cursor: default;
|
||||
border: 1px black solid;
|
||||
margin: 0;
|
||||
height: 180px;
|
||||
overflow: auto;
|
||||
background-color: white;
|
||||
/**
|
||||
* HACK IE6, see http://www.hedgerwow.com/360/bugs/css-select-free.html
|
||||
*/
|
||||
position:absolute;
|
||||
z-index:10;
|
||||
width:238px;/*must have for any value*/
|
||||
}
|
||||
|
||||
html>body div.TreeDropdownField div.tree_holder {
|
||||
top: 20px;
|
||||
left: 0px;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
/**
|
||||
* HACK IE6, see http://www.hedgerwow.com/360/bugs/css-select-free.html
|
||||
*/
|
||||
.SelectionGroup div.TreeDropdownField div.tree_holder iframe {
|
||||
display:none;/* IE5*/
|
||||
display/**/:block;/* IE5*/
|
||||
position:absolute;
|
||||
top:0;
|
||||
left:0;
|
||||
z-index:-1;
|
||||
filter:mask();
|
||||
width:180px; /*must have for any big value*/
|
||||
height:200px/*must have for any big value*/;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
div.TreeDropdownField a.editLink {
|
||||
border-width: 1px 1px 1px 0;
|
||||
background: url(../images/TreeDropdownField_button.gif) left top no-repeat;
|
||||
width: 19px;
|
||||
height: 21px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
float: left;
|
||||
clear: right;
|
||||
z-index: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* added block/width so tree values don't disappear in ie7 */
|
||||
.SelectionGroup div.TreeDropdownField ul.tree li {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.Actions {
|
||||
text-align: right;
|
||||
margin: 0;
|
||||
position: absolute;
|
||||
right: 5px;
|
||||
bottom: 5px;
|
||||
}
|
||||
|
||||
.mainblock {
|
||||
float: left;
|
||||
border: 1px solid #ccc;
|
||||
padding: 5px;
|
||||
margin-right: 5px;
|
||||
height: 140px;
|
||||
position: relative;
|
||||
}
|
||||
.mainblock.editform {
|
||||
width: 275px;
|
||||
}
|
||||
.mainblock.attached {
|
||||
position: absolute;
|
||||
left: 270px;
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.mainblock form fieldset {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.mainblock form div.Actions input {
|
||||
font-size: 11px;
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
|
||||
<% base_tag %>
|
||||
|
||||
<title><% _t('FileIFrameField_iframe.ss.TITLE', 'Image Uploading Iframe') %></title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="mainblock editform">
|
||||
$EditFileForm
|
||||
</div>
|
||||
|
||||
<% if AttachedFile %>
|
||||
<div class="mainblock">
|
||||
$AttachedFile.CMSThumbnail
|
||||
|
||||
<% if DeleteFileForm %>
|
||||
$DeleteFileForm
|
||||
<% end_if %>
|
||||
</div>
|
||||
<% end_if %>
|
||||
</body>
|
||||
|
||||
</html>
|
Loading…
x
Reference in New Issue
Block a user