public function getCMSFields() { $fields = parent::getCMSFields(); if ($this->ID) { // now swap out to an orderable CTF field $fields->removeFieldFromTab('Root.Items', 'Items'); foreach ($this->has_many() as $relationship => $component) { $relationshipFields = singleton($component)->summaryFields(); $foreignKey = $this->getRemoteJoinField($relationship); $ctf = new DataListOrderableComplexTableField($this, $relationship, $component, $relationshipFields, "getCMSFields", "\"{$foreignKey}\" = " . $this->ID); $ctf->setPermissions(TableListField::permissions_for_object($component)); $fields->addFieldToTab('Root.Items', $ctf); } } return $fields; }
/** * Creates and returns the result table field for resultsForm. * Uses {@link resultsTableClassName()} to initialise the formfield. * Method is called from {@link ResultsForm}. * * @param array $searchCriteria passed through from ResultsForm * * @return TableListField */ function getResultsTable($searchCriteria) { $summaryFields = $this->getResultColumns($searchCriteria); $className = $this->parentController->resultsTableClassName(); $tf = new $className($this->modelClass, $this->modelClass, $summaryFields); $tf->setCustomQuery($this->getSearchQuery($searchCriteria)); $tf->setPageSize($this->parentController->stat('page_length')); $tf->setShowPagination(true); // @todo Remove records that can't be viewed by the current user $tf->setPermissions(array_merge(array('view', 'export'), TableListField::permissions_for_object($this->modelClass))); // csv export settings (select all columns regardless of user checkbox settings in 'ResultsAssembly') $exportFields = $this->getResultColumns($searchCriteria, false); $tf->setFieldListCsv($exportFields); $url = '<a href=\\"' . $this->Link() . '/$ID/edit\\">$value</a>'; $tf->setFieldFormatting(array_combine(array_keys($summaryFields), array_fill(0, count($summaryFields), $url))); return $tf; }
/** * Gets the form fields as defined through the metadata * on {@link $obj} and the custom parameters passed to FormScaffolder. * Depending on those parameters, the fields can be used in ajax-context, * contain {@link TabSet}s etc. * * @return FieldSet */ public function getFieldSet() { $fields = new FieldSet(); // tabbed or untabbed if($this->tabbed) { $fields->push(new TabSet("Root", $mainTab = new Tab("Main"))); $mainTab->setTitle(_t('SiteTree.TABMAIN', "Main")); } // add database fields foreach($this->obj->db() as $fieldName => $fieldType) { if($this->restrictFields && !in_array($fieldName, $this->restrictFields)) continue; // @todo Pass localized title if($this->fieldClasses && isset($this->fieldClasses[$fieldName])) { $fieldClass = $this->fieldClasses[$fieldName]; $fieldObject = new $fieldClass($fieldName); } else { $fieldObject = $this->obj->dbObject($fieldName)->scaffoldFormField(null, $this->getParamsArray()); } $fieldObject->setTitle($this->obj->fieldLabel($fieldName)); if($this->tabbed) { $fields->addFieldToTab("Root.Main", $fieldObject); } else { $fields->push($fieldObject); } } // add has_one relation fields if($this->obj->has_one()) { foreach($this->obj->has_one() as $relationship => $component) { if($this->restrictFields && !in_array($relationship, $this->restrictFields)) continue; $hasOneField = $this->obj->dbObject("{$relationship}ID")->scaffoldFormField(null, $this->getParamsArray()); $hasOneField->setTitle($this->obj->fieldLabel($relationship)); if($this->tabbed) { $fields->addFieldToTab("Root.Main", $hasOneField); } else { $fields->push($hasOneField); } } } // only add relational fields if an ID is present if($this->obj->ID) { // add has_many relation fields if($this->obj->has_many() && ($this->includeRelations === true || isset($this->includeRelations['has_many']))) { foreach($this->obj->has_many() as $relationship => $component) { if($this->tabbed) { $relationTab = $fields->findOrMakeTab( "Root.$relationship", $this->obj->fieldLabel($relationship) ); } $relationshipFields = singleton($component)->summaryFields(); $foreignKey = $this->obj->getComponentJoinField($relationship); $ctf = new ComplexTableField( $this, $relationship, $component, $relationshipFields, "getCMSFields", "$foreignKey = " . $this->obj->ID ); $ctf->setPermissions(TableListField::permissions_for_object($component)); if($this->tabbed) { $fields->addFieldToTab("Root.$relationship", $ctf); } else { $fields->push($ctf); } } } if($this->obj->many_many() && ($this->includeRelations === true || isset($this->includeRelations['many_many']))) { foreach($this->obj->many_many() as $relationship => $component) { if($this->tabbed) { $relationTab = $fields->findOrMakeTab( "Root.$relationship", $this->obj->fieldLabel($relationship) ); } $relationshipFields = singleton($component)->summaryFields(); $filterWhere = $this->obj->getManyManyFilter($relationship, $component); $filterJoin = $this->obj->getManyManyJoin($relationship, $component); $ctf = new ComplexTableField( $this, $relationship, $component, $relationshipFields, "getCMSFields", $filterWhere, '', $filterJoin ); $ctf->setPermissions(TableListField::permissions_for_object($component)); $ctf->popupClass = "ScaffoldingComplexTableField_Popup"; if($this->tabbed) { $fields->addFieldToTab("Root.$relationship", $ctf); } else { $fields->push($ctf); } } } } return $fields; }
/** * Shows results from the "search" action in a TableListField. * * @return Form */ function ResultsForm($searchCriteria) { if ($searchCriteria instanceof HTTPRequest) { $searchCriteria = $searchCriteria->getVars(); } $summaryFields = $this->getResultColumns($searchCriteria); $className = $this->parentController->resultsTableClassName(); $tf = new $className($this->modelClass, $this->modelClass, $summaryFields); $tf->setCustomQuery($this->getSearchQuery($searchCriteria)); $tf->setPageSize($this->parentController->stat('page_length')); $tf->setShowPagination(true); // @todo Remove records that can't be viewed by the current user $tf->setPermissions(array_merge(array('view', 'export'), TableListField::permissions_for_object($this->modelClass))); // csv export settings (select all columns regardless of user checkbox settings in 'ResultsAssembly') $exportFields = $this->getResultColumns($searchCriteria, false); $tf->setFieldListCsv($exportFields); $url = '<a href=\\"' . $this->Link() . '/$ID/edit\\">$value</a>'; $tf->setFieldFormatting(array_combine(array_keys($summaryFields), array_fill(0, count($summaryFields), $url))); // implemented as a form to enable further actions on the resultset // (serverside sorting, export as CSV, etc) $form = new Form($this, 'ResultsForm', new FieldSet(new HeaderField('SearchResultsHeader', _t('ModelAdmin.SEARCHRESULTS', 'Search Results'), 2), $tf), new FieldSet(new FormAction("goBack", _t('ModelAdmin.GOBACK', "Back")), new FormAction("goForward", _t('ModelAdmin.GOFORWARD', "Forward")))); // Include the search criteria on the results form URL, but not dodgy variables like those below $filteredCriteria = $searchCriteria; unset($filteredCriteria['ctf']); unset($filteredCriteria['url']); unset($filteredCriteria['action_search']); if (isset($filteredCriteria['Investors__PEFirm__IsPECMember']) && !$filteredCriteria['Investors__PEFirm__IsPECMember']) { unset($filteredCriteria['Investors__PEFirm__IsPECMember']); } $form->setFormAction($this->Link() . '/ResultsForm?' . http_build_query($filteredCriteria)); return $form; }