update_10.09.23
This commit is contained in:
parent
4a9c23c4ea
commit
98a7d01134
10
app/Enums/User/PermissionEnum.php
Normal file
10
app/Enums/User/PermissionEnum.php
Normal file
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\User;
|
||||
|
||||
enum PermissionEnum: string
|
||||
{
|
||||
case CREATE_FORM = 'create form';
|
||||
case VIEW_FORM = 'view form';
|
||||
case EDIT_FORM = 'edit form';
|
||||
}
|
10
app/Enums/User/RoleEnum.php
Normal file
10
app/Enums/User/RoleEnum.php
Normal file
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\User;
|
||||
|
||||
enum RoleEnum: string
|
||||
{
|
||||
case SUPERVISOR = 'supervisor';
|
||||
case ADMIN = 'admin';
|
||||
case USER = 'user';
|
||||
}
|
@ -50,34 +50,34 @@ class HomeController extends Controller
|
||||
|
||||
if (! empty($form->schema)) {
|
||||
$action = '<a href="'.action([\App\Http\Controllers\FormController::class, 'show'], ['form' => $form->slug ?: $form->id]).'"'.'
|
||||
target="_blank"
|
||||
target="_blank"
|
||||
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]).'"'.'
|
||||
$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"
|
||||
$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"
|
||||
$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"
|
||||
$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"
|
||||
target="_blank"
|
||||
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>';
|
||||
@ -86,18 +86,12 @@ class HomeController extends Controller
|
||||
$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"
|
||||
$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 href="'.action([\App\Http\Controllers\FormDataController::class, 'getReport'], ['id' => $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>';
|
||||
|
||||
$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>';
|
||||
@ -174,17 +168,17 @@ class HomeController extends Controller
|
||||
return DataTables::of($forms)
|
||||
->addColumn('action', function ($row) {
|
||||
$action = '<a href="'.action([\App\Http\Controllers\FormController::class, 'show'], ['form' => $row->slug ?: $row->id]).'"'.'
|
||||
target="_blank"
|
||||
target="_blank"
|
||||
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]).'"'.'
|
||||
$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"
|
||||
<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>';
|
||||
@ -265,31 +259,26 @@ class HomeController extends Controller
|
||||
'action',
|
||||
function ($row) {
|
||||
$action = '';
|
||||
if (! empty($row->permissions) && in_array('can_view_form', $row->permissions)) {
|
||||
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]).'"'.'
|
||||
target="_blank"
|
||||
target="_blank"
|
||||
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)) {
|
||||
$action .= '<a href="'.action([\App\Http\Controllers\FormController::class, 'edit'], ['form' => $row->form_id]).'"'.'
|
||||
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').'">
|
||||
<i class="fa fa-edit" aria-hidden="true"></i>
|
||||
</a>';
|
||||
}
|
||||
|
||||
if (! empty($row->permissions) && in_array('can_view_data', $row->permissions)) {
|
||||
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"
|
||||
target="_blank"
|
||||
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>
|
||||
<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>';
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@ class ManageUsersController extends Controller
|
||||
return DataTables::of($users)
|
||||
->addColumn(
|
||||
'action',
|
||||
'
|
||||
'
|
||||
@if($is_active)
|
||||
<span title="@lang("messages.mark_inactive")">
|
||||
<a class="btn btn-link btn-icon btn-sm text-danger toggle_is_active pointer" data-href="{{ action([\App\Http\Controllers\Superadmin\ManageUsersController::class, "toggleUserActiveStatus"], [$id])}}">
|
||||
@ -126,7 +126,7 @@ class ManageUsersController extends Controller
|
||||
return $this->notAllowedInDemo();
|
||||
}
|
||||
|
||||
$input = $request->only('name', 'email', 'is_active', 'can_create_form');
|
||||
$input = $request->only('name', 'email', 'is_active', 'can_create_form', 'show_form_response_user', 'show_edit_buttons_form');
|
||||
|
||||
if (! empty($request->input('password'))) {
|
||||
$input['password'] = bcrypt($request->input('password'));
|
||||
@ -134,6 +134,8 @@ 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);
|
||||
|
||||
@ -219,9 +221,11 @@ class ManageUsersController extends Controller
|
||||
return $this->notAllowedInDemo();
|
||||
}
|
||||
|
||||
$input = $request->only('name', 'email', 'is_active', 'can_create_form');
|
||||
$input = $request->only('name', 'email', 'is_active', 'can_create_form', 'show_form_response_user', 'show_edit_buttons_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'));
|
||||
|
@ -4,10 +4,12 @@ namespace App;
|
||||
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Spatie\Permission\Traits\HasRoles;
|
||||
|
||||
class User extends Authenticatable
|
||||
{
|
||||
use Notifiable;
|
||||
use Notifiable,
|
||||
HasRoles;
|
||||
|
||||
/**
|
||||
* The attributes that aren't mass assignable.
|
||||
|
@ -8,7 +8,7 @@
|
||||
],
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^8.0",
|
||||
"php": "^8.1",
|
||||
"carlos-meneses/laravel-mpdf": "^2.1",
|
||||
"composer/semver": "^3.2",
|
||||
"guzzlehttp/guzzle": "^7.2",
|
||||
@ -18,6 +18,7 @@
|
||||
"laravel/ui": "^3.3",
|
||||
"milon/barcode": "^9.0",
|
||||
"spatie/laravel-newsletter": "*",
|
||||
"spatie/laravel-permission": "^5.11",
|
||||
"spatie/laravel-webhook-server": "^3.1",
|
||||
"srmklive/paypal": "^3.0",
|
||||
"stripe/stripe-php": "^7.108",
|
||||
|
1500
composer.lock
generated
1500
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -190,6 +190,7 @@ return [
|
||||
Srmklive\PayPal\Providers\PayPalServiceProvider::class,
|
||||
// Meneses\LaravelMpdf\LaravelMpdfServiceProvider::class,
|
||||
Milon\Barcode\BarcodeServiceProvider::class,
|
||||
Spatie\Permission\PermissionServiceProvider::class,
|
||||
|
||||
/*
|
||||
* Application Service Providers...
|
||||
|
161
config/permission.php
Normal file
161
config/permission.php
Normal file
@ -0,0 +1,161 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'models' => [
|
||||
|
||||
/*
|
||||
* When using the "HasPermissions" trait from this package, we need to know which
|
||||
* Eloquent model should be used to retrieve your permissions. Of course, it
|
||||
* is often just the "Permission" model but you may use whatever you like.
|
||||
*
|
||||
* The model you want to use as a Permission model needs to implement the
|
||||
* `Spatie\Permission\Contracts\Permission` contract.
|
||||
*/
|
||||
|
||||
'permission' => Spatie\Permission\Models\Permission::class,
|
||||
|
||||
/*
|
||||
* When using the "HasRoles" trait from this package, we need to know which
|
||||
* Eloquent model should be used to retrieve your roles. Of course, it
|
||||
* is often just the "Role" model but you may use whatever you like.
|
||||
*
|
||||
* The model you want to use as a Role model needs to implement the
|
||||
* `Spatie\Permission\Contracts\Role` contract.
|
||||
*/
|
||||
|
||||
'role' => Spatie\Permission\Models\Role::class,
|
||||
|
||||
],
|
||||
|
||||
'table_names' => [
|
||||
|
||||
/*
|
||||
* When using the "HasRoles" trait from this package, we need to know which
|
||||
* table should be used to retrieve your roles. We have chosen a basic
|
||||
* default value but you may easily change it to any table you like.
|
||||
*/
|
||||
|
||||
'roles' => 'roles',
|
||||
|
||||
/*
|
||||
* When using the "HasPermissions" trait from this package, we need to know which
|
||||
* table should be used to retrieve your permissions. We have chosen a basic
|
||||
* default value but you may easily change it to any table you like.
|
||||
*/
|
||||
|
||||
'permissions' => 'permissions',
|
||||
|
||||
/*
|
||||
* When using the "HasPermissions" trait from this package, we need to know which
|
||||
* table should be used to retrieve your models permissions. We have chosen a
|
||||
* basic default value but you may easily change it to any table you like.
|
||||
*/
|
||||
|
||||
'model_has_permissions' => 'model_has_permissions',
|
||||
|
||||
/*
|
||||
* When using the "HasRoles" trait from this package, we need to know which
|
||||
* table should be used to retrieve your models roles. We have chosen a
|
||||
* basic default value but you may easily change it to any table you like.
|
||||
*/
|
||||
|
||||
'model_has_roles' => 'model_has_roles',
|
||||
|
||||
/*
|
||||
* When using the "HasRoles" trait from this package, we need to know which
|
||||
* table should be used to retrieve your roles permissions. We have chosen a
|
||||
* basic default value but you may easily change it to any table you like.
|
||||
*/
|
||||
|
||||
'role_has_permissions' => 'role_has_permissions',
|
||||
],
|
||||
|
||||
'column_names' => [
|
||||
/*
|
||||
* Change this if you want to name the related pivots other than defaults
|
||||
*/
|
||||
'role_pivot_key' => null, //default 'role_id',
|
||||
'permission_pivot_key' => null, //default 'permission_id',
|
||||
|
||||
/*
|
||||
* Change this if you want to name the related model primary key other than
|
||||
* `model_id`.
|
||||
*
|
||||
* For example, this would be nice if your primary keys are all UUIDs. In
|
||||
* that case, name this `model_uuid`.
|
||||
*/
|
||||
|
||||
'model_morph_key' => 'model_id',
|
||||
|
||||
/*
|
||||
* Change this if you want to use the teams feature and your related model's
|
||||
* foreign key is other than `team_id`.
|
||||
*/
|
||||
|
||||
'team_foreign_key' => 'team_id',
|
||||
],
|
||||
|
||||
/*
|
||||
* When set to true, the method for checking permissions will be registered on the gate.
|
||||
* Set this to false, if you want to implement custom logic for checking permissions.
|
||||
*/
|
||||
|
||||
'register_permission_check_method' => true,
|
||||
|
||||
/*
|
||||
* When set to true the package implements teams using the 'team_foreign_key'. If you want
|
||||
* the migrations to register the 'team_foreign_key', you must set this to true
|
||||
* before doing the migration. If you already did the migration then you must make a new
|
||||
* migration to also add 'team_foreign_key' to 'roles', 'model_has_roles', and
|
||||
* 'model_has_permissions'(view the latest version of package's migration file)
|
||||
*/
|
||||
|
||||
'teams' => false,
|
||||
|
||||
/*
|
||||
* When set to true, the required permission names are added to the exception
|
||||
* message. This could be considered an information leak in some contexts, so
|
||||
* the default setting is false here for optimum safety.
|
||||
*/
|
||||
|
||||
'display_permission_in_exception' => false,
|
||||
|
||||
/*
|
||||
* When set to true, the required role names are added to the exception
|
||||
* message. This could be considered an information leak in some contexts, so
|
||||
* the default setting is false here for optimum safety.
|
||||
*/
|
||||
|
||||
'display_role_in_exception' => false,
|
||||
|
||||
/*
|
||||
* By default wildcard permission lookups are disabled.
|
||||
*/
|
||||
|
||||
'enable_wildcard_permission' => false,
|
||||
|
||||
'cache' => [
|
||||
|
||||
/*
|
||||
* By default all permissions are cached for 24 hours to speed up performance.
|
||||
* When permissions or roles are updated the cache is flushed automatically.
|
||||
*/
|
||||
|
||||
'expiration_time' => \DateInterval::createFromDateString('24 hours'),
|
||||
|
||||
/*
|
||||
* The cache key used to store all permissions.
|
||||
*/
|
||||
|
||||
'key' => 'spatie.permission.cache',
|
||||
|
||||
/*
|
||||
* You may optionally indicate a specific cache driver to use for permission and
|
||||
* role caching using any of the `store` drivers listed in the cache.php config
|
||||
* file. Using 'default' here means to use the `default` set in cache.php.
|
||||
*/
|
||||
|
||||
'store' => 'default',
|
||||
],
|
||||
];
|
@ -19,6 +19,10 @@ return new class extends Migration
|
||||
$table->string('email')->unique();
|
||||
$table->timestamp('email_verified_at')->nullable();
|
||||
$table->string('password');
|
||||
|
||||
$table->boolean('show_form_response_user')->default(false);
|
||||
$table->boolean('show_edit_buttons_form');
|
||||
|
||||
$table->rememberToken();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
@ -0,0 +1,141 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Spatie\Permission\PermissionRegistrar;
|
||||
|
||||
class CreatePermissionTables extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
$tableNames = config('permission.table_names');
|
||||
$columnNames = config('permission.column_names');
|
||||
$teams = config('permission.teams');
|
||||
|
||||
if (empty($tableNames)) {
|
||||
throw new \Exception('Error: config/permission.php not loaded. Run [php artisan config:clear] and try again.');
|
||||
}
|
||||
if ($teams && empty($columnNames['team_foreign_key'] ?? null)) {
|
||||
throw new \Exception('Error: team_foreign_key on config/permission.php not loaded. Run [php artisan config:clear] and try again.');
|
||||
}
|
||||
|
||||
Schema::create($tableNames['permissions'], function (Blueprint $table) {
|
||||
$table->bigIncrements('id'); // permission id
|
||||
$table->string('name'); // For MySQL 8.0 use string('name', 125);
|
||||
$table->string('guard_name'); // For MySQL 8.0 use string('guard_name', 125);
|
||||
$table->timestamps();
|
||||
|
||||
$table->unique(['name', 'guard_name']);
|
||||
});
|
||||
|
||||
Schema::create($tableNames['roles'], function (Blueprint $table) use ($teams, $columnNames) {
|
||||
$table->bigIncrements('id'); // role id
|
||||
if ($teams || config('permission.testing')) { // permission.testing is a fix for sqlite testing
|
||||
$table->unsignedBigInteger($columnNames['team_foreign_key'])->nullable();
|
||||
$table->index($columnNames['team_foreign_key'], 'roles_team_foreign_key_index');
|
||||
}
|
||||
$table->string('name'); // For MySQL 8.0 use string('name', 125);
|
||||
$table->string('guard_name'); // For MySQL 8.0 use string('guard_name', 125);
|
||||
$table->timestamps();
|
||||
if ($teams || config('permission.testing')) {
|
||||
$table->unique([$columnNames['team_foreign_key'], 'name', 'guard_name']);
|
||||
} else {
|
||||
$table->unique(['name', 'guard_name']);
|
||||
}
|
||||
});
|
||||
|
||||
Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames, $teams) {
|
||||
$table->unsignedBigInteger(PermissionRegistrar::$pivotPermission);
|
||||
|
||||
$table->string('model_type');
|
||||
$table->unsignedBigInteger($columnNames['model_morph_key']);
|
||||
$table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index');
|
||||
|
||||
$table->foreign(PermissionRegistrar::$pivotPermission)
|
||||
->references('id') // permission id
|
||||
->on($tableNames['permissions'])
|
||||
->onDelete('cascade');
|
||||
if ($teams) {
|
||||
$table->unsignedBigInteger($columnNames['team_foreign_key']);
|
||||
$table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index');
|
||||
|
||||
$table->primary([$columnNames['team_foreign_key'], PermissionRegistrar::$pivotPermission, $columnNames['model_morph_key'], 'model_type'],
|
||||
'model_has_permissions_permission_model_type_primary');
|
||||
} else {
|
||||
$table->primary([PermissionRegistrar::$pivotPermission, $columnNames['model_morph_key'], 'model_type'],
|
||||
'model_has_permissions_permission_model_type_primary');
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames, $teams) {
|
||||
$table->unsignedBigInteger(PermissionRegistrar::$pivotRole);
|
||||
|
||||
$table->string('model_type');
|
||||
$table->unsignedBigInteger($columnNames['model_morph_key']);
|
||||
$table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index');
|
||||
|
||||
$table->foreign(PermissionRegistrar::$pivotRole)
|
||||
->references('id') // role id
|
||||
->on($tableNames['roles'])
|
||||
->onDelete('cascade');
|
||||
if ($teams) {
|
||||
$table->unsignedBigInteger($columnNames['team_foreign_key']);
|
||||
$table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index');
|
||||
|
||||
$table->primary([$columnNames['team_foreign_key'], PermissionRegistrar::$pivotRole, $columnNames['model_morph_key'], 'model_type'],
|
||||
'model_has_roles_role_model_type_primary');
|
||||
} else {
|
||||
$table->primary([PermissionRegistrar::$pivotRole, $columnNames['model_morph_key'], 'model_type'],
|
||||
'model_has_roles_role_model_type_primary');
|
||||
}
|
||||
});
|
||||
|
||||
Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames) {
|
||||
$table->unsignedBigInteger(PermissionRegistrar::$pivotPermission);
|
||||
$table->unsignedBigInteger(PermissionRegistrar::$pivotRole);
|
||||
|
||||
$table->foreign(PermissionRegistrar::$pivotPermission)
|
||||
->references('id') // permission id
|
||||
->on($tableNames['permissions'])
|
||||
->onDelete('cascade');
|
||||
|
||||
$table->foreign(PermissionRegistrar::$pivotRole)
|
||||
->references('id') // role id
|
||||
->on($tableNames['roles'])
|
||||
->onDelete('cascade');
|
||||
|
||||
$table->primary([PermissionRegistrar::$pivotPermission, PermissionRegistrar::$pivotRole], 'role_has_permissions_permission_id_role_id_primary');
|
||||
});
|
||||
|
||||
app('cache')
|
||||
->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null)
|
||||
->forget(config('permission.cache.key'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
$tableNames = config('permission.table_names');
|
||||
|
||||
if (empty($tableNames)) {
|
||||
throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.');
|
||||
}
|
||||
|
||||
Schema::drop($tableNames['role_has_permissions']);
|
||||
Schema::drop($tableNames['model_has_roles']);
|
||||
Schema::drop($tableNames['model_has_permissions']);
|
||||
Schema::drop($tableNames['roles']);
|
||||
Schema::drop($tableNames['permissions']);
|
||||
}
|
||||
}
|
@ -13,8 +13,12 @@ class DatabaseSeeder extends Seeder
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
$this->call(UsersTableSeeder::class);
|
||||
$this->call(SystemsTableSeeder::class);
|
||||
$this->call(TemplateSeeder::class);
|
||||
$this->call([
|
||||
PermissionSeeder::class,
|
||||
RoleSeeder::class,
|
||||
UsersTableSeeder::class,
|
||||
SystemsTableSeeder::class,
|
||||
TemplateSeeder::class
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
20
database/seeders/PermissionSeeder.php
Normal file
20
database/seeders/PermissionSeeder.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Enums\User\PermissionEnum;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Spatie\Permission\Models\Permission;
|
||||
|
||||
class PermissionSeeder extends Seeder
|
||||
{
|
||||
public function run(): void
|
||||
{
|
||||
Permission::query()
|
||||
->upsert([
|
||||
['name' => PermissionEnum::CREATE_FORM->value, 'guard_name' => 'web'],
|
||||
['name' => PermissionEnum::VIEW_FORM->value, 'guard_name' => 'web'],
|
||||
['name' => PermissionEnum::EDIT_FORM->value, 'guard_name' => 'web']
|
||||
], ['name', 'guard_name']);
|
||||
}
|
||||
}
|
20
database/seeders/RoleSeeder.php
Normal file
20
database/seeders/RoleSeeder.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Enums\User\RoleEnum;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
class RoleSeeder extends Seeder
|
||||
{
|
||||
public function run(): void
|
||||
{
|
||||
Role::query()
|
||||
->upsert([
|
||||
['name' => RoleEnum::SUPERVISOR->value, 'guard_name' => 'web'],
|
||||
['name' => RoleEnum::ADMIN->value, 'guard_name' => 'web'],
|
||||
['name' => RoleEnum::USER->value, 'guard_name' => 'web']
|
||||
], ['name', 'guard_name']);
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Enums\User\RoleEnum;
|
||||
use App\User;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
@ -14,14 +15,13 @@ class UsersTableSeeder extends Seeder
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
$info = [
|
||||
'name' => 'admin',
|
||||
'email' => 'admin@admin.com',
|
||||
'password' => bcrypt(12345678),
|
||||
'is_active' => 1,
|
||||
];
|
||||
|
||||
//create user
|
||||
$user = User::create($info);
|
||||
User::query()
|
||||
->create([
|
||||
'name' => 'admin',
|
||||
'email' => 'admin@admin.com',
|
||||
'password' => bcrypt(12345678),
|
||||
'is_active' => 1,
|
||||
])
|
||||
->assignRole(RoleEnum::SUPERVISOR->value);
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -477,6 +477,10 @@ return [
|
||||
'outline' => 'Outline',
|
||||
'can_create_form' => 'Can create form',
|
||||
'can_create_form_tooltip' => 'If checked user can create forms for him/herself',
|
||||
'show_form_response_user' => 'Can view form response author',
|
||||
'show_form_response_user_tooltip' => 'If checked user can view form response author',
|
||||
'show_edit_buttons_form' => 'Can view form edit buttons',
|
||||
'show_edit_buttons_form_tooltip' => 'If checked user can view edit buttons',
|
||||
'assign_forms' => 'Share forms',
|
||||
'permission_for_forms' => 'Permission for shared forms',
|
||||
'can_design_form' => 'Can design form',
|
||||
|
@ -477,6 +477,10 @@ return [
|
||||
'outline' => 'Контур',
|
||||
'can_create_form' => 'Может создавать форму',
|
||||
'can_create_form_tooltip' => 'Если установлено, пользователь может создавать формы для себя',
|
||||
'show_form_response_user' => 'Can view form response author',
|
||||
'show_form_response_user_tooltip' => 'If checked user can view form response author',
|
||||
'show_edit_buttons_form' => 'Can view form edit buttons',
|
||||
'show_edit_buttons_form_tooltip' => 'If checked user can view edit buttons',
|
||||
'assign_forms' => 'Поделиться формами',
|
||||
'permission_for_forms' => 'Разрешение на общие формы',
|
||||
'can_design_form' => 'Может проектировать форму',
|
||||
|
14529
package-lock.json
generated
14529
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,75 +1,79 @@
|
||||
@extends('layouts.app')
|
||||
@section('css')
|
||||
<style type="text/css">
|
||||
.no-print {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@media screen {
|
||||
#printSection {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
body * {
|
||||
visibility:hidden;
|
||||
}
|
||||
|
||||
#printSection, #printSection * {
|
||||
visibility:visible;
|
||||
}
|
||||
|
||||
#printSection {
|
||||
position:absolute;
|
||||
left:0;
|
||||
top:0;
|
||||
}
|
||||
<style type="text/css">
|
||||
.no-print {
|
||||
display: none;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@media screen {
|
||||
#printSection {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
body * {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
#printSection, #printSection * {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
#printSection {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.no-print {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@endsection
|
||||
@section('content')
|
||||
<div class="container-fluid">
|
||||
<div class="row justify-content-center no-print">
|
||||
<div class="col-md-12">
|
||||
@php
|
||||
$date_format = config('constants.APP_DATE_FORMAT');
|
||||
if (config('constants.APP_TIME_FORMAT') == '12') {
|
||||
$date_format .= ' h:i A';
|
||||
} else if (config('constants.APP_TIME_FORMAT') == '24') {
|
||||
$date_format .= ' H:i';
|
||||
} else {
|
||||
$date_format = 'm/d/Y h:i A';
|
||||
}
|
||||
@endphp
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
{{$form->name}}
|
||||
</div>
|
||||
<div class="container-fluid">
|
||||
<div class="row justify-content-center no-print">
|
||||
<div class="col-md-12">
|
||||
@php
|
||||
$is_enabled_sub_ref_no = false;
|
||||
if(isset($form->schema['settings']['form_submision_ref']['is_enabled']) && $form->schema['settings']['form_submision_ref']['is_enabled']) {
|
||||
$is_enabled_sub_ref_no = true;
|
||||
$date_format = config('constants.APP_DATE_FORMAT');
|
||||
if (config('constants.APP_TIME_FORMAT') == '12') {
|
||||
$date_format .= ' h:i A';
|
||||
} else if (config('constants.APP_TIME_FORMAT') == '24') {
|
||||
$date_format .= ' H:i';
|
||||
} else {
|
||||
$date_format = 'm/d/Y h:i A';
|
||||
}
|
||||
|
||||
@endphp
|
||||
<div class="tab-content card-body table-responsive" role="tabpanel">
|
||||
@if(!empty($form->schema))
|
||||
@php
|
||||
$schema = $form->schema['form'];
|
||||
$col_visible = $form['schema']['settings']['form_data']['col_visible'];
|
||||
$btn_enabled = $form['schema']['settings']['form_data']['btn_enabled'];
|
||||
@endphp
|
||||
<table class="table" id="submitted_data_table" style="width: 100%;">
|
||||
<thead>
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
{{$form->name}}
|
||||
</div>
|
||||
@php
|
||||
$is_enabled_sub_ref_no = false;
|
||||
if(isset($form->schema['settings']['form_submision_ref']['is_enabled']) && $form->schema['settings']['form_submision_ref']['is_enabled']) {
|
||||
$is_enabled_sub_ref_no = true;
|
||||
}
|
||||
|
||||
@endphp
|
||||
<div class="tab-content card-body table-responsive" role="tabpanel">
|
||||
@if(!empty($form->schema))
|
||||
@php
|
||||
$schema = $form->schema['form'];
|
||||
$col_visible = $form['schema']['settings']['form_data']['col_visible'];
|
||||
$btn_enabled = $form['schema']['settings']['form_data']['btn_enabled'];
|
||||
@endphp
|
||||
<table class="table" id="submitted_data_table" style="width: 100%;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>@lang('messages.action')</th>
|
||||
@if($is_enabled_sub_ref_no)
|
||||
<th>@lang('messages.submission_numbering')</th>
|
||||
@endif
|
||||
@if(auth()->user()->show_form_response_user)
|
||||
<th>@lang('messages.username')</th>
|
||||
@endif
|
||||
@foreach($schema as $element)
|
||||
@if(in_array($element['name'], $col_visible))
|
||||
<th>
|
||||
@ -79,32 +83,32 @@
|
||||
@endforeach
|
||||
<th>@lang('messages.submitted_on')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tbody>
|
||||
@foreach($data as $k => $row)
|
||||
<tr>
|
||||
<td>
|
||||
@if(in_array('view', $btn_enabled))
|
||||
<button type="button" class="btn btn-info btn-sm view_form_data m-1" data-href="{{action([\App\Http\Controllers\FormDataController::class, 'viewData'], [$row->id])}}" data-toggle="modal">
|
||||
<button type="button" class="btn btn-info btn-sm view_form_data m-1"
|
||||
data-href="{{action([\App\Http\Controllers\FormDataController::class, 'viewData'], [$row->id])}}"
|
||||
data-toggle="modal">
|
||||
<i class="fa fa-eye" aria-hidden="true"></i>
|
||||
@lang('messages.view')
|
||||
</button>
|
||||
@endif
|
||||
@if(in_array('delete', $btn_enabled))
|
||||
<button type="button" class="btn btn-danger btn-sm delete_form_data m-1" data-href="{{action([\App\Http\Controllers\FormDataController::class, 'destroy'], [$row->id])}}">
|
||||
<button type="button" class="btn btn-danger btn-sm delete_form_data m-1"
|
||||
data-href="{{action([\App\Http\Controllers\FormDataController::class, 'destroy'], [$row->id])}}">
|
||||
<i class="fa fa-trash" aria-hidden="true"></i>
|
||||
@lang('messages.delete')
|
||||
</button>
|
||||
@endif
|
||||
<a class="btn btn-primary btn-sm m-1" target="_blank" href="{{action([\App\Http\Controllers\FormDataController::class, 'downloadPdf'], [$row->id])}}">
|
||||
<i class="far fa-file-pdf" aria-hidden="true"></i>
|
||||
@lang('messages.download_pdf')
|
||||
</a>
|
||||
@php
|
||||
$form_id = !empty($form->slug) ? $form->slug : $form->id;
|
||||
@endphp
|
||||
<a class="btn btn-dark btn-sm m-1" target="_blank" href="{{action([\App\Http\Controllers\FormDataController::class, 'getEditformData'], ['slug' => $form_id,'id' => $row->id])}}">
|
||||
<a class="btn btn-dark btn-sm m-1" target="_blank"
|
||||
href="{{action([\App\Http\Controllers\FormDataController::class, 'getEditformData'], ['slug' => $form_id,'id' => $row->id])}}">
|
||||
<i class="far fa-edit" aria-hidden="true"></i>
|
||||
@lang('messages.edit')
|
||||
</a>
|
||||
@ -114,18 +118,25 @@
|
||||
{{$row['submission_ref']}}
|
||||
</td>
|
||||
@endif
|
||||
|
||||
@if(auth()->user()->show_form_response_user)
|
||||
<td>{{ $row->submittedBy?->name }}</td>
|
||||
@endif
|
||||
|
||||
@foreach($schema as $row_element)
|
||||
@if(in_array($row_element['name'], $col_visible))
|
||||
<td>
|
||||
@isset($row->data[$row_element['name']])
|
||||
@if($row_element['type'] == 'file_upload')
|
||||
|
||||
@include('form_data.file_view', ['form_upload' => $row->data[$row_element['name']]])
|
||||
@include('form_data.file_view', ['form_upload' => $row->data[$row_element['name']]])
|
||||
@elseif($row_element['type'] == 'signature')
|
||||
@if(!empty($row->data[$row_element['name']]))
|
||||
<a target="_blank" href="{{$row->data[$row_element['name']]}}"
|
||||
download="Signature">
|
||||
<img src="{{$row->data[$row_element['name']]}}" class="signature">
|
||||
<a target="_blank"
|
||||
href="{{$row->data[$row_element['name']]}}"
|
||||
download="Signature">
|
||||
<img src="{{$row->data[$row_element['name']]}}"
|
||||
class="signature">
|
||||
</a>
|
||||
@endif
|
||||
@elseif(is_array($row->data[$row_element['name']]) && $row_element['type'] != 'file_upload')
|
||||
@ -133,7 +144,7 @@
|
||||
@else
|
||||
{!! nl2br($row->data[$row_element['name']]) !!}
|
||||
@endif
|
||||
|
||||
|
||||
@endisset
|
||||
</td>
|
||||
@endif
|
||||
@ -147,121 +158,121 @@
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
@else
|
||||
<p>Form Not found</p>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</tbody>
|
||||
</table>
|
||||
@else
|
||||
<p>Form Not found</p>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@section('footer')
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
$('#submitted_data_table').DataTable({
|
||||
scrollY: "600px",
|
||||
scrollX: true,
|
||||
scrollCollapse: true,
|
||||
paging: true,
|
||||
fixedColumns: {
|
||||
leftColumns: 2
|
||||
}
|
||||
});
|
||||
// view form data
|
||||
$(document).on('click', '.view_form_data', function(){
|
||||
var url = $(this).data("href");
|
||||
$.ajax({
|
||||
method: "GET",
|
||||
dataType: "html",
|
||||
url: url,
|
||||
success: function(result){
|
||||
$("#modal_div").html(result).modal("show");
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function () {
|
||||
$('#submitted_data_table').DataTable({
|
||||
scrollY: "600px",
|
||||
scrollX: true,
|
||||
scrollCollapse: true,
|
||||
paging: true,
|
||||
fixedColumns: {
|
||||
leftColumns: 2
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//delete form data
|
||||
$(document).on('click', '.delete_form_data', function(){
|
||||
var url = $(this).data("href");
|
||||
var result = confirm('Are You Sure?');
|
||||
if (result == true) {
|
||||
// view form data
|
||||
$(document).on('click', '.view_form_data', function () {
|
||||
var url = $(this).data("href");
|
||||
$.ajax({
|
||||
method: "DELETE",
|
||||
method: "GET",
|
||||
dataType: "html",
|
||||
url: url,
|
||||
dataType: "json",
|
||||
success: function(result){
|
||||
if(result.success == true){
|
||||
toastr.success(result.msg);
|
||||
setTimeout(function(){
|
||||
location.reload();
|
||||
}, 1000);
|
||||
} else {
|
||||
toastr.error(result.msg);
|
||||
}
|
||||
success: function (result) {
|
||||
$("#modal_div").html(result).modal("show");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//print form data on btn click
|
||||
$(document).on('click', '.formDataPrintBtn', function() {
|
||||
printElement(document.getElementById("print_form_data"));
|
||||
});
|
||||
|
||||
$("#modal_div").on('shown.bs.modal', function () {
|
||||
if ($("form#add_comment_form").length) {
|
||||
$("form#add_comment_form").validate();
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on('submit', 'form#add_comment_form', function (e) {
|
||||
e.preventDefault();
|
||||
var data = $("form#add_comment_form").serialize();
|
||||
var url = $("form#add_comment_form").attr('action');
|
||||
var ladda = Ladda.create(document.querySelector('.add_comment_btn'));
|
||||
ladda.start();
|
||||
$.ajax({
|
||||
method: "POST",
|
||||
url: url,
|
||||
dataType: "json",
|
||||
data: data,
|
||||
success: function (response) {
|
||||
ladda.stop();
|
||||
if (response.success) {
|
||||
$("#comment").val('');
|
||||
$('.direct-chat-messages').prepend(response.comment);
|
||||
toastr.success(response.msg);
|
||||
} else {
|
||||
toastr.error(response.msg);
|
||||
}
|
||||
//delete form data
|
||||
$(document).on('click', '.delete_form_data', function () {
|
||||
var url = $(this).data("href");
|
||||
var result = confirm('Are You Sure?');
|
||||
if (result == true) {
|
||||
$.ajax({
|
||||
method: "DELETE",
|
||||
url: url,
|
||||
dataType: "json",
|
||||
success: function (result) {
|
||||
if (result.success == true) {
|
||||
toastr.success(result.msg);
|
||||
setTimeout(function () {
|
||||
location.reload();
|
||||
}, 1000);
|
||||
} else {
|
||||
toastr.error(result.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(document).on('click', '.delete-comment', function(e) {
|
||||
e.preventDefault();
|
||||
var element = $(this);
|
||||
var comment_id = $(this).data('comment_id');
|
||||
var form_data_id = $(this).data('form_data_id');
|
||||
if (confirm('Are you sure.?')) {
|
||||
//print form data on btn click
|
||||
$(document).on('click', '.formDataPrintBtn', function () {
|
||||
printElement(document.getElementById("print_form_data"));
|
||||
});
|
||||
|
||||
$("#modal_div").on('shown.bs.modal', function () {
|
||||
if ($("form#add_comment_form").length) {
|
||||
$("form#add_comment_form").validate();
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on('submit', 'form#add_comment_form', function (e) {
|
||||
e.preventDefault();
|
||||
var data = $("form#add_comment_form").serialize();
|
||||
var url = $("form#add_comment_form").attr('action');
|
||||
var ladda = Ladda.create(document.querySelector('.add_comment_btn'));
|
||||
ladda.start();
|
||||
$.ajax({
|
||||
method:'DELETE',
|
||||
dataType: 'json',
|
||||
url: '/form-data-comment/'+comment_id+'?form_data_id='+form_data_id,
|
||||
success: function(response){
|
||||
method: "POST",
|
||||
url: url,
|
||||
dataType: "json",
|
||||
data: data,
|
||||
success: function (response) {
|
||||
ladda.stop();
|
||||
if (response.success) {
|
||||
$("#comment").val('');
|
||||
$('.direct-chat-messages').prepend(response.comment);
|
||||
toastr.success(response.msg);
|
||||
element.closest('.direct-chat-msg').remove();
|
||||
} else {
|
||||
toastr.error(response.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on('click', '.delete-comment', function (e) {
|
||||
e.preventDefault();
|
||||
var element = $(this);
|
||||
var comment_id = $(this).data('comment_id');
|
||||
var form_data_id = $(this).data('form_data_id');
|
||||
if (confirm('Are you sure.?')) {
|
||||
$.ajax({
|
||||
method: 'DELETE',
|
||||
dataType: 'json',
|
||||
url: '/form-data-comment/' + comment_id + '?form_data_id=' + form_data_id,
|
||||
success: function (response) {
|
||||
if (response.success) {
|
||||
toastr.success(response.msg);
|
||||
element.closest('.direct-chat-msg').remove();
|
||||
} else {
|
||||
toastr.error(response.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
</script>
|
||||
@endsection
|
||||
|
@ -71,7 +71,7 @@
|
||||
</li>
|
||||
@endif
|
||||
<li class="nav-item">
|
||||
<a class="nav-link
|
||||
<a class="nav-link
|
||||
@if(!auth()->user()->can('superadmin') && !Auth::user()->can_create_form)
|
||||
active
|
||||
@endif
|
||||
@ -137,7 +137,6 @@
|
||||
<tr>
|
||||
<th>@lang('messages.name')</th>
|
||||
<th>@lang('messages.description')</th>
|
||||
<th>@lang('messages.created_by')</th>
|
||||
<th>@lang('messages.action')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -215,7 +214,7 @@
|
||||
if(result.success == true){
|
||||
toastr.success(result.msg);
|
||||
form_table.ajax.reload();
|
||||
} else {
|
||||
} else {
|
||||
toastr.error(result.msg);
|
||||
}
|
||||
}
|
||||
@ -236,7 +235,7 @@
|
||||
if(result.success == true){
|
||||
toastr.success(result.msg);
|
||||
template_table.ajax.reload();
|
||||
} else {
|
||||
} else {
|
||||
toastr.error(result.msg);
|
||||
}
|
||||
}
|
||||
@ -295,13 +294,11 @@
|
||||
"columnDefs": [
|
||||
{ "width": "25%", "targets": 0 },
|
||||
{ "width": "40%", "targets": 1 },
|
||||
{ "width": "15%", "targets": 2 },
|
||||
{ "width": "20%", "targets": 3 }
|
||||
{ "width": "20%", "targets": 2 }
|
||||
],
|
||||
columns: [
|
||||
{ data: 'name' , name: 'forms.name'},
|
||||
{ data: 'description' , name: 'forms.description'},
|
||||
{ data: 'created_by' , name: 'users.name', sortable:false},
|
||||
{ data: 'action', name: 'action', sortable:false }
|
||||
]
|
||||
});
|
||||
@ -393,4 +390,4 @@
|
||||
@endif
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
@endsection
|
||||
|
@ -40,7 +40,7 @@
|
||||
<script src="{{asset('/plugins/countdowntimer/countdowntimer.min.js').'?v='.$asset_version}}"></script>
|
||||
|
||||
@if(!$is_download)
|
||||
|
||||
|
||||
<!-- app js values -->
|
||||
<script type="application/javascript">
|
||||
var APP = {};
|
||||
@ -69,7 +69,7 @@
|
||||
function printElement(elem) {
|
||||
var domClone = elem.cloneNode(true);
|
||||
var printSection = document.getElementById("printSection");
|
||||
|
||||
|
||||
if (!printSection) {
|
||||
var printSection = document.createElement("div");
|
||||
printSection.id = "printSection";
|
||||
@ -129,7 +129,7 @@
|
||||
toastr.error("{{ __('messages.some_error_in_input_field') }}");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
$(document).ready(function(){
|
||||
@if(!$is_download)
|
||||
jQuery.extend($.fn.dataTable.defaults, {
|
||||
@ -138,34 +138,7 @@
|
||||
[25, 50, 100, 200, 500, 1000, -1], [25, 50, 100, 200, 500, 1000, "{{__('messages.all')}}"]
|
||||
],
|
||||
iDisplayLength: 25,
|
||||
dom: 'lBfrtip',
|
||||
buttons: [
|
||||
{
|
||||
extend: 'copy',
|
||||
text: "{{__('messages.copy')}}",
|
||||
exportOptions: {
|
||||
columns: ':visible',
|
||||
}
|
||||
},
|
||||
{
|
||||
extend: 'excel',
|
||||
text: "{{__('messages.excel')}}",
|
||||
exportOptions: {
|
||||
columns: ':visible',
|
||||
}
|
||||
},
|
||||
{
|
||||
extend: 'csv',
|
||||
text: "{{__('messages.csv')}}",
|
||||
exportOptions: {
|
||||
columns: ':visible',
|
||||
}
|
||||
},
|
||||
{
|
||||
extend: 'colvis',
|
||||
text: "{{__('messages.column_visibility')}}",
|
||||
},
|
||||
],
|
||||
dom: 'lfrtip',
|
||||
"language": {
|
||||
"emptyTable": "{{__('messages.emptyTable')}}",
|
||||
"info": "{{__('messages.dt_info')}}",
|
||||
@ -269,10 +242,10 @@
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Dropzone.autoDiscover = false;
|
||||
function initialize_dropzone(element_name, file_upload_msg, no_of_files_can_be_uploaded, max_file_size, allowed_file_type, url = null) {
|
||||
|
||||
|
||||
var file_remove_url = "library/delete_file.php";
|
||||
if (url == null) {
|
||||
url = "{{ url('/file-upload')}}";
|
||||
@ -333,11 +306,11 @@
|
||||
if(result.success == 1){
|
||||
toastr.success(result.msg);
|
||||
var index = file_names.indexOf(file.uploaded_as);
|
||||
|
||||
|
||||
if(index!=-1){
|
||||
file_names.splice(index, 1);
|
||||
}
|
||||
|
||||
|
||||
var elementVal = $('input#'+element_name).val();
|
||||
var oldVal = elementVal.split(",");
|
||||
|
||||
@ -373,12 +346,12 @@
|
||||
}
|
||||
|
||||
function initialize_text_editor(element_name, placeholder, height) {
|
||||
|
||||
|
||||
$('#'+element_name).summernote({
|
||||
placeholder: placeholder,
|
||||
height: height
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function initialize_star_rating(element_name) {
|
||||
$("#"+element_name).rating({
|
||||
@ -415,18 +388,18 @@
|
||||
var signaturePad = element;
|
||||
var canvas = document.getElementById(element);
|
||||
signaturePad = new SignaturePad(canvas, {
|
||||
onEnd: function(event) {
|
||||
onEnd: function(event) {
|
||||
var element = $(this)[0]._canvas.id
|
||||
var signature = $(this)[0].toDataURL();
|
||||
$('#output_'+element).val(signature);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
if ($('#output_'+element).val().length > 0) {
|
||||
|
||||
signaturePad.fromDataURL($('#output_'+element).val());
|
||||
}
|
||||
|
||||
|
||||
$(document).on('click', '#clear_'+element, function() {
|
||||
signaturePad.clear();
|
||||
$('#output_'+$(this).data('name')).val('');
|
||||
@ -476,5 +449,5 @@
|
||||
@if(!$is_download && !isset($nav))
|
||||
@if(!empty($__additional_js))
|
||||
{!!$__additional_js!!}
|
||||
@endif
|
||||
@endif
|
||||
@endif
|
||||
@endif
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
<input type="text" class="form-control"
|
||||
name="name" id="name" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
@ -32,7 +32,7 @@
|
||||
|
||||
<input type="email" class="form-control"
|
||||
name="email" id="email" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@ -45,7 +45,7 @@
|
||||
|
||||
<input type="password" class="form-control"
|
||||
name="password" id="password" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@ -76,6 +76,25 @@
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="form-group form-check">
|
||||
<input type="checkbox" class="form-check-input" name="show_form_response_user" id="show_form_response_user" value="1">
|
||||
<label class="form-check-label" for="show_form_response_user">
|
||||
@lang('messages.show_form_response_user')
|
||||
<i class="fas fa-info-circle text-info" data-toggle="tooltip" title="@lang('messages.show_form_response_user_tooltip')"></i>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="form-group form-check">
|
||||
<input type="checkbox" class="form-check-input" name="show_edit_buttons_form" id="show_edit_buttons_form" value="1">
|
||||
<label class="form-check-label" for="show_edit_buttons_form">
|
||||
@lang('messages.show_edit_buttons_form')
|
||||
<i class="fas fa-info-circle text-info" data-toggle="tooltip" title="@lang('messages.show_edit_buttons_form_tooltip')"></i>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card assign-form p-3">
|
||||
<div class="row">
|
||||
@ -95,7 +114,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<h5>@lang('messages.permission_for_forms'):</h5>
|
||||
<div class="row">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<div class="form-group form-check">
|
||||
<input type="checkbox" class="form-check-input" name="permissions[]" id="form_design" value="can_design_form">
|
||||
@ -136,4 +155,4 @@
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
<input type="text" class="form-control"
|
||||
name="name" id="name" value="{{$user->name}}" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
@ -33,7 +33,7 @@
|
||||
|
||||
<input type="email" class="form-control"
|
||||
name="email" id="email" value="{{$user->email}}" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@ -47,7 +47,7 @@
|
||||
<small id="passwordHelp" class="form-text text-muted">
|
||||
@lang('messages.dont_want_to_change_keep_it_blank')
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@ -78,6 +78,25 @@
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
<div class="form-group form-check">
|
||||
<input type="checkbox" class="form-check-input" name="show_form_response_user" id="show_form_response_user" value="1" @if($user->show_form_response_user) checked @endif>
|
||||
<label class="form-check-label" for="show_form_response_user">
|
||||
@lang('messages.show_form_response_user')
|
||||
<i class="fas fa-info-circle text-info" data-toggle="tooltip" title="@lang('messages.show_form_response_user_tooltip')"></i>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="form-group form-check">
|
||||
<input type="checkbox" class="form-check-input" name="show_edit_buttons_form" id="show_edit_buttons_form" value="1" @if($user->show_edit_buttons_form) checked @endif>
|
||||
<label class="form-check-label" for="show_edit_buttons_form">
|
||||
@lang('messages.show_edit_buttons_form')
|
||||
<i class="fas fa-info-circle text-info" data-toggle="tooltip" title="@lang('messages.show_edit_buttons_form_tooltip')"></i>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@if(auth()->user()->id != $user->id)
|
||||
@php
|
||||
@ -91,7 +110,7 @@
|
||||
<i class="fab fa-wpforms"></i>
|
||||
{{$assigned_form->form->name}}
|
||||
</label>
|
||||
<div class="row">
|
||||
<div class="row">
|
||||
<input type="hidden" name="edit_assigned_form_id[]" value="{{$assigned_form->id}}">
|
||||
<div class="col-md-4">
|
||||
<div class="form-group form-check">
|
||||
@ -194,4 +213,4 @@
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user