Пример #1
0
 /**
  * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  */
 public function getIndex()
 {
     $this->authorize('module_forms_manage_forms');
     view()->share(['forms' => Form::with('fields')->where('site_id', $this->site->id)->get(), 'pages' => Page::where(['site_id' => $this->site->id])->get(), 'users' => User::all()]);
     $tabs = ['active' => 'forms', 'content' => view('moduleforms::backend.forms')];
     $data['content'] = view('moduleforms::backend.index', $tabs);
     return view($this->layout, $data);
 }
 /**
  * Procesa el envio de formularios desde el sitio publico
  * @param Request $request
  * @return \Illuminate\Http\RedirectResponse
  */
 public function postProcessForm(Request $request)
 {
     $success_message = [];
     $language = Language::find($request->input('language_id', null));
     if (!$language) {
         $language = $this->site->getDefaultLanguage();
     }
     App::setLocale($language->code);
     setlocale(LC_ALL, $this->language->locale_code);
     /** @var Form $form */
     $form = Form::find($request->input('form_id'));
     $form_results = new FormResult();
     $form_results->form_id = $form->id;
     $form_results->assigned_user_id = $form->user->id;
     $results = $validations = $niceNames = [];
     foreach ($form->fields as $field) {
         if ($field->type == 'file') {
             $results[$field->alias] = $request->input('hidden-field-' . $field->alias, '');
         } elseif ($field->type == 'hidden' && object_get($field->config, 'dataType') == 'json') {
             $jsonValue = $request->input('field-' . $field->alias, '');
             if (gettype($jsonValue) == 'string') {
                 $jsonValue = json_decode($jsonValue) ?: $jsonValue;
             }
             $results[$field->alias] = $jsonValue;
         } else {
             $results[$field->alias] = $request->input('field-' . $field->alias, '');
             $validations[$field->alias] = $field->getValidations();
         }
     }
     $validator = Validator::make($results, $validations);
     foreach ($validator->errors()->toArray() as $fieldName => $error) {
         $niceNames[$fieldName] = lang('module_forms.' . $fieldName, $this->getDefaultFieldName($form->fields, $fieldName));
     }
     $validator->setAttributeNames($niceNames);
     if ($validator->fails()) {
         if ($request->ajax()) {
             return response()->json(['success' => false, 'message' => 'Ha ocurrido un error al procesar los datos.', 'errors' => $validator->errors()]);
         } else {
             return redirect($request->header('referer'))->withErrors($validator->errors())->withInput();
         }
     }
     $form_results->results = $results;
     $form_results->save();
     Event::fire('moduleforms.pre-send', ['form_results' => $form_results]);
     if (App::bound('moduleforms:pre-send:messages')) {
         $customMessage = App::make('moduleforms:pre-send:messages');
     }
     //Se recargan los resultados en caso de que fueran modificados por algun evento
     $form_results = FormResult::find($form_results->id);
     if ($form->user) {
         $form_results->assign($form->user);
     }
     if (isset($form->config->assignmentRules)) {
         $form_results->notifyUsers($form->config->assignmentRules);
     }
     if (object_get($form, 'config.client_email_field', null)) {
         $form_results->notifyClient($form->config->client_email_field);
     }
     //Se actualizan los resultados con la información de los usuarios
     $form_results->save();
     $success_message[] = isset($form->config->success_message) ? $form->config->success_message : 'Success';
     if ($request->session()->has('moduleforms.post-save')) {
         $success_message[] = $request->session()->get('moduleforms.post-save');
     }
     if (isset($customMessage)) {
         $success_message[] = $customMessage;
     }
     if (count($success_message) == 0) {
         $success_message = $success_message[0];
     }
     if ($request->ajax()) {
         return response()->json(['success' => true, 'message' => $success_message, 'errors' => []]);
     } else {
         if ($redirectPageId = object_get($form->config, 'success_redirect', null)) {
             $page = Page::find($redirectPageId);
             $redirectTo = $page->getUrl();
         } else {
             $redirectTo = $request->header('referer');
         }
         return response()->redirectTo($redirectTo)->with('success', $success_message);
     }
 }