FILES_MINTON_ASSETS_FILESPUSH : RV

This commit is contained in:
VENKATESHWARAN 2024-02-07 11:01:23 +05:30
parent 1ea98b2b26
commit de758a8918
1769 changed files with 522422 additions and 11909 deletions

5
.gitignore vendored
View File

@ -13,6 +13,9 @@ writable/session/*
writable/uploads/*
!writable/uploads/.gitkeep
public/uploads/*
!public/uploads/.gitkeep
writable/debugbar/*
!writable/debugbar/.gitkeep
@ -22,4 +25,4 @@ writable/**/*.sqlite
vendor/
composer.lock
.env
.env

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@ -98,5 +98,5 @@ class Autoload extends AutoloadConfig
* @var string[]
* @phpstan-var list<string>
*/
public $helpers = ['uuid','session','utility'];
public $helpers = ['uuid','session','utility', 'form', 'url', 'oauth'];
}

38
app/Config/Boot/test.php Normal file
View File

@ -0,0 +1,38 @@
<?php
/*
* The environment testing is reserved for PHPUnit testing. It has special
* conditions built into the framework at various places to assist with that.
* You cant use it for your development.
*/
/*
|--------------------------------------------------------------------------
| ERROR DISPLAY
|--------------------------------------------------------------------------
| In development, we want to show as many errors as possible to help
| make sure they don't make it to production. And save us hours of
| painful debugging.
*/
error_reporting(E_ALL);
ini_set('display_errors', '1');
/*
|--------------------------------------------------------------------------
| DEBUG BACKTRACES
|--------------------------------------------------------------------------
| If true, this constant will tell the error screens to display debug
| backtraces along with the other error information. If you would
| prefer to not see this, set this value to false.
*/
defined('SHOW_DEBUG_BACKTRACE') || define('SHOW_DEBUG_BACKTRACE', true);
/*
|--------------------------------------------------------------------------
| DEBUG MODE
|--------------------------------------------------------------------------
| Debug mode is an experimental flag that can allow changes throughout
| the system. It's not widely used currently, and may not survive
| release of the framework.
*/
defined('CI_DEBUG') || define('CI_DEBUG', true);

38
app/Config/Boot/uat.php Normal file
View File

@ -0,0 +1,38 @@
<?php
/*
* The environment testing is reserved for PHPUnit testing. It has special
* conditions built into the framework at various places to assist with that.
* You cant use it for your development.
*/
/*
|--------------------------------------------------------------------------
| ERROR DISPLAY
|--------------------------------------------------------------------------
| In development, we want to show as many errors as possible to help
| make sure they don't make it to production. And save us hours of
| painful debugging.
*/
error_reporting(E_ALL);
ini_set('display_errors', '1');
/*
|--------------------------------------------------------------------------
| DEBUG BACKTRACES
|--------------------------------------------------------------------------
| If true, this constant will tell the error screens to display debug
| backtraces along with the other error information. If you would
| prefer to not see this, set this value to false.
*/
defined('SHOW_DEBUG_BACKTRACE') || define('SHOW_DEBUG_BACKTRACE', true);
/*
|--------------------------------------------------------------------------
| DEBUG MODE
|--------------------------------------------------------------------------
| Debug mode is an experimental flag that can allow changes throughout
| the system. It's not widely used currently, and may not survive
| release of the framework.
*/
defined('CI_DEBUG') || define('CI_DEBUG', true);

View File

@ -23,12 +23,12 @@ class Filters extends BaseConfig
* @phpstan-var array<string, class-string|list<class-string>>
*/
public array $aliases = [
'csrf' => CSRF::class,
'toolbar' => DebugToolbar::class,
'honeypot' => Honeypot::class,
'invalidchars' => InvalidChars::class,
'secureheaders' => SecureHeaders::class,
'authMVC' => AuthMVC::class,
'csrf' => CSRF::class,
'toolbar' => DebugToolbar::class,
'honeypot' => Honeypot::class,
'invalidchars' => InvalidChars::class,
'secureheaders' => SecureHeaders::class,
'authMVC' => AuthMVC::class,
'HttpRequestLog' => HttpRequestLog::class
];
@ -42,7 +42,7 @@ class Filters extends BaseConfig
public array $globals = [
'before' => [
'HttpRequestLog',
// 'csrf',
'csrf',
// 'invalidchars',
],
'after' => [

View File

@ -5,11 +5,11 @@ use CodeIgniter\Router\RouteCollection;
/**
* @var RouteCollection $routes
*/
$routes->get('/', 'Home::index');
// $routes->get('/', 'LoginController::index');
$routes->get('/test', 'Home::test');
//$routes->get('/admin', 'AdminController::adminTest');
$routes->get('/auth', 'LoginController::loginMe');
$routes->get('/login', 'LoginController::login');
$routes->get('/login', 'LoginController::index');
$routes->get('/logout', 'LoginController::logout');
$routes->get('/LoginController/receiveGoogleOAuthResponse', 'LoginController::receiveGoogleOAuthResponse');
$routes->group("/user", ["filter" => "authMVC"], function($routes){
@ -17,12 +17,13 @@ $routes->group("/user", ["filter" => "authMVC"], function($routes){
$routes->get("create", "UserController::create");
$routes->post("edit", "UserController::edit");
$routes->get("list", "UserController::list");
$routes->get("list/(:hash)", "UserController::list");
$routes->get("search/(:hash)", "UserController::search");
$routes->get("getuser/(:hash)", "UserController::getuser/$1");
$routes->get("deactive/(:hash)", "UserController::deactive/$1");
$routes->get("rolesandteams", "UserController::getRolesAndTeams");
});
$routes->group("/dashboard", ["filter" => "authMVC"], function($routes){
$routes->get("", "DashboardController::create");
$routes->get("view", "DashboardController::dashboard");
});

View File

@ -24,7 +24,7 @@ class Security extends BaseConfig
*
* Randomize the CSRF Token for added security.
*/
public bool $tokenRandomize = false;
public bool $tokenRandomize = true;
/**
* --------------------------------------------------------------------------
@ -80,7 +80,7 @@ class Security extends BaseConfig
*
* Redirect to previous page with error on failure.
*/
public bool $redirect = false;
public bool $redirect = true;
/**
* --------------------------------------------------------------------------

View File

@ -17,6 +17,8 @@ class DashboardController extends AdminController
public function dashboard()
{
return view('dashboard');
echo view('layout/header');
echo view('DashBoard');
echo view('layout/footer');
}
}

View File

@ -7,20 +7,63 @@ use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
use App\Models\UserModal;
class LoginController extends BaseController
{
public function __construct()
{
//echo 'LoginController';
public function index(){
$isLoggedIn = session()->get('isLoggedIn');
if ($isLoggedIn) {
return redirect()->to(base_url('/dashboard/view'));
}
return view('login');
}
public function login()
public function receiveGoogleOAuthResponse()
{
$UserModel = new UserModal();
if ($this->request->getGet('code')) {
$code = (string) $this->request->getGet('code');
log_message('error', 'Get OAuth Responce Code Sucessfully');
log_message('error', 'OAuthResponceCode : `'.$code.'`');
$value = googleOAuthLogin($this->request->getGet('code'));
if($value){
$user = $UserModel->getUserByEmail($value->email);
if($user){
if($user->is_active !== '0'){
$session_data = ['isLoggedIn' => True ,'userid' => $user->id];
set_session_data($session_data);
log_message('error', 'Set The UserId : `'. $user->id .'` in Session');
log_message('error', 'Is User Login Sucessfully');
return redirect()->to(base_url('/dashboard/view'));
}else{
log_message('error', 'Is User Not Activate');
session()->setFlashdata('error', 'Is User Not Activate');
return redirect()->to(base_url('login'));
}
}else{
log_message('error', 'Is User Not Register');
session()->setFlashdata('error', 'Is User Not Register');
return redirect()->to(base_url('login'));
}
}
}else{
$return = googleOAuthLogin(false);
return $return;
}
}
public function logout()
{
// $this->session->set('isLoggedIn',true);
// $this->session->set('userid','10');
return view('login');
session()->destroy();
return redirect()->to(base_url('login'));
}

View File

@ -8,142 +8,104 @@ use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
use App\Models\User;
use App\Models\UserModal;
use App\Models\RoleModal;
use App\Models\TeamsModal;
class UserController extends AdminController
{
public function __construct()
public function list()
{
// helper('utility');
$model = new UserModal();
$data['UserList'] = $model->where('is_active', 1)->orderBy('id', 'DESC')->findAll();
echo view('layout/header');
echo view('AddUser');
echo view('UserList', $data);
echo view('layout/footer');
}
public function create()
{
{
print_r($this->request->getPost()); die;
//if this is get method return to user creation page
if(!$this->request->getPost()){
return redirect()->to(base_url('/user/list'));
}else{
//else do user insert operation
$userModel = new UserModal();
$File = fileUpload($this->request->getFile('profile'));
$userData = $this->request->getPost();
if(!empty($File)){
$userData['profile'] = $File;
}
//if this get method return to user creation page
if($this->request->getMethod() == 'get')
return view('user');
//else do user insert operation
$userModel = new User();
// Inserting data into the 'users' table
$userData['created_by'] = get_session_userid();
$insert = $userModel->insert($userData);
}
return redirect()->to(base_url('/user/list'));
}
$userData = [
'username' => $this->request->getPost('username'),
'firstname' => $this->request->getPost('firstname'),
'lastname' => $this->request->getPost('lastname'),
'email' => $this->request->getPost('email'),
'mobile_no' => $this->request->getPost('mobile_no'),
'password' => $this->request->getPost('password'),
'is_active' => true,
'updated_by' => get_session_userid(),
'created_by' => get_session_userid()
];
// print_r($userData);die();
// Inserting data into the 'users' table
$userModel->insert($userData);
public function getuser($id = null){
// Get the ID of the inserted record
$insertedId = $userModel->insertID();
redirect('user/list');
$model = new UserModal();
$data = $model->where('id', $id)->first();
if($data){
echo json_encode(array("status" => true , 'data' => $data));
}else{
echo json_encode(array("status" => false));
}
}
public function edit()
{
$userModel = new User();
{
if(!$this->request->getPost()){
return redirect()->to(base_url('/user/list'));
}else{
$userModel = new UserModal();
$id = $this->request->getPost('PrimaryKey');
$imageDetails = $userModel->find($id);
$File = fileUpload($this->request->getFile('profile'), (isset($imageDetails['profile']) ? $imageDetails['profile'] : null));
$userData = $this->request->getPost();
if(!empty($File)){
$userData['profile'] = $File;
}
$id = $this->request->getPost('id');
$userData = [
'username' => $this->request->getPost('username'),
'firstname' => $this->request->getPost('firstname'),
'lastname' => $this->request->getPost('lastname'),
'email' => $this->request->getPost('email'),
'mobile_no' => $this->request->getPost('mobile_no'),
'password' => $this->request->getPost('password'),
'is_active' => $this->request->getPost('is_active'),
//'updated_by' => $this->request->getPost('updated_by'),
//'created_by' => $this->request->getPost('created_by')
];
// Update data in the 'users' table based on the $id
$is_updated = $userModel->update($id, $userData);
// Get the ID of the updated record
//$updatedId = $userModel->getPrimaryVal($id);
echo 'done';
redirect('user/list');
}
public function list()
{
$uri = service('uri');
$userid = $uri->getSegment(3);
$userModel = new User();
// Fetch all users from the 'users' table
$users = $userModel
->join('users3 as updater', 'updater.id = users3.updated_by', 'left')
->join('users3 as creator', 'creator.id = users3.created_by', 'left')
->select('users3.*, updater.username as updated_by_name,creator.username as created_by_name'); // Assuming
if(!empty($userid) && is_numeric($userid))
{
$result = $users->find($userid);
return view('user',['user' => $result]);
// Update data in the 'users' table based on the $id
$userData['updated_by'] = get_session_userid();
unset($userData['PrimaryKey']);
$update = $userModel->update($id, $userData);
return redirect()->to(base_url('/user/list'));
}
else
{
$result = $users->findAll();
// print_r($result);die();
return view('userlist',['users' => $result]);
}
}
public function search()
{
$userModel = new User();
public function deactive($id = null)
{
$model = new UserModal();
$deactive = $model->where('id', $id)->set(['is_active' => 0])->update();
if($deactive)
{
echo json_encode(array("status" => true));
}else{
echo json_encode(array("status" => false));
}
}
// Get search inputs from the query string
$firstname = $this->request->getGet('firstname');
$lastname = $this->request->getGet('lastname');
$username = $this->request->getGet('username');
$mobile_no = $this->request->getGet('mobile_no');
$email = $this->request->getGet('email');
$created_at = $this->request->getGet('created_at');
public function getRolesAndTeams(){
// Set conditions for the search query
$conditions = [];
if (!empty($firstname)) {
$conditions['firstname LIKE'] = "%$firstname%";
}
if (!empty($lastname)) {
$conditions['lastname LIKE'] = "%$lastname%";
}
if (!empty($username)) {
$conditions['username LIKE'] = "%$username%";
}
if (!empty($mobile_no)) {
$conditions['mobile_no LIKE'] = "%$mobile_no%";
}
if (!empty($email)) {
$conditions['email LIKE'] = "%$email%";
}
if (!empty($created_at)) {
// Assuming created_before is in the format YYYY-MM-DD
$conditions['created_at'] = $created_at;
}
$RoleModal = new RoleModal();
$TeamModal = new TeamsModal();
// Fetch users based on search conditions
$users = $userModel->where($conditions)->findAll();
return view('userlist',['users' => $users]);
$roleData = $RoleModal->select('id, role')->findAll();
$teamData = $TeamModal->select('id, name')->findAll();
echo json_encode(array("status" => true , 'roleData' => $roleData, 'teamData' => $teamData,));
}
}

View File

@ -11,7 +11,7 @@ class AuthMVC implements FilterInterface
{
if (!check_session()) {
return redirect()->to(base_url('login'));
return redirect()->to(base_url('/login'));
}
}

View File

@ -0,0 +1,56 @@
<?php
// File: app/Helpers/oauth_helper.php
use Google\Client as GoogleClient;
use Google\Service\Oauth2;
// Check if the function exists, to prevent redeclaration
if (!function_exists('googleOauthLogin')) {
function googleOAuthLogin($oauthToken)
{
// Retrieve configuration values from environment variables
$appName = getenv('GOOGLE_OAUTH_APP_NAME');
$clientID = getenv('GOOGLE_OAUTH_CLIENT_ID');
$clientSecret = getenv('GOOGLE_OAUTH_CLIENT_SECRET');
$redirectUri = getenv('GOOGLE_OAUTH_REDIRECT_URI');
$scopes = getenv('GOOGLE_OAUTH_SCOPES');
// Convert the scopes string into an array
$scopesArray = explode(',', $scopes);
// Initialize a new Google client
$client = new GoogleClient();
$client->setApplicationName($appName);
$client->setClientId($clientID);
$client->setClientSecret($clientSecret);
$client->setRedirectUri($redirectUri);
$client->addScope($scopesArray);
// Check if an OAuth token is provided
if ($oauthToken) {
try {
// Attempt to fetch the access token with the provided OAuth token
$token = $client->fetchAccessTokenWithAuthCode($oauthToken);
$client->setAccessToken($token);
$oauth = new Oauth2($client);
// Get user information using the OAuth2 service
$user_info = $oauth->userinfo->get();
return $user_info;
} catch (\Exception $e) {
// Handle exceptions and return an error message
return 'Error fetching access token: ' . $e->getMessage();
}
} else {
// If no OAuth token is provided, generate the authentication URL
$url = $client->createAuthUrl();
// Redirect the user to the authentication URL
return redirect()->to(filter_var($url, FILTER_SANITIZE_URL));
}
}
}
?>

View File

@ -57,10 +57,19 @@ if (!function_exists('set_session_uuid')) {
}
if (!function_exists('get_session_uuid')) {
function get_session_uuid($uuid)
function get_session_uuid()
{
// $CI =& get_instance();
$session = \Config\Services::session();
$session->set('uuid', $uuid);
$session->get('uuid');
}
}
if (!function_exists('set_session')) {
function set_session_data($data)
{
// $CI =& get_instance();
$session = \Config\Services::session();
$session->set($data);
}
}

View File

@ -43,3 +43,30 @@ if (!function_exists('change_date_format')) {
}
}
if (!function_exists('fileUpload')) {
function fileUpload($fileToUpload, $imageDetails = null)
{
$fileName = $fileToUpload->getClientName();
if ($fileToUpload !== NULL && $fileName !== "") {
if ($fileToUpload->isValid() && !$fileToUpload->hasMoved()) {
// Check if the image exists in the upload folder
$existingImagePath = ROOTPATH . 'public/uploads/' . $imageDetails; // Adjust filename field based on your database structure
if ($imageDetails !== null && file_exists($existingImagePath)) {
// If the image exists, delete it
unlink($existingImagePath);
}
// Move the new image to the upload folder
$fileToUpload->move(ROOTPATH . 'public/uploads', $fileName);
}
} else {
$fileName = "";
}
return $fileName;
}
}

18
app/Models/RoleModal.php Normal file
View File

@ -0,0 +1,18 @@
<?php
namespace App\Models;
use CodeIgniter\Model;
class RoleModal extends Model
{
protected $table = 'roles';
protected $primaryKey = 'id';
protected $allowedFields = [
"id",
"role",
];
}
?>

16
app/Models/TeamsModal.php Normal file
View File

@ -0,0 +1,16 @@
<?php
namespace App\Models;
use CodeIgniter\Model;
class TeamsModal extends Model
{
protected $table = 'teams';
protected $primaryKey = 'id';
protected $allowedFields = [
"id",
"name",
];
}
?>

View File

@ -3,10 +3,10 @@ namespace App\Models;
use CodeIgniter\Model;
class User extends Model
class UserModal extends Model
{
protected $DBGroup = 'default';
protected $table = 'users3';
protected $table = 'user_profiles';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
protected $insertID = 0;
@ -14,16 +14,18 @@ class User extends Model
protected $useSoftDelete = false;
protected $protectFields = true;
protected $allowedFields = [
"username",
"firstname",
"lastname",
"id",
"emp_code",
"first_name",
"last_name",
"email",
"mobile",
"profile",
"mobile_no",
"password",
"is_active",
"updated_by",
"created_by",
"created_at",
"updated_by",
"updated_at",
"is_active",
];
// Dates
@ -71,5 +73,16 @@ class User extends Model
return $data;
}
public function getUserByEmail($email){
$userData = $this->where('email', $email)->get();
if ($userData->getNumRows() > 0) {
return $userData->getRow();
} else {
return false;
}
}
}
?>

94
app/Views/AddUser.php Normal file
View File

@ -0,0 +1,94 @@
<!-- start page title -->
<div class="row">
<div class="col-12">
<div class="page-title-box page-title-box-alt">
<h4 class="page-title"></h4>
<div class="page-title-right">
<ol class="breadcrumb m-0">
<li></li>
</ol>
</div>
</div>
</div>
</div>
<!-- ADD and EDIT Page HTML -->
<div class="row" id="Add-Edit-Page">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="row" style="padding-bottom: 10px;">
<div class="col-6" style="align-self: center;">
<h4 class="header-title" style="position: relative;"></h4>
</div>
<div class="col-6" style="text-align: right;">
<button type="button" class="btn btn-primary waves-effect waves-light btnBack">Back</button>
</div>
</div>
<form role="form" class="parsley-examples" method="post" id="UserForm" action="" enctype="multipart/form-data">
<input type="hidden" value="<?= csrf_hash() ?>" name="<?= csrf_token() ?>"/>
<input type="hidden" name="PrimaryKey" id="UserId"/>
<div class="form-group">
<div class="form-row">
<div class="form-group col-md-6">
<label for="first_name">First Name<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="first_name" placeholder="Enter First Name" name="first_name" required>
</div>
<div class="form-group col-md-6">
<label for="last_name">Last Name<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="last_name" placeholder="Enter Last Name" name="last_name" required>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="email">Email<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="email" placeholder="Enter Email" name="email" required>
</div>
<div class="form-group col-md-6">
<label for="mobile">Mobile Number<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="mobile" placeholder="Enter Mobile Number" name="mobile" required>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="emp_code">Employee Code</label>
<input type="text" class="form-control" id="emp_code" placeholder="Enter Employee Code" name="emp_code">
</div>
<div class="form-group col-md-6">
<label for="profile">Image</label>
<input class="form-control" type="file" name="profile" multiple="true" id="profile" onchange="onFileUpload(this);" accept="image/*">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="emp_code">User Role</label>
<select class="form-control" id="role" name="role" >
</select>
</div>
<div class="form-group col-md-6">
<label for="profile">User Team</label>
<select class="form-control" id="team" name="team[]" multiple>
<option value="">Select Team</option>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-12" style="position: relative;top: 30px;">
<img class="mb-3 float-right" id="ajaxImgUpload" alt="Preview Image" src="https://via.placeholder.com/300" width="100" />
</div>
</div>
</div>
<div class="form-group text-right m-b-0">
<button type="submit" class="btn btn-primary waves-effect waves-light mr-1" id="btnSubmit">Submit</button>
<button type="button" class="btn btn-secondary waves-effect btnBack" id="btnBack">Cancel</button>
</div>
</form>
</div>
</div> <!-- end card-box -->
</div> <!-- end col-->
</div>
<!-- end row-->

15
app/Views/DashBoard.php Normal file
View File

@ -0,0 +1,15 @@
<!-- start page title -->
<div class="row">
<div class="col-12">
<div class="page-title-box page-title-box-alt">
<h4 class="page-title">Welcome !</h4>
<div class="page-title-right">
<ol class="breadcrumb m-0">
<li class="breadcrumb-item"><a href="javascript: void(0);">Dashboards</a></li>
</ol>
</div>
</div>
</div>
</div>
<!-- end page title -->

249
app/Views/UserList.php Normal file
View File

@ -0,0 +1,249 @@
<!-- End ADD and EDIT Page HTML -->
<div class="row" id="List-page">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="row" style="padding-bottom: 10px;">
<div class="col-6" style="align-self: center;">
<h4 class="header-title" style="position: relative;">User List</h4>
</div>
<div class="col-6" style="text-align: right;">
<button type="button" id="btnAdd" class="btn btn-primary waves-effect waves-light">Add</button>
</div>
</div>
<table id="datatable-buttons" class="table table-striped dt-responsive nowrap w-100">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
<th>Mobile No</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php foreach($UserList as $row) { ?>
<tr id="<?php echo $row['id'];?>">
<td><?php echo $row['first_name']; ?></td>
<td><?php echo $row['last_name']; ?></td>
<td><?php echo $row['email']; ?></td>
<td><?php echo $row['mobile']; ?></td>
<td>
<a class="btnEdit" data-id="<?php echo $row['id']; ?>"><i data-id="<?php echo $row['id']; ?>" class="mdi mdi-lead-pencil btnEdit" style="font-size:18px;"></i></a>
<a class="btnDelete" data-id="<?php echo $row['id']; ?>"><i data-id="<?php echo $row['id']; ?>" class="mdi mdi-delete btnDelete" style="font-size:18px;"></i></a>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div> <!-- end card body-->
</div> <!-- end card -->
</div><!-- end col-->
</div>
<!-- end row-->
<script>
$(document).ready(function () {
$('#Add-Edit-Page').hide();
$('.btnBack').hide();
$('#btnAdd').click(function(){
$('#Add-Edit-Page').show();
$('.header-title').html('Add User');
$('#btnSubmit').html('Submit');
$('#first_name').val('');
$('#last_name').val('');
$('#email').val('');
$('#mobile').val('');
$('#emp_code').val('');
$('#profile').val('');
$('#ajaxImgUpload').attr('src', 'https://via.placeholder.com/300').width(100);
$('#List-page').hide();
$('.btnBack').show();
$('#btnAdd').hide();
$('#UserForm').attr('action', '<?php echo base_url('/user/create');?>');
$.ajax({
url: '<?php echo base_url('user/rolesandteams/');?>',
type: "GET",
dataType: 'json',
success: function (res) {
console.log(res)
$.each(res.roleData, function(index, item) {
console.log(item.role)
$('#role').append($('<option>', {
value: item.id,
text : item.role
}));
});
$.each(res.teamData, function(index, item) {
$('#team').append($('<option>', {
value: item.id,
text : item.name
}));
});
$('#team').multiselect({
nonSelectedText: 'Select Team',
enableFiltering: false,
enableCaseInsensitiveFiltering: false,
includeSelectAllOption : true,
buttonWidth:'100%'
});
},
error: function (xhr, status, error) {
console.error(xhr.responseText);
console.error(status, error);
}
});
})
$('.btnBack').click(function(){
$('#Add-Edit-Page').hide();
$('.header-title').html('User List');
$('#UserId').val('');
$('#first_name').val('');
$('#last_name').val('');
$('#email').val('');
$('#mobile').val('');
$('#emp_code').val('');
$('#profile').val('');
$('#ajaxImgUpload').attr('src', 'https://via.placeholder.com/300').width(100);
$('#List-page').show();
$('.btnBack').hide();
$('#btnAdd').show();
})
$('body').on('click', '.btnEdit', function () {
var student_id = $(this).attr('data-id');
$.ajax({
url: '<?php echo base_url('user/getuser/');?>'+student_id,
type: "GET",
dataType: 'json',
success: function (res) {
$('#Add-Edit-Page').show();
$('.header-title').html('Edit User');
$('#List-page').hide();
$('.btnBack').show();
$('#btnAdd').hide();
$('#UserForm').attr('action', '<?php echo base_url('user/edit');?>');
$('#UserId').val(res.data.id);
$('#first_name').val(res.data.first_name);
$('#last_name').val(res.data.last_name);
$('#email').val(res.data.email);
$('#mobile').val(res.data.mobile);
$('#emp_code').val(res.data.emp_code);
$('#btnSubmit').html('Update');
if(res.data.profile){
$('#ajaxImgUpload').attr('src', '<?php echo base_url();?>public/uploads/'+res.data.profile).width(100);
}else{
$('#ajaxImgUpload').attr('src', 'https://via.placeholder.com/300').width(100);
}
},
error: function (xhr, status, error) {
console.error(xhr.responseText);
console.error(status, error);
}
});
});
$('body').on('click', '.btnDelete', function () {
Swal.fire({
title: "Are you sure?",
text: "You won't be able to revert this!",
icon: "warning",
showCancelButton: true,
confirmButtonColor: "#3085d6",
cancelButtonColor: "#d33",
confirmButtonText: "Yes, delete it!"
}).then((result) => {
if (result.isConfirmed) {
var student_id = $(this).attr('data-id');
$.get('<?php echo base_url('user/deactive/');?>'+student_id, function (data) {
console.log(data);
$('#datatable-buttons tbody #'+ student_id).remove();
})
}
});
});
$('#datatable-buttons').DataTable({
"dom": 'Bfrtip', // Show export buttons
"paging": true,
"lengthMenu": [ [10, 25, 50, 100], [10, 25, 50, 100] ], // Define length menu options
buttons: [
{
extend: 'pdfHtml5',
title: 'UserList', // Set your custom PDF title here
text: 'PDF',
customize: function(doc) {
// You can further customize the PDF here if needed
doc.content[1].table.body.forEach(function(row) {
row.pop(); // Remove the last column
});
}
},
{
extend: 'csv',
text: 'CSV', // Set the title for the CSV button
title: 'UserList', // Set your custom print title here
exportOptions: {
columns: ':not(:last-child)' // Exclude the first and last column (ID column)
}
},
]
});
});
function onFileUpload(input, id) {
id = id || '#ajaxImgUpload';
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
console.log(e.target.result);
$(id).attr('src', e.target.result).width(100);
};
reader.readAsDataURL(input.files[0]);
}
}
function isFieldEmptyOrNull(formData, fieldName) {
let value = formData.get(fieldName);
return value === '' || value === null;
}
function areFieldsEmptyOrFileEmpty(id) {
console.log(id)
let element = document.getElementById(id);
if (element.type === 'file') {
console.log(element.files.length)
if (element.files.length === 0) {
return true; // File input is empty
}
} else {
if (element.value === '') {
return true; // Other input field is empty
}
}
return false; // All fields are non-empty
}
</script>

View File

@ -1,71 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>Simple Sidebar - Start Bootstrap Template</title>
<!-- Favicon-->
<link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
<!-- Core theme CSS (includes Bootstrap)-->
<link href="css/styles.css" rel="stylesheet" />
</head>
<body>
<div class="d-flex" id="wrapper">
<!-- Sidebar-->
<div class="border-end bg-white" id="sidebar-wrapper">
<div class="sidebar-heading border-bottom bg-light">Start Bootstrap</div>
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Dashboard</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Shortcuts</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Overview</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Events</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Profile</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Status</a>
</div>
</div>
<!-- Page content wrapper-->
<div id="page-content-wrapper">
<!-- Top navigation-->
<nav class="navbar navbar-expand-lg navbar-light bg-light border-bottom">
<div class="container-fluid">
<button class="btn btn-primary" id="sidebarToggle">Toggle Menu</button>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ms-auto mt-2 mt-lg-0">
<li class="nav-item active"><a class="nav-link" href="#!">Home</a></li>
<li class="nav-item"><a class="nav-link" href="#!">Link</a></li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="navbarDropdown" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#!">Action</a>
<a class="dropdown-item" href="#!">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#!">Something else here</a>
</div>
</li>
</ul>
</div>
</div>
</nav>
<!-- Page content-->
<div class="container-fluid">
<h1 class="mt-4">Simple Sidebar</h1>
<p>The starting state of the menu will appear collapsed on smaller screens, and will appear non-collapsed on larger screens. When toggled using the button below, the menu will change.</p>
<p>
Make sure to keep all page content within the
<code>#page-content-wrapper</code>
. The top navbar is optional, and just for demonstration. Just create an element with the
<code>#sidebarToggle</code>
ID which will toggle the menu when clicked.
</p>
</div>
</div>
</div>
<!-- Bootstrap core JS-->
<script src="js/bootstrap.bundle.min.js"></script>
<!-- Core theme JS-->
<script src="js/scripts.js"></script>
</body>
</html>

View File

@ -1,70 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>Simple Sidebar - Start Bootstrap Template</title>
<!-- Favicon-->
<link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
<!-- Core theme CSS (includes Bootstrap)-->
<link href=<?php echo base_url()."css/styles.css"?> rel="stylesheet" />
</head>
<body>
<div class="d-flex" id="wrapper">
<!-- Sidebar-->
<div class="border-end bg-white" id="sidebar-wrapper">
<div class="sidebar-heading border-bottom bg-light">Start Bootstrap</div>
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Dashboard</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Shortcuts</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Overview</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Events</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Profile</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Status</a>
</div>
</div>
<!-- Page content wrapper-->
<div id="page-content-wrapper">
<!-- Top navigation-->
<nav class="navbar navbar-expand-lg navbar-light bg-light border-bottom">
<div class="container-fluid">
<button class="btn btn-primary" id="sidebarToggle">Toggle Menu</button>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ms-auto mt-2 mt-lg-0">
<li class="nav-item active"><a class="nav-link" href="#!">Home</a></li>
<li class="nav-item"><a class="nav-link" href="#!">Link</a></li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="navbarDropdown" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#!">Action</a>
<a class="dropdown-item" href="#!">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#!">Something else here</a>
</div>
</li>
</ul>
</div>
</div>
</nav>
<!-- Page content-->
<div class="container-fluid">
<h1 class="mt-4">Simple Sidebar</h1>
<p>The starting state of the menu will appear collapsed on smaller screens, and will appear non-collapsed on larger screens. When toggled using the button below, the menu will change.</p>
<p>
Make sure to keep all page content within the
<code>#page-content-wrapper</code>
. The top navbar is optional, and just for demonstration. Just create an element with the
<code>#sidebarToggle</code>
ID which will toggle the menu when clicked.
</p>
</div>
</div>
</div>
<script src=<?php echo base_url()."js/bootstrap.bundle.min.js"?>> </script>
<!-- Core theme JS-->
<script src=<?php echo base_url()."js/scripts.js"?>></script>
</body>
</html>

475
app/Views/layout/footer.php Normal file
View File

@ -0,0 +1,475 @@
</div> <!-- container -->
</div> <!-- content -->
<!-- Footer Start -->
<footer class="footer">
<div class="container-fluid">
<div class="row">
<div class="col-md-6">
<script>document.write(new Date().getFullYear())</script> &copy; Minton theme by <a href="">Coderthemes</a>
</div>
<div class="col-md-6">
<div class="text-md-right footer-links d-none d-sm-block">
<a href="javascript:void(0);">About Us</a>
<a href="javascript:void(0);">Help</a>
<a href="javascript:void(0);">Contact Us</a>
</div>
</div>
</div>
</div>
</footer>
<!-- end Footer -->
</div>
<!-- ============================================================== -->
<!-- End Page content -->
<!-- ============================================================== -->
</div>
<!-- END wrapper -->
<!-- Right Sidebar -->
<div class="right-bar">
<div data-simplebar class="h-100">
<!-- Nav tabs -->
<ul class="nav nav-tabs nav-bordered nav-justified" role="tablist">
<li class="nav-item">
<a class="nav-link py-2" data-toggle="tab" href="#chat-tab" role="tab">
<i class="mdi mdi-message-text-outline d-block font-22 my-1"></i>
</a>
</li>
<li class="nav-item">
<a class="nav-link py-2" data-toggle="tab" href="#tasks-tab" role="tab">
<i class="mdi mdi-format-list-checkbox d-block font-22 my-1"></i>
</a>
</li>
<li class="nav-item">
<a class="nav-link py-2 active" data-toggle="tab" href="#settings-tab" role="tab">
<i class="mdi mdi-cog-outline d-block font-22 my-1"></i>
</a>
</li>
</ul>
<!-- Tab panes -->
<div class="tab-content pt-0">
<div class="tab-pane" id="chat-tab" role="tabpanel">
<form class="search-bar p-3">
<div class="position-relative">
<input type="text" class="form-control" placeholder="Search...">
<span class="mdi mdi-magnify"></span>
</div>
</form>
<h6 class="font-weight-medium px-3 mt-2 text-uppercase">Group Chats</h6>
<div class="p-2">
<a href="javascript: void(0);" class="text-reset notification-item pl-3 mb-2 d-block">
<i class="mdi mdi-checkbox-blank-circle-outline mr-1 text-success"></i>
<span class="mb-0 mt-1">App Development</span>
</a>
<a href="javascript: void(0);" class="text-reset notification-item pl-3 mb-2 d-block">
<i class="mdi mdi-checkbox-blank-circle-outline mr-1 text-warning"></i>
<span class="mb-0 mt-1">Office Work</span>
</a>
<a href="javascript: void(0);" class="text-reset notification-item pl-3 mb-2 d-block">
<i class="mdi mdi-checkbox-blank-circle-outline mr-1 text-danger"></i>
<span class="mb-0 mt-1">Personal Group</span>
</a>
<a href="javascript: void(0);" class="text-reset notification-item pl-3 d-block">
<i class="mdi mdi-checkbox-blank-circle-outline mr-1"></i>
<span class="mb-0 mt-1">Freelance</span>
</a>
</div>
<h6 class="font-weight-medium px-3 mt-3 text-uppercase">Favourites <a href="javascript: void(0);" class="font-18 text-danger"><i class="float-right mdi mdi-plus-circle"></i></a></h6>
<div class="p-2">
<a href="javascript: void(0);" class="text-reset notification-item">
<div class="media">
<div class="position-relative mr-2">
<span class="user-status"></span>
<img src="<?= base_url()."public"; ?>/assets/images/users/avatar-10.jpg" class="rounded-circle avatar-sm" alt="user-pic">
</div>
<div class="media-body overflow-hidden">
<h6 class="mt-0 mb-1 font-14">Andrew Mackie</h6>
<div class="font-13 text-muted">
<p class="mb-0 text-truncate">It will seem like simplified English.</p>
</div>
</div>
</div>
</a>
<a href="javascript: void(0);" class="text-reset notification-item">
<div class="media">
<div class="position-relative mr-2">
<span class="user-status"></span>
<img src="<?= base_url()."public"; ?>/assets/images/users/avatar-1.jpg" class="rounded-circle avatar-sm" alt="user-pic">
</div>
<div class="media-body overflow-hidden">
<h6 class="mt-0 mb-1 font-14">Rory Dalyell</h6>
<div class="font-13 text-muted">
<p class="mb-0 text-truncate">To an English person, it will seem like simplified</p>
</div>
</div>
</div>
</a>
<a href="javascript: void(0);" class="text-reset notification-item">
<div class="media">
<div class="position-relative mr-2">
<span class="user-status busy"></span>
<img src="<?= base_url()."public"; ?>/assets/images/users/avatar-9.jpg" class="rounded-circle avatar-sm" alt="user-pic">
</div>
<div class="media-body overflow-hidden">
<h6 class="mt-0 mb-1 font-14">Jaxon Dunhill</h6>
<div class="font-13 text-muted">
<p class="mb-0 text-truncate">To achieve this, it would be necessary.</p>
</div>
</div>
</div>
</a>
</div>
<h6 class="font-weight-medium px-3 mt-3 text-uppercase">Other Chats <a href="javascript: void(0);" class="font-18 text-danger"><i class="float-right mdi mdi-plus-circle"></i></a></h6>
<div class="p-2 pb-4">
<a href="javascript: void(0);" class="text-reset notification-item">
<div class="media">
<div class="position-relative mr-2">
<span class="user-status online"></span>
<img src="<?= base_url()."public"; ?>/assets/images/users/avatar-2.jpg" class="rounded-circle avatar-sm" alt="user-pic">
</div>
<div class="media-body overflow-hidden">
<h6 class="mt-0 mb-1 font-14">Jackson Therry</h6>
<div class="font-13 text-muted">
<p class="mb-0 text-truncate">Everyone realizes why a new common language.</p>
</div>
</div>
</div>
</a>
<a href="javascript: void(0);" class="text-reset notification-item">
<div class="media">
<div class="position-relative mr-2">
<span class="user-status away"></span>
<img src="<?= base_url()."public"; ?>/assets/images/users/avatar-4.jpg" class="rounded-circle avatar-sm" alt="user-pic">
</div>
<div class="media-body overflow-hidden">
<h6 class="mt-0 mb-1 font-14">Charles Deakin</h6>
<div class="font-13 text-muted">
<p class="mb-0 text-truncate">The languages only differ in their grammar.</p>
</div>
</div>
</div>
</a>
<a href="javascript: void(0);" class="text-reset notification-item">
<div class="media">
<div class="position-relative mr-2">
<span class="user-status online"></span>
<img src="<?= base_url()."public"; ?>/assets/images/users/avatar-5.jpg" class="rounded-circle avatar-sm" alt="user-pic">
</div>
<div class="media-body overflow-hidden">
<h6 class="mt-0 mb-1 font-14">Ryan Salting</h6>
<div class="font-13 text-muted">
<p class="mb-0 text-truncate">If several languages coalesce the grammar of the resulting.</p>
</div>
</div>
</div>
</a>
<a href="javascript: void(0);" class="text-reset notification-item">
<div class="media">
<div class="position-relative mr-2">
<span class="user-status online"></span>
<img src="<?= base_url()."public"; ?>/assets/images/users/avatar-6.jpg" class="rounded-circle avatar-sm" alt="user-pic">
</div>
<div class="media-body overflow-hidden">
<h6 class="mt-0 mb-1 font-14">Sean Howse</h6>
<div class="font-13 text-muted">
<p class="mb-0 text-truncate">It will seem like simplified English.</p>
</div>
</div>
</div>
</a>
<a href="javascript: void(0);" class="text-reset notification-item">
<div class="media">
<div class="position-relative mr-2">
<span class="user-status busy"></span>
<img src="<?= base_url()."public"; ?>/assets/images/users/avatar-7.jpg" class="rounded-circle avatar-sm" alt="user-pic">
</div>
<div class="media-body overflow-hidden">
<h6 class="mt-0 mb-1 font-14">Dean Coward</h6>
<div class="font-13 text-muted">
<p class="mb-0 text-truncate">The new common language will be more simple.</p>
</div>
</div>
</div>
</a>
<a href="javascript: void(0);" class="text-reset notification-item">
<div class="media">
<div class="position-relative mr-2">
<span class="user-status away"></span>
<img src="<?= base_url()."public"; ?>/assets/images/users/avatar-8.jpg" class="rounded-circle avatar-sm" alt="user-pic">
</div>
<div class="media-body overflow-hidden">
<h6 class="mt-0 mb-1 font-14">Hayley East</h6>
<div class="font-13 text-muted">
<p class="mb-0 text-truncate">One could refuse to pay expensive translators.</p>
</div>
</div>
</div>
</a>
<div class="text-center mt-3">
<a href="javascript:void(0);" class="btn btn-sm btn-white">
<i class="mdi mdi-spin mdi-loading mr-2"></i>
Load more
</a>
</div>
</div>
</div>
<div class="tab-pane" id="tasks-tab" role="tabpanel">
<h6 class="font-weight-medium p-3 m-0 text-uppercase">Working Tasks</h6>
<div class="px-2">
<a href="javascript: void(0);" class="text-reset item-hovered d-block p-2">
<p class="text-muted mb-0">App Development<span class="float-right">75%</span></p>
<div class="progress mt-2" style="height: 4px;">
<div class="progress-bar bg-success" role="progressbar" style="width: 75%" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</a>
<a href="javascript: void(0);" class="text-reset item-hovered d-block p-2">
<p class="text-muted mb-0">Database Repair<span class="float-right">37%</span></p>
<div class="progress mt-2" style="height: 4px;">
<div class="progress-bar bg-info" role="progressbar" style="width: 37%" aria-valuenow="37" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</a>
<a href="javascript: void(0);" class="text-reset item-hovered d-block p-2">
<p class="text-muted mb-0">Backup Create<span class="float-right">52%</span></p>
<div class="progress mt-2" style="height: 4px;">
<div class="progress-bar bg-warning" role="progressbar" style="width: 52%" aria-valuenow="52" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</a>
</div>
<h6 class="font-weight-medium px-3 mb-0 mt-4 text-uppercase">Upcoming Tasks</h6>
<div class="p-2">
<a href="javascript: void(0);" class="text-reset item-hovered d-block p-2">
<p class="text-muted mb-0">Sales Reporting<span class="float-right">12%</span></p>
<div class="progress mt-2" style="height: 4px;">
<div class="progress-bar bg-danger" role="progressbar" style="width: 12%" aria-valuenow="12" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</a>
<a href="javascript: void(0);" class="text-reset item-hovered d-block p-2">
<p class="text-muted mb-0">Redesign Website<span class="float-right">67%</span></p>
<div class="progress mt-2" style="height: 4px;">
<div class="progress-bar bg-primary" role="progressbar" style="width: 67%" aria-valuenow="67" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</a>
<a href="javascript: void(0);" class="text-reset item-hovered d-block p-2">
<p class="text-muted mb-0">New Admin Design<span class="float-right">84%</span></p>
<div class="progress mt-2" style="height: 4px;">
<div class="progress-bar bg-success" role="progressbar" style="width: 84%" aria-valuenow="84" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</a>
</div>
<div class="p-3 mt-2">
<a href="javascript: void(0);" class="btn btn-success btn-block waves-effect waves-light">Create Task</a>
</div>
</div>
<div class="tab-pane active" id="settings-tab" role="tabpanel">
<h6 class="font-weight-medium px-3 m-0 py-2 font-13 text-uppercase bg-light">
<span class="d-block py-1">Theme Settings</span>
</h6>
<div class="p-3">
<div class="alert alert-warning" role="alert">
<strong>Customize </strong> the overall color scheme, sidebar menu, etc.
</div>
<h6 class="font-weight-medium font-14 mt-4 mb-2 pb-1">Color Scheme</h6>
<div class="custom-control custom-switch mb-1">
<input type="radio" class="custom-control-input" name="color-scheme-mode" value="light"
id="light-mode-check" checked />
<label class="custom-control-label" for="light-mode-check">Light Mode</label>
</div>
<div class="custom-control custom-switch mb-1">
<input type="radio" class="custom-control-input" name="color-scheme-mode" value="dark"
id="dark-mode-check" />
<label class="custom-control-label" for="dark-mode-check">Dark Mode</label>
</div>
<!-- Width -->
<h6 class="font-weight-medium font-14 mt-4 mb-2 pb-1">Width</h6>
<div class="custom-control custom-switch mb-1">
<input type="radio" class="custom-control-input" name="width" value="fluid" id="fluid-check" checked />
<label class="custom-control-label" for="fluid-check">Fluid</label>
</div>
<div class="custom-control custom-switch mb-1">
<input type="radio" class="custom-control-input" name="width" value="boxed" id="boxed-check" />
<label class="custom-control-label" for="boxed-check">Boxed</label>
</div>
<!-- Topbar -->
<h6 class="font-weight-medium font-14 mt-4 mb-2 pb-1">Topbar</h6>
<div class="custom-control custom-switch mb-1">
<input type="radio" class="custom-control-input" name="topbar-color" value="dark" id="darktopbar-check"
checked />
<label class="custom-control-label" for="darktopbar-check">Dark</label>
</div>
<div class="custom-control custom-switch mb-1">
<input type="radio" class="custom-control-input" name="topbar-color" value="light" id="lighttopbar-check" />
<label class="custom-control-label" for="lighttopbar-check">Light</label>
</div>
<!-- Menu positions -->
<h6 class="font-weight-medium font-14 mt-4 mb-2 pb-1">Menus Positon <small>(Leftsidebar and Topbar)</small></h6>
<div class="custom-control custom-switch mb-1">
<input type="radio" class="custom-control-input" name="menus-position" value="fixed" id="fixed-check"
checked />
<label class="custom-control-label" for="fixed-check">Fixed</label>
</div>
<div class="custom-control custom-switch mb-1">
<input type="radio" class="custom-control-input" name="menus-position" value="scrollable"
id="scrollable-check" />
<label class="custom-control-label" for="scrollable-check">Scrollable</label>
</div>
<!-- Left Sidebar-->
<h6 class="font-weight-medium font-14 mt-4 mb-2 pb-1">Left Sidebar Color</h6>
<div class="custom-control custom-switch mb-1">
<input type="radio" class="custom-control-input" name="leftsidebar-color" value="light" id="light-check" checked />
<label class="custom-control-label" for="light-check">Light</label>
</div>
<div class="custom-control custom-switch mb-1">
<input type="radio" class="custom-control-input" name="leftsidebar-color" value="dark" id="dark-check" />
<label class="custom-control-label" for="dark-check">Dark</label>
</div>
<div class="custom-control custom-switch mb-1">
<input type="radio" class="custom-control-input" name="leftsidebar-color" value="brand" id="brand-check" />
<label class="custom-control-label" for="brand-check">Brand</label>
</div>
<div class="custom-control custom-switch mb-3">
<input type="radio" class="custom-control-input" name="leftsidebar-color" value="gradient" id="gradient-check" />
<label class="custom-control-label" for="gradient-check">Gradient</label>
</div>
<!-- size -->
<h6 class="font-weight-medium font-14 mt-4 mb-2 pb-1">Left Sidebar Size</h6>
<div class="custom-control custom-switch mb-1">
<input type="radio" class="custom-control-input" name="leftsidebar-size" value="default"
id="default-size-check" checked />
<label class="custom-control-label" for="default-size-check">Default</label>
</div>
<div class="custom-control custom-switch mb-1">
<input type="radio" class="custom-control-input" name="leftsidebar-size" value="condensed"
id="condensed-check" />
<label class="custom-control-label" for="condensed-check">Condensed <small>(Extra Small size)</small></label>
</div>
<div class="custom-control custom-switch mb-1">
<input type="radio" class="custom-control-input" name="leftsidebar-size" value="compact"
id="compact-check" />
<label class="custom-control-label" for="compact-check">Compact <small>(Small size)</small></label>
</div>
<!-- User info -->
<h6 class="font-weight-medium font-14 mt-4 mb-2 pb-1">Sidebar User Info</h6>
<div class="custom-control custom-switch mb-1">
<input type="checkbox" class="custom-control-input" name="leftsidebar-user" value="fixed" id="sidebaruser-check" />
<label class="custom-control-label" for="sidebaruser-check">Enable</label>
</div>
<button class="btn btn-primary btn-block mt-4" id="resetBtn">Reset to Default</button>
<a href="https://wrapbootstrap.com/theme/minton-admin-dashboard-landing-template-WB0858DB6?ref=coderthemes"
class="btn btn-danger btn-block mt-2" target="_blank"><i class="mdi mdi-basket mr-1"></i> Purchase Now</a>
</div>
</div>
</div>
</div> <!-- end slimscroll-menu-->
</div>
<!-- /Right-bar -->
<!-- Right bar overlay-->
<div class="rightbar-overlay"></div>
<!-- Vendor js -->
<script src="<?= base_url()."public"; ?>/assets/js/vendor.min.js"></script>
<!-- third party js -->
<script src="<?= base_url()."public"; ?>/assets/libs/datatables.net/js/jquery.dataTables.min.js"></script>
<script src="<?= base_url()."public"; ?>/assets/libs/datatables.net-bs4/js/dataTables.bootstrap4.min.js"></script>
<script src="<?= base_url()."public"; ?>/assets/libs/datatables.net-responsive/js/dataTables.responsive.min.js"></script>
<script src="<?= base_url()."public"; ?>/assets/libs/datatables.net-responsive-bs4/js/responsive.bootstrap4.min.js"></script>
<script src="<?= base_url()."public"; ?>/assets/libs/datatables.net-buttons/js/dataTables.buttons.min.js"></script>
<script src="<?= base_url()."public"; ?>/assets/libs/datatables.net-buttons-bs4/js/buttons.bootstrap4.min.js"></script>
<script src="<?= base_url()."public"; ?>/assets/libs/datatables.net-buttons/js/buttons.html5.min.js"></script>
<script src="<?= base_url()."public"; ?>/assets/libs/datatables.net-buttons/js/buttons.flash.min.js"></script>
<script src="<?= base_url()."public"; ?>/assets/libs/datatables.net-buttons/js/buttons.print.min.js"></script>
<script src="<?= base_url()."public"; ?>/assets/libs/datatables.net-keytable/js/dataTables.keyTable.min.js"></script>
<script src="<?= base_url()."public"; ?>/assets/libs/datatables.net-select/js/dataTables.select.min.js"></script>
<script src="<?= base_url()."public"; ?>/assets/libs/pdfmake/build/pdfmake.min.js"></script>
<script src="<?= base_url()."public"; ?>/assets/libs/pdfmake/build/vfs_fonts.js"></script>
<!-- third party js ends -->
<!-- Datatables init -->
<script src="<?= base_url()."public"; ?>/assets/js/pages/datatables.init.js"></script>
<!-- Plugins js-->
<script src="<?= base_url()."public"; ?>/assets/libs/admin-resources/jquery.vectormap/jquery-jvectormap-1.2.2.min.js"></script>
<script src="<?= base_url()."public"; ?>/assets/libs/admin-resources/jquery.vectormap/maps/jquery-jvectormap-us-merc-en.js"></script>
<script src="<?= base_url()."public"; ?>/assets/libs/parsleyjs/parsley.min.js"></script>
<!-- Dashboard init-->
<script src="<?= base_url()."public"; ?>/assets/js/pages/dashboard-analytics.init.js"></script>
<!-- Validation init js-->
<script src="<?= base_url()."public"; ?>/assets/js/pages/form-validation.init.js"></script>
<!-- App js -->
<script src="<?= base_url()."public"; ?>/assets/js/app.min.js"></script>
<!-- Sweet Alert CDN -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap-multiselect@1.1.0/dist/js/bootstrap-multiselect.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.13/css/bootstrap-multiselect.css" />
</body>
</html>

1102
app/Views/layout/header.php Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,140 +1,98 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>Login</title>
<!-- Favicon-->
<link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
<!-- Core theme CSS (includes Bootstrap)-->
<link href="css/styles.css" rel="stylesheet" />
</head>
<head>
<meta charset="utf-8" />
<title>nHANCE</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta content="A fully featured admin theme which can be used to build CRM, CMS, etc." name="description" />
<meta content="Coderthemes" name="author" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<!-- App favicon -->
<link rel="shortcut icon" href="<?= base_url()."public"; ?>/assets/images/favicon.ico">
<!-- App css -->
<link href="<?= base_url()."public"; ?>/assets/css/bootstrap-material.min.css" rel="stylesheet" type="text/css"
id="bs-default-stylesheet" />
<link href="<?= base_url()."public"; ?>/assets/css/app-material.min.css" rel="stylesheet" type="text/css"
id="app-default-stylesheet" />
<link href="<?= base_url()."public"; ?>/assets/css/bootstrap-material-dark.min.css" rel="stylesheet" type="text/css"
id="bs-dark-stylesheet" />
<link href="<?= base_url()."public"; ?>/assets/css/app-material-dark.min.css" rel="stylesheet" type="text/css"
id="app-dark-stylesheet" />
<!-- icons -->
<link href="<?= base_url()."public"; ?>/assets/css/icons.min.css" rel="stylesheet" type="text/css" />
<style>
body {font-family: Arial, Helvetica, sans-serif;}
form {border: 3px solid #f1f1f1;}
a:hover {
cursor: pointer;
}
</style>
input[type=text], input[type=password] {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
</head>
button {
background-color: #04AA6D;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 100%;
}
<body class="loading auth-fluid-pages pb-0">
button:hover {
opacity: 0.8;
}
<div class="auth-fluid">
<!-- Auth fluid right content -->
<div class="auth-fluid-right bg-transparent">
<div class="auth-user-testimonial">
<h3 class="mb-3 text-white">Very elegant & impressive!</h3>
<p class="lead font-weight-normal"><i class="mdi mdi-format-quote-open"></i> I've been using this theme
for a while and I must say that whenever I am looking for a design - I refer to this theme for
specifics & implementation. With wide arrays of components, designs, charts - I would highly
recommend this theme for anyone using it for dashboard or project management usage.. <i
class="mdi mdi-format-quote-close"></i>
</p>
<h5 class="text-white">
- Admin User
</h5>
</div> <!-- end auth-user-testimonial-->
</div>
<!-- end Auth fluid right content -->
.cancelbtn {
width: auto;
padding: 10px 18px;
background-color: #f44336;
}
<!--Auth fluid left content -->
<div class="auth-fluid-form-box">
<div class="align-items-center d-flex h-100">
<div class="card-body">
.imgcontainer {
text-align: center;
margin: 24px 0 12px 0;
}
img.avatar {
width: 40%;
border-radius: 50%;
}
.container {
padding: 16px;
}
span.psw {
float: right;
padding-top: 16px;
}
/* Change styles for span and cancel button on extra small screens */
@media screen and (max-width: 300px) {
span.psw {
display: block;
float: none;
}
.cancelbtn {
width: 100%;
}
}
</style>
<body>
<div class="d-flex" id="wrapper">
<!-- Page content wrapper-->
<div id="page-content-wrapper">
<!-- Top navigation-->
<nav class="navbar navbar-expand-lg navbar-light bg-light border-bottom">
<div class="container-fluid">
<!-- <button class="btn btn-primary" id="sidebarToggle">Toggle Menu</button> -->
<!-- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button> -->
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ms-auto mt-2 mt-lg-0">
<li class="nav-item active"><a class="nav-link" href="#!">Home</a></li>
<li class="nav-item"><a class="nav-link" href="#!">Link</a></li>
<!-- <li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="navbarDropdown" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#!">Action</a>
<a class="dropdown-item" href="#!">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#!">Something else here</a>
</div>
</li> -->
</ul>
<!-- Logo -->
<div class="auth-brand text-center">
<div class="auth-logo">
<a href="index.html" class="logo logo-dark text-center">
<span class="logo-lg">
</span>
</a>
</div>
</div>
</nav>
<!-- Page content-->
<div class="container-fluid">
<h1 class="mt-4">Login</h1>
<form action="/action_page.php" method="post">
<div class="imgcontainer">
<img src="<?php echo base_url().'assets/img_avatar2.png'?>" alt="Avatar" class="avatar">
</div>
<div class="container">
<label for="uname"><b>Username</b></label>
<input type="text" placeholder="Enter Username" name="uname" required>
<div class="form-group mb-0 text-center">
<a href="<?= base_url('/LoginController/receiveGoogleOAuthResponse'); ?>"><img
src="<?= base_url()."public"; ?>/assets/images/googleButton.svg" width="300"></a>
</div>
<label for="psw"><b>Password</b></label>
<input type="password" placeholder="Enter Password" name="psw" required>
<button type="submit">Login</button>
<label>
<input type="checkbox" checked="checked" name="remember"> Remember me
</label>
</div>
<?php if (session()->getFlashdata('error')) : ?>
<span class="widget-simple text-center">
<div class="media-body align-self-center font-24 avatar-title">
<p style="color: #f1556c!important;" class="mt-0" style><?= session('error') ?></p>
</div>
</span>
<?php endif; ?>
<div class="container" style="background-color:#f1f1f1">
<button type="button" class="cancelbtn">Cancel</button>
<span class="psw">Forgot <a href="#">password?</a></span>
</div>
</form>
</p>
</div>
</div>
</div> <!-- end .card-body -->
</div> <!-- end .align-items-center.d-flex.h-100-->
</div>
<!-- Bootstrap core JS-->
<script src="js/bootstrap.bundle.min.js"></script>
<!-- Core theme JS-->
<script src="js/scripts.js"></script>
</body>
</html>
<!-- end auth-fluid-form-box-->
</div>
<!-- end auth-fluid-->
<!-- Vendor js -->
<script src="<?= base_url()."public"; ?>/assets/js/vendor.min.js"></script>
<!-- App js -->
<script src="<?= base_url()."public"; ?>/assets/js/app.min.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -1,149 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>User</title>
<!-- Favicon-->
<link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
<!-- Core theme CSS (includes Bootstrap)-->
<link href=<?php echo base_url()."css/styles.css"?> rel="stylesheet" />
</head>
<style>
body {font-family: Arial, Helvetica, sans-serif;}
form {border: 3px solid #f1f1f1;}
input[type=text], input[type=password] {
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
box-sizing: border-box;
}
button {
background-color: #04AA6D;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 100%;
}
button:hover {
opacity: 0.8;
}
.cancelbtn {
width: auto;
padding: 10px 18px;
background-color: #f44336;
}
.imgcontainer {
text-align: center;
margin: 24px 0 12px 0;
}
img.avatar {
width: 40%;
border-radius: 50%;
}
.container {
padding: 16px;
}
span.psw {
float: right;
padding-top: 16px;
}
/* Change styles for span and cancel button on extra small screens */
@media screen and (max-width: 300px) {
span.psw {
display: block;
float: none;
}
.cancelbtn {
width: 100%;
}
}
</style>
<body>
<div class="d-flex" id="wrapper">
<!-- Page content wrapper-->
<div id="page-content-wrapper">
<!-- Top navigation-->
<nav class="navbar navbar-expand-lg navbar-light bg-light border-bottom">
<div class="container-fluid">
<!-- <button class="btn btn-primary" id="sidebarToggle">Toggle Menu</button> -->
<!-- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button> -->
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ms-auto mt-2 mt-lg-0">
<li class="nav-item active"><a class="nav-link" href="#!">Home</a></li>
<li class="nav-item"><a class="nav-link" href="#!">Link</a></li>
<!-- <li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="navbarDropdown" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#!">Action</a>
<a class="dropdown-item" href="#!">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#!">Something else here</a>
</div>
</li> -->
</ul>
</div>
</div>
</nav>
<!-- Page content-->
<div class="container-fluid">
<h1 class="mt-4">New/Edit User</h1>
<div class="container">
<form action=<?php echo base_url()."user/create" ?> method="post">
<label for="username">Username:</label>
<input type="text" id="id" name="id" value= >
<input type="text" id="username" name="username" value= required><br>
<label for="firstname">First Name:</label>
<input type="text" id="firstname" name="firstname" value= required><br>
<label for="lastname">Last Name:</label>
<input type="text" id="lastname" name="lastname" value= required><br>
<label for="email">Email:</label>
<input type="email" id="email" name="email" value= required><br>
<label for="mobile_no">Mobile Number:</label>
<input type="text" id="mobile_no" name="mobile_no" value= ><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password" value="" required><br>
<label for="is_active">Active:</label>
<input type="checkbox" id="is_active" name="is_active" checked= ><br>
<button type="submit" value="Submit">submit</button>
</form>
</div>
<div class="container" style="background-color:#f1f1f1">
<button type="button" class="cancelbtn">Cancel</button>
<span class="psw">Forgot <a href="#">password?</a></span>
</div>
</form>
</p>
</div>
</div>
</div>
<script src=<?php echo base_url()."js/bootstrap.bundle.min.js"?>> </script>
<!-- Core theme JS-->
<script src=<?php echo base_url()."js/scripts.js"?>></script>
</body>
</html>

View File

@ -1,118 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>List User</title>
<!-- Favicon-->
<link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
<!-- Core theme CSS (includes Bootstrap)-->
<link href=<?php echo base_url()."css/styles.css"?> rel="stylesheet" />
</head>
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
</style>
<body>
<div class="d-flex" id="wrapper">
<!-- Sidebar-->
<div class="border-end bg-white" id="sidebar-wrapper">
<div class="sidebar-heading border-bottom bg-light">Start Bootstrap</div>
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Dashboard</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Shortcuts</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Overview</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Events</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Profile</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Status</a>
</div>
</div>
<!-- Page content wrapper-->
<div id="page-content-wrapper">
<!-- Top navigation-->
<nav class="navbar navbar-expand-lg navbar-light bg-light border-bottom">
<div class="container-fluid">
<button class="btn btn-primary" id="sidebarToggle">Toggle Menu</button>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ms-auto mt-2 mt-lg-0">
<li class="nav-item active"><a class="nav-link" href="#!">Home</a></li>
<li class="nav-item"><a class="nav-link" href="#!">Link</a></li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="navbarDropdown" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#!">Action</a>
<a class="dropdown-item" href="#!">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#!">Something else here</a>
</div>
</li>
</ul>
</div>
</div>
</nav>
<!-- Page content-->
<div class="container-fluid">
<h1 class="mt-4">List User</h1>
<table>
<thead>
<tr>
<th>ID</th>
<th>Username</th>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
<th>Mobile Number</th>
<th>Active</th>
<th>Updated By</th>
<th>Created By</th>
<th>Created At</th>
<th>Updated At</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<!-- Loop through users and display each row -->
<?php
// print_r($users);die();
foreach ($users as $user): ?>
<tr>
<td><?= $user['id']; ?></td>
<td><?= $user['username']; ?></td>
<td><?= $user['firstname']; ?></td>
<td><?= $user['lastname']; ?></td>
<td><?= $user['email']; ?></td>
<td><?= $user['mobile_no']; ?></td>
<td><?= $user['is_active'] ? 'Yes' : 'No'; ?></td>
<td><?= $user['updated_by_name']; ?></td>
<td><?= $user['created_by_name']; ?></td>
<td><?= change_date_format($user['created_at'],'Y-m-d H:i:s','D,M d,Y h:i a'); ?></td>
<td><?= change_date_format($user['updated_at'],'Y-m-d H:i:s','D,M d,Y h:i a'); ?></td>
<td><a href=<?php echo base_url().'user/list/'.$user['id']?>>Edit</a> | <a href=<?php echo base_url().'user/delete/'.$user['id']?>>Delete</a></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<script src=<?php echo base_url()."js/bootstrap.bundle.min.js"?>> </script>
<!-- Core theme JS-->
<script src=<?php echo base_url()."js/scripts.js"?>></script>
</body>
</html>

View File

@ -14,6 +14,7 @@
"ext-intl": "*",
"ext-json": "*",
"ext-mbstring": "*",
"google/apiclient": "^2.15.0",
"laminas/laminas-escaper": "^2.9",
"psr/log": "^1.1"
},

BIN
icon-192x192.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
icon-512x512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

21
manifest.json Normal file
View File

@ -0,0 +1,21 @@
{
"name": "nHANCE",
"short_name": "NHANCE",
"description": "Description of your PWA",
"start_url": "http://localhost/nhance/user/list",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#ffffff",
"icons": [
{
"src": "Papirus-Team-Papirus-Apps-Fusion-icon.512.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "icon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

8
public/assets/css/app-dark.min.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

8
public/assets/css/app-modern.min.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

8
public/assets/css/app-rtl.min.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More