public function handleAction(\GridField $gridField, $actionName, $arguments, $data) { $state = $gridField->State->Milkyway_SS_GridFieldUtils_RangeSlider; if ($actionName === 'filterbyrange') { if (isset($data['filterByRange'][$gridField->getName()][$this->filterField]['slider'])) { foreach ($data['filterByRange'][$gridField->getName()][$this->filterField]['slider'] as $key => $value) { $state->{$key} = $value; } } } }
public function handleAction(GridField $gridField, $actionName, $arguments, $data) { if (!$this->checkDataType($gridField->getList())) { return; } $state = $gridField->State->GridFieldFilterHeader; if ($actionName === 'filter') { if (isset($data['filter'][$gridField->getName()])) { foreach ($data['filter'][$gridField->getName()] as $key => $filter) { $state->Columns->{$key} = $filter; } } } elseif ($actionName === 'reset') { $state->Columns = null; } }
/** * Handles sorting across pages * @param GridField $gridField Grid Field Reference * @param Array $data Data submitted in the request */ protected function sortToPage(GridField $gridField, $data) { if (!($paginator = $gridField->getConfig()->getComponentsByType('GridFieldPaginator')->First())) { user_error('Paginator not detected', E_USER_ERROR); } if (empty($data['ItemID'])) { user_error('No item to sort', E_USER_ERROR); } if (empty($data['Target'])) { user_error('No target page', E_USER_ERROR); } $className = $gridField->getModelClass(); $owner = $gridField->Form->getRecord(); $items = clone $gridField->getList(); $many_many = $items instanceof ManyManyList; $sortColumn = $this->sortColumn; $targetItem = $items->byID(intval($data['ItemID'])); if (!$targetItem) { user_error('Target item not found', E_USER_ERROR); } $currentPage = 1; $pageState = $gridField->State->GridFieldPaginator; if ($pageState->currentPage && $pageState->currentPage > 1) { $currentPage = $pageState->currentPage; } if ($many_many) { list($parentClass, $componentClass, $parentField, $componentField, $table) = $owner->many_many($gridField->getName()); } if ($data['Target'] == 'previouspage') { $items = $items->limit($paginator->getItemsPerPage() + 1, $paginator->getItemsPerPage() * ($currentPage - 1) - 1); } else { if ($data['Target'] == 'nextpage') { $items = $items->limit($paginator->getItemsPerPage() + 1, $paginator->getItemsPerPage() * ($currentPage - 1)); } else { user_error('Not implemented: ' . $data['Target'], E_USER_ERROR); } } $sortPositions = $items->column($sortColumn); //Event to notify the Controller or owner DataObject before list sort if ($owner && $owner instanceof DataObject && method_exists($owner, 'onBeforeGridFieldPageSort')) { $owner->onBeforeGridFieldPageSort(clone $items); } else { if (Controller::has_curr() && Controller::curr() instanceof ModelAdmin && method_exists(Controller::curr(), 'onBeforeGridFieldPageSort')) { Controller::curr()->onBeforeGridFieldPageSort(clone $items); } } //Start transaction if supported if (DB::getConn()->supportsTransactions()) { DB::getConn()->transactionStart(); } if ($data['Target'] == 'previouspage') { if ($many_many) { DB::query('UPDATE "' . $table . '" SET "' . $sortColumn . '" = ' . $sortPositions[0] . ' WHERE "' . $componentField . '" = ' . $targetItem->ID . ' AND "' . $parentField . '" = ' . $owner->ID); } else { $targetItem->{$sortColumn} = $sortPositions[0]; $targetItem->write(); } $i = 1; foreach ($items as $obj) { if ($obj->ID == $targetItem->ID) { continue; } if ($many_many) { DB::query('UPDATE "' . $table . '" SET "' . $sortColumn . '" = ' . $sortPositions[$i] . ' WHERE "' . $componentField . '" = ' . $obj->ID . ' AND "' . $parentField . '" = ' . $owner->ID); } else { $obj->{$sortColumn} = $sortPositions[$i]; $obj->write(); } $i++; } } else { if ($many_many) { DB::query('UPDATE "' . $table . '" SET "' . $sortColumn . '" = ' . $sortPositions[count($sortPositions) - 1] . ' WHERE "' . $componentField . '" = ' . $targetItem->ID . ' AND "' . $parentField . '" = ' . $owner->ID); } else { $targetItem->{$sortColumn} = $sortPositions[count($sortPositions) - 1]; $targetItem->write(); } $i = 0; foreach ($items as $obj) { if ($obj->ID == $targetItem->ID) { continue; } if ($many_many) { DB::query('UPDATE "' . $table . '" SET "' . $sortColumn . '" = ' . $sortPositions[$i] . ' WHERE "' . $componentField . '" = ' . $obj->ID . ' AND "' . $parentField . '" = ' . $owner->ID); } else { $obj->{$sortColumn} = $sortPositions[$i]; $obj->write(); } $i++; } } //End transaction if supported if (DB::getConn()->supportsTransactions()) { DB::getConn()->transactionEnd(); } //Event to notify the Controller or owner DataObject after list sort if ($owner && $owner instanceof DataObject && method_exists($owner, 'onAfterGridFieldPageSort')) { $owner->onAfterGridFieldPageSort(clone $items); } else { if (Controller::has_curr() && Controller::curr() instanceof ModelAdmin && method_exists(Controller::curr(), 'onAfterGridFieldPageSort')) { Controller::curr()->onAfterGridFieldPageSort(clone $items); } } }
protected function getFieldName($name, GridField $grid, DataObjectInterface $record) { return sprintf('%s[%s][%s][%s]', $grid->getName(), __CLASS__, $record->ID, $name); }
/** * HTML for the column, content of the <td> element. * * @param \GridField $gridField * @param \DataObject $record - Record displayed in this row * @param string $columnName * * @return string - HTML for the column. Return NULL to skip. */ public function getColumnContent($gridField, $record, $columnName) { $value = $gridField && $gridField->Form && $gridField->Form->Record ? $gridField->Form->Record->{$this->relation . 'ID'} : ''; return $record->ID ? _t('GridField_HasOneSelector.SELECTOR', '<input type="radio" name="{name}" value="{value}"{selected}/>', ['name' => sprintf('%s[%s]', $gridField->getName(), str_replace('\\', '_', __CLASS__)), 'value' => $record->ID, 'selected' => $value == $record->ID ? ' checked="checked"' : '']) : ''; }
/** * Handles requests to reorder a set of IDs in a specific order. * * @param GridField $grid * @param SS_HTTPRequest $request * @return SS_HTTPResponse */ public function handleReorder($grid, $request) { if (!$this->immediateUpdate) { $this->httpError(400); } $list = $grid->getList(); $modelClass = $grid->getModelClass(); if ($list instanceof ManyManyList && !singleton($modelClass)->canView()) { $this->httpError(403); } else { if (!$list instanceof ManyManyList && !singleton($modelClass)->canEdit()) { $this->httpError(403); } } // Save any un-committed changes to the gridfield if (($form = $grid->getForm()) && ($record = $form->getRecord())) { $form->loadDataFrom($request->requestVars(), true); $grid->saveInto($record); } // Get records from the `GridFieldEditableColumns` column $data = $request->postVar($grid->getName()); $sortedIDs = $this->getSortedIDs($data); if (!$this->executeReorder($grid, $sortedIDs)) { $this->httpError(400); } Controller::curr()->getResponse()->addHeader('X-Status', rawurlencode('Records reordered.')); return $grid->FieldHolder(); }
/** * Calculate the name of the gridfield relative to the Form * * @param GridField $base Base GridField * * @return string */ protected function getNameFromParent($base) { $name = array(); do { array_unshift($name, $base->getName()); $base = $base->getForm(); } while ($base && !$base instanceof Form); return implode('.', $name); }