update_21.09.23
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Enums\User\RoleEnum;
|
||||
use App\Form;
|
||||
use App\PackageSubscription;
|
||||
use App\User;
|
||||
@@ -143,9 +144,10 @@ class FormController extends Controller
|
||||
$request->session()->forget('validated_protected_form');
|
||||
$nav = false;
|
||||
$iframe_enabled = $request->get('iframe', false);
|
||||
$action_by = auth()->user()->roles->first()->name;
|
||||
|
||||
return view('form.show')
|
||||
->with(compact('form', 'nav', 'is_form_closed', 'form_closed_msg', 'iframe_enabled'));
|
||||
->with(compact('form', 'nav', 'is_form_closed', 'form_closed_msg', 'iframe_enabled', 'action_by'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -168,7 +170,7 @@ class FormController extends Controller
|
||||
|
||||
//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) {
|
||||
if (!$form->created_by !== $user_id && !auth()->user()->hasRole([RoleEnum::ADMIN->value, RoleEnum::SUPERVISOR->value])) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Enums\User\RoleEnum;
|
||||
use App\Form;
|
||||
use App\FormData;
|
||||
use App\Mail\FormSubmitted;
|
||||
@@ -10,6 +11,7 @@ use Carbon\Carbon;
|
||||
use DB;
|
||||
use DNS1D;
|
||||
use DNS2D;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
@@ -41,15 +43,15 @@ class FormDataController extends Controller
|
||||
|
||||
//Verification for google reCaptcha
|
||||
if (isset($is_enable_recaptcha) && $is_enable_recaptcha == 1) {
|
||||
if (isset($form_data['data']['g-recaptcha-response']) && ! empty($form_data['data']['g-recaptcha-response'])) {
|
||||
if (isset($form_data['data']['g-recaptcha-response']) && !empty($form_data['data']['g-recaptcha-response'])) {
|
||||
//your site secret key
|
||||
$secret_key = $form->schema['settings']['recaptcha']['secret_key'];
|
||||
//get verify response data
|
||||
$verify_response = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret_key.'&response='.$form_data['data']['g-recaptcha-response']);
|
||||
$verify_response = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=' . $secret_key . '&response=' . $form_data['data']['g-recaptcha-response']);
|
||||
|
||||
$response_data = json_decode($verify_response);
|
||||
|
||||
if (! $response_data->success) {
|
||||
if (!$response_data->success) {
|
||||
$msg = 'reCaptcha error';
|
||||
|
||||
return $this->respondWithError($msg);
|
||||
@@ -76,22 +78,33 @@ class FormDataController extends Controller
|
||||
|
||||
//if token, get existing data for token
|
||||
$existing_token_form_data = [];
|
||||
if (! empty($request->get('token'))) {
|
||||
if (!empty($request->get('token'))) {
|
||||
$existing_token_form_data = FormData::where('form_id', $form->id)
|
||||
->where('token', $request->get('token'))
|
||||
->when(
|
||||
$request->get('token') === 'null',
|
||||
function (Builder $builder) {
|
||||
$builder->whereNull('token');
|
||||
}
|
||||
)
|
||||
->when(
|
||||
$request->get('token') !== 'null',
|
||||
function (Builder $builder) use ($request) {
|
||||
$builder->where('token', $request->get('token'));
|
||||
}
|
||||
)
|
||||
->findOrFail($request->get('form_data_id'));
|
||||
}
|
||||
|
||||
//if draft(incomplete) generate token & edit form url for user
|
||||
if ($form_data['status'] == 'incomplete') {
|
||||
if (! empty($request->get('token'))) {
|
||||
if (!empty($request->get('token'))) {
|
||||
$form_data['token'] = $existing_token_form_data['token'];
|
||||
} else {
|
||||
$form_data['token'] = Str::random(4);
|
||||
}
|
||||
|
||||
$post_submit_action['notification']['token'] = $form_data['token'];
|
||||
$post_submit_action['notification']['form_editable_url'] = action([\App\Http\Controllers\FormController::class, 'show'], ['form' => $form->slug ?: $form_id]).'?token='.$form_data['token'];
|
||||
$post_submit_action['notification']['form_editable_url'] = action([\App\Http\Controllers\FormController::class, 'show'], ['form' => $form->slug ?: $form_id]) . '?token=' . $form_data['token'];
|
||||
} else {
|
||||
//if form submission status:complete, set token as null & get form view url
|
||||
$post_submit_action['notification']['view_form_url'] = action([\App\Http\Controllers\FormController::class, 'show'], ['form' => $form->slug ?: $form_id]);
|
||||
@@ -112,20 +125,31 @@ class FormDataController extends Controller
|
||||
$form_data['submission_ref'] = $number;
|
||||
|
||||
if (isset($form->schema['settings']['form_submision_ref']['prefix'])) {
|
||||
$form_data['submission_ref'] = $form->schema['settings']['form_submision_ref']['prefix'].$form_data['submission_ref'];
|
||||
$form_data['submission_ref'] = $form->schema['settings']['form_submision_ref']['prefix'] . $form_data['submission_ref'];
|
||||
}
|
||||
|
||||
if (isset($form->schema['settings']['form_submision_ref']['suffix'])) {
|
||||
$form_data['submission_ref'] = $form_data['submission_ref'].$form->schema['settings']['form_submision_ref']['suffix'];
|
||||
$form_data['submission_ref'] = $form_data['submission_ref'] . $form->schema['settings']['form_submision_ref']['suffix'];
|
||||
}
|
||||
|
||||
$form_data['data']['submission_ref'] = $form_data['submission_ref'];
|
||||
}
|
||||
|
||||
//if token exist update the submitted data
|
||||
if (! empty($request->get('token'))) {
|
||||
if (!empty($request->get('token'))) {
|
||||
$submission = FormData::where('form_id', $form->id)
|
||||
->where('token', $request->get('token'))
|
||||
->when(
|
||||
$request->get('token') === 'null',
|
||||
function (Builder $builder) {
|
||||
$builder->whereNull('token');
|
||||
}
|
||||
)
|
||||
->when(
|
||||
$request->get('token') !== 'null',
|
||||
function (Builder $builder) use ($request) {
|
||||
$builder->where('token', $request->get('token'));
|
||||
}
|
||||
)
|
||||
->findOrFail($request->get('form_data_id'));
|
||||
|
||||
$submission->data = $form_data['data'];
|
||||
@@ -141,7 +165,7 @@ class FormDataController extends Controller
|
||||
|
||||
//if submission is draft(incomplete) then return form_data_id & saved draft msg
|
||||
if (isset($form_data['data']['status']) && $form_data['data']['status'] == 'incomplete') {
|
||||
$post_submit_action['notification']['form_data_id'] = ! empty($request->get('form_data_id')) ? $request->get('form_data_id') : $submission->id;
|
||||
$post_submit_action['notification']['form_data_id'] = !empty($request->get('form_data_id')) ? $request->get('form_data_id') : $submission->id;
|
||||
$post_submit_action['notification']['success_msg'] = __('messages.draft_saved');
|
||||
}
|
||||
|
||||
@@ -152,7 +176,7 @@ class FormDataController extends Controller
|
||||
}
|
||||
|
||||
//check for demo environment & form is complete or not
|
||||
if (! $this->isDemo() && $form_data['status'] == 'complete') {
|
||||
if (!$this->isDemo() && $form_data['status'] == 'complete') {
|
||||
//Send notification for form
|
||||
$emailConfig = $form->schema['emailConfig'];
|
||||
|
||||
@@ -175,7 +199,7 @@ class FormDataController extends Controller
|
||||
}
|
||||
|
||||
//get signature attachments
|
||||
if (! empty($signature_attachments)) {
|
||||
if (!empty($signature_attachments)) {
|
||||
foreach ($signature_attachments as $index => $signature) {
|
||||
$signature_attachments[$index]['base_64_uri'] = $form_data['data'][$signature['field_name']];
|
||||
}
|
||||
@@ -185,11 +209,11 @@ class FormDataController extends Controller
|
||||
if ((isset($emailConfig['email']['attach_pdf']) && $emailConfig['email']['attach_pdf']) || (isset($emailConfig['auto_response']['attach_pdf']) && $emailConfig['auto_response']['attach_pdf'])) {
|
||||
$id = $submission->id;
|
||||
$pdf = $this->__generatePdf($id);
|
||||
$pdf_name = Str::slug($form->name, '-').'.pdf';
|
||||
$pdf_name = Str::slug($form->name, '-') . '.pdf';
|
||||
}
|
||||
|
||||
//Set user defined SMTP : use_system_smtp = User SMTP
|
||||
if (! empty($emailConfig['email']['enable']) && $emailConfig['smtp']['use_system_smtp']) {
|
||||
if (!empty($emailConfig['email']['enable']) && $emailConfig['smtp']['use_system_smtp']) {
|
||||
//User SMTP
|
||||
$form = Form::with('createdBy')->findOrFail($form_id);
|
||||
$smtp = $form->createdBy->settings['smtp'];
|
||||
@@ -216,20 +240,20 @@ class FormDataController extends Controller
|
||||
}
|
||||
|
||||
//Form submission Notification
|
||||
if (! empty($emailConfig['email']['enable'])) {
|
||||
if (!empty($emailConfig['email']['enable'])) {
|
||||
|
||||
//Replace the tags with values.
|
||||
$temp = $this->_replaceTags(
|
||||
$form_data['data'],
|
||||
['subject' => $emailConfig['email']['subject'],
|
||||
'body' => $emailConfig['email']['body'], ],
|
||||
'body' => $emailConfig['email']['body'],],
|
||||
$form['schema']['form']
|
||||
);
|
||||
$emailConfig['email']['subject'] = $temp['subject'];
|
||||
$emailConfig['email']['body'] = $temp['body'];
|
||||
|
||||
//Attachments
|
||||
if (! empty($attachments)) {
|
||||
if (!empty($attachments)) {
|
||||
$emailConfig['email']['attachment'] = $this->getAttachments($attachments, $form_data['data']);
|
||||
}
|
||||
|
||||
@@ -240,8 +264,8 @@ class FormDataController extends Controller
|
||||
|
||||
if (
|
||||
isset($emailConfig['email']['reply_to_email']) &&
|
||||
! empty($emailConfig['email']['reply_to_email']) &&
|
||||
! empty($form_data['data'][$emailConfig['email']['reply_to_email']])
|
||||
!empty($emailConfig['email']['reply_to_email']) &&
|
||||
!empty($form_data['data'][$emailConfig['email']['reply_to_email']])
|
||||
) {
|
||||
$emailConfig['email']['reply_to'] = $form_data['data'][$emailConfig['email']['reply_to_email']];
|
||||
}
|
||||
@@ -249,11 +273,11 @@ class FormDataController extends Controller
|
||||
//get barcode & qr code attachment
|
||||
if (
|
||||
isset($form_data['data']['submission_ref']) &&
|
||||
! empty($form_data['data']['submission_ref'])
|
||||
!empty($form_data['data']['submission_ref'])
|
||||
) {
|
||||
$ref_num = $form_data['data']['submission_ref'];
|
||||
$emailConfig['email']['barcode'][$ref_num.'_barcode.png'] = $this->_generateSubmissionRefBarCode($form->schema, $form_data['data'], 'bar_code');
|
||||
$emailConfig['email']['barcode'][$ref_num.'_qrcode.png'] = $this->_generateSubmissionRefBarCode($form->schema, $form_data['data'], 'qr_code');
|
||||
$emailConfig['email']['barcode'][$ref_num . '_barcode.png'] = $this->_generateSubmissionRefBarCode($form->schema, $form_data['data'], 'bar_code');
|
||||
$emailConfig['email']['barcode'][$ref_num . '_qrcode.png'] = $this->_generateSubmissionRefBarCode($form->schema, $form_data['data'], 'qr_code');
|
||||
}
|
||||
Mail::send(new FormSubmitted($emailConfig['email']));
|
||||
}
|
||||
@@ -265,7 +289,7 @@ class FormDataController extends Controller
|
||||
$temp = $this->_replaceTags(
|
||||
$form_data['data'],
|
||||
['subject' => $emailConfig['auto_response']['subject'],
|
||||
'body' => $emailConfig['auto_response']['body'], ],
|
||||
'body' => $emailConfig['auto_response']['body'],],
|
||||
$form['schema']['form']
|
||||
);
|
||||
$emailConfig['auto_response']['subject'] = $temp['subject'];
|
||||
@@ -274,12 +298,12 @@ class FormDataController extends Controller
|
||||
//"TO" field is dynamic input value.
|
||||
$emailConfig['auto_response']['to'] = isset($form_data['data'][$emailConfig['auto_response']['to']]) ? $form_data['data'][$emailConfig['auto_response']['to']] : null;
|
||||
|
||||
if (! empty($attachments)) {
|
||||
if (!empty($attachments)) {
|
||||
$emailConfig['auto_response']['attachment'] = $this->getAttachments($attachments, $form_data['data']);
|
||||
}
|
||||
|
||||
//get signature attachments
|
||||
if (! empty($signature_attachments)) {
|
||||
if (!empty($signature_attachments)) {
|
||||
foreach ($signature_attachments as $index => $signature) {
|
||||
$signature_attachments[$index]['base_64_uri'] = $form_data['data'][$signature['field_name']];
|
||||
}
|
||||
@@ -294,27 +318,27 @@ class FormDataController extends Controller
|
||||
//get barcode & qr code attachment for response
|
||||
if (
|
||||
isset($form_data['data']['submission_ref']) &&
|
||||
! empty($form_data['data']['submission_ref'])
|
||||
!empty($form_data['data']['submission_ref'])
|
||||
) {
|
||||
$ref_num = $form_data['data']['submission_ref'];
|
||||
$emailConfig['auto_response']['barcode'][$ref_num.'_barcode.png'] = $this->_generateSubmissionRefBarCode($form->schema, $form_data['data'], 'bar_code');
|
||||
$emailConfig['auto_response']['barcode'][$ref_num.'_qrcode.png'] = $this->_generateSubmissionRefBarCode($form->schema, $form_data['data'], 'qr_code');
|
||||
$emailConfig['auto_response']['barcode'][$ref_num . '_barcode.png'] = $this->_generateSubmissionRefBarCode($form->schema, $form_data['data'], 'bar_code');
|
||||
$emailConfig['auto_response']['barcode'][$ref_num . '_qrcode.png'] = $this->_generateSubmissionRefBarCode($form->schema, $form_data['data'], 'qr_code');
|
||||
}
|
||||
|
||||
if (! empty($emailConfig['auto_response']['to'])) {
|
||||
if (!empty($emailConfig['auto_response']['to'])) {
|
||||
Mail::send(new FormSubmitted($emailConfig['auto_response']));
|
||||
}
|
||||
}
|
||||
|
||||
//Send data to mailchimp if enabled.
|
||||
if (! empty($form->mailchimp_details['is_enable']) && $form->mailchimp_details['is_enable'] == 1) {
|
||||
if (!empty($form->mailchimp_details['is_enable']) && $form->mailchimp_details['is_enable'] == 1) {
|
||||
|
||||
//Set config details.
|
||||
config(['newsletter.apiKey' => $form->mailchimp_details['api_key']]);
|
||||
config(['newsletter.lists.subscribers.id' => $form->mailchimp_details['list_id']]);
|
||||
|
||||
//Subscribe if email is set.
|
||||
if (isset($form_data['data'][$form->mailchimp_details['email_field']]) && ! empty($form_data['data'][$form->mailchimp_details['email_field']])) {
|
||||
if (isset($form_data['data'][$form->mailchimp_details['email_field']]) && !empty($form_data['data'][$form->mailchimp_details['email_field']])) {
|
||||
|
||||
//Get dynamic field from form input.
|
||||
$email = $form_data['data'][$form->mailchimp_details['email_field']];
|
||||
@@ -322,7 +346,7 @@ class FormDataController extends Controller
|
||||
//explode name to get first & last name
|
||||
$name = explode(' ', $form_data['data'][$form->mailchimp_details['name_field']], 2);
|
||||
$fname = $name[0];
|
||||
$lname = ! empty($name[1]) ? $name[1] : '';
|
||||
$lname = !empty($name[1]) ? $name[1] : '';
|
||||
if ($form->mailchimp_details['status'] == 'subscribe') {
|
||||
Newsletter::subscribe($email, ['FNAME' => $fname, 'LNAME' => $lname]);
|
||||
} elseif ($form->mailchimp_details['status'] == 'subscribe_pending') {
|
||||
@@ -349,11 +373,11 @@ class FormDataController extends Controller
|
||||
{
|
||||
$acelle_mail_info = $form->acelle_mail_info;
|
||||
if (
|
||||
! empty($acelle_mail_info) &&
|
||||
!empty($acelle_mail_info) &&
|
||||
$acelle_mail_info['is_enable'] &&
|
||||
! empty($acelle_mail_info['api_token']) &&
|
||||
! empty($acelle_mail_info['list_id']) &&
|
||||
! empty($acelle_mail_info['campaign_fields'])
|
||||
!empty($acelle_mail_info['api_token']) &&
|
||||
!empty($acelle_mail_info['list_id']) &&
|
||||
!empty($acelle_mail_info['campaign_fields'])
|
||||
) {
|
||||
$args = [
|
||||
'api_token' => trim($acelle_mail_info['api_token']),
|
||||
@@ -361,12 +385,12 @@ class FormDataController extends Controller
|
||||
];
|
||||
|
||||
foreach ($acelle_mail_info['campaign_fields'] as $field) {
|
||||
if (! empty($field['key']) && ! empty($field['param_field_name']) && ! empty($data[$field['param_field_name']])) {
|
||||
if (!empty($field['key']) && !empty($field['param_field_name']) && !empty($data[$field['param_field_name']])) {
|
||||
$args[$field['key']] = is_array($data[$field['param_field_name']]) ? implode(', ', $data[$field['param_field_name']]) : strip_tags($data[$field['param_field_name']]);
|
||||
}
|
||||
}
|
||||
|
||||
$request_uri = config('constants.ACELLE_MAIL_API').'/subscribers'.'?'.http_build_query($args);
|
||||
$request_uri = config('constants.ACELLE_MAIL_API') . '/subscribers' . '?' . http_build_query($args);
|
||||
|
||||
$curl = curl_init();
|
||||
curl_setopt($curl, CURLOPT_URL, $request_uri);
|
||||
@@ -385,8 +409,8 @@ class FormDataController extends Controller
|
||||
if (
|
||||
isset($webhook['is_enable']) &&
|
||||
$webhook['is_enable'] &&
|
||||
! empty($webhook['url']) &&
|
||||
! empty($webhook['secret_key'])
|
||||
!empty($webhook['url']) &&
|
||||
!empty($webhook['secret_key'])
|
||||
) {
|
||||
|
||||
//get playload to send
|
||||
@@ -407,16 +431,16 @@ class FormDataController extends Controller
|
||||
|
||||
protected function _getBarCodeForRefNum($ref_num = '', $type = 'qr_code', $is_img_format = false)
|
||||
{
|
||||
if (! empty($ref_num) && in_array($type, ['bar_code'])) {
|
||||
$bar_code = (string)Image::canvas(305,150,"#fff")->insert(base64_decode(DNS1D::getBarcodePNG($ref_num, 'C128', 2.5,100,array(27,41,75), true)), 'center')->encode('data-url');
|
||||
if (!empty($ref_num) && in_array($type, ['bar_code'])) {
|
||||
$bar_code = (string)Image::canvas(305, 150, "#fff")->insert(base64_decode(DNS1D::getBarcodePNG($ref_num, 'C128', 2.5, 100, array(27, 41, 75), true)), 'center')->encode('data-url');
|
||||
|
||||
return $is_img_format ? '<img src="'.$bar_code.'" alt="barcode"/>' : $bar_code;
|
||||
return $is_img_format ? '<img src="' . $bar_code . '" alt="barcode"/>' : $bar_code;
|
||||
}
|
||||
|
||||
if (! empty($ref_num) && in_array($type, ['qr_code'])) {
|
||||
$qr_code = (string)Image::canvas(300,300,"#fff")->insert(base64_decode(DNS2D::getBarcodePNG($ref_num, 'QRCODE', 12,12,array(27,41,75), true)), 'center')->encode('data-url');
|
||||
if (!empty($ref_num) && in_array($type, ['qr_code'])) {
|
||||
$qr_code = (string)Image::canvas(300, 300, "#fff")->insert(base64_decode(DNS2D::getBarcodePNG($ref_num, 'QRCODE', 12, 12, array(27, 41, 75), true)), 'center')->encode('data-url');
|
||||
|
||||
return $is_img_format ? '<img src="'.$qr_code.'" alt="qrcode"/>' : $qr_code;
|
||||
return $is_img_format ? '<img src="' . $qr_code . '" alt="qrcode"/>' : $qr_code;
|
||||
}
|
||||
|
||||
return '';
|
||||
@@ -431,7 +455,7 @@ class FormDataController extends Controller
|
||||
foreach ($strings as $key => $string) {
|
||||
//If value is array(like for multiselect or checkbox) then implode it.
|
||||
$value = is_array($value) ? implode(',', $value) : $value;
|
||||
$string = str_replace('__'.$name.'__', $value, $string);
|
||||
$string = str_replace('__' . $name . '__', $value, $string);
|
||||
|
||||
//replace qr/bar code
|
||||
$string = str_replace('__submission_ref_qr_code__', $ref_num_qr_code, $string);
|
||||
@@ -448,13 +472,62 @@ class FormDataController extends Controller
|
||||
$user_id = $request->user()->id;
|
||||
|
||||
$form = Form::findOrFail($form_id);
|
||||
$data = FormData::where('form_id', $form_id)
|
||||
->orderBy('created_at', 'desc')
|
||||
->get();
|
||||
$data = FormData::query()
|
||||
->where('form_id', $form_id)
|
||||
->orderBy('created_at', 'desc')
|
||||
->get()
|
||||
->filter(function (FormData $formData) use ($request) {
|
||||
if (is_array($formData->data)) {
|
||||
$date = strtotime(
|
||||
array_values(
|
||||
array_filter($formData->data, fn($item) => is_string($item) && strtotime($item))
|
||||
)[0]
|
||||
);
|
||||
}
|
||||
|
||||
$date = Carbon::createFromTimestamp($date)->toDateString();
|
||||
$isValidStartDate = $request->filled('start_date') ?
|
||||
$request->get('start_date') <= $date :
|
||||
Carbon::now()->subDays(7)->toDateString() <= $date;
|
||||
$isValidEndDate = $request->filled('end_date') ?
|
||||
$request->get('end_date') >= $date :
|
||||
Carbon::now()->toDateString() >= $date;
|
||||
|
||||
return $isValidStartDate && $isValidEndDate;
|
||||
});
|
||||
|
||||
// ->when(
|
||||
// $request->filled('start_date'),
|
||||
// function (Builder $builder) use ($request) {
|
||||
// $startDate = Carbon::createFromFormat('Y-m-d', $request->get('start_date'));
|
||||
//
|
||||
// $builder->where('created_at', '>=', $startDate->toDateTimeString());
|
||||
// }
|
||||
// )
|
||||
// ->when(
|
||||
// $request->filled('end_date'),
|
||||
// function (Builder $builder) use ($request) {
|
||||
// $endDate = Carbon::createFromFormat('Y-m-d', $request->get('end_date'));
|
||||
//
|
||||
// $builder->where('created_at', '<=', $endDate->toDateTimeString());
|
||||
// }
|
||||
// )
|
||||
// ->when(
|
||||
// !$request->filled('start_date'),
|
||||
// function (Builder $builder) {
|
||||
// $builder->where('created_at', '>=', Carbon::now()->subDays(7)->toDateTimeString());
|
||||
// }
|
||||
// )
|
||||
// ->when(
|
||||
// !$request->filled('end_date'),
|
||||
// function (Builder $builder) {
|
||||
// $builder->where('created_at', '<=', Carbon::now()->toDateTimeString());
|
||||
// }
|
||||
// );
|
||||
|
||||
//check permission if user is not a creator
|
||||
$has_permission = ($form->created_by != $user_id) ? $this->doUserHavePermission($form->id, 'can_view_data') : true;
|
||||
if (! $has_permission) {
|
||||
if (!$form->created_by !== $user_id && !auth()->user()->hasRole([RoleEnum::SUPERVISOR->value, RoleEnum::ADMIN->value]) && !$has_permission) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
@@ -469,7 +542,7 @@ class FormDataController extends Controller
|
||||
'comments' => function ($q) {
|
||||
$q->latest();
|
||||
},
|
||||
'comments.commentedBy', ])->findOrFail($id);
|
||||
'comments.commentedBy',])->findOrFail($id);
|
||||
|
||||
return view('form_data.view_form_data')
|
||||
->with(compact('form_data'));
|
||||
@@ -516,11 +589,11 @@ class FormDataController extends Controller
|
||||
{
|
||||
$user = request()->user();
|
||||
$form = Form::with('data')
|
||||
->findOrFail($id);
|
||||
->findOrFail($id);
|
||||
|
||||
//check permission if user is not a creator
|
||||
$has_permission = ($form->created_by != $user->id) ? $this->doUserHavePermission($form->id, 'can_view_data') : true;
|
||||
if (! $has_permission) {
|
||||
if (!$has_permission) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
@@ -571,11 +644,11 @@ class FormDataController extends Controller
|
||||
private function __getVisitorsReport($form_id, $chart_type)
|
||||
{
|
||||
$query = Visitor::where('form_id', $form_id)
|
||||
->whereBetween(DB::raw('date(created_at)'), [Carbon::now()->subDays(30), Carbon::now()])
|
||||
->select(
|
||||
DB::raw('count(form_id) as total_visits'),
|
||||
DB::raw('SUM(IF(is_unique = 1,1,0)) as unique_visits')
|
||||
);
|
||||
->whereBetween(DB::raw('date(created_at)'), [Carbon::now()->subDays(30), Carbon::now()])
|
||||
->select(
|
||||
DB::raw('count(form_id) as total_visits'),
|
||||
DB::raw('SUM(IF(is_unique = 1,1,0)) as unique_visits')
|
||||
);
|
||||
|
||||
if ($chart_type == 'line') {
|
||||
$query->addSelect(DB::raw('Date(created_at) as date'))
|
||||
@@ -619,8 +692,8 @@ class FormDataController extends Controller
|
||||
}
|
||||
//if date match store values
|
||||
if ($visitor_date == $date) {
|
||||
$total_visits_in_last_30_days[] = (float) $total_visits;
|
||||
$unique_visits_in_last_30_days[] = (float) $unique_visits;
|
||||
$total_visits_in_last_30_days[] = (float)$total_visits;
|
||||
$unique_visits_in_last_30_days[] = (float)$unique_visits;
|
||||
} else {
|
||||
$total_visits_in_last_30_days[] = 0;
|
||||
$unique_visits_in_last_30_days[] = 0;
|
||||
@@ -646,7 +719,7 @@ class FormDataController extends Controller
|
||||
//get referrer as key value
|
||||
$referrers = [];
|
||||
foreach ($visitors as $key => $visitor) {
|
||||
if (! empty($visitor->referrer)) {
|
||||
if (!empty($visitor->referrer)) {
|
||||
$referrers[] = ['name' => $visitor->referrer, 'y' => $visitor->total_visits];
|
||||
} else {
|
||||
$referrers[] = ['name' => __('messages.direct_visits'), 'y' => $visitor->total_visits];
|
||||
@@ -678,7 +751,7 @@ class FormDataController extends Controller
|
||||
{
|
||||
$formData = FormData::with(['form'])->find($id);
|
||||
|
||||
if (! (auth()->user()->can('superadmin') || $this->checkIfUserIsCreatorOfGivenForm($formData->form->id) || $this->doUserHavePermission($formData->form->id, 'can_view_data'))) {
|
||||
if (!(auth()->user()->can('superadmin') || $this->checkIfUserIsCreatorOfGivenForm($formData->form->id) || $this->doUserHavePermission($formData->form->id, 'can_view_data'))) {
|
||||
abort(403, 'Unauthorized action.');
|
||||
}
|
||||
|
||||
@@ -690,23 +763,23 @@ class FormDataController extends Controller
|
||||
public function getEditformData($id_or_slug, $data_id)
|
||||
{
|
||||
$form = Form::where('id', $id_or_slug)
|
||||
->orWhere('slug', $id_or_slug)
|
||||
->first();
|
||||
->orWhere('slug', $id_or_slug)
|
||||
->first();
|
||||
|
||||
if (empty($form)) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
//if submitted data id available get submitted data
|
||||
if (! empty($data_id)) {
|
||||
if (!empty($data_id)) {
|
||||
$form->load(['data' => function ($query) use ($data_id, $form) {
|
||||
$query->where('id', $data_id)
|
||||
->where('form_id', $form->id);
|
||||
->where('form_id', $form->id);
|
||||
}]);
|
||||
}
|
||||
|
||||
$nav = false;
|
||||
$action_by = 'admin';
|
||||
$action_by = auth()->user()->roles->first()->name;
|
||||
|
||||
return view('form.show')
|
||||
->with(compact('form', 'nav', 'action_by'));
|
||||
@@ -719,9 +792,9 @@ class FormDataController extends Controller
|
||||
$form_data = [];
|
||||
parse_str(request()->get('form_data'), $form_data['data']);
|
||||
|
||||
if (! empty($data_id)) {
|
||||
if (!empty($data_id)) {
|
||||
$existing_data = FormData::where('form_id', $form->id)
|
||||
->findOrFail($data_id);
|
||||
->findOrFail($data_id);
|
||||
|
||||
$existing_data->data = $form_data['data'];
|
||||
$existing_data->save();
|
||||
@@ -742,7 +815,7 @@ class FormDataController extends Controller
|
||||
$header = '';
|
||||
if (
|
||||
isset($form_data->form['schema']['settings']['pdf_design']) &&
|
||||
! empty($form_data->form['schema']['settings']['pdf_design']['header'])
|
||||
!empty($form_data->form['schema']['settings']['pdf_design']['header'])
|
||||
) {
|
||||
$form_name = $form_data->form->name;
|
||||
$submission_date = Carbon::parse($form_data->created_at)->format(config('constants.APP_DATE_FORMAT', 'Y-m-d'));
|
||||
@@ -756,8 +829,8 @@ class FormDataController extends Controller
|
||||
protected function _generateSubmissionMsgHtml($form, $data)
|
||||
{
|
||||
$submission_msg = View::make('form_data.partials.submission_msg')
|
||||
->with(compact('form', 'data'))
|
||||
->render();
|
||||
->with(compact('form', 'data'))
|
||||
->render();
|
||||
|
||||
return $submission_msg;
|
||||
}
|
||||
@@ -767,18 +840,18 @@ class FormDataController extends Controller
|
||||
$string = '';
|
||||
$array = [];
|
||||
if (
|
||||
! in_array($schema['settings']['notification']['post_submit_action'], ['redirect']) &&
|
||||
!in_array($schema['settings']['notification']['post_submit_action'], ['redirect']) &&
|
||||
isset($schema['settings']['is_qr_code_enabled']) &&
|
||||
$schema['settings']['is_qr_code_enabled']
|
||||
) {
|
||||
foreach ($schema['form'] as $key => $element) {
|
||||
if (
|
||||
! in_array($element['type'], ['heading', 'html_text', 'hr', 'signature', 'file_upload'])
|
||||
!in_array($element['type'], ['heading', 'html_text', 'hr', 'signature', 'file_upload'])
|
||||
) {
|
||||
if (
|
||||
isset($form_data[$element['name']]) &&
|
||||
! is_array($form_data[$element['name']]) &&
|
||||
! empty($form_data[$element['name']])
|
||||
!is_array($form_data[$element['name']]) &&
|
||||
!empty($form_data[$element['name']])
|
||||
) {
|
||||
//check data format & set data
|
||||
if (
|
||||
@@ -787,12 +860,12 @@ class FormDataController extends Controller
|
||||
) {
|
||||
$array[$element['label']] = strip_tags($form_data[$element['name']]);
|
||||
} else {
|
||||
$string .= $element['label'].': '.strip_tags($form_data[$element['name']]).', ';
|
||||
$string .= $element['label'] . ': ' . strip_tags($form_data[$element['name']]) . ', ';
|
||||
}
|
||||
} elseif (
|
||||
isset($form_data[$element['name']]) &&
|
||||
is_array($form_data[$element['name']]) &&
|
||||
! empty($form_data[$element['name']])
|
||||
!empty($form_data[$element['name']])
|
||||
) {
|
||||
//check data format & set data
|
||||
if (
|
||||
@@ -801,7 +874,7 @@ class FormDataController extends Controller
|
||||
) {
|
||||
$array[$element['label']] = implode(', ', $form_data[$element['name']]);
|
||||
} else {
|
||||
$string .= $element['label'].': '.implode(', ', $form_data[$element['name']]).', ';
|
||||
$string .= $element['label'] . ': ' . implode(', ', $form_data[$element['name']]) . ', ';
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -809,7 +882,7 @@ class FormDataController extends Controller
|
||||
if (
|
||||
in_array($element['type'], ['file_upload']) &&
|
||||
isset($form_data[$element['name']]) &&
|
||||
! empty($form_data[$element['name']])
|
||||
!empty($form_data[$element['name']])
|
||||
) {
|
||||
//convert file name to an array
|
||||
$file = implode($form_data[$element['name']]);
|
||||
@@ -817,7 +890,7 @@ class FormDataController extends Controller
|
||||
|
||||
$file_urls = [];
|
||||
foreach ($files as $key => $value) {
|
||||
$file_urls[] = \Storage::url(config('constants.doc_path').'/'.$value);
|
||||
$file_urls[] = \Storage::url(config('constants.doc_path') . '/' . $value);
|
||||
}
|
||||
|
||||
//check data format & set data
|
||||
@@ -827,7 +900,7 @@ class FormDataController extends Controller
|
||||
) {
|
||||
$array[$element['label']] = implode(', ', $file_urls);
|
||||
} else {
|
||||
$string .= $element['label'].': '.implode(', ', $file_urls).', ';
|
||||
$string .= $element['label'] . ': ' . implode(', ', $file_urls) . ', ';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,12 +2,14 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Enums\User\RoleEnum;
|
||||
use App\Form;
|
||||
use App\Mail\TestEmail;
|
||||
use App\PackageSubscription;
|
||||
use App\UserForm;
|
||||
use Carbon\Carbon;
|
||||
use DB;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Yajra\DataTables\Facades\DataTables;
|
||||
@@ -33,115 +35,139 @@ class HomeController extends Controller
|
||||
{
|
||||
$user = request()->user();
|
||||
|
||||
if (auth()->user()->hasRole(RoleEnum::SUPERVISOR->value, 'web')) {
|
||||
$forms = Form::query()
|
||||
->withCount('data')
|
||||
->where('is_template', 0)
|
||||
->get();
|
||||
} else {
|
||||
$forms = Form::query()
|
||||
->withCount('data')
|
||||
->where('is_template', 0)
|
||||
->where('created_by', $user->id)
|
||||
->groupBy('id');
|
||||
}
|
||||
|
||||
if (request()->ajax()) {
|
||||
$subscription = PackageSubscription::activeSubscription($user->id);
|
||||
|
||||
$forms = Form::leftJoin('form_data', 'forms.id', '=', 'form_data.form_id')
|
||||
->select('name', 'slug', 'description', 'forms.created_at', 'forms.id', DB::raw('COUNT(form_data.form_id) as data_count'), 'schema')
|
||||
->where('is_template', 0)
|
||||
->where('created_by', $user->id)
|
||||
->groupBy('id');
|
||||
if (auth()->user()->hasRole(RoleEnum::SUPERVISOR->value, 'web')) {
|
||||
$forms = Form::query()
|
||||
->withCount('data')
|
||||
->where('is_template', 0)
|
||||
->get();
|
||||
} else {
|
||||
$forms = Form::query()
|
||||
->withCount('data')
|
||||
->where('is_template', 0)
|
||||
->where('created_by', $user->id)
|
||||
->get();
|
||||
}
|
||||
|
||||
return DataTables::of($forms)
|
||||
->addColumn(
|
||||
'action',
|
||||
function (Form $form) use ($subscription, $user) {
|
||||
$action = '';
|
||||
->addColumn(
|
||||
'action',
|
||||
function (Form $form) use ($subscription, $user) {
|
||||
$action = '';
|
||||
|
||||
if (! empty($form->schema)) {
|
||||
$action = '<a href="'.action([\App\Http\Controllers\FormController::class, 'show'], ['form' => $form->slug ?: $form->id]).'"'.'
|
||||
if (!empty($form->schema)) {
|
||||
$action = '<a href="' . action([\App\Http\Controllers\FormController::class, 'show'], ['form' => $form->slug ?: $form->id]) . '"' . '
|
||||
target="_blank"
|
||||
class="btn btn-sm btn-info m-1" data-toggle="tooltip" title="'.__('messages.view').'">
|
||||
class="btn btn-sm btn-info m-1" data-toggle="tooltip" title="' . __('messages.view') . '">
|
||||
<i class="fa fa-eye" aria-hidden="true"></i>
|
||||
</a>';
|
||||
}
|
||||
}
|
||||
|
||||
$action .= '<a href="'.action([\App\Http\Controllers\FormController::class, 'edit'], ['form' => $form->id]).'"'.'
|
||||
class="btn btn-sm btn-warning m-1" data-toggle="tooltip" title="'.__('messages.edit').'">
|
||||
$action .= '<a href="' . action([\App\Http\Controllers\FormController::class, 'edit'], ['form' => $form->id]) . '"' . '
|
||||
class="btn btn-sm btn-warning m-1" data-toggle="tooltip" title="' . __('messages.edit') . '">
|
||||
<i class="fa fa-edit" aria-hidden="true"></i>
|
||||
</a>';
|
||||
|
||||
$action .= '<button type="button" data-href="'.action([\App\Http\Controllers\FormController::class, 'destroy'], ['form' => $form->id]).'"'.' class="btn btn-sm btn-danger delete_form m-1" data-toggle="tooltip"
|
||||
title="'.__('messages.delete').'">
|
||||
if (auth()->user()->hasRole(RoleEnum::SUPERVISOR->value) || auth()->user()->id === $form->created_by) {
|
||||
$action .= '<button type="button" data-href="' . action([\App\Http\Controllers\FormController::class, 'destroy'], ['form' => $form->id]) . '"' . ' class="btn btn-sm btn-danger delete_form m-1" data-toggle="tooltip"
|
||||
title="' . __('messages.delete') . '">
|
||||
<i class="fa fa-trash" aria-hidden="true"></i>
|
||||
</button>';
|
||||
}
|
||||
|
||||
$action .= '<button type="button" data-href="'.action([\App\Http\Controllers\FormController::class, 'copyForm'], ['id' => $form->id]).'"'.' class="btn btn-sm btn-primary copy_form m-1" data-toggle="tooltip"
|
||||
title="'.__('messages.copy_this_form').'">
|
||||
if (auth()->user()->hasRole(RoleEnum::SUPERVISOR->value) || auth()->user()->id === $form->created_by) {
|
||||
$action .= '<button type="button" data-href="' . action([\App\Http\Controllers\FormController::class, 'copyForm'], ['id' => $form->id]) . '"' . ' class="btn btn-sm btn-primary copy_form m-1" data-toggle="tooltip"
|
||||
title="' . __('messages.copy_this_form') . '">
|
||||
<i class="fas fa-copy"></i>
|
||||
</button>';
|
||||
}
|
||||
|
||||
$action .= '<button type="button" data-href="'.action([\App\Http\Controllers\FormController::class, 'generateWidget'], ['id' => $form->id]).'"'.' class="btn btn-sm btn-info generate_widget m-1" data-toggle="tooltip"
|
||||
title="'.__('messages.widget').'">
|
||||
if (auth()->user()->hasRole(RoleEnum::SUPERVISOR->value) || auth()->user()->id === $form->created_by) {
|
||||
$action .= '<button type="button" data-href="' . action([\App\Http\Controllers\FormController::class, 'generateWidget'], ['id' => $form->id]) . '"' . ' class="btn btn-sm btn-info generate_widget m-1" data-toggle="tooltip"
|
||||
title="' . __('messages.widget') . '">
|
||||
<i class="fa fa-random" aria-hidden="true"></i>
|
||||
</button>';
|
||||
}
|
||||
|
||||
$action .= '<a href="'.action([\App\Http\Controllers\FormDataController::class, 'show'], ['id' => $form->id]).'"'.'"
|
||||
target="_blank"
|
||||
class="btn btn-sm btn-success m-1" data-toggle="tooltip" title="'.__('messages.view_form_data').'">
|
||||
$action .= '<a href="' . action([\App\Http\Controllers\FormDataController::class, 'show'], ['id' => $form->id]) . '"' . '"
|
||||
class="btn btn-sm btn-success m-1" data-toggle="tooltip" title="' . __('messages.view_form_data') . '">
|
||||
<i class="fa fa-list" aria-hidden="true"></i>
|
||||
</a>';
|
||||
|
||||
$superadmins = env('SUPERADMIN_EMAILS');
|
||||
$superadmin_emails = explode(',', $superadmins);
|
||||
if (in_array($user->email, $superadmin_emails) ||
|
||||
(is_saas_enabled() && (isset($subscription->package_details['is_form_downloadable']) && $subscription->package_details['is_form_downloadable'])) || ! is_saas_enabled()) {
|
||||
$action .= '<a href="'.action([\App\Http\Controllers\FormController::class, 'downloadCode'], ['id' => $form->id]).'"'.'" class="btn btn-sm btn-dark m-1" data-toggle="tooltip"
|
||||
title="'.__('messages.download_code').'">
|
||||
if (auth()->user()->hasRole(RoleEnum::SUPERVISOR->value) || auth()->user()->id === $form->created_by) {
|
||||
$action .= '<a href="' . action([\App\Http\Controllers\FormController::class, 'downloadCode'], ['id' => $form->id]) . '"' . '" class="btn btn-sm btn-dark m-1" data-toggle="tooltip"
|
||||
title="' . __('messages.download_code') . '">
|
||||
<i class="fas fa-download" aria-hidden="true"></i>
|
||||
</a>';
|
||||
}
|
||||
}
|
||||
|
||||
$action .= '<a data-href="'.action([\App\Http\Controllers\FormController::class, 'getCollab'], ['id' => $form->id]).'"'.'class="btn btn-sm btn-primary m-1 collab_btn" data-toggle="tooltip" title="'.__('messages.collaborate').'">
|
||||
if (auth()->user()->hasRole(RoleEnum::SUPERVISOR->value) || auth()->user()->id === $form->created_by) {
|
||||
$action .= '<a data-href="' . action([\App\Http\Controllers\FormController::class, 'getCollab'], ['id' => $form->id]) . '"' . 'class="btn btn-sm btn-primary m-1 collab_btn" data-toggle="tooltip" title="' . __('messages.collaborate') . '">
|
||||
<i class="fas fa-handshake text-white" aria-hidden="true"></i>
|
||||
</a>';
|
||||
|
||||
return $action;
|
||||
}
|
||||
)
|
||||
->editColumn('created_at', function ($row) {
|
||||
$date_format = config('constants.APP_DATE_FORMAT');
|
||||
if (config('constants.APP_TIME_FORMAT') == '12') {
|
||||
$date_format .= ' h:i A';
|
||||
} elseif (config('constants.APP_TIME_FORMAT') == '24') {
|
||||
$date_format .= ' H:i';
|
||||
} else {
|
||||
$date_format = 'm/d/Y h:i A';
|
||||
}
|
||||
|
||||
return ! empty($row->created_at) ? Carbon::createFromTimestamp(strtotime($row->created_at))->format($date_format) : null;
|
||||
})
|
||||
->editColumn('data_count', function ($row) {
|
||||
return $row->data_count;
|
||||
})
|
||||
->editColumn('name', function ($row) {
|
||||
$html = $row->name;
|
||||
if (empty($row->schema)) {
|
||||
$html .= '<br><small class="text-danger">('.(__('messages.form_is_incomplete')).')</small>';
|
||||
}
|
||||
return $action;
|
||||
}
|
||||
)
|
||||
->editColumn('created_at', function ($row) {
|
||||
$date_format = config('constants.APP_DATE_FORMAT');
|
||||
if (config('constants.APP_TIME_FORMAT') == '12') {
|
||||
$date_format .= ' h:i A';
|
||||
} elseif (config('constants.APP_TIME_FORMAT') == '24') {
|
||||
$date_format .= ' H:i';
|
||||
} else {
|
||||
$date_format = 'm/d/Y h:i A';
|
||||
}
|
||||
|
||||
return $html;
|
||||
})
|
||||
->removeColumn('id')
|
||||
->rawColumns(['action', 'created_at', 'data_count', 'name'])
|
||||
->make(true);
|
||||
return !empty($row->created_at) ? Carbon::createFromTimestamp(strtotime($row->created_at))->format($date_format) : null;
|
||||
})
|
||||
->editColumn('data_count', function ($row) {
|
||||
return $row->data_count;
|
||||
})
|
||||
->editColumn('name', function ($row) {
|
||||
$html = $row->name;
|
||||
if (empty($row->schema)) {
|
||||
$html .= '<br><small class="text-danger">(' . (__('messages.form_is_incomplete')) . ')</small>';
|
||||
}
|
||||
|
||||
return $html;
|
||||
})
|
||||
->removeColumn('id')
|
||||
->rawColumns(['action', 'created_at', 'data_count', 'name'])
|
||||
->make(true);
|
||||
}
|
||||
|
||||
//Count forms
|
||||
$form_count = Form::where('created_by', $user->id)
|
||||
->where('is_template', 0)
|
||||
->count();
|
||||
$form_count = $forms->count();
|
||||
|
||||
//Count templates.
|
||||
$template_count = Form::where('created_by', $user->id)
|
||||
->where('is_template', 1)
|
||||
->count();
|
||||
->where('is_template', 1)
|
||||
->count();
|
||||
|
||||
//Count submissions.
|
||||
$submission_count = Form::join('form_data as fd', 'forms.id', '=', 'fd.form_id')
|
||||
->where('is_template', 0)
|
||||
->where('created_by', $user->id)
|
||||
->count();
|
||||
->where('is_template', 0)
|
||||
->when(auth()->user()->hasRole(RoleEnum::USER->value), function (Builder $builder) use ($user) {
|
||||
$builder->where('created_by', $user->id);
|
||||
})
|
||||
->count();
|
||||
|
||||
return view('home')
|
||||
->with(compact('form_count', 'template_count', 'submission_count'));
|
||||
@@ -158,56 +184,56 @@ class HomeController extends Controller
|
||||
$user_id = request()->user()->id;
|
||||
|
||||
$forms = Form::select('name', 'description', 'id', 'slug', 'is_global_template')
|
||||
->where(function ($query) use($user_id) {
|
||||
$query->where('is_template', 1)
|
||||
->where('created_by', $user_id)
|
||||
->orWhere('is_global_template', 1);
|
||||
})
|
||||
->groupBy('id');
|
||||
->where(function ($query) use ($user_id) {
|
||||
$query->where('is_template', 1)
|
||||
->where('created_by', $user_id)
|
||||
->orWhere('is_global_template', 1);
|
||||
})
|
||||
->groupBy('id');
|
||||
|
||||
return DataTables::of($forms)
|
||||
->addColumn('action', function ($row) {
|
||||
$action = '<a href="'.action([\App\Http\Controllers\FormController::class, 'show'], ['form' => $row->slug ?: $row->id]).'"'.'
|
||||
->addColumn('action', function ($row) {
|
||||
$action = '<a href="' . action([\App\Http\Controllers\FormController::class, 'show'], ['form' => $row->slug ?: $row->id]) . '"' . '
|
||||
target="_blank"
|
||||
class="btn btn-sm btn-info m-1" data-toggle="tooltip" title="'.__('messages.view').'">
|
||||
class="btn btn-sm btn-info m-1" data-toggle="tooltip" title="' . __('messages.view') . '">
|
||||
<i class="fa fa-eye" aria-hidden="true"></i>
|
||||
</a>';
|
||||
|
||||
if (! $row->is_global_template || auth()->user()->can('superadmin')) {
|
||||
$action .= '<a href="'.action([\App\Http\Controllers\FormController::class, 'edit'], ['form' => $row->id]).'"'.'
|
||||
class="btn btn-sm btn-warning m-1" data-toggle="tooltip" title="'.__('messages.edit').'">
|
||||
if (!$row->is_global_template || auth()->user()->can('superadmin')) {
|
||||
$action .= '<a href="' . action([\App\Http\Controllers\FormController::class, 'edit'], ['form' => $row->id]) . '"' . '
|
||||
class="btn btn-sm btn-warning m-1" data-toggle="tooltip" title="' . __('messages.edit') . '">
|
||||
<i class="fa fa-edit" aria-hidden="true"></i>
|
||||
</a>
|
||||
<button type="button" data-href="'.action([\App\Http\Controllers\FormController::class, 'destroy'], ['form' => $row->id]).'"'.' class="btn btn-sm btn-danger delete_template m-1" data-toggle="tooltip"
|
||||
title="'.__('messages.delete').'">
|
||||
<button type="button" data-href="' . action([\App\Http\Controllers\FormController::class, 'destroy'], ['form' => $row->id]) . '"' . ' class="btn btn-sm btn-danger delete_template m-1" data-toggle="tooltip"
|
||||
title="' . __('messages.delete') . '">
|
||||
<i class="fa fa-trash" aria-hidden="true"></i>
|
||||
</button>';
|
||||
}
|
||||
}
|
||||
|
||||
return $action;
|
||||
})
|
||||
->editColumn('is_global_template', function ($row) {
|
||||
if (auth()->user()->can('superadmin')) {
|
||||
$checked = $row->is_global_template ? 'checked' : '';
|
||||
$html = '<div class="form-check">
|
||||
<input class="form-check-input toggle_global_template" type="checkbox" value="1" '.$checked.' data-form_id="'.$row->id.'">
|
||||
return $action;
|
||||
})
|
||||
->editColumn('is_global_template', function ($row) {
|
||||
if (auth()->user()->can('superadmin')) {
|
||||
$checked = $row->is_global_template ? 'checked' : '';
|
||||
$html = '<div class="form-check">
|
||||
<input class="form-check-input toggle_global_template" type="checkbox" value="1" ' . $checked . ' data-form_id="' . $row->id . '">
|
||||
</div>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
})
|
||||
->editColumn('name', function ($row) {
|
||||
$name = $row->name;
|
||||
return $html;
|
||||
}
|
||||
})
|
||||
->editColumn('name', function ($row) {
|
||||
$name = $row->name;
|
||||
|
||||
if ($row->is_global_template) {
|
||||
$name .= '<br><span class="badge badge-pill badge-info">'.__('messages.pre_made').'</span>';
|
||||
}
|
||||
if ($row->is_global_template) {
|
||||
$name .= '<br><span class="badge badge-pill badge-info">' . __('messages.pre_made') . '</span>';
|
||||
}
|
||||
|
||||
return $name;
|
||||
})
|
||||
->removeColumn('id')
|
||||
->rawColumns(['action', 'is_global_template', 'name'])
|
||||
->make(true);
|
||||
return $name;
|
||||
})
|
||||
->removeColumn('id')
|
||||
->rawColumns(['action', 'is_global_template', 'name'])
|
||||
->make(true);
|
||||
}
|
||||
|
||||
return view('home');
|
||||
@@ -233,7 +259,7 @@ class HomeController extends Controller
|
||||
]);
|
||||
|
||||
Mail::to(request()->from_address)
|
||||
->send(new TestEmail());
|
||||
->send(new TestEmail());
|
||||
|
||||
return $this->respondSuccess();
|
||||
} catch (\Exception $e) {
|
||||
@@ -250,47 +276,54 @@ class HomeController extends Controller
|
||||
{
|
||||
if ($request->ajax()) {
|
||||
$forms = UserForm::join('forms', 'user_forms.form_id', '=', 'forms.id')
|
||||
->leftJoin('users', 'forms.created_by', '=', 'users.id')
|
||||
->where('user_forms.assigned_to', \Auth::id())
|
||||
->select('user_forms.permissions as permissions', 'forms.name as name', 'forms.description as description', 'forms.id as form_id', 'forms.created_at as created_at', 'forms.slug as slug', 'users.name as created_by');
|
||||
->leftJoin('users', 'forms.created_by', '=', 'users.id')
|
||||
->where('user_forms.assigned_to', \Auth::id())
|
||||
->select('user_forms.permissions as permissions', 'forms.name as name', 'forms.description as description', 'forms.id as form_id', 'forms.created_at as created_at', 'forms.slug as slug', 'users.name as created_by');
|
||||
|
||||
return DataTables::of($forms)
|
||||
->addColumn(
|
||||
'action',
|
||||
function ($row) {
|
||||
$action = '';
|
||||
if (! empty($row->permissions) && in_array('can_view_form', $row->permissions) && auth()->user()->show_edit_buttons_form) {
|
||||
$action = '<a href="'.action([\App\Http\Controllers\FormController::class, 'show'], ['form' => $row->slug ?: $row->form_id]).'"'.'
|
||||
->addColumn(
|
||||
'action',
|
||||
function ($row) {
|
||||
$action = '';
|
||||
if ((!empty($row->permissions) && in_array('can_view_form', $row->permissions)) || auth()->user()->hasRole(RoleEnum::SUPERVISOR->value)) {
|
||||
$action = '<a href="' . action([\App\Http\Controllers\FormController::class, 'show'], ['form' => $row->slug ?: $row->form_id]) . '"' . '
|
||||
target="_blank"
|
||||
class="btn btn-sm btn-info m-1" data-toggle="tooltip" title="'.__('messages.view').'">
|
||||
class="btn btn-sm btn-info m-1" data-toggle="tooltip" title="' . __('messages.view') . '">
|
||||
<i class="fa fa-eye" aria-hidden="true"></i>
|
||||
</a>';
|
||||
}
|
||||
}
|
||||
|
||||
if (! empty($row->permissions) && in_array('can_design_form', $row->permissions) && auth()->user()->show_edit_buttons_form) {
|
||||
$action .= '<a href="'.action([\App\Http\Controllers\FormController::class, 'edit'], ['form' => $row->form_id]).'"'.'
|
||||
class="btn btn-sm btn-warning m-1" data-toggle="tooltip" title="'.__('messages.edit').'">
|
||||
if ((!empty($row->permissions) && in_array('can_design_form', $row->permissions)) || auth()->user()->hasRole(RoleEnum::SUPERVISOR->value)) {
|
||||
$action .= '<a href="' . action([\App\Http\Controllers\FormController::class, 'edit'], ['form' => $row->form_id]) . '"' . '
|
||||
class="btn btn-sm btn-warning m-1" data-toggle="tooltip" title="' . __('messages.edit') . '">
|
||||
<i class="fa fa-edit" aria-hidden="true"></i>
|
||||
</a>';
|
||||
}
|
||||
}
|
||||
|
||||
if (! empty($row->permissions) && in_array('can_view_data', $row->permissions) && auth()->user()->show_edit_buttons_form) {
|
||||
$action .= '<a href="'.action([\App\Http\Controllers\FormDataController::class, 'show'], ['id' => $row->form_id]).'"'.'"
|
||||
target="_blank"
|
||||
class="btn btn-sm btn-success m-1" data-toggle="tooltip" title="'.__('messages.view_form_data').'">
|
||||
if ((!empty($row->permissions) && in_array('can_view_data', $row->permissions)) || auth()->user()->hasRole(RoleEnum::SUPERVISOR->value)) {
|
||||
$action .= '<a href="' . action([\App\Http\Controllers\FormDataController::class, 'show'], ['id' => $row->form_id]) . '"' . '"
|
||||
class="btn btn-sm btn-success m-1" data-toggle="tooltip" title="' . __('messages.view_form_data') . '">
|
||||
<i class="fa fa-list" aria-hidden="true"></i>
|
||||
</a>';
|
||||
}
|
||||
|
||||
return $action;
|
||||
}
|
||||
)
|
||||
->editColumn('created_by', function ($row) {
|
||||
return ucfirst($row->created_by);
|
||||
})
|
||||
->removeColumn(['id', 'permissions'])
|
||||
->rawColumns(['action', 'created_by'])
|
||||
->make(true);
|
||||
|
||||
if (auth()->user()->hasRole(RoleEnum::SUPERVISOR->value)) {
|
||||
$action .= '<a href="' . action([\App\Http\Controllers\FormDataController::class, 'getReport'], ['id' => $row->form_id]) . '"' . '"
|
||||
target="_blank"
|
||||
class="btn btn-sm btn-success m-1" data-toggle="tooltip" title="' . __('messages.report') . '">
|
||||
<i class="fas fa-chart-pie" aria-hidden="true"></i>
|
||||
</a>';
|
||||
}
|
||||
|
||||
return $action;
|
||||
}
|
||||
)
|
||||
->editColumn('created_by', function ($row) {
|
||||
return ucfirst($row->created_by);
|
||||
})
|
||||
->removeColumn(['id', 'permissions'])
|
||||
->rawColumns(['action', 'created_by'])
|
||||
->make(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,12 +2,14 @@
|
||||
|
||||
namespace App\Http\Controllers\Superadmin;
|
||||
|
||||
use App\Enums\User\RoleEnum;
|
||||
use App\Form;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Notifications\UserNotification;
|
||||
use App\Package;
|
||||
use App\User;
|
||||
use App\UserForm;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Http\Request;
|
||||
use Yajra\DataTables\Facades\DataTables;
|
||||
|
||||
@@ -20,12 +22,20 @@ class ManageUsersController extends Controller
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
if (! auth()->user()->can('superadmin')) {
|
||||
if (!auth()->user()->hasRole([RoleEnum::ADMIN->value, RoleEnum::SUPERVISOR->value], 'web')) {
|
||||
abort(403, 'Unauthorized action.');
|
||||
}
|
||||
|
||||
if ($request->ajax()) {
|
||||
$users = User::select('name', 'email', 'is_active', 'created_at', 'id');
|
||||
$supervisor = User::role(RoleEnum::SUPERVISOR->value)->first();
|
||||
$users = User::query()
|
||||
->when(
|
||||
!auth()->user()->hasRole(RoleEnum::SUPERVISOR->value),
|
||||
function (Builder $builder) use ($supervisor) {
|
||||
$builder->whereNotIn('id', [$supervisor->id]);
|
||||
}
|
||||
)
|
||||
->select(['id', 'name', 'email', 'is_active', 'created_at']);
|
||||
|
||||
if (! empty($request->input('status'))) {
|
||||
$is_active = ($request->input('status') == 'active') ? 1 : 0;
|
||||
@@ -52,9 +62,11 @@ class ManageUsersController extends Controller
|
||||
<a class="btn btn-link btn-icon btn-sm text-info edit_user pointer" data-href="{{action([\App\Http\Controllers\Superadmin\ManageUsersController::class, "edit"], [$id])}}" title="@lang("messages.edit")">
|
||||
<i class="fas fa-edit font_icon_size"></i>
|
||||
</a>
|
||||
<a class="btn btn-link btn-icon btn-sm text-info upgrade_account pointer" data-href="{{action([\App\Http\Controllers\Superadmin\ManageUsersController::class, "upgrade"], [$id])}}" title="@lang("messages.edit")">
|
||||
<i class="fas fa-money-check font_icon_size"></i>
|
||||
</a>
|
||||
@if(1 === 0)
|
||||
<a class="btn btn-link btn-icon btn-sm text-info upgrade_account pointer" data-href="{{action([\App\Http\Controllers\Superadmin\ManageUsersController::class, "upgrade"], [$id])}}" title="@lang("messages.edit")">
|
||||
<i class="fas fa-money-check font_icon_size"></i>
|
||||
</a>
|
||||
@endif
|
||||
<a class="btn btn-link btn-icon btn-sm text-danger delete_user pointer" data-href="{{action([\App\Http\Controllers\Superadmin\ManageUsersController::class, "destroy"], [$id])}}" title="@lang("messages.delete")">
|
||||
<i class="fas fa-trash-alt font_icon_size"></i>
|
||||
</a>
|
||||
@@ -104,7 +116,6 @@ class ManageUsersController extends Controller
|
||||
$user = request()->user();
|
||||
|
||||
$forms = Form::where('is_template', 0)
|
||||
->where('created_by', $user->id)
|
||||
->pluck('name', 'id')
|
||||
->toArray();
|
||||
|
||||
@@ -126,7 +137,7 @@ class ManageUsersController extends Controller
|
||||
return $this->notAllowedInDemo();
|
||||
}
|
||||
|
||||
$input = $request->only('name', 'email', 'is_active', 'can_create_form', 'show_form_response_user', 'show_edit_buttons_form');
|
||||
$input = $request->only('name', 'email', 'is_active', 'is_admin', 'can_create_form');
|
||||
|
||||
if (! empty($request->input('password'))) {
|
||||
$input['password'] = bcrypt($request->input('password'));
|
||||
@@ -134,10 +145,14 @@ class ManageUsersController extends Controller
|
||||
|
||||
$input['is_active'] = ! empty($input['is_active']) ? 1 : 0;
|
||||
$input['can_create_form'] = ! empty($input['can_create_form']) ? 1 : 0;
|
||||
$input['show_form_response_user'] = ! empty($input['show_form_response_user']) ? 1 : 0;
|
||||
$input['show_edit_buttons_form'] = ! empty($input['show_edit_buttons_form']) ? 1 : 0;
|
||||
|
||||
$user = User::create($input);
|
||||
$user = User::query()->create($input);
|
||||
|
||||
if ($request->filled('is_admin')) {
|
||||
$user->assignRole(RoleEnum::ADMIN->value);
|
||||
} else {
|
||||
$user->assignRole(RoleEnum::USER->value);
|
||||
}
|
||||
|
||||
//save user forms (assgined)
|
||||
$permissions = $request->input('permissions');
|
||||
@@ -190,17 +205,26 @@ class ManageUsersController extends Controller
|
||||
if (request()->ajax()) {
|
||||
$user = User::findOrFail($id);
|
||||
|
||||
$logged_in_user = request()->user();
|
||||
if (auth()->user()->hasRole([RoleEnum::SUPERVISOR->value, RoleEnum::ADMIN->value])) {
|
||||
$forms = Form::where('is_template', 0)
|
||||
->pluck('name', 'id')
|
||||
->toArray();
|
||||
|
||||
$forms = Form::where('is_template', 0)
|
||||
->where('created_by', $logged_in_user->id)
|
||||
->pluck('name', 'id')
|
||||
->toArray();
|
||||
$assigned_forms = UserForm::with('form')
|
||||
->where('assigned_to', $id)
|
||||
->get();
|
||||
} else {
|
||||
$logged_in_user = request()->user();
|
||||
$forms = Form::where('is_template', 0)
|
||||
->where('created_by', $logged_in_user->id)
|
||||
->pluck('name', 'id')
|
||||
->toArray();
|
||||
|
||||
$assigned_forms = UserForm::with('form')
|
||||
->where('assigned_by', \Auth::id())
|
||||
->where('assigned_to', $id)
|
||||
->get();
|
||||
$assigned_forms = UserForm::with('form')
|
||||
->where('assigned_by', \Auth::id())
|
||||
->where('assigned_to', $id)
|
||||
->get();
|
||||
}
|
||||
|
||||
return view('superadmin.users.edit')
|
||||
->with(compact('user', 'forms', 'assigned_forms'));
|
||||
@@ -221,11 +245,9 @@ class ManageUsersController extends Controller
|
||||
return $this->notAllowedInDemo();
|
||||
}
|
||||
|
||||
$input = $request->only('name', 'email', 'is_active', 'can_create_form', 'show_form_response_user', 'show_edit_buttons_form');
|
||||
$input = $request->only('name', 'email', 'is_active', 'is_admin', 'can_create_form');
|
||||
$input['is_active'] = ! empty($input['is_active']) ? 1 : 0;
|
||||
$input['can_create_form'] = ! empty($input['can_create_form']) ? 1 : 0;
|
||||
$input['show_form_response_user'] = ! empty($input['show_form_response_user']) ? 1 : 0;
|
||||
$input['show_edit_buttons_form'] = ! empty($input['show_edit_buttons_form']) ? 1 : 0;
|
||||
|
||||
if (! empty($request->input('password'))) {
|
||||
$input['password'] = bcrypt($request->input('password'));
|
||||
@@ -234,6 +256,14 @@ class ManageUsersController extends Controller
|
||||
$user = User::findOrFail($id);
|
||||
$user->update($input);
|
||||
|
||||
if ($request->filled('is_admin') && $request->input('is_admin') === 'on') {
|
||||
$user->assignRole(RoleEnum::ADMIN->value);
|
||||
$user->removeRole(RoleEnum::USER->value);
|
||||
} else {
|
||||
$user->removeRole(RoleEnum::ADMIN->value);
|
||||
$user->assignRole(RoleEnum::USER->value);
|
||||
}
|
||||
|
||||
//update user forms (assgined)
|
||||
$edit_permissions = $request->input('edit_permissions');
|
||||
$assgined_form_ids = $request->input('edit_assigned_form_id');
|
||||
|
||||
Reference in New Issue
Block a user