$modelName = $inline->getModelName();
$fk_local = $inline->getFkLocal();
- foreach ($this->cleaned_data[$modelName] as $objData) {
+ foreach ($this->cleaned_data[$modelName] as $index => $objData) {
+ if ($index === 'reorder')
+ continue;
+
if (array_key_exists('id', $objData) && array_key_exists($objData['id'], $objIndex)) {
$obj = $objIndex[$objData['id']];
if (isset($objData['is_remove'])) {
}
} else {
$objData[$fk_local] = $model->id;
+ unset($objData['id']);
$obj = new $modelName;
$obj->synchronizeWithArray($objData);
$obj->save();
}
}
+
+ $reorder = \PFF\Arr::get($this->cleaned_data[$modelName], 'reorder');
+ $this->reorderInline($inline, $objIndex, $reorder);
+ }
+
+ private function reorderInline($inline, $objIndex, $reorder)
+ {
+ $ord = $inline->_orderableColumn();
+ if ($ord === null || !$reorder)
+ return;
+
+ $objs = array();
+ $ords = array();
+ foreach ($reorder as $id) {
+ if (array_key_exists($id, $objIndex)) {
+ $objs[] = $objIndex[$id];
+ $ords[] = $objIndex[$id]->$ord;
+ }
+ }
+
+ sort($ords);
+
+ $i = 0;
+ foreach ($objs as $obj) {
+ $obj->$ord = $ords[$i];
+ $obj->save();
+ $i++;
+ }
}
}
public function createField()
{
+ $args = array(
+ 'fields' => array(),
+ 'addCount' => $this->getAddNum(),
+ );
+
$exclude = array(
$this->getFkName(),
$this->getFkLocal(),
);
$o = $this->_orderableColumn();
- if ($o)
+ if ($o) {
+ $fieldClass = 'IPF_Form_Field_OrderedSet';
$exclude[] = $o;
+ $args['orderBy'] = $o;
+ } else {
+ $fieldClass = 'IPF_Form_Field_Set';
+ }
- $fields = array();
foreach (IPF_Form_Model::suggestFields($this->getTable(), null, $exclude, null) as $field) {
list($n, $f) = $field;
- $fields[$n] = $f;
+ $args['fields'][$n] = $f;
}
- return new IPF_Form_Field_Set(array(
- 'fields' => $fields,
- 'addCount' => $this->getAddNum(),
- ));
+ return new $fieldClass($args);
}
}