Merge branch 'dev' of bitbucket.org:jubilian/nhance into dev

This commit is contained in:
VENKATESHWARAN 2025-06-03 17:52:08 +05:30
commit dd05e37c8a
8 changed files with 186 additions and 11 deletions

View File

@ -45,6 +45,9 @@ class Database extends Config
'numberNative' => false,
];
public array $book_stack = [];
/**
* This database connection is used when
* running PHPUnit database tests.
@ -75,6 +78,29 @@ class Database extends Config
{
parent::__construct();
// Initialize book_stack configuration with environment variables
$this->book_stack = [
'DSN' => '',
'hostname' => getenv('bookStack_hostname'),
'username' => getenv('bookStack_username'),
'password' => getenv('bookStack_password'),
'database' => getenv('bookStack_database'),
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => true,
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
'foreignKeys' => true,
'busyTimeout' => 1000,
];
// Ensure that we always set the database group to 'tests' if
// we are currently running an automated test suite, so that
// we don't overwrite live data on accident.
@ -82,4 +108,5 @@ class Database extends Config
$this->defaultGroup = 'tests';
}
}
}

View File

@ -508,21 +508,25 @@ class RestAuthenticationController extends AdminController
// TokenController.php
public function bookstackLoginToken()
{
// $user = session()->get('user');
// $secret = getenv('BOOKSTACK_TOKEN_SECRET');
$user = 'staff@staff.com';
$secret = '5a8c1e9b18e6a94f724f6a6b36b6f26d9eec0e4a15e88b6e3e2d5efad23a8f4f';
$session = \Config\Services::session();
$user_data = session()->get('userData');
$user = $user_data->email;
$secret = getenv('bookstack.token');
// $user = 'staff@staff.com';
$name = $user_data->first_name ?? 'User';
$payload = [
'email' => $user,
'name' => 'Hi',
'exp' => time() + 60 // expires in 1 minute
'name' => $name,
'exp' => time() + (60 * 60 * 24) // expires in 1 day
];
// dd($payload);
$token = base64_encode(json_encode($payload));
$signature = hash_hmac('sha256', $token, $secret);
$bookStackUrl = getenv('bookstack.baseURL');
$url = 'https://localhost/PHP828APPS/manual/bookstack/public/autologin?token=' . urlencode($token) . '&sig=' . $signature;
$url = $bookStackUrl . urlencode($token) . '&sig=' . $signature;
return redirect()->to($url);
}

View File

@ -12,6 +12,7 @@ use App\Models\UserModel;
use App\Models\RoleModel;
use App\Models\TeamModel;
use App\Models\UserTeamsModel;
use App\Helpers\BookStackUserHelper;
class UserController extends AdminController
@ -21,6 +22,7 @@ class UserController extends AdminController
protected $roleModel;
protected $teamModel;
protected $userTeamsModel;
protected $bookStack;
public function __construct()
{
@ -31,6 +33,7 @@ class UserController extends AdminController
$this->roleModel = new RoleModel();
$this->teamModel = new TeamModel();
$this->userTeamsModel = new UserTeamsModel();
$this->bookStack = new BookStackUserHelper();
}
public function list()
@ -60,10 +63,17 @@ class UserController extends AdminController
$userData['created_by'] = get_session_userid();
$temp_team = $userData['team'];
unset($userData['team']);
$insert = $this->userModel->insert($userData);
if ($insert) {
$bookStackData = [
'name' => $userData['first_name'],
'email' => $userData['email'],
];
$this->bookStack->createEditUser($bookStackData);
if ($insert) {
$teamData['user_id'] = $insert;
foreach ($teams as $value) {
$teamData['team_id'] = $value;
@ -137,10 +147,20 @@ class UserController extends AdminController
unset($userData['csrf_test_name']);
unset($userData['PrimaryKey']);
$existingData = $this->userModel->where('id',$id)->first();;
// Update data in the 'users' table based on the $id
$userData['updated_by'] = get_session_userid();
$update = $this->userModel->where('id', $id)->set($userData)->update();
$bookStackData = [
'name' => $userData['first_name'],
'email' => $userData['email'],
];
$this->bookStack->createEditUser($bookStackData,$existingData);
if ($update) {
if ($teams) {
@ -211,7 +231,11 @@ class UserController extends AdminController
public function deactive($id = null)
{
$model = new UserModel();
$emailToDelete = $model->where('id', $id)->first();
$deactive = $model->where('id', $id)->set(['is_active' => 0])->update();
$this->bookStack->deleteUser($emailToDelete);
if($deactive)
{
// $db = \Config\Database::connect();

View File

@ -0,0 +1,77 @@
<?php
namespace App\Helpers;
use App\Models\BookStackUserModel;
use App\Models\BookStackRoleModel;
class BookStackUserHelper {
protected $userModel;
protected $roleModel;
public function __construct() {
$this->userModel = new BookStackUserModel();
$this->roleModel = new BookStackRoleModel();
}
public function createEditUser($data,$preData = null) {
// This function will handle the creation or editing of a user
// It will check if the user already exists and update or create accordingly
// The $data parameter should contain all necessary user information
// For example: ['name' => 'johndoe', 'email' => 'johndoe@doe.com']
if (!empty($preData)) {
$isExistingUser = $this->userModel->where('email', $preData['email'])->first();
if ($isExistingUser) {
$id = $isExistingUser['id'];
$update = $this->userModel->where('id', $id)->set($data)->update();
return $update;
}
}
$password = 'password';
$hashedPassword = ['password' => password_hash($password, PASSWORD_DEFAULT)];
$slug = ['slug' => $this->createSlug($data['name'])];
// array_push($data,$hashedPassword,$slug);
$data['password'] = $hashedPassword['password'];
$data['slug'] = $slug['slug'];
// dd($data);
$this->userModel->insert($data);
$userId = $this->userModel->insertID();
if (!empty($userId)) {
$roleData = [
'user_id' => $userId,
'role_id' => 3 // 3 is the default role ID for viewers
];
$this->roleModel->insert($roleData);
}
}
protected function createSlug($string) {
return strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', $string)));
}
public function deleteUser($data) {
$isExistingUser = $this->userModel->where('email', $data['email'])->first();
if ($isExistingUser) {
$id = $isExistingUser['id'];
$delete = $this->userModel->where('id', $id)->delete();
$this->roleModel->where('user_id', $id)->delete();
return $delete;
}
}
}

View File

@ -0,0 +1,19 @@
<?php
namespace App\Models;
use CodeIgniter\Model;
class BookStackRoleModel extends Model
{
protected $DBGroup = 'book_stack';
protected $table = 'role_user';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
protected $returnType = 'array';
protected $useSoftDelete = false;
protected $protectFields = true;
protected $allowedFields = [
'user_id','role_id'
];
}

View File

@ -0,0 +1,19 @@
<?php
namespace App\Models;
use CodeIgniter\Model;
class BookStackUserModel extends Model
{
protected $DBGroup = 'book_stack';
protected $table = 'users';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
protected $returnType = 'array';
protected $useSoftDelete = false;
protected $protectFields = true;
protected $allowedFields = [
'name','email','password','slug'
];
}

View File

@ -849,9 +849,9 @@
<?php if (in_array(get_role_id(), [1,2,3,5])) { ?>
<li>
<a id="app_content_management" href="#sidebarDashboardsmenu" data-toggle="collapse" class="waves-effect" style="color: grey;">
<i class="fa fa-info-circle" aria-hidden="true"></i>
<i class="fa fa-edit" aria-hidden="true"></i>
<span class="badge badge-success badge-pill float-right">2</span>
<span> App Content Management </span>
<span>App Content Mgmt</span>
</a>
<div class="collapse" id="sidebarDashboardsmenu">
<ul class="nav-second-level">
@ -865,7 +865,12 @@
</div>
</li>
<?php } ?>
<li>
<a id="user_manual" href="<?= base_url("autobookstackLogin") ?>" class="waves-effect" target="_blank" rel="noopener noreferrer">
<i class="fa fa-info-circle" aria-hidden="true"></i>
<span>User Manual</span>
</a>
</li>
</ul>
</div>
<!-- End Sidebar -->

View File