form_id = $form_id; $this->form = $this->form($form_id); } public static function getForm($form_id) { $classes = array( // 'form_id' => 'ClassName' 'order_create_form' => 'OrderCreateForm', 'order_docs_form' => 'OrderDocsForm', 'order_delete_form' => 'OrderDeleteForm', 'cost_analice_form' => 'CostAnaliceForm', 'api_settings_form' => 'ApiSettingsForm', 'api_pincode_form' => 'ApiPincodeForm', 'message_chat_form' => 'MessageChatForm', 'order_getreport_form' => 'OrderGetReportForm', ); if(isset($classes[$form_id])) { $ClassName = $classes[$form_id]; $file = __DIR__ .'/forms/'. $ClassName.'.php'; if(is_file($file)){ include_once $file; $form = new $ClassName($form_id); } } else { $form = new WebAppRaiserForm($form_id); } return $form; } // метод формирует массив формы, переопределяется в дочерних классах public function form(){ $form = array(); $form['form_attributes'] = array( 'method'=> 'post', ); $form['form_id'] = array( 'inputs' => array( '#type'=> 'hidden', '#value'=> $this->form_id, ), ); return $form; } // метод валидирует поля формы, переопределяется в дочерних классах public function validate() { $status = array( 'code'=> 'success', 'message'=> array(), 'post' => clearInputData($_POST), ); foreach($this->form as $field => $element){ if(isset($status['post'][$field]) && isset($element['inputs']['#required'])){ if(empty($status['post'][$field]) && $element['inputs']['#required'] === true){ $status['status'] = 'error'; $label = (is_array($element['label']))?$element['label']['#text']:$element['label']; $status['message'][] = 'Поле '.$label.' обязательно для заполнения'; } } } return $status; } // метод обрабатывает отправку формы, переопределяется в дочерных классах public function submit($status, &$page, WebAppRaiserAPI $webAppRaiserAPI) { if(isset($status['post']['destination'])) { $page['destination'] = str_replace('&', '&', $status['post']['destination']); } if(isset($status['post']['fragment'])) { $page['fragment'] = $status['post']['fragment']; } } public function redirect(&$page) { if(!empty($page['destination'])) { if(!empty($page['msg'])){ $page['destination'] .= (strpos($page['destination'], '?'))?'&status='.$page['status']:'?status='.$page['status']; $page['destination'] .= '&msg='. implode(' ', $page['msg']); } if(!empty($page['fragment'])){ $page['destination'] .= '#'.$page['fragment']; } header("location:/" . $page['destination']); exit(); } } public function render($fields, $modal = false, $modal_id = '') { $form = $this->form; $formID = $this->form_id; $post = clearInputData($_POST); $get = clearInputData($_GET); $output = ''; //$form_id = (isset($form['form_id']['inputs']['#value']))?' id="'.$form['form_id']['inputs']['#value'].'"':''; if(isset($form['form_attributes'])){ $form_attributes = $form['form_attributes']; unset($form['form_attributes']); } else { $form_attributes = array( 'method' => 'post', 'class'=> 'form', ); } if(isset($form_attributes['js'])){ foreach($form_attributes['js'] as $js){ $output .= ''.PHP_EOL; } unset($form_attributes['js']); } $attr = ''; foreach($form_attributes as $key => $value){ $attr .= ' '.$key.'="'.$value.'"'; } // Modal wrap if($modal){ if(empty($modal_id)){ $modal_id = $formID.'_modal'; } $output .= ' '.PHP_EOL; } } if(isset($get['destination'])) { $output .= ''.PHP_EOL; } elseif(isset($post['destination'])) { $output .= ''.PHP_EOL; } elseif(isset($fields['destination'])) { $output .= ''.PHP_EOL; } if(isset($get['fragment'])) { $output .= ''.PHP_EOL; } elseif(isset($post['fragment'])) { $output .= ''.PHP_EOL; } elseif(isset($fields['fragment'])) { $output .= ''.PHP_EOL; } $output .= ''.PHP_EOL; if($modal){ $output .= ' '.PHP_EOL; $output .= ''.PHP_EOL; } return $output; } public function get($name){ if(isset($this->$name)) { return $this->$name; } else { return false; } } }