{
$il = $this->inlines();
if (is_array($il)) {
- foreach($il as $inlineName=>$inlineClassName) {
- $this->inlineInstances[] = new $inlineClassName($model,$data);
+ foreach($il as $inlineName => $inlineClassName) {
+ $this->inlineInstances[] = new $inlineClassName($model, $data);
}
}
}
if ($perms === false || !in_array('view', $perms) || !in_array('add', $perms))
return new IPF_HTTP_Response_NotFound($request);
- if ($request->method == 'POST')
- {
+ $errors = false;
+ if ($request->method == 'POST') {
$this->_beforeAdd(new $this->model());
$data = $request->POST+$request->FILES;
$form = $this->_getAddForm($this->model, $data, array('user_fields'=>$this->fields()));
$this->_setupAddForm($form);
$this->setInlines($this->model, $data);
- if ($form->isValid()) {
+
+ $validForm = $form->isValid();
+ $validInlines = $this->isValidInlines();
+ if ($validForm && $validInlines) {
$item = $form->save();
$this->saveInlines($item);
AdminLog::logAction($request, $item, AdminLog::ADDITION);
$url = IPF_HTTP_URL::urlForView('IPF_Admin_Views_ListItems', array($lapp, $lmodel));
return new IPF_HTTP_Response_Redirect($url);
}
- }
- else{
+ $errors = true;
+ } else {
$form = $this->_getAddForm($this->model,null,array('user_fields'=>$this->fields()));
$this->_setupAddForm($form);
$data = array();
'extra_js' => $extraMedia['js'],
'extra_css' => $extraMedia['css'],
'inlineInstances'=>$this->inlineInstances,
+ 'errors' => $errors,
'lapp'=>$lapp,
'perms'=>$perms,
'lmodel'=>$lmodel,
if ($perms === false || !in_array('view', $perms))
return new IPF_HTTP_Response_NotFound($request);
+ $errors = false;
if ($request->method == 'POST') {
if (!in_array('change', $perms))
return new IPF_HTTP_Response_NotFound($request);
$form = $this->_getEditForm($o, $data, array('user_fields'=>$this->fields()));
$this->_setupEditForm($form);
$this->setInlines($o, $data);
- if ( ($form->isValid()) && ($this->isValidInlines()) ) {
+
+ $validForm = $form->isValid();
+ $validInlines = $this->isValidInlines();
+ if ($validForm && $validInlines) {
$item = $form->save();
$this->saveInlines($item);
AdminLog::logAction($request, $item, AdminLog::CHANGE);
$url = IPF_HTTP_URL::urlForView('IPF_Admin_Views_ListItems', array($lapp, $lmodel));
return new IPF_HTTP_Response_Redirect($url);
}
+ $errors = true;
} else {
$data = $o->getData();
foreach ($o->getTable()->getRelations() as $rname => $rel) {
'extra_js' => $extraMedia['js'],
'extra_css' => $extraMedia['css'],
'inlineInstances'=>$this->inlineInstances,
+ 'errors' => $errors,
'lapp'=>$lapp,
'perms'=>$perms,
'lmodel'=>$lmodel,
var $orderby = 'id';
- function __construct($parentModel,$data=null)
+ function __construct($parentModel, $data=null)
{
$this->parentModel = $parentModel;
function isValid()
{
- foreach ($this->formset as &$form) {
+ foreach ($this->formset as $form) {
if (!$form->isValid()) {
- if (!$form->isAdd) {
+ $empty = true;
+ foreach ($form->data as $k => $v) {
+ if ($k !== 'is_remove' && $v) {
+ $empty = false;
+ break;
+ }
+ }
+ if (!$form->isAdd || !$empty) {
return false;
}
}
foreach ($objects as $obj) {
$prefix = 'edit_'.get_class($this->model).'_'.$obj->id.'_';
- $d = array();
-
- if ($data===null) {
- foreach ($obj->getData() as $k=>$v) {
- $d[$prefix.$k] = $v;
- }
- } else {
- foreach ($data as $k=>$v) {
- if (strpos($k,$prefix) == 0)
- $d[$k] = $v;
- }
- }
+ $d = $this->extractFormData($obj, $data, $prefix);
$form = $this->_getForm($obj, $d, $form_extra);
$n_addnum = $this->getAddNum();
for ($i = 0; $i < $n_addnum; $i++) {
- $form = $this->_getForm($this->model->copy(), null, $form_extra);
+ $prefix = 'add_'.get_class($this->model).'_'.$i.'_';
+ $d = $data !== null ? $this->extractFormData(null, $data, $prefix) : null;
+
+ $form = $this->_getForm($this->model->copy(), $d, $form_extra);
$form->prefix = 'add_'.get_class($this->model).'_'.$i.'_';
$del = new IPF_Form_Field_Boolean(array(
'label' => __('Del'),
- 'name' => 'delete_',
+ 'name' => 'is_remove',
'widget_attrs' => array('disabled'=>'disabled'),
));
$del->is_del = true;
$form->fields = array_merge(array($del), $form->fields);
- $form->data = $data;
+
$form->isAdd = true;
$this->formset[] = $form;
}
}
+ private function extractFormData($obj, $data, $prefix)
+ {
+ $d = array();
+ if ($data === null) {
+ foreach ($obj->getData() as $k => $v) {
+ $d[$prefix.$k] = $v;
+ }
+ } else {
+ foreach ($data as $k => $v) {
+ if (strpos($k, $prefix) === 0)
+ $d[$k] = $v;
+ }
+ }
+ return $d;
+ }
+
function save($parent_obj)
{
if (!$this->isValid())