730 lines
25 KiB
PHP
730 lines
25 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\Http\Controllers;
|
||
|
|
||
|
use App\Form;
|
||
|
use App\PackageSubscription;
|
||
|
use App\User;
|
||
|
use App\UserForm;
|
||
|
use Carbon\Carbon;
|
||
|
use Illuminate\Http\Request;
|
||
|
use Illuminate\Support\Facades\File;
|
||
|
use Illuminate\Support\Facades\Storage;
|
||
|
use Illuminate\Support\Str;
|
||
|
use ZipArchive;
|
||
|
|
||
|
class FormController extends Controller
|
||
|
{
|
||
|
/**
|
||
|
* Display a listing of the resource.
|
||
|
*
|
||
|
* @return \Illuminate\Http\Response
|
||
|
*/
|
||
|
public function index()
|
||
|
{
|
||
|
//
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Show the form for creating a new resource.
|
||
|
*
|
||
|
* @return \Illuminate\Http\Response
|
||
|
*/
|
||
|
public function create()
|
||
|
{
|
||
|
if (request()->ajax()) {
|
||
|
$user = request()->user();
|
||
|
$subscription_info = [];
|
||
|
if (! $this->isSubscribed($user)) {
|
||
|
$subscription_info = $this->subscriptionExpired();
|
||
|
} elseif (! $this->isQuotaAvailable($user->id)) {
|
||
|
$subscription_info = $this->quotaNotAvailable();
|
||
|
}
|
||
|
|
||
|
$templates = Form::where('is_template', 1)
|
||
|
->where('created_by', $user->id)
|
||
|
->orWhere('is_global_template', 1)
|
||
|
->pluck('name', 'id')
|
||
|
->toArray();
|
||
|
|
||
|
return view('form.create')
|
||
|
->with(compact('templates', 'subscription_info'));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Store a newly created resource in storage.
|
||
|
*
|
||
|
* @param \Illuminate\Http\Request $request
|
||
|
* @return \Illuminate\Http\Response
|
||
|
*/
|
||
|
public function store(Request $request)
|
||
|
{
|
||
|
$input = $request->only('name', 'description', 'slug');
|
||
|
|
||
|
$template_id = $request->input('template_id');
|
||
|
$id = $request->input('id');
|
||
|
|
||
|
if (! empty($id) || ! empty($template_id)) {
|
||
|
$form_id = ! empty($id) ? $id : $template_id;
|
||
|
|
||
|
$input['schema'] = Form::find($form_id)->schema;
|
||
|
}
|
||
|
|
||
|
$input['created_by'] = request()->user()->id;
|
||
|
$form = Form::create($input);
|
||
|
|
||
|
return redirect()->action([\App\Http\Controllers\FormController::class, 'edit'],
|
||
|
['form' => $form->id]
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Display the specified resource.
|
||
|
* This menthod is available publicly.
|
||
|
*
|
||
|
* @param id_or_slug
|
||
|
* @return \Illuminate\Http\Response
|
||
|
*/
|
||
|
public function show(Request $request, $id_or_slug)
|
||
|
{
|
||
|
$form = Form::where('id', $id_or_slug)
|
||
|
->orWhere('slug', $id_or_slug)
|
||
|
->first();
|
||
|
|
||
|
if (empty($form)) {
|
||
|
abort(404);
|
||
|
}
|
||
|
|
||
|
//check if password protection is enabled or not
|
||
|
if (isset($form->schema['settings']['password_protection']) && $form->schema['settings']['password_protection']['is_enabled'] && ! session('validated_protected_form')) {
|
||
|
return redirect()->route('validate.protected.form', ['id' => $id_or_slug]);
|
||
|
}
|
||
|
|
||
|
//if token available get submitted data
|
||
|
$token = request()->get('token');
|
||
|
if (! empty($token)) {
|
||
|
$form->load(['data' => function ($query) use ($token, $form) {
|
||
|
$query->where('token', $token)
|
||
|
->where('form_id', $form->id);
|
||
|
}]);
|
||
|
}
|
||
|
|
||
|
$form_closed_msg = '';
|
||
|
$is_form_closed = false;
|
||
|
if (isset($form->schema['settings']['form_scheduling']['is_enabled']) && $form->schema['settings']['form_scheduling']['is_enabled']) {
|
||
|
//getting form scheduling values
|
||
|
$form_closed_msg = $form->schema['settings']['form_scheduling']['closed_msg'];
|
||
|
$today = Carbon::now();
|
||
|
$start_date_time = null;
|
||
|
$end_date_time = Carbon::parse($form->schema['settings']['form_scheduling']['end_date_time']);
|
||
|
|
||
|
//parse start date time if it is enabled set form to close by default
|
||
|
if (isset($form->schema['settings']['form_scheduling']['start_date_time'])) {
|
||
|
$is_form_closed = true;
|
||
|
$start_date_time = Carbon::parse($form->schema['settings']['form_scheduling']['start_date_time']);
|
||
|
}
|
||
|
|
||
|
//check if form will be open
|
||
|
if (((isset($start_date_time) && ($start_date_time->lessThanOrEqualTo($today))) && $end_date_time->greaterThanOrEqualTo($start_date_time))) {
|
||
|
$is_form_closed = false;
|
||
|
}
|
||
|
|
||
|
//check if form will be close
|
||
|
if ($end_date_time->lessThanOrEqualTo($today)) {
|
||
|
$is_form_closed = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (! $this->checkIfUserIsFormCreatorOrSharedWith($form)) {
|
||
|
$this->postVisitorsCount($request, $form->id);
|
||
|
}
|
||
|
//flush session
|
||
|
$request->session()->forget('validated_protected_form');
|
||
|
$nav = false;
|
||
|
$iframe_enabled = $request->get('iframe', false);
|
||
|
|
||
|
return view('form.show')
|
||
|
->with(compact('form', 'nav', 'is_form_closed', 'form_closed_msg', 'iframe_enabled'));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Show the form for editing the specified resource.
|
||
|
*
|
||
|
* @param \App\Form $form
|
||
|
* @return \Illuminate\Http\Response
|
||
|
*/
|
||
|
public function edit(Form $form)
|
||
|
{
|
||
|
$user_id = request()->user()->id;
|
||
|
$placeholder_img = asset('img/placeholder.png');
|
||
|
|
||
|
//check subscription if form is not shared to user
|
||
|
if (! $this->doUserHavePermission($form->id, 'can_design_form')) {
|
||
|
if (! $this->isSubscribed(request()->user())) {
|
||
|
return redirect('home')->with('status', $this->subscriptionExpired());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//check permission if user is not a creator
|
||
|
$has_permission = ($form->created_by != $user_id) ? $this->doUserHavePermission($form->id, 'can_design_form') : true;
|
||
|
if (! $has_permission) {
|
||
|
abort(404);
|
||
|
}
|
||
|
|
||
|
//if user is not creator then don't allow permission to save as template
|
||
|
$save_as_template = ($form->created_by != $user_id) ? false : true;
|
||
|
|
||
|
return view('form.edit')
|
||
|
->with(compact('form', 'placeholder_img', 'save_as_template'));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Update the specified resource in storage.
|
||
|
*
|
||
|
* @param \Illuminate\Http\Request $request
|
||
|
* @param $id
|
||
|
* @return \Illuminate\Http\Response
|
||
|
*/
|
||
|
public function update($id)
|
||
|
{
|
||
|
try {
|
||
|
$input = request()->only('name', 'description', 'slug');
|
||
|
$form_data = [
|
||
|
'form' => request()->input('form'),
|
||
|
'emailConfig' => request()->input('email_config'),
|
||
|
'settings' => request()->input('settings'),
|
||
|
'additional_js_css' => request()->input('js_css'),
|
||
|
'conditional_fields' => request()->input('conditional_fields'),
|
||
|
'form_attributes' => request()->input('form_attributes'),
|
||
|
'contains_page_break' => request()->input('contains_page_break'),
|
||
|
];
|
||
|
|
||
|
$is_template = request()->input('is_template');
|
||
|
$input['schema'] = $form_data;
|
||
|
|
||
|
$form = Form::find($id);
|
||
|
|
||
|
$form->name = $input['name'];
|
||
|
$form->slug = $input['slug'];
|
||
|
$form->description = $input['description'];
|
||
|
$form->schema = $input['schema'];
|
||
|
$form->is_template = $is_template;
|
||
|
$form->mailchimp_details = request()->input('mailchimp_details');
|
||
|
$form->acelle_mail_info = request()->input('acelle_mail_info');
|
||
|
$form->webhook_info = request()->input('webhook_info');
|
||
|
$form->save();
|
||
|
|
||
|
$data['redirect'] = action([\App\Http\Controllers\HomeController::class, 'index']);
|
||
|
$data['preview'] = action([\App\Http\Controllers\FormController::class, 'show'], ['form' => $form->slug ?: $id]);
|
||
|
$data['form_name'] = $input['name'];
|
||
|
|
||
|
return $this->respondSuccess($message = null, $data);
|
||
|
} catch (Exception $e) {
|
||
|
return $this->respondWentWrong($e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Remove the specified resource from storage.
|
||
|
*
|
||
|
* @param \App\Form $form
|
||
|
* @return \Illuminate\Http\Response
|
||
|
*/
|
||
|
public function destroy($id)
|
||
|
{
|
||
|
if (! empty($this->notAllowedInDemo())) {
|
||
|
return $this->notAllowedInDemo();
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
if (request()->ajax()) {
|
||
|
$form = Form::findOrFail($id);
|
||
|
|
||
|
$form->data()->delete();
|
||
|
$form->assignedTo()->delete();
|
||
|
$form->visitors()->delete();
|
||
|
$form->delete();
|
||
|
}
|
||
|
|
||
|
return $this->respondSuccess(__('messages.deleted_successfully'));
|
||
|
} catch (Exception $e) {
|
||
|
return $this->respondWentWrong($e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function downloadCode($form_id)
|
||
|
{
|
||
|
if (! empty($this->notAllowedInDemo())) {
|
||
|
return $this->notAllowedInDemo();
|
||
|
}
|
||
|
try {
|
||
|
|
||
|
//check for form code download in subscription
|
||
|
if (is_saas_enabled()) {
|
||
|
$subscription = PackageSubscription::activeSubscription(request()->user()->id);
|
||
|
if (! $this->isSubscribed(request()->user()) || isset($subscription->package_details['is_form_downloadable']) && ! $subscription->package_details['is_form_downloadable']) {
|
||
|
exit('Form code download not allowed');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$form = Form::findOrFail($form_id);
|
||
|
$form_slug = Str::slug($form->name);
|
||
|
|
||
|
$validation_rules = [];
|
||
|
$signature_elements = [];
|
||
|
if (! empty($form->schema['form'])) {
|
||
|
foreach ($form->schema['form'] as $key => $element) {
|
||
|
$rules = [];
|
||
|
foreach ($element['validations'] as $index => $validation) {
|
||
|
$rule = 'data-rule-'.$validation['rule'];
|
||
|
$error_msg = 'data-msg-'.$validation['rule'];
|
||
|
$is_rule_required = ! empty($validation['value']) ? $validation['value'] : true;
|
||
|
|
||
|
$rules[$index]['rule'] = $rule;
|
||
|
$rules[$index]['error'] = $error_msg;
|
||
|
$rules[$index]['value'] = $is_rule_required;
|
||
|
$rules[$index]['msg'] = $validation['error_msg'];
|
||
|
}
|
||
|
$validation_rules[$key] = $rules;
|
||
|
|
||
|
//used in mail
|
||
|
if ($element['type'] == 'signature') {
|
||
|
$signature_elements[$element['name']] = $element['name'];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Generate html, CSS, JS
|
||
|
$html = view('form.download')
|
||
|
->with(compact('form', 'form_slug', 'validation_rules'))
|
||
|
->render();
|
||
|
|
||
|
//Generate PHP backend code.
|
||
|
$this->GeneratorCommonPhp = new FormPhpGenerator();
|
||
|
|
||
|
$form_php = $this->GeneratorCommonPhp->phpStart();
|
||
|
|
||
|
//Check for recaptcha
|
||
|
if ($form->schema['settings']['recaptcha']['is_enable']) {
|
||
|
$form_php .= $this->GeneratorCommonPhp->reCaptcha($form->schema['settings']['recaptcha']['secret_key']);
|
||
|
}
|
||
|
|
||
|
$smtp = $form->schema['emailConfig']['smtp'];
|
||
|
if (isset($form->schema['emailConfig']['email']['enable']) && $smtp['use_system_smtp'] == 1) {
|
||
|
// my smtp settings
|
||
|
$user = request()->user();
|
||
|
$my_smtp_settings = $user->settings['smtp'];
|
||
|
|
||
|
$smtp['host'] = $my_smtp_settings['MAIL_HOST'];
|
||
|
$smtp['port'] = $my_smtp_settings['MAIL_PORT'];
|
||
|
$smtp['from_address'] = $my_smtp_settings['MAIL_FROM_ADDRESS'];
|
||
|
$smtp['from_name'] = $my_smtp_settings['MAIL_FROM_NAME'];
|
||
|
$smtp['encryption'] = $my_smtp_settings['MAIL_ENCRYPTION'];
|
||
|
$smtp['username'] = $my_smtp_settings['MAIL_USERNAME'];
|
||
|
$smtp['password'] = $my_smtp_settings['MAIL_PASSWORD'];
|
||
|
}
|
||
|
|
||
|
//check for attachments
|
||
|
$form_php .= $this->GeneratorCommonPhp->attachmentFields($form->schema['form']);
|
||
|
|
||
|
$success_variable = true;
|
||
|
|
||
|
//Send Email.
|
||
|
if (isset($form->schema['emailConfig']['email']['enable']) && $form->schema['emailConfig']['email']['enable'] == 1) {
|
||
|
$form_php .= $this->GeneratorCommonPhp->email($form->schema['emailConfig']['email'], $smtp, '$is_email_sent', false, $signature_elements);
|
||
|
|
||
|
$success_variable = '$is_email_sent';
|
||
|
}
|
||
|
|
||
|
//Check and Send Auto response Email.
|
||
|
if (isset($form->schema['emailConfig']['auto_response']['is_enable']) && $form->schema['emailConfig']['auto_response']['is_enable'] == 1) {
|
||
|
$form_php .= $this->GeneratorCommonPhp->email(
|
||
|
$form->schema['emailConfig']['auto_response'],
|
||
|
$smtp,
|
||
|
'$is_autoresponse_email_sent',
|
||
|
true,
|
||
|
$signature_elements
|
||
|
);
|
||
|
|
||
|
$success_variable = ($success_variable == true) ? '$is_autoresponse_email_sent' : true;
|
||
|
}
|
||
|
|
||
|
// $form_php .= $this->GeneratorCommonPhp->databaseIntegration($this->form_data);
|
||
|
//TODO: Error message in response.
|
||
|
$form_php .= $this->GeneratorCommonPhp->phpEnd($form->schema['settings']['notification'], $success_variable);
|
||
|
|
||
|
//Create a folder and put the contents in it.
|
||
|
$directory = storage_path(config('constants.doc_path').'/'.$form_slug.'_'.time());
|
||
|
|
||
|
$directory_library_php = $directory.'/library/';
|
||
|
|
||
|
if (! is_writable(storage_path(config('constants.doc_path')))) {
|
||
|
return back()
|
||
|
->with('status', ['success' => 0,
|
||
|
'msg' => 'Unable to create temporary folder, Please create a folder '.storage_path(config('constants.doc_path').' and provide writable permission'),
|
||
|
]);
|
||
|
}
|
||
|
|
||
|
mkdir($directory, 0777, true);
|
||
|
mkdir($directory_library_php);
|
||
|
|
||
|
if ($form->schema['settings']['background']['bg_type'] == 'bg_image' && ! empty($form->schema['settings']['color']['image_path'])) {
|
||
|
$image_name = $form->schema['settings']['color']['image_path'];
|
||
|
$src_file = public_path('uploads/'.config('constants.doc_path').'/'.$image_name);
|
||
|
$destination_file = $directory.'/asset/';
|
||
|
|
||
|
mkdir($destination_file);
|
||
|
copy($src_file, $destination_file.$image_name);
|
||
|
}
|
||
|
|
||
|
$download_html = $directory.'/'.$form_slug.'.html';
|
||
|
$download_php = $directory.'/'.$form_slug.'.php';
|
||
|
|
||
|
//Generate html file.
|
||
|
$f_html = fopen($download_html, 'w');
|
||
|
fwrite($f_html, $html);
|
||
|
fclose($f_html);
|
||
|
|
||
|
//Generate php file.
|
||
|
$f_php = fopen($download_php, 'w');
|
||
|
fwrite($f_php, $form_php);
|
||
|
fclose($f_php);
|
||
|
|
||
|
//Copy all files from form_bundle.
|
||
|
$src = __DIR__.'/form_bundle_libraries';
|
||
|
|
||
|
File::copyDirectory($src, $directory_library_php);
|
||
|
|
||
|
return $this->_zipAndDownload($directory, $form_slug.'.zip');
|
||
|
} catch (Exception $e) {
|
||
|
exit('Something Went Wrong');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected function _zipAndDownload($folder, $zipName)
|
||
|
{
|
||
|
if (! class_exists('ZipArchive')) {
|
||
|
exit('ZipArchive class not found, enable it from your php.ini file.');
|
||
|
}
|
||
|
|
||
|
$zipName = storage_path().'/'.$zipName;
|
||
|
|
||
|
//Zip the folder and download it.
|
||
|
$files = new \RecursiveIteratorIterator(
|
||
|
new \RecursiveDirectoryIterator($folder),
|
||
|
\RecursiveIteratorIterator::LEAVES_ONLY
|
||
|
);
|
||
|
|
||
|
$zip = new ZipArchive();
|
||
|
$zip->open($zipName, ZipArchive::CREATE | ZipArchive::OVERWRITE);
|
||
|
|
||
|
foreach ($files as $name => $file) {
|
||
|
// Skip directories (they would be added automatically)
|
||
|
if (! $file->isDir()) {
|
||
|
// Get real and relative path for current file
|
||
|
$filePath = $file->getRealPath();
|
||
|
$relativePath = substr($filePath, strlen($folder));
|
||
|
// Add current file to archive
|
||
|
$zip->addFile($filePath, ltrim($relativePath, '/'));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Zip archive will be created only after closing object
|
||
|
$zip->close();
|
||
|
|
||
|
Storage::deleteDirectory($folder);
|
||
|
|
||
|
return response()->download($zipName)
|
||
|
->deleteFileAfterSend();
|
||
|
}
|
||
|
|
||
|
public function generateWidget($id)
|
||
|
{
|
||
|
if (request()->ajax()) {
|
||
|
$form = Form::where('created_by', \Auth::id())
|
||
|
->findOrFail($id);
|
||
|
|
||
|
$url = action([\App\Http\Controllers\FormController::class, 'show'], ['form' => $form->slug ?: $form->id]);
|
||
|
|
||
|
$widget = '<iframe src="'.$url.'?iframe=true"'.' frameborder="0" width="100%"></iframe>';
|
||
|
$widget_script = '<script src="'.asset('/js/iframeResizer.js').'"></script><script src="'.asset('/js/widget.js').'"></script>';
|
||
|
|
||
|
$form = '<a href="'.$url.'"'.' target="_blank" class="btn btn-sm btn-info">Please fill out form</a>';
|
||
|
|
||
|
return view('form.generate_widget')
|
||
|
->with(compact('widget', 'form', 'widget_script'));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function copyForm($id)
|
||
|
{
|
||
|
if (request()->ajax()) {
|
||
|
$user = request()->user();
|
||
|
$subscription_info = [];
|
||
|
if (! $this->isSubscribed($user)) {
|
||
|
$subscription_info = $this->subscriptionExpired();
|
||
|
} elseif (! $this->isQuotaAvailable($user->id)) {
|
||
|
$subscription_info = $this->quotaNotAvailable();
|
||
|
}
|
||
|
$form = Form::find($id);
|
||
|
|
||
|
return view('form.copy_form')
|
||
|
->with(compact('form', 'subscription_info'));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function generateFormSlug(Request $request)
|
||
|
{
|
||
|
if ($request->ajax()) {
|
||
|
$form_name = $request->input('name').' '.Str::random(3);
|
||
|
$form_slug = Str::slug($form_name);
|
||
|
|
||
|
return $this->respond($form_slug);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* get view to assign collab
|
||
|
*
|
||
|
* @param \App\Form $id
|
||
|
* @return \Illuminate\Http\Response
|
||
|
*/
|
||
|
public function getCollab($id)
|
||
|
{
|
||
|
if (request()->ajax()) {
|
||
|
$user = request()->user();
|
||
|
$form = Form::with('assignedTo', 'assignedTo.user')
|
||
|
->where('created_by', $user->id)
|
||
|
->find($id);
|
||
|
|
||
|
return view('form.collaborate')
|
||
|
->with(compact('form'));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* store the collab data in db
|
||
|
*
|
||
|
* @param \App\Form $id
|
||
|
* @return \Illuminate\Http\Response
|
||
|
*/
|
||
|
public function postCollab(Request $request)
|
||
|
{
|
||
|
try {
|
||
|
if (request()->ajax()) {
|
||
|
$form_id = $request->input('form_id');
|
||
|
$permissions = $request->input('permissions');
|
||
|
$email = $request->input('email');
|
||
|
$user = User::where('email', $email)
|
||
|
->first();
|
||
|
$form = Form::findOrFail($form_id);
|
||
|
|
||
|
if (! empty($email) && empty($user)) {
|
||
|
return $this->respondWithError(__('messages.user_doesnt_exist'));
|
||
|
} elseif (! empty($user) && ($user->id == $form->created_by)) {
|
||
|
return $this->respondWithError(__('messages.form_cant_be_shared_with_creator'));
|
||
|
}
|
||
|
|
||
|
if (! empty($user) && ! empty($permissions)) {
|
||
|
UserForm::create([
|
||
|
'form_id' => $form_id,
|
||
|
'assigned_to' => $user->id,
|
||
|
'assigned_by' => \Auth::id(),
|
||
|
'permissions' => $permissions,
|
||
|
]);
|
||
|
}
|
||
|
|
||
|
//update form permission(user)
|
||
|
$edit_permissions = $request->input('edit_permissions');
|
||
|
$assgined_form_ids = $request->input('edit_assigned_id');
|
||
|
if (! empty($assgined_form_ids)) {
|
||
|
$non_existing_ids = [];
|
||
|
foreach ($assgined_form_ids as $key => $id) {
|
||
|
if (! empty($edit_permissions[$id])) {
|
||
|
$user_form = UserForm::find($id);
|
||
|
$user_form->permissions = $edit_permissions[$id];
|
||
|
$user_form->save();
|
||
|
} else {
|
||
|
$non_existing_ids[] = $id;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
UserForm::whereIn('id', $non_existing_ids)
|
||
|
->delete();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $this->respondSuccess(__('messages.success'));
|
||
|
} catch (Exception $e) {
|
||
|
return $this->respondWentWrong($e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* get form example views
|
||
|
*
|
||
|
* @return object
|
||
|
*/
|
||
|
public function getFormExamples()
|
||
|
{
|
||
|
if (! $this->isDemo()) {
|
||
|
abort(403, 'Feature disabled');
|
||
|
}
|
||
|
|
||
|
return view('form_examples');
|
||
|
}
|
||
|
|
||
|
public function validatePasswordForProtectedForm($id)
|
||
|
{
|
||
|
$nav = false;
|
||
|
|
||
|
return view('form.validate_password')
|
||
|
->with(compact('nav', 'id'));
|
||
|
}
|
||
|
|
||
|
public function postValidatePasswordForProtectedForm($id)
|
||
|
{
|
||
|
if (request()->ajax()) {
|
||
|
$form = Form::where('id', $id)
|
||
|
->orWhere('slug', $id)
|
||
|
->firstOrFail();
|
||
|
|
||
|
if (request()->input('password') == $form->schema['settings']['password_protection']['password']) {
|
||
|
$output['success'] = true;
|
||
|
$output['redirect'] = action([\App\Http\Controllers\FormController::class, 'show'], ['form' => $id]);
|
||
|
session(['validated_protected_form' => true]);
|
||
|
} else {
|
||
|
$output['success'] = false;
|
||
|
$output['msg'] = __('messages.invalid_password');
|
||
|
session(['validated_protected_form' => false]);
|
||
|
}
|
||
|
|
||
|
return $output;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function toggleGlobalTemplate(Request $request)
|
||
|
{
|
||
|
if (! auth()->user()->can('superadmin')) {
|
||
|
abort(403, 'Unauthorized action.');
|
||
|
}
|
||
|
|
||
|
if (request()->ajax()) {
|
||
|
try {
|
||
|
$is_global_template = (bool) $request->input('is_checked');
|
||
|
$form_id = $request->input('form_id');
|
||
|
|
||
|
Form::where('id', $form_id)
|
||
|
->update(['is_global_template' => $is_global_template]);
|
||
|
|
||
|
$output = [
|
||
|
'success' => true,
|
||
|
'msg' => __('messages.success'),
|
||
|
];
|
||
|
} catch (Exception $e) {
|
||
|
$output = [
|
||
|
'success' => false,
|
||
|
'msg' => __('messages.something_went_wrong'),
|
||
|
];
|
||
|
}
|
||
|
|
||
|
return $output;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function getAcelleMailListIds(Request $request)
|
||
|
{
|
||
|
try {
|
||
|
$api_token = trim($request->input('token'));
|
||
|
|
||
|
$request_uri = config('constants.ACELLE_MAIL_API').'/lists?api_token='.$api_token;
|
||
|
|
||
|
$curl = curl_init();
|
||
|
curl_setopt($curl, CURLOPT_URL, $request_uri);
|
||
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
|
||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||
|
|
||
|
$result = curl_exec($curl);
|
||
|
curl_close($curl);
|
||
|
$result = json_decode($result, true);
|
||
|
|
||
|
$output = [
|
||
|
'success' => true,
|
||
|
'list' => $result,
|
||
|
'msg' => __('messages.success'),
|
||
|
];
|
||
|
} catch (Exception $e) {
|
||
|
$output = [
|
||
|
'success' => false,
|
||
|
'msg' => __('messages.something_went_wrong'),
|
||
|
];
|
||
|
}
|
||
|
|
||
|
return $output;
|
||
|
}
|
||
|
|
||
|
public function getAcelleMailListInfo(Request $request)
|
||
|
{
|
||
|
try {
|
||
|
$api_token = trim($request->input('token'));
|
||
|
$list_id = trim($request->input('list_id'));
|
||
|
|
||
|
$args = [
|
||
|
'api_token' => trim($api_token),
|
||
|
];
|
||
|
|
||
|
$request_uri = config('constants.ACELLE_MAIL_API').'/lists/'.$list_id.'?'.http_build_query($args);
|
||
|
|
||
|
$curl = curl_init();
|
||
|
curl_setopt($curl, CURLOPT_URL, $request_uri);
|
||
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
|
||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||
|
|
||
|
$result = curl_exec($curl);
|
||
|
curl_close($curl);
|
||
|
$result = json_decode($result, true);
|
||
|
|
||
|
$fields = isset($result['list']['fields']) ? $result['list']['fields'] : [];
|
||
|
|
||
|
$output = [
|
||
|
'success' => true,
|
||
|
'fields' => $fields,
|
||
|
'msg' => __('messages.success'),
|
||
|
];
|
||
|
} catch (Exception $e) {
|
||
|
$output = [
|
||
|
'success' => false,
|
||
|
'msg' => __('messages.something_went_wrong'),
|
||
|
];
|
||
|
}
|
||
|
|
||
|
return $output;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* validate the input value for
|
||
|
* given element
|
||
|
*/
|
||
|
public function validateInputValue(Request $request)
|
||
|
{
|
||
|
if (
|
||
|
! empty($request->input('field')) &&
|
||
|
! empty($request->input('field_value'))
|
||
|
) {
|
||
|
$field = json_decode($request->input('field'), true);
|
||
|
$allowed_values = explode(PHP_EOL, $field['allowed_input']['values']);
|
||
|
$allowed_values = array_map('strtolower', $allowed_values);
|
||
|
if (in_array(strtolower($request->input('field_value')), $allowed_values)) {
|
||
|
echo 'true';
|
||
|
exit;
|
||
|
} else {
|
||
|
echo 'false';
|
||
|
exit;
|
||
|
}
|
||
|
}
|
||
|
echo 'true';
|
||
|
exit;
|
||
|
}
|
||
|
}
|