protected function saveAllRecords(\GridField $grid, $arguments, $data) { if (isset($data[$grid->Name])) { $currValue = $grid->Value(); $grid->setValue($data[$grid->Name]); $model = singleton($grid->List->dataClass()); foreach ($grid->getConfig()->getComponents() as $component) { if ($component instanceof \GridField_SaveHandler) { $component->handleSave($grid, $model); } } if ($this->publish) { // Only use the viewable list items, since bulk publishing can take a toll on the system $list = ($paginator = $grid->getConfig()->getComponentByType('GridFieldPaginator')) ? $paginator->getManipulatedData($grid, $grid->List) : $grid->List; $list->each(function ($item) { if ($item->hasExtension('Versioned')) { $item->writeToStage('Stage'); $item->publish('Stage', 'Live'); } }); } if ($model->exists()) { $model->delete(); $model->destroy(); } $grid->setValue($currValue); if (\Controller::curr() && ($response = \Controller::curr()->Response)) { if (!$this->completeMessage) { $this->completeMessage = _t('GridField.DONE', 'Done.'); } $response->addHeader('X-Status', rawurlencode($this->completeMessage)); } } }
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 handleSave(GridField $grid, DataObjectInterface $record) { $list = $grid->getList(); $value = $grid->Value(); if (!isset($value[__CLASS__]) || !is_array($value[__CLASS__])) { return; } /** @var GridFieldOrderableRows $sortable */ $sortable = $grid->getConfig()->getComponentByType('GridFieldOrderableRows'); $form = $this->getForm($grid, $record); foreach ($value[__CLASS__] as $id => $fields) { if (!is_numeric($id) || !is_array($fields)) { continue; } $item = $list->byID($id); if (!$item || !$item->canEdit()) { continue; } $extra = array(); $form->loadDataFrom($fields, Form::MERGE_CLEAR_MISSING); $form->saveInto($item); // Check if we are also sorting these records if ($sortable) { $sortField = $sortable->getSortField(); $item->setField($sortField, $fields[$sortField]); } if ($list instanceof ManyManyList) { $extra = array_intersect_key($form->getData(), (array) $list->getExtraFields()); } $item->write(); $list->add($item, $extra); } }
public function handleSave(GridField $grid, DataObjectInterface $record) { $list = $grid->getList(); $value = $grid->Value(); if (!isset($value[__CLASS__]) || !is_array($value[__CLASS__])) { return; } $form = $this->getForm($grid, $record); foreach ($value[__CLASS__] as $id => $fields) { if (!is_numeric($id) || !is_array($fields)) { continue; } $item = $list->byID($id); if (!$item || !$item->canEdit()) { continue; } $extra = array(); $form->loadDataFrom($fields, Form::MERGE_CLEAR_MISSING); $form->saveInto($item); if ($list instanceof ManyManyList) { $extra = array_intersect_key($form->getData(), (array) $list->getExtraFields()); } $item->write(); $list->add($item, $extra); } }
/** * If the record exists, will use the valFieldAfterSave callback, otherwise * it will try to find an object by ID, and if it can't it will save to valFieldAfterSave * * @param GridField $grid * @param DataObjectInterface $record * * @throws ValidationException */ public function handleSave(GridField $grid, DataObjectInterface $record) { $list = $grid->getList(); $value = $grid->Value(); $editable = $grid->getConfig()->getComponentByType('GridFieldEditableColumns'); if ($editable) { $this->addFallbackValueToDisplayFields($grid, $editable); } if (!isset($value['GridFieldAddNewInlineButton']) || !is_array($value['GridFieldAddNewInlineButton'])) { return; } $class = $grid->getModelClass(); if (!singleton($class)->canCreate()) { return; } $form = $editable->getForm($grid, $record); foreach ($value['GridFieldAddNewInlineButton'] as $fields) { $item = null; if (isset($fields['_AddOrExistingID']) && !$list->byID($fields['_AddOrExistingID'])) { if ($item = DataList::create($class)->byID($fields['_AddOrExistingID'])) { unset($fields['_AddOrExistingID']); } elseif (!isset($fields[$this->valFieldAfterSave])) { $fields[$this->valFieldAfterSave] = $fields['_AddOrExistingID']; } } $fields = array_merge($this->additionalData, $fields); if (!$item) { $item = $class::create(); } $extra = []; if ($item->exists()) { $form->loadDataFrom($item)->loadDataFrom($fields); } else { $form->loadDataFrom($fields, Form::MERGE_CLEAR_MISSING); } $form->saveInto($item); if ($list instanceof ManyManyList) { $extra = array_intersect_key(array_merge($this->additionalData, $form->getData()), (array) $list->getExtraFields()); } $item->write(); $list->add($item, $extra); } }
public function handleSave(GridField $grid, DataObjectInterface $record) { $data = $grid->Value(); $base = ClassInfo::baseDataClass($record); if (isset($data['GridFieldEditableColumns'])) { // go through every warehouse and make sure the have either 0 stock // or take the value from this $warehouses = ProductWarehouse::get(); foreach ($warehouses as $warehouse) { $stock = $record->getStockForWarehouse($warehouse); $quantity = null; if (isset($data['GridFieldEditableColumns'][$stock->ID])) { if (isset($data['GridFieldEditableColumns'][$stock->ID]['Quantity'])) { $quantity = (int) $data['GridFieldEditableColumns'][$stock->ID]['Quantity']; } } $stock->Quantity = $quantity; $stock->write(); } } }
public function handleSave(\GridField $grid, \DataObjectInterface $record) { $list = $grid->getList(); $value = $grid->Value(); $className = $this->getComponentName(); if (!isset($value[$className]) || !is_array($value[$className])) { return; } foreach ($value[$className] as $id => $fields) { if (!is_numeric($id) || !is_array($fields)) { continue; } $item = $list->byID($id); if (!$item || !$item->canEdit()) { continue; } $form = $this->getForm($grid, $item, false); $form->loadDataFrom($fields); $form->saveInto($item); $extra = method_exists($list, 'getExtraFields') ? array_intersect_key($form->Data, (array) $list->getExtraFields()) : []; // FIX: nonsaving boolean/checkboxfields (unchecked will not be posted) foreach ($form->Fields()->saveableFields() as $formfield) { // if boolean field is included in form and unset in values, unset on object if ($formfield instanceof CheckboxField && !array_key_exists($formfield->name, $fields)) { $item->{$formfield->name} = 0; } } $item->write(); $list->add($item, $extra); } }
public function handleSave(\GridField $grid, \DataObjectInterface $record) { $list = $grid->getList(); $value = $grid->Value(); $componentName = $this->getComponentName(); if (!isset($value[$componentName]) || !is_array($value[$componentName])) { return; } $class = $grid->getModelClass(); if (!singleton($class)->canCreate()) { return; } $form = $this->getForm($grid, '', false); $id = $grid->ID(); $orderable = $grid->Config->getComponentByType('GridFieldOrderableRows'); $sortField = $orderable ? $orderable->getSortField() : ''; $max = $sortField && !$this->prepend ? $orderable->getManipulatedData($grid, $list)->max($sortField) + 1 : false; $count = 1; $itemIds = []; foreach ($value[$componentName] as $fields) { $item = isset($fields['_modelClass']) ? \Object::create($fields['_modelClass']) : \Object::create($class); $form->loadDataFrom($fields); $form->saveInto($item); $extra = method_exists($list, 'getExtraFields') ? array_intersect_key($form->Data, (array) $list->getExtraFields()) : []; if ($sortField && $max !== false) { $item->{$sortField} = $max; $extra[$sortField] = $max; $max++; } else { if ($sortField) { $item->{$sortField} = $count; $extra[$sortField] = $count; $count++; } } $item->write(); $list->add($item, $extra); $itemIds[] = $item->ID; Session::set('EditableRowToggles.' . $id . '.' . get_class($item) . '_' . $item->ID, true); } // Fix other sorts for prepends in one query if ($sortField && $max === false) { \DB::query(sprintf('UPDATE "%s" SET "%s" = %s + %d WHERE %s', $orderable->getSortTable($list), $sortField, $sortField, $count, '"ID" NOT IN (' . implode(',', $itemIds) . ')')); } }
public function handleSave(\GridField $grid, \DataObjectInterface $record) { $list = $grid->getList(); $value = $grid->Value(); $className = str_replace('\\', '_', __CLASS__); if (!isset($value[$className]) || !is_array($value[$className])) { return; } foreach ($value[$className] as $id => $fields) { if (!is_numeric($id) || !is_array($fields)) { continue; } $item = $list->byID($id); if (!$item || !$item->canEdit()) { continue; } $form = $this->getForm($grid, $item, false); $form->loadDataFrom($fields); $form->saveInto($item); $extra = method_exists($list, 'getExtraFields') ? array_intersect_key($form->Data, (array) $list->getExtraFields()) : []; $item->write(); $list->add($item, $extra); } }
/** * Handle saving when 'immediateUpdate' is disabled, otherwise this isn't * necessary for the default sort mode. */ public function handleSave(GridField $grid, DataObjectInterface $record) { if (!$this->immediateUpdate) { $value = $grid->Value(); $sortedIDs = $this->getSortedIDs($value); if ($sortedIDs) { $this->executeReorder($grid, $sortedIDs); } } }
public function handleSave(GridField $grid, DataObjectInterface $record) { $list = $grid->getList(); $value = $grid->Value(); if (!isset($value[__CLASS__]) || !is_array($value[__CLASS__])) { return; } $class = $grid->getModelClass(); $editable = $grid->getConfig()->getComponentByType('GridFieldEditableColumns'); $form = $editable->getForm($grid, $record); if (!singleton($class)->canCreate()) { return; } foreach ($value[__CLASS__] as $fields) { $item = $class::create(); $extra = array(); $form->loadDataFrom($fields, Form::MERGE_CLEAR_MISSING); $form->saveInto($item); if ($list instanceof ManyManyList) { $extra = array_intersect_key($form->getData(), (array) $list->getExtraFields()); } $item->write(); $list->add($item, $extra); } }