silverstripe-cms/code/AssetTableField.php

161 lines
5.7 KiB
PHP
Raw Normal View History

<?php
class AssetTableField extends ComplexTableField {
protected $folder;
protected $template = "AssetTableField";
function __construct($controller, $name, $sourceClass, $fieldList, $detailFormFields, $sourceFilter = "", $sourceSort = "", $sourceJoin = "") {
parent::__construct($controller, $name, $sourceClass, $fieldList, $detailFormFields, $sourceFilter, $sourceSort, $sourceJoin);
$this->sourceSort = "Title";
$this->Markable = true;
}
function setFolder($folder) {
$this->folder = $folder;
$this->sourceFilter .= ($this->sourceFilter) ? " AND " : "";
$this->sourceFilter .= " ParentID = '" . $folder->ID . "' AND ClassName <> 'Folder'";
}
function Folder() {
return $this->folder;
}
function sourceID() {
return $this->folder->ID;
}
function DetailForm() {
$ID = (isset($_REQUEST['ctf']['ID'])) ? Convert::raw2xml($_REQUEST['ctf']['ID']) : null;
$childID = (isset($_REQUEST['ctf']['childID'])) ? Convert::raw2xml($_REQUEST['ctf']['childID']) : null;
$childClass = (isset($_REQUEST['fieldName'])) ? Convert::raw2xml($_REQUEST['fieldName']) : null;
$methodName = (isset($_REQUEST['methodName'])) ? $_REQUEST['methodName'] : null;
if(!$childID) {
user_error("AssetTableField::DetailForm Please specify a valid ID");
return null;
}
if($childID) {
$childData = DataObject::get_by_id("File", $childID);
}
if(!$childData) {
user_error("AssetTableField::DetailForm No record found");
return null;
}
if($childData->ParentID) {
$folder = DataObject::get_by_id('File', $childData->ParentID );
} else {
$folder = singleton('Folder');
}
$urlLink = "<div class='field readonly'>";
$urlLink .= "<label class='left'>URL</label>";
$urlLink .= "<span class='readonly'><a href='{$childData->Link()}'>{$childData->RelativeLink()}</a></span>";
$urlLink .= "</div>";
$detailFormFields = new FieldSet(
new TabSet("BottomRoot",
new Tab("Main",
new TextField("Title", _t('AssetTableField.TITLE','Title')),
new TextField("Name", _t('AssetTableField.FILENAME','Filename')),
new LiteralField("AbsoluteURL", $urlLink),
new ReadonlyField("FileType", _t('AssetTableField.TYPE','Type')),
new ReadonlyField("Size", _t('AssetTableField.SIZE','Size'), $childData->getSize()),
new DropdownField("OwnerID", _t('AssetTableField.OWNER','Owner'), Member::mapInCMSGroups( $folder->CanEdit() ) ),
new DateField_Disabled("Created", _t('AssetTableField.CREATED','First uploaded')),
new DateField_Disabled("LastEdited", _t('AssetTableField.LASTEDIT','Last changed'))
)
)
);
if(is_a($childData,'Image')) {
$big = $childData->URL;
$thumbnail = $childData->getFormattedImage('AssetLibraryPreview')->URL;
$detailFormFields->addFieldToTab("BottomRoot.Main",
new ReadonlyField("Dimensions", _t('AssetTableField.DIM','Dimensions')),
"Created"
);
$detailFormFields->addFieldToTab("BottomRoot",
new Tab("Image",
new LiteralField("ImageFull",
'<a id="ImageEditorActivator" href="javascript: void(0)">' . "<img id='thumbnailImage' src='{$thumbnail}?r=" . rand(1,100000) . "' alt='{$childData->Name}' />" . '</a>' .
'<script type="text/javascript" src="cms/javascript/ImageEditor/Activator.js"></script><script type="text/javascript">imageActivator = new ImageEditorActivator.initialize();Event.observe("ImageEditorActivator","click",imageActivator.onOpen);</script>'
)
),
'Main'
);
$detailFormFields->addFieldToTab("BottomRoot",
new Tab("Gallery Options",
new TextField( "Content", "Caption" )
)
);
}
else {
if( $childData->Extension == 'swf' ) {
$detailFormFields->addFieldToTab("BottomRoot",
new Tab("Gallery Options",
new TextField( "Content", "Caption" ),
new TextField( 'PopupWidth', 'Popup Width' ),
new TextField( 'PopupHeight', 'Popup Height' ),
new HeaderField( 'SWF File Options' ),
new CheckboxField( 'Embed', 'Force Embeding' ),
new CheckboxField( 'LimitDimensions', 'Limit The Dimensions In The Popup Window' )
)
);
}
else {
$detailFormFields->addFieldToTab("BottomRoot",
new Tab("Gallery Options",
new TextField( "Content", "Caption" ),
new TextField( 'PopupWidth', 'Popup Width' ),
new TextField( 'PopupHeight', 'Popup Height' )
)
);
}
}
if($childData && $childData->hasMethod('BackLinkTracking')) {
$links = $childData->BackLinkTracking();
if($links->exists()) {
foreach($links as $link) {
$backlinks[] = "<li><a href=\"admin/show/$link->ID\">" . $link->Breadcrumbs(null,true). "</a></li>";
}
$backlinks = "<div style=\"clear:left\">". _t('AssetTableField.PAGESLINKING','The following pages link to this file:') ."<ul>" . implode("",$backlinks) . "</ul>";
}
if(!isset($backlinks)) $backlinks = "<p>". _t('AssetTableField.NOLINKS',"This file hasn't been linked to from any pages.") ."</p>";
$detailFormFields->addFieldToTab("BottomRoot.Links", new LiteralField("Backlinks", $backlinks));
}
// the ID field confuses the Controller-logic in finding the right view for ReferencedField
$detailFormFields->removeByName('ID');
// add a namespaced ID instead thats "converted" by saveComplexTableField()
$detailFormFields->push(new HiddenField("ctf[childID]","",$childID));
$detailFormFields->push(new HiddenField("ctf[ClassName]","",$this->sourceClass));
$readonly = ($this->methodName == "show");
$form = new ComplexTableField_Popup($this, "DetailForm", $detailFormFields, $this->sourceClass, $readonly);
if (is_numeric($childID)) {
if ($methodName == "show" || $methodName == "edit") {
$form->loadDataFrom($childData);
}
}
if( !$folder->userCanEdit() || $methodName == "show") {
$form->makeReadonly();
}
return $form;
}
}
?>