Version: current

# Class HasManyFileDataObjectManager

Provides a tabuar list in your form with view, edit and add links to edit records with a "has-one"-relationship. Detail-views are shown in a greybox-iframe. Features pagination in the overview as well as the detail-views.

CAUTION: You need to make sure that the original form-call to the main controller (e.g. EditForm()) returns a form which includes this field even if no data is loaded, to provide a "starting point" for action_callfieldmethod and ReferencedField.

All URL data sent to and from ComplexTableField is encapsulated in $_REQUEST['ctf'] to avoid side-effects with the main controller.

Example-URL for a "DetailForm"-call explained: "/admin/family/?executeForm=EditForm&action_callfieldmethod&fieldName=Individual&childID=7&methodName=edit" - executeForm Name of the form on the main rendering page (e.g. "FamilyAdmin") - action_callfieldmethod Trigger to call a method of a single field in "EditForm" instead of rendering the whole thing - fieldName Name of the targeted formField - methodName Method on the formfield (e.g. "ComplexTableField") - childID Identifier of the database-record (the targeted table is determined by the $sourceClass parameter)

  Object
  ViewableData implements IteratorAggregate
  RequestHandler
  FormField
  TableListField
  ComplexTableField
  DataObjectManager
  FileDataObjectManager
  HasManyFileDataObjectManager

### Direct known subclasses

`HasOneFileDataObjectManager`, `ManyManyFileDataObjectManager`

Package: forms\fields-relational
Located at dataobject_manager/code/HasManyFileDataObjectManager.php

## Methods summary

`public` | # `__construct( `ContentController` $controller, string $name, string $sourceClass, array $fileFieldName, `FieldSet` $fieldList = null, string $detailFormFields = null, string $sourceFilter = "", string $sourceSort = "Created DESC", mixed $sourceJoin = "" )` Most of the code below was copied from HasManyComplexTableField. Painful, but necessary, until PHP supports multiple inheritance. Most of the code below was copied from HasManyComplexTableField. Painful, but necessary, until PHP supports multiple inheritance. #### Parameters $controller ContentController $controller $name string $name $sourceClass string $sourceClass $fileFieldName array $fieldList $fieldList FieldSet $detailFormFields $detailFormFields string $sourceFilter $sourceFilter string $sourceSort $sourceSort string $sourceJoin $sourceJoin #### Overrides `FileDataObjectManager::__construct`
`public` | # `controllerClass( )` Try to determine the DataObject that this field is built on top of Try to determine the DataObject that this field is built on top of
`public` | # `setMarkingPermission( mixed $perm )`
`public` | # `hasMarkingPermission( )`
`public string` | # `getQuery( mixed $limitClause = null )` Generates the query for sourceitems (without pagination/limit-clause) Generates the query for sourceitems (without pagination/limit-clause) #### Returns `string` string #### Overrides `TableListField::getQuery`
`public` | # `setParentClass( mixed $class )` (Optional) Setter for a correct parent-relation-class. Defaults to the record loaded into the surrounding form as a fallback. Caution: Please use the classname, not the actual column-name in the database. (Optional) Setter for a correct parent-relation-class. Defaults to the record loaded into the surrounding form as a fallback. Caution: Please use the classname, not the actual column-name in the database. #### Parameters $class $className string #### Overrides `ComplexTableField::setParentClass`
`public` | # `sourceItems( )` #### Overrides `TableListField::sourceItems`
`public` | # `getControllerID( )`
`public` | # `SortableClass( )`
`public` | # `saveInto( `DataObject` $record )` Method to save this form field into the given data object. By default, makes use of $this->dataValue() Method to save this form field into the given data object. By default, makes use of $this->dataValue() #### Overrides `FormField::saveInto`
`public` | # `ExtraData( )`

### Methods inherited from FileDataObjectManager

`ButtonAddTitle()`, `EditUploadedForm()`, `GridLink()`, `GridView()`, `ImportDropdown()`, `ImportForm()`, `ListLink()`, `ListStyle()`, `ListView()`, `UploadForm()`, `UploadLink()`, `allowUploadFolderSelection()`, `closePopup()`, `enableUploadDebugging()`, `getAllowedFileTypes()`, `getBrowseButtonText()`, `getChildDataObj()`, `getCleanUploadFolder()`, `getImportFields()`, `getImportFolderHierarchy()`, `getPreviewFieldFor()`, `getQueryString()`, `getUploadFields()`, `getUploadFolder()`, `getUploadFolderHierarchy()`, `getUploadLimit()`, `handleImport()`, `handleItem()`, `importLinkFor()`, `saveEditUploadedForm()`, `saveImportForm()`, `saveUploadForm()`, `setAllowedFileTypes()`, `setBrowseButtonText()`, `setDefaultView()`, `setGridLabelField()`, `setPreviewFieldFor()`, `setUploadFolder()`, `setUploadLimit()`, `upload()`

### Methods inherited from DataObjectManager

`AddForm()`, `AddLink()`, `AddTitle()`, `BaseLink()`, `ConfirmDelete()`, `CurrentLink()`, `FieldHolder()`, `FilterDropdown()`, `FirstLink()`, `HasFilter()`, `Headings()`, `LastLink()`, `Link()`, `NestedType()`, `NextLink()`, `Paginated()`, `PaginatedLink()`, `PerPageDropdown()`, `PluralTitle()`, `PopupWidth()`, `PrevLink()`, `RelativeLink()`, `SearchValue()`, `ShowAll()`, `ShowAllLink()`, `SingleTitle()`, `Sortable()`, `addPermission()`, `allow_assets_override()`, `allow_css_override()`, `getColumnWidths()`, `getCustomFieldsFor()`, `getRawDetailFields()`, `getSetting()`, `handleDuplicate()`, `loadSort()`, `loadSourceFilter()`, `removePermission()`, `saveComplexTableField()`, `setAddTitle()`, `setColumnWidths()`, `setConfirmDelete()`, `setFilter()`, `setFilterEmptyString()`, `setPerPageMap()`, `setPluralTitle()`, `setPopupWidth()`, `setSingleTitle()`, `setSourceFilter()`, `setUseViewAll()`, `setWideMode()`, `set_confirm_delete()`, `set_popup_width()`, `sourceID()`

### Methods inherited from ComplexTableField

`IsAddMode()`, `ItemCount()`, `Items()`, `PopupHeight()`, `Title()`, `add()`, `createFieldSet()`, `getFieldsFor()`, `getParentClass()`, `getParentIdName()`, `getParentIdNameRelation()`, `getParentRecord()`, `getValidatorFor()`, `getViewer()`, `isComposite()`, `setController()`, `setDetailFormValidator()`, `setParentIdName()`, `setPopupCaption()`, `setPopupSize()`, `setRelationAutoSetting()`, `setTemplatePopup()`, `sourceClass()`, `sourceFilter()`

### Methods inherited from TableListField

`Actions()`, `Can()`, `ExportLink()`, `FieldList()`, `FirstItem()`, `GroupedItems()`, `HasGroupedItems()`, `HasSummary()`, `LastItem()`, `ListStart()`, `Name()`, `NamePlural()`, `NameSingular()`, `PageSize()`, `PrintLink()`, `ShowPagination()`, `SummaryFields()`, `SummaryTitle()`, `TotalCount()`, `Utility()`, `addSummary()`, `ajax_refresh()`, `colFunction_avg()`, `colFunction_sum()`, `delete()`, `disableSorting()`, `export()`, `filterString()`, `generateExportFileData()`, `getCastedValue()`, `getCsvQuery()`, `getCsvSeparator()`, `getExtraLinkParams()`, `getPermissions()`, `index()`, `isFieldSortable()`, `performReadonlyTransformation()`, `permissions_for_object()`, `printall()`, `removeCsvHeader()`, `removeSummary()`, `setCSVFieldFormatting()`, `setClick_AjaxLoad()`, `setClick_PopupLoad()`, `setCsvSeparator()`, `setCustomCsvQuery()`, `setCustomQuery()`, `setCustomSourceItems()`, `setExtraLinkParams()`, `setFieldCasting()`, `setFieldFormatting()`, `setFieldList()`, `setFieldListCsv()`, `setHighlightConditions()`, `setPageSize()`, `setPermissions()`, `setShowPagination()`, `setTemplate()`

### Methods inherited from FormField

`Field()`, `LeftTitle()`, `Message()`, `MessageType()`, `Required()`, `RightTitle()`, `SmallFieldHolder()`, `Type()`, `Value()`, `addExtraAttribute()`, `addExtraClass()`, `allowHTML5()`, `allow_html5()`, `attrName()`, `attrTitle()`, `attrValue()`, `createTag()`, `dataValue()`, `debug()`, `describe()`, `extraClass()`, `fieldHolderTemplates()`, `fieldTemplates()`, `forTemplate()`, `getCustomValidationMessage()`, `getExtraClasses()`, `getForm()`, `getHTML5Attribute()`, `getTabIndex()`, `getTabIndexHTML()`, `hasClass()`, `hasData()`, `id()`, `isDisabled()`, `isReadonly()`, `jsValidation()`, `name_to_label()`, `performDisabledTransformation()`, `removeExtraAttribute()`, `removeExtraClass()`, `rootFieldSet()`, `securityTokenEnabled()`, `setAutocomplete()`, `setContainerFieldSet()`, `setCustomValidationMessage()`, `setDisabled()`, `setError()`, `setFieldHolderTemplate()`, `setForm()`, `setHTML5Attribute()`, `setLeftTitle()`, `setName()`, `setReadonly()`, `setRightTitle()`, `setSmallFieldHolderTemplate()`, `setTabIndex()`, `setTitle()`, `setValue()`, `smallFieldHolderTemplates()`, `transform()`, `useHTML5()`, `use_html5()`, `validate()`

### Methods inherited from RequestHandler

`allowedActions()`, `checkAccessAction()`, `getRequest()`, `handleRequest()`, `hasAction()`, `httpError()`

### Methods inherited from ViewableData

`ATT_val()`, `BaseHref()`, `CSSClasses()`, `ColumnBreak()`, `ColumnCalc()`, `ColumnNumber()`, `ColumnPad()`, `ColumnPos()`, `CurrentMember()`, `CurrentPage()`, `Debug()`, `Even()`, `EvenOdd()`, `First()`, `FirstLast()`, `HasPerm()`, `IsAjax()`, `JS_val()`, `Last()`, `Me()`, `Middle()`, `MiddleString()`, `Modulus()`, `MultipleOf()`, `Odd()`, `Pos()`, `RAW_val()`, `SQL_val()`, `ThemeDir()`, `ThemeName()`, `Top()`, `TotalItems()`, `XML_val()`, `__get()`, `__isset()`, `__set()`, `buildCastingCache()`, `cachedCall()`, `castingClass()`, `castingHelper()`, `castingHelperPair()`, `castingObjectCreator()`, `castingObjectCreatorPair()`, `customise()`, `defineMethods()`, `escapeTypeForField()`, `getField()`, `getIterator()`, `getSecurityID()`, `getXMLValues()`, `hasField()`, `hasValue()`, `i18nLocale()`, `iteratorProperties()`, `obj()`, `renderWith()`, `setCustomisedObj()`, `setField()`

### Methods inherited from Object

`__call()`, `__toString()`, `__wakeup()`, `addMethodsFrom()`, `addStaticVars()`, `addWrapperMethod()`, `add_extension()`, `add_static_var()`, `allMethodNames()`, `cacheToFile()`, `cacheToFileWithArgs()`, `clearCache()`, `combined_static()`, `create()`, `createMethod()`, `create_from_string()`, `exists()`, `extInstance()`, `extend()`, `getCustomClass()`, `getExtensionInstance()`, `getExtensionInstances()`, `get_extensions()`, `get_static()`, `hasExtension()`, `hasMethod()`, `has_extension()`, `invokeWithExtensions()`, `is_a()`, `loadCache()`, `parentClass()`, `parse_class_spec()`, `remove_extension()`, `sanitiseCachename()`, `saveCache()`, `set_stat()`, `set_static()`, `set_uninherited()`, `stat()`, `strong_create()`, `uninherited()`, `uninherited_static()`, `useCustomClass()`

### Magic methods summary

## Properties summary

`public mixed` | $joinField | #
`public mixed` | $addTitle | # Determines the fields of the detail pop-up form. It can take many forms: - A FieldSet object: Use that field set directly. - A method name, eg, 'getCMSFields': Call that method on the child object to get the fields. Determines the fields of the detail pop-up form. It can take many forms: - A FieldSet object: Use that field set directly. - A method name, eg, 'getCMSFields': Call that method on the child object to get the fields.
`public string` | $RelationType | #
`protected string` | $htmlListEndName | #
`protected string` | $htmlListField | #
`public string` | $template | # Template for main rendering Template for main rendering
`public string` | $itemClass | # Classname for each row/item Classname for each row/item
`protected boolean` | $relationAutoSetting | # Automatically detect a has-one relationship in the popup (=child-class) and save the relation ID. Automatically detect a has-one relationship in the popup (=child-class) and save the relation ID.
`protected mixed` | $markingPermission | #

### Properties inherited from FileDataObjectManager

`$allowUploadFolderSelection`, `$allowedFileTypes`, `$browseButtonText`, `$customPreviewField`, `$default_view`, `$enableUploadDebugging`, `$gridLabelField`, `$hasDataObject`, `$importClass`, `$limitFileTypes`, `$permissions`, `$pluralTitle`, `$popupClass`, `$templatePopup`, `$upgrade_audio`, `$upgrade_image`, `$upgrade_video`, `$uploadFolder`, `$uploadLimit`, `$uploadMaxSize`, `$url_handlers`, `$view`

### Properties inherited from DataObjectManager

`$actions`, `$allow_assets_override`, `$allow_css_override`, `$column_widths`, `$confirmDelete`, `$confirm_delete`, `$filter`, `$filter_empty_string`, `$filter_label`, `$filter_map`, `$filtered_field`, `$hasNested`, `$isNested`, `$per_page`, `$per_page_map`, `$popupWidth`, `$popup_width`, `$search`, `$showAll`, `$singleTitle`, `$sort`, `$sort_dir`, `$start`, `$use_view_all`

### Properties inherited from ComplexTableField

`$controller`, `$defaultAction`, `$detailFormFields`, `$detailFormValidator`, `$parentClass`, `$parentIdName`, `$popupCaption`, `$popupHeight`, `$requirementsForPopupCallback`, `$showPagination`, `$sourceItems`, `$sourceJoin`, `$viewAction`

### Properties inherited from TableListField

`$IsReadOnly`, `$Markable`, `$MarkableTitle`, `$__cachedQuery`, `$cachedSourceItems`, `$clickAction`, `$csvFieldEscape`, `$csvFieldFormatting`, `$csvHasHeader`, `$csvSeparator`, `$customCsvQuery`, `$customQuery`, `$customSourceItems`, `$disableSorting`, `$exportButtonLabel`, `$extraLinkParams`, `$fieldCasting`, `$fieldFormatting`, `$fieldList`, `$fieldListCsv`, `$groupByField`, `$highlightConditions`, `$methodName`, `$pageSize`, `$paginationBaseLink`, `$readOnly`, `$sourceClass`, `$sourceFilter`, `$sourceSort`, `$summaryFieldList`, `$summaryTitle`, `$totalCount`

### Properties inherited from FormField

`$autocomplete`, `$containerFieldSet`, `$customValidationMessage`, `$description`, `$disabled`, `$dontEscape`, `$extraAttributes`, `$extraClass`, `$extraClasses`, `$fieldHTML5`, `$fieldHolderTemplate`, `$form`, `$html5Attributes`, `$leftTitle`, `$message`, `$messageType`, `$name`, `$possible_autocomplete_values`, `$readonly`, `$rightTitle`, `$smallFieldHolderTemplate`, `$tabIndex`, `$title`, `$use_html5`, `$value`

### Properties inherited from RequestHandler

`$allowed_actions`, `$brokenOnConstruct`, `$request`

### Properties inherited from ViewableData

`$casting`, `$customisedObject`, `$default_cast`, `$failover`, `$iteratorPos`, `$iteratorTotalItems`

### Properties inherited from Object

`$class`, `$extension_instances`, `$extensions`

[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the Silverstripe Forums to ask development related questions. -