Version: current

# Class DataObjectManager

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

### Direct known subclasses

`FileDataObjectManager`, `HasManyDataObjectManager`

### Indirect known subclasses

`AssetManager`, `DocumentPageFiles_Manager`, `MediawebPageFiles_Manager`, `MediawebPagePhoto_Manager`, `MediawebPageTexture_Manager`, `PhotoAlbumManager`, `VideoManager`, `HasManyFileDataObjectManager`, `HasOneDataObjectManager`, `HasOneFileDataObjectManager`, `ImageAssetManager`, `ImageDataObjectManager`, `ManyManyDataObjectManager`, `ManyManyFileDataObjectManager`, `Mediaweb3DPageFiles_Manager`

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

## Methods summary

`public static` | # `allow_assets_override( mixed $bool )`
`public static` | # `allow_css_override( mixed $bool )`
`public static` | # `set_popup_width( mixed $width )`
`public static` | # `set_confirm_delete( mixed $bool )`
`public` | # `__construct( `ContentController` $controller, string $name = null, string $sourceClass = null, array $fieldList = null, `FieldSet` $detailFormFields = null, string $sourceFilter = "", string $sourceSort = "Created DESC", string $sourceJoin = "" )` See class comments See class comments #### Parameters $controller ContentController $controller $name string $name $sourceClass string $sourceClass $fieldList array $fieldList $detailFormFields FieldSet $detailFormFields $sourceFilter string $sourceFilter $sourceSort string $sourceSort $sourceJoin string $sourceJoin #### Overrides `ComplexTableField::__construct`
`public` | # `setSourceFilter( mixed $filter )`
`public` | # `setUseViewAll( mixed $bool )`
`public` | # `setPerPageMap( mixed $values )`
`public` | # `setPluralTitle( mixed $title )`
`public` | # `setWideMode( mixed $bool )`
`public` | # `PluralTitle( )`
`protected` | # `loadSort( )`
`protected` | # `loadSourceFilter( )`
`public` | # `handleItem( mixed $request )` #### Overrides `ComplexTableField::handleItem`
`public` | # `getQueryString( mixed $params = array() )`
`public` | # `getSetting( mixed $setting )`
`public String` | # `FieldHolder( )` #### Returns `String` String #### Overrides `ComplexTableField::FieldHolder`
`public` | # `Headings( )` #### Overrides `TableListField::Headings`
`public` | # `saveComplexTableField( mixed $data, mixed $form, mixed $params )` Use the URL-Parameter "action_saveComplexTableField" to provide a clue to the main controller if the main form has to be rendered, even if there is no action relevant for the main controller (to provide the instance of ComplexTableField which in turn saves the record. Use the URL-Parameter "action_saveComplexTableField" to provide a clue to the main controller if the main form has to be rendered, even if there is no action relevant for the main controller (to provide the instance of ComplexTableField which in turn saves the record. This is for adding new item records. `ComplexTableField_ItemRequest::saveComplexTableField()` #### See Form::ReferencedField #### Overrides `ComplexTableField::saveComplexTableField`
`public `Int`` | # `sourceID( )` #### Returns ``Int`` Int #### Overrides `ComplexTableField::sourceID`
`protected` | # `getRawDetailFields( mixed $childData )`
`public` | # `getCustomFieldsFor( mixed $childData )` Return the object-specific fields for the given record, to be shown in the detail pop-up Return the object-specific fields for the given record, to be shown in the detail pop-up This won't include all the CTF-specific 'plumbing; this method is called by self::getFieldsFor() and the result is then processed further to get the actual FieldSet for the form. The default implementation of this processes the value of $this->detailFormFields; consequently, if you want to set the value of the fields to something that $this->detailFormFields doesn't allow, you can do so by overloading this method. #### Overrides `ComplexTableField::getCustomFieldsFor`
`public` | # `AddForm( mixed $childID = null )` #### Overrides `ComplexTableField::AddForm`
`public` | # `Link( mixed $action = null )` Return a Link to this field Return a Link to this field #### Overrides `FormField::Link`
`public` | # `BaseLink( )` #### Overrides `TableListField::BaseLink`
`public` | # `CurrentLink( )` #### Overrides `TableListField::CurrentLink`
`public` | # `RelativeLink( mixed $params = array() )`
`public` | # `FirstLink( )` #### Overrides `TableListField::FirstLink`
`public` | # `PrevLink( )` #### Overrides `TableListField::PrevLink`
`public` | # `NextLink( )` #### Overrides `TableListField::NextLink`
`public` | # `LastLink( )` #### Overrides `TableListField::LastLink`
`public` | # `ShowAllLink( )`
`public` | # `PaginatedLink( )`
`public` | # `AddLink( )` #### Overrides `ComplexTableField::AddLink`
`public` | # `ShowAll( )`
`public` | # `Paginated( )`
`public` | # `Sortable( )`
`public` | # `setFilter( mixed $field, mixed $label, mixed $map, mixed $default = null )`
`public` | # `HasFilter( )`
`public` | # `FilterDropdown( )`
`public` | # `PerPageDropdown( )`
`public` | # `SearchValue( )`
`public` | # `AddTitle( )`
`public` | # `SingleTitle( )`
`public` | # `setAddTitle( mixed $title )` #### Overrides `ComplexTableField::setAddTitle`
`public` | # `setSingleTitle( mixed $title )`
`public` | # `getColumnWidths( )`
`public` | # `setColumnWidths( mixed $widths )`
`public` | # `setFilterEmptyString( mixed $str )`
`public` | # `addPermission( mixed $perm )`
`public` | # `removePermission( mixed $perm )`
`public` | # `NestedType( )`
`public` | # `handleDuplicate( mixed $request )`
`public` | # `setPopupWidth( mixed $val )`
`public` | # `setConfirmDelete( mixed $bool )`
`public` | # `PopupWidth( )` #### Overrides `ComplexTableField::PopupWidth`
`public` | # `ConfirmDelete( )`

### Methods inherited from ComplexTableField

`IsAddMode()`, `ItemCount()`, `Items()`, `PopupHeight()`, `Title()`, `add()`, `createFieldSet()`, `getFieldsFor()`, `getParentClass()`, `getParentIdName()`, `getParentIdNameRelation()`, `getParentRecord()`, `getValidatorFor()`, `getViewer()`, `isComposite()`, `setController()`, `setDetailFormValidator()`, `setParentClass()`, `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()`, `getQuery()`, `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()`, `sourceItems()`

### 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()`, `saveInto()`, `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

`protected static boolean` | $allow_assets_override | #
`protected static boolean` | $allow_css_override | #
`protected static integer` | $popup_width | #
`protected static boolean` | $confirm_delete | #
`protected string` | $template | # Template for main rendering Template for main rendering
`protected string` | $start | #
`protected string` | $per_page | #
`protected string` | $showAll | #
`protected string` | $search | #
`protected string` | $filter | #
`protected string` | $sort_dir | #
`protected string` | $sort | #
`protected array` | $filter_map | #
`protected mixed` | $filtered_field | #
`protected string` | $filter_label | #
`protected string` | $filter_empty_string | #
`protected array` | $column_widths | #
`protected array` | $per_page_map | #
`protected boolean` | $use_view_all | #
`protected mixed` | $popupWidth | # Default size for the popup box Default size for the popup box
`protected mixed` | $confirmDelete | #
`public string` | $itemClass | # Classname for each row/item Classname for each row/item
`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 mixed` | $singleTitle | #
`public boolean` | $hasNested | #
`public boolean` | $isNested | #
`public array` | $actions | # array Action that can be performed on a single row-entry. Has to correspond to a method in a TableListField-class (or subclass). Actions can be disabled through $permissions. Format (key is used for the methodname and CSS-class): array( 'delete' => array( 'label' => 'Delete', 'icon' => 'cms/images/delete.gif', 'icon_disabled' => 'cms/images/delete_disabled.gif', 'class' => 'deletelink', ) ) array Action that can be performed on a single row-entry. Has to correspond to a method in a TableListField-class (or subclass). Actions can be disabled through $permissions. Format (key is used for the methodname and CSS-class): array( 'delete' => array( 'label' => 'Delete', 'icon' => 'cms/images/delete.gif', 'icon_disabled' => 'cms/images/delete_disabled.gif', 'class' => 'deletelink', ) )
`public static array` | $url_handlers | # The default URL handling rules. This specifies that the next component of the URL corresponds to a method to be called on this RequestHandlingData object. The default URL handling rules. This specifies that the next component of the URL corresponds to a method to be called on this RequestHandlingData object. The keys of this array are parse rules. See `SS_HTTPRequest::match()` for a description of the rules available. The values of the array are the method to be called if the rule matches. If this value starts with a '$', then the named parameter of the parsed URL wil be used to determine the method name.
`public string` | $popupClass | # Classname for the popup form Classname for the popup form
`public string` | $templatePopup | # Template for popup (form rendering) Template for popup (form rendering)

### Properties inherited from ComplexTableField

`$controller`, `$defaultAction`, `$detailFormFields`, `$detailFormValidator`, `$parentClass`, `$parentIdName`, `$permissions`, `$popupCaption`, `$popupHeight`, `$relationAutoSetting`, `$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. -