/** * @covers GridField::setList * @covers GridField::getList */ public function testSetAndGetList() { $list = Member::get(); $arrayList = ArrayList::create(array(1, 2, 3)); $obj = new GridField('testfield', 'testfield', $list); $this->assertEquals($list, $obj->getList()); $obj->setList($arrayList); $this->assertEquals($arrayList, $obj->getList()); }
/** * Only delete record is supported. * Somehow this will not refresh the list, so we remove the item from the list as well */ public function handleAction(GridField $gridField, $actionName, $arguments, $data) { if ($actionName == 'deleterecord') { $item = $gridField->getList()->byID($arguments['RecordID']); if (!$item) { return; } if (!$item->canDelete()) { throw new ValidationException(_t('GridFieldAction_Delete.DeletePermissionsFailure', "No delete permissions"), 0); } $item->delete(); $gridField->getList()->remove($item); } }
/** * Handles the add action for the given DataObject. * * @param $gridField GridField * @param $actionName string * @param $arguments mixed * @param $data array * * @return null|SS_HTTPResponse * * @throws UnexpectedValueException */ public function handleAction(GridField $gridField, $actionName, $arguments, $data) { if ($actionName == 'add') { $dbField = $this->getDataObjectField(); $objClass = $gridField->getModelClass(); /** * @var DataObject $obj */ $obj = new $objClass(); if ($obj->hasField($dbField)) { $obj->setCastedField($dbField, $data['gridfieldaddbydbfield'][$obj->ClassName][$dbField]); if ($obj->canCreate()) { $id = $gridField->getList()->add($obj); if (!$id) { $gridField->setError(_t('GridFieldAddByDBField.AddFail', 'Unable to save {class} to the database.', 'Unable to add the DataObject.', array('class' => get_class($obj))), 'error'); } } else { return Security::permissionFailure(Controller::curr(), _t('GridFieldAddByDBField.PermissionFail', 'You don\'t have permission to create a {class}.', 'Unable to add the DataObject.', array('class' => get_class($obj)))); } } else { throw new UnexpectedValueException(sprintf('Invalid field (%s) on %s.', $dbField, $obj->ClassName)); } } return null; }
public function handleAction(\GridField $gridField, $actionName, $arguments, $data) { if ($actionName != $this->urlSegment) { return; } $record = $gridField->Form && $gridField->Form->Record ? $gridField->Form->Record : null; if (!$record || !$record->SiteTreeID) { throw new \ValidationException(_t('Link.NO_CURRENT_PAGE', 'No current page to draw from'), 0); } $root = \SiteTree::get()->filter('ParentID', $record->SiteTreeID); if (!$root->exists()) { throw new \ValidationException(_t('Link.NO_PAGES', 'No pages available'), 0); } $item = singleton($gridField->getModelClass()); if (!$item->canCreate()) { throw new \ValidationException(_t('Link.CANNOT_CREATE', 'You cannot create a Link'), 0); } foreach ($root as $page) { $link = $item->create(); $link->Type = 'SiteTree'; $link->SiteTreeID = $page->ID; $link->write(); $gridField->getList()->add($link); } }
public function handleAction(GridField $gridField, $actionName, $arguments, $data) { if ($actionName == 'publishsummitevent') { $summit_event = $gridField->getList()->byID($arguments['RecordID']); $former_state = $summit_event->isPublished(); $msg = 'Summit Event Published!'; $code = 200; try { if ($former_state) { $summit_event->unPublish(); } else { $summit_event->publish(); } $summit_event->write(); if ($former_state) { $msg = 'Summit Event Unpublished!'; } } catch (Exception $ex) { //SS_Log::log($ex->getMessage(). SS_Log::ERR); //throw new ValidationException($ex->getMessage(),0); //return sprintf('<div>%s</div>', $ex->getMessage()); //Controller::curr()->getResponse()->setStatusCode($code, $ex->getMessage()); //Controller::curr()->getResponse()->setBody(sprintf('<div>%s</div>', $ex->getMessage())); throw new ValidationException($ex->getMessage(), 0); } Controller::curr()->getResponse()->setStatusCode($code, $msg); } }
public function handleSave(GridField $grid, DataObjectInterface $record) { $list = $grid->getList(); $value = $grid->Value(); if (!isset($value[__CLASS__]) || !is_array($value[__CLASS__])) { // throw error ? return; } $updatedList = ArrayList::create(); foreach ($value[__CLASS__] as $id => $v) { if (!is_numeric($id)) { continue; } $updatedList->push($id); } $list->exclude(['ID' => $updatedList->toArray()])->removeAll(); foreach ($updatedList->toArray() as $i => $id) { // if list already contains item, leave it there if ($list->byID($id)) { continue; } $gridfieldItem = DataObject::get_by_id($list->dataClass, $id); if (!$gridfieldItem || !$gridfieldItem->canEdit()) { continue; } $list->add($gridfieldItem); } }
public function handleAction(GridField $gridField, $actionName, $arguments, $data) { if (!$this->checkDataType($gridField->getList())) { return; } if ($actionName === 'filter') { $gridField->State->UserFormsGridField = array('filter' => isset($data['FieldNameFilter']) ? $data['FieldNameFilter'] : null, 'value' => isset($data['FieldValue']) ? $data['FieldValue'] : null, 'start' => isset($data['StartFilter']) ? $data['StartFilter'] : null, 'end' => isset($data['EndFilter']) ? $data['EndFilter'] : null); } }
/** * Scaffold a bulk loader, if none is provided * * @param GridField $gridField * @return mixed */ public function scaffoldLoader(GridField $gridField) { $gridlist = $gridField->getList(); $class = $gridlist instanceof HasManyList ? "ListBulkLoader" : "BetterBulkLoader"; //set the correct constructor argument $arg = $class === "ListBulkLoader" || is_subclass_of($class, "ListBulkLoader") ? $gridlist : $gridField->getModelClass(); $loader = new $class($arg); $loader->setSource(new CsvBulkLoaderSource()); return $loader; }
public function handleAction(GridField $gridField, $actionName, $arguments, $data) { $item = $gridField->getList()->byID($arguments['RecordID']); if (!$item) { return; } if ($actionName == 'message') { $admin = new PostmarkAdmin(); return $admin->MessageForm(null, $item->ID)->forTemplate(); } elseif ($actionName == 'postmessage') { } }
/** * Generate export fields for CSV. * * @param GridField $gridField * @return array */ public function generateExportFileData($gridField) { $separator = $this->csvSeparator; $singl = singleton($gridField->getModelClass()); if ($singl->hasMethod('exportedFields')) { $fallbackColumns = $singl->exportedFields(); } else { $fallbackColumns = $singl->summaryFields(); } $csvColumns = $this->exportColumns ? $this->exportColumns : $fallbackColumns; $fileData = ''; $columnData = array(); $fieldItems = new ArrayList(); if ($this->csvHasHeader) { $headers = array(); // determine the CSV headers. If a field is callable (e.g. anonymous function) then use the // source name as the header instead foreach ($csvColumns as $columnSource => $columnHeader) { $headers[] = !is_string($columnHeader) && is_callable($columnHeader) ? utf8_decode($columnSource) : utf8_decode($columnHeader); } $fileData .= "\"" . implode("\"{$separator}\"", array_values($headers)) . "\""; $fileData .= "\n"; } $items = $gridField->getList(); foreach ($items as $item) { if (!$item->hasMethod('canView') || $item->canView()) { $columnData = array(); foreach ($csvColumns as $columnSource => $columnHeader) { if (!is_string($columnHeader) && is_callable($columnHeader)) { if ($item->hasMethod($columnSource)) { $relObj = $item->{$columnSource}(); } else { $relObj = $item->relObject($columnSource); } $value = $columnHeader($relObj); } else { $value = $gridField->getDataFieldValue($item, $columnSource); if (!$value) { $value = $gridField->getDataFieldValue($item, $columnHeader); } } $value = str_replace(array("\r", "\n"), "\n", $value); $columnData[] = '"' . str_replace('"', '""', utf8_decode($value)) . '"'; } $fileData .= implode($separator, $columnData); $fileData .= "\n"; } if ($item->hasMethod('destroy')) { $item->destroy(); } } return $fileData; }
/** * Handle the actions and apply any changes to the GridField * * @param GridField $gridField * @param string $actionName * @param mixed $arguments * @param array $data - form data * @return void */ public function handleAction(GridField $gridField, $actionName, $arguments, $data) { if ($actionName == 'deleterecord' || $actionName == 'unlinkrelation') { $item = $gridField->getList()->byID($arguments['RecordID']); if (!$item) { return; } if ($actionName == 'deleterecord' && !$item->canDelete()) { throw new ValidationException(_t('GridFieldAction_Delete.DeletePermissionsFailure', "No delete permissions"), 0); } $delete = false; if ($item->Pages()->Count() <= 1) { $delete = true; } $gridField->getList()->remove($item); //remove the relation if ($delete) { $item->delete(); } //delete the DMSDocument } }
public function handleAction(GridField $gridField, $actionName, $arguments, $data) { if ($actionName == 'becomefoundationmember') { $member = $gridField->getList()->byID($arguments['RecordID']); $allowed = !$member->isFoundationMember(); $msg = 'This user is already a Foundation Member!'; if ($allowed) { $member->upgradeToFoundationMember(); $msg = 'User is now a Foundation Member'; } Controller::curr()->getResponse()->setStatusCode(200, $msg); } }
public function handleAction(\GridField $gridField, $actionName, $arguments, $data) { $item = $gridField->getList()->byID($arguments['RecordID']); if (!$item) { return; } parent::handleAction($gridField, $actionName, $arguments, $data); $item->extend('onUnlinkFromGroup', $gridField); $group = $gridField->getForm()->getRecord(); if ($group) { $group->updateGroupCache(); } }
/** * Returns a json array of a search results that can be used by for example Jquery.ui.autosuggestion * * @param GridField $gridField * @param SS_HTTPRequest $request * @return sting in JSON fromat */ public function doSearch($gridField, $request) { $dataClass = $gridField->getList()->dataClass(); $allList = $this->searchList ? $this->searchList : DataList::create($dataClass); $searchFields = $this->getSearchFields() ? $this->getSearchFields() : $this->scaffoldSearchFields($dataClass); if (!$searchFields) { throw new LogicException(sprintf('GridFieldAddExistingAutocompleter: No searchable fields could be found for class "%s"', $dataClass)); } // TODO Replace with DataList->filterAny() once it correctly supports OR connectives $stmts = array(); foreach ($searchFields as $searchField) { $stmts[] .= sprintf('"%s" LIKE \'%s%%\'', $searchField, Convert::raw2sql($request->getVar('gridfield_relationsearch'))); } $results = $allList->where(implode(' OR ', $stmts))->subtract($gridField->getList()); $results = $results->sort($searchFields[0], 'ASC'); $results = $results->limit($this->getResultsLimit()); if (!empty($this->filters)) { $results = $results->addFilter($this->filters); } if (!empty($this->excludes)) { switch (count($this->excludes)) { case 1: $key = key($this->excludes); $results->exclude($key, $this->excludes[$key]); break; case 2: $results->exclude($this->excludes); break; default: throw new InvalidArgumentException('Incorrect number of arguments passed to filter()'); } } $json = array(); foreach ($results as $result) { $json[$result->ID] = SSViewer::fromString($this->resultsFormat)->process($result); } return Convert::array2json($json); }
function handleAction(GridField $gridField, $actionName, $arguments, $data) { if(!$this->checkDataType($gridField->getList())) return; $state = $gridField->State->GridFieldFilterHeader; if($actionName === 'filter') { if(isset($data['filter'])){ foreach($data['filter'] as $key => $filter ){ $state->Columns->$key = $filter; } } } elseif($actionName === 'reset') { $state->Columns = null; } }
/** * Called when a grid field is saved, converts the StatefulGridFieldList to a RelationList * @param {GridField} $field * @param {DataObjectInterface} $record */ public function handleSave(GridField $grid, DataObjectInterface $record) { $list = $grid->getList(); if ($list instanceof StatefulGridFieldList) { $relationName = $list->getRelationName(); if ($record->has_many($relationName)) { $list->changeToList($record->getComponents($list->getRelationName())); } else { if ($record->many_many($relationName)) { $list->changeToList($record->getManyManyComponents($list->getRelationName())); } else { throw new InvalidArgumentException('Record does not have a has_many or many_many relationship called "' . $relationName . '"', null, null); } } } }
public function handleForm(GridField $grid, $request) { $id = $request->param('ID'); $list = $grid->getList(); if (!ctype_digit($id)) { throw new SS_HTTPResponse_Exception(null, 400); } if (!($record = $list->byID($id))) { throw new SS_HTTPResponse_Exception(null, 404); } $form = $this->getForm($grid, $record); foreach ($form->Fields() as $field) { $field->setName($this->getFieldName($field->getName(), $grid, $record)); } return $form; }
public function handleAction(GridField $gridField, $actionName, $arguments, $data) { if ($actionName == 'copyrecord') { $item = $gridField->getList()->byID($arguments['RecordID']); if (!$item) { return; } if (!$item->canCreate()) { throw new ValidationException(_t('GridFieldAction_Copy.CreatePermissionsFailure', "No create permissions"), 0); } $clone = $item->duplicate(); if (!$clone || $clone->ID < 1) { user_error("Error Duplicating!", E_USER_ERROR); } } }
/** * Generate export fields for CSV. * * Replaces the definition in GridFieldExportButton, this is the same as original except * it sources the {@link List} from $gridField->getList() instead of $gridField->getManipulatedList() * * @param GridField $gridField * @return array */ public function generateExportFileData($gridField) { $separator = $this->csvSeparator; $csvColumns = $this->exportColumns ? $this->exportColumns : singleton($gridField->getModelClass())->summaryFields(); $fileData = ''; $columnData = array(); if ($this->csvHasHeader) { $headers = array(); // determine the CSV headers. If a field is callable (e.g. anonymous function) then use the // source name as the header instead foreach ($csvColumns as $columnSource => $columnHeader) { $headers[] = !is_string($columnHeader) && is_callable($columnHeader) ? $columnSource : $columnHeader; } $fileData .= "\"" . implode("\"{$separator}\"", array_values($headers)) . "\""; $fileData .= "\n"; } // The is the only variation from the parent, using getList() instead of getManipulatedList() $items = $gridField->getList(); // @todo should GridFieldComponents change behaviour based on whether others are available in the config? foreach ($gridField->getConfig()->getComponents() as $component) { if ($component instanceof GridFieldFilterHeader || $component instanceof GridFieldSortableHeader) { $items = $component->getManipulatedData($gridField, $items); } } foreach ($items->limit(null) as $item) { $columnData = array(); foreach ($csvColumns as $columnSource => $columnHeader) { if (!is_string($columnHeader) && is_callable($columnHeader)) { if ($item->hasMethod($columnSource)) { $relObj = $item->{$columnSource}(); } else { $relObj = $item->relObject($columnSource); } $value = $columnHeader($relObj); } else { $value = $gridField->getDataFieldValue($item, $columnSource); } $value = str_replace(array("\r", "\n"), "\n", $value); $columnData[] = '"' . str_replace('"', '\\"', $value) . '"'; } $fileData .= implode($separator, $columnData); $fileData .= "\n"; $item->destroy(); } return $fileData; }
/** * {@inheritDoc} */ public function handleAction(GridField $gridField, $actionName, $arguments, $data) { if ($actionName == 'publish' || ($actionName = 'unpublish')) { $item = $gridField->getList()->byID($arguments['RecordID']); if (!$item) { return; } if (!$item->canEdit()) { throw new ValidationException(_t('CatalogManager.PUBLISHPERMISSIONFAILURE', 'No permission to publish or unpublish item')); } if ($actionName == 'publish') { $item->doPublish(); } if ($actionName == 'unpublish') { $item->doUnpublish(); } } }
/** * {@inheritDoc} */ public function handleAction(GridField $gridField, $actionName, $arguments, $data) { if ($actionName == 'publish' || ($actionName = 'unpublish')) { $item = $gridField->getList()->byID($arguments['RecordID']); if (!$item) { return; } if (!$item->canEdit()) { throw new ValidationException(_t('News.PublishPermissionFailure', 'No permission to publish or unpublish news item')); } if ($actionName == 'publish') { $item->doPublish(); } if ($actionName == 'unpublish') { $item->doUnpublish(); } } }
public function handleAction(GridField $gridField, $actionName, $arguments, $data) { if ($actionName == GridFieldCloneReleaseAction::ACTION_NAME) { $release = $gridField->getList()->byID($arguments['RecordID']); $msg = 'Release Cloned Cloned !'; $code = 200; try { $manager = Injector::inst()->get('SoftwareManager'); $manager->cloneRelease($release); } catch (Exception $ex) { //SS_Log::log($ex->getMessage(). SS_Log::ERR); //throw new ValidationException($ex->getMessage(),0); //return sprintf('<div>%s</div>', $ex->getMessage()); //Controller::curr()->getResponse()->setStatusCode($code, $ex->getMessage()); //Controller::curr()->getResponse()->setBody(sprintf('<div>%s</div>', $ex->getMessage())); throw new ValidationException($ex->getMessage(), 0); } Controller::curr()->getResponse()->setStatusCode($code, $msg); } }
/** * Handle the actions and apply any changes to the GridField * * @param \GridField $gridField * @param string $actionName * @param mixed $arguments * @param array $data - form data * @return void * @throws \ValidationException when there was an error */ public function handleAction(\GridField $gridField, $actionName, $arguments, $data) { if ($actionName == 'voidpayment') { $item = $gridField->getList()->byID($arguments['RecordID']); if (!$item instanceof \Payment) { return; } /** @var ServiceFactory $factory */ $factory = ServiceFactory::create(); $voidService = $factory->getService($item, ServiceFactory::INTENT_VOID); try { $serviceResponse = $voidService->initiate(); } catch (Exception $ex) { throw new \ValidationException($ex->getMessage(), 0); } if ($serviceResponse->isError()) { throw new \ValidationException(_t('GridFieldVoidAction.VoidError', 'Unable to void payment. An error occurred.'), 0); } } }
/** * Handle the actions and apply any changes to the GridField * * @param \GridField $gridField * @param string $actionName * @param mixed $arguments * @param array $data - form data * @return void * @throws \ValidationException when there was an error */ public function handleAction(\GridField $gridField, $actionName, $arguments, $data) { if ($actionName == 'refundpayment') { $item = $gridField->getList()->byID($arguments['RecordID']); if (!$item instanceof \Payment) { return; } $serviceData = array_intersect_key($data, array('amount' => null)); /** @var ServiceFactory $factory */ $factory = ServiceFactory::create(); $refundService = $factory->getService($item, ServiceFactory::INTENT_REFUND); try { $serviceResponse = $refundService->initiate($serviceData); } catch (Exception $ex) { throw new \ValidationException($ex->getMessage(), 0); } if ($serviceResponse->isError()) { throw new \ValidationException(_t('GridFieldRefundAction.RefundError', 'Unable to refund payment. An error occurred.'), 0); } } }
/** * Handles the add action for the given DataObject * * @param $gridFIeld GridFIeld * @param $actionName string * @param $arguments mixed * @param $data array **/ public function handleAction(GridField $gridField, $actionName, $arguments, $data) { if ($actionName == "add") { $dbField = $this->getDataObjectField(); $objClass = $gridField->getModelClass(); $obj = new $objClass(); if ($obj->hasField($dbField)) { $obj->setCastedField($dbField, $data['gridfieldaddbydbfield'][$obj->ClassName][$dbField]); if ($obj->canCreate()) { $id = $gridField->getList()->add($obj); if (!$id) { $gridField->setError(_t("GridFieldAddByDBField.AddFail", "Unable to save {class} to the database.", "Unable to add the DataObject.", array("class" => get_class($obj))), "error"); } } else { return Security::permissionFailure(Controller::curr(), _t("GridFieldAddByDBField.PermissionFail", "You don't have permission to create a {class}.", "Unable to add the DataObject.", array("class" => get_class($obj)))); } } else { throw new UnexpectedValueException("Invalid field (" . $dbField . ") on " . $obj->ClassName . "."); } } }
/** * Returns a json array of a search results that can be used by for example Jquery.ui.autosuggestion * * @param GridField $gridField * @param SS_HTTPRequest $request */ public function doSearch($gridField, $request) { $dataClass = $gridField->getList()->dataClass(); $allList = DataList::create($dataClass); $filters = array(); $stmts = array(); $searchFields = $this->getSearchFields() ? $this->getSearchFields() : $this->scaffoldSearchFields($dataClass); if (!$searchFields) { throw new LogicException(sprintf('GridFieldAddExistingAutocompleter: No searchable fields could be found for class "%s"', $dataClass)); } // TODO Replace with DataList->filterAny() once it correctly supports OR connectives foreach ($searchFields as $searchField) { $stmts[] .= 'LOWER(' . $searchField . ') LIKE \'%' . strtolower(Convert::raw2sql($request->getVar('gridfield_relationsearch'))) . '%\''; } $results = $allList->where(implode(' OR ', $stmts)); $results = $results->sort($searchFields[0], 'ASC'); $results = $results->limit($this->getResultsLimit()); $json = array(); foreach ($results as $result) { $json[$result->ID] = SSViewer::fromString($this->resultsFormat)->process($result); } return Convert::array2json($json); }
public function handleAction(GridField $gridField, $actionName, $arguments, $data) { if ($actionName == 'activatemember') { $member = $gridField->getList()->byID($arguments['RecordID']); $former_state = $member->Active; $msg = 'Member Activated!'; $code = 200; try { if ($former_state) { $member->Active = 0; } else { $member->Active = 1; } $member->write(); if ($former_state) { $msg = 'Member Deactivated!'; } } catch (Exception $ex) { $code = 401; $msg = $ex->getMessage(); } Controller::curr()->getResponse()->setStatusCode($code, $msg); } }
public function doSave($data, $form) { $new_record = $this->record->ID == 0; $controller = $this->getToplevelController(); $list = $this->gridField->getList(); if ($list instanceof ManyManyList) { // Data is escaped in ManyManyList->add() $extraData = isset($data['ManyMany']) ? $data['ManyMany'] : null; } else { $extraData = null; } if (!$this->record->canEdit()) { return $controller->httpError(403); } if (isset($data['ClassName']) && $data['ClassName'] != $this->record->ClassName) { $newClassName = $data['ClassName']; // The records originally saved attribute was overwritten by $form->saveInto($record) before. // This is necessary for newClassInstance() to work as expected, and trigger change detection // on the ClassName attribute $this->record->setClassName($this->record->ClassName); // Replace $record with a new instance $this->record = $this->record->newClassInstance($newClassName); } try { $form->saveInto($this->record); $this->record->write(); $list->add($this->record, $extraData); } catch (ValidationException $e) { $form->sessionMessage($e->getResult()->message(), 'bad', false); $responseNegotiator = new PjaxResponseNegotiator(array('CurrentForm' => function () use(&$form) { return $form->forTemplate(); }, 'default' => function () use(&$controller) { return $controller->redirectBack(); })); if ($controller->getRequest()->isAjax()) { $controller->getRequest()->addHeader('X-Pjax', 'CurrentForm'); } return $responseNegotiator->respond($controller->getRequest()); } // TODO Save this item into the given relationship $link = '<a href="' . $this->Link('edit') . '">"' . htmlspecialchars($this->record->Title, ENT_QUOTES) . '"</a>'; $message = _t('GridFieldDetailForm.Saved', 'Saved {name} {link}', array('name' => $this->record->i18n_singular_name(), 'link' => $link)); $form->sessionMessage($message, 'good', false); if ($new_record) { return $controller->redirect($this->Link()); } elseif ($this->gridField->getList()->byId($this->record->ID)) { // Return new view, as we can't do a "virtual redirect" via the CMS Ajax // to the same URL (it assumes that its content is already current, and doesn't reload) return $this->edit($controller->getRequest()); } else { // Changes to the record properties might've excluded the record from // a filtered list, so return back to the main view if it can't be found $noActionURL = $controller->removeAction($data['url']); $controller->getRequest()->addHeader('X-Pjax', 'Content'); return $controller->redirect($noActionURL, 302); } }
/** * 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); } } }
/** * * @return type */ public function getList() { return $this->grid->getList(); }