function beforeSave(&$data, &$params, $mode){ foreach($data['extras']['actions_config'] as $f_k => $f_info){ if(strpos($f_k, '{N}') !== false){ unset($data['extras']['actions_config'][$f_k]); } } if(!empty($data['extras']['fields']) AND $data['form_type'] == '1'){ foreach($data['extras']['fields'] as $f_k => $f_info){ if(strpos($f_k, '{N}') !== false){ unset($data['extras']['fields'][$f_k]); } } //$data['wizardcode'] = serialize($data['fields_config']); if(!empty($data['extras']['fields'])){ ob_start(); \GCore\Helpers\Html::active_set('div');//!empty($data['params']['html_helper_set']) ? $data['params']['html_helper_set'] : 'div'); /*if(!empty($data['params']['theme']) AND $data['params']['theme'] != 'bootstrap3'){ $doc = \GCore\Libs\Document::getInstance(); $doc->theme = $data['params']['theme']; }*/ $theme = !empty($data['params']['theme']) ? $data['params']['theme'] : ''; $doc = \GCore\Libs\Document::getInstance(); $doc->theme = $theme; //echo \GCore\Helpers\Html::formSecStart(); $containers_ids = array(); $containers_configs = array(); foreach($data['extras']['fields'] as $k => $field){ if($field['type'] == 'multi' AND isset($field['inputs'])){ foreach($field['inputs'] as $sub_id => $input){ $field['inputs'][$sub_id] = $this->fix_field_data($field['inputs'][$sub_id]); } }else{ $field = $this->fix_field_data($field); } if($field['type'] == 'container'){ //if this container is also a root container then close existing ones if($field['container_id'] == 0){ //close all open containers foreach($containers_ids as $containers_id){ $container_id = array_pop($containers_ids); echo $this->build_container_code($containers_configs[$container_id], 'end', $k); } }else{ check_parent_container: if(!empty($containers_ids)){ $last_container_id = array_pop($containers_ids); if($field['container_id'] == $last_container_id){ //do nothing, we should add the field as regular array_push($containers_ids, $last_container_id); }else{ //one container has just ended, because the element belongs to a differnt one, close it echo $this->build_container_code($containers_configs[$last_container_id], 'end', $k); goto check_parent_container; } } } echo $this->build_container_code($field, 'start', $k); array_push($containers_ids, $k); $containers_configs[$k] = $field; }else{ if(isset($field['container_id'])){ if($field['container_id'] == 0){ //close all open containers foreach(array_keys($containers_ids) as $c_k){ $container_id = array_pop($containers_ids); echo $this->build_container_code($containers_configs[$container_id], 'end', $k); } }else{ check_container: if(!empty($containers_ids)){ $last_container_id = array_pop($containers_ids); if($field['container_id'] == $last_container_id){ //do nothing, we should add the field as regular array_push($containers_ids, $last_container_id); }else{ //one container has just ended, because the element belongs to a differnt one, close it echo $this->build_container_code($containers_configs[$last_container_id], 'end', $k); goto check_container; } } } } if($field['type'] == 'hidden' OR !empty($field['pure_code'])){ echo \GCore\Helpers\Html::input($field['name'], $field); }else{ if(!empty($field['dynamic_data']['enabled']) AND !empty($field['dynamic_data']['data_path']) AND !empty($field['dynamic_data']['value_key']) AND !empty($field['dynamic_data']['text_key'])){ echo $this->build_dynamic_element($field); }else{ /*if(isset($field['label'])){ $position = isset($field['label_pos']) ? $field['label_pos'] : 'left'; $field['label'] = array('text' => $field['label'], 'position' => $position); }*/ if($field['type'] == 'multi' AND isset($field['inputs'])){ foreach($field['inputs'] as $sub_id => $input){ if(!empty($input['dynamic_data']['enabled']) AND !empty($input['dynamic_data']['data_path']) AND !empty($input['dynamic_data']['value_key']) AND !empty($input['dynamic_data']['text_key'])){ $field['inputs'][$sub_id]['code'] = $this->build_dynamic_element($input, true); $field['inputs'][$sub_id]['type'] = 'custom'; //$field['inputs'][$sub_id]['label'] = ''; } } echo \GCore\Helpers\Html::formLine($field['name'], $field); }else{ echo \GCore\Helpers\Html::formLine($field['name'], $field); } //echo \GCore\Helpers\Html::formLine($field['name'], $field); } } } } //close any empty containers with no fields after them while($container_id = array_pop($containers_ids)){ echo $this->build_container_code($containers_configs[$container_id], 'end', $container_id); } //echo \GCore\Helpers\Html::formSecEnd(); //echo \GCore\Helpers\Html::formEnd(); $data['content'] = ob_get_clean(); }else{ $data['content'] = ''; } } foreach($data['extras']['actions_config'] as $k => $act_info){ if(!empty($act_info['__action_title__'])){ $action_title = $act_info['__action_title__']; $classname = '\GCore\Admin\Extensions\Chronoforms\Actions\\'.\GCore\Libs\Str::camilize($action_title)."\\".\GCore\Libs\Str::camilize($action_title); if(method_exists($classname, 'on_form_save')){ ${$classname} = new $classname(); ${$classname}->on_form_save($data, $k); } } } if(!empty(self::$tabs)){ foreach(self::$tabs as $container_id => $tabs){ $tabs_bar = ''; foreach($tabs as $tab_id => $tab_title){ $tab_class = empty($tabs_bar) ? ' class="active"' : ''; $tabs_bar .= '<li'.$tab_class.'><a href="#'.$tab_id.'" data-g-toggle="tab">'.$tab_title.'</a></li>'; } $data['content'] = str_replace('__TABS_TITLES__'.$container_id.'__', $tabs_bar, $data['content']); } } parent::beforeSave($data, $params, $mode); }