ElixirVault/www/system-brs-core/sys/sysUsersManager/inc/sysUsersManagerModule.php

322 lines
9.7 KiB
PHP

<?php
namespace BRSystems\Core\Sys\sysUsersManager\inc;
use BRSystems\Core\Library\cDb\cDb;
/**
* sysUsersManager Module
*
* @category sysUsersManager Module
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @since Version 2.0
*/
class sysUsersManagerModule
{
public $oDb;
/**
* Class constructor
*/
public function __construct(){
$this->oDb = cDb::getInstance(DB_HOST, DB_USR, DB_PWD, DB_PORT, DB_NAME);
}
/**
* Function to get module records
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsersManager Module
* @param string $where - sql query
* @param string $sort - sql query
* @param int $offset - db table offset
* @param int $limitPerPage - limit per page
* @return array of data
* @version 1.1
*/
public function getModuleRecords($where, $sort, $offset = 0, $limitPerPage = 20){
$sSql = "
SELECT SQL_CALC_FOUND_ROWS
su.id,
su.user_name,
su.user_surname,
su.user_login,
su.user_email,
su.user_last_ip,
user_last_login,
su.user_last_location_url,
su.user_blocked,
LENGTH(su.user_2fa_secret_enabled) > 0 as tfa
FROM
site_users su
WHERE
1 {$where}
ORDER BY
{$sort}
LIMIT
{$offset}, {$limitPerPage}
";
$this->oDb->query($sSql);
return $this->oDb->getArray();
}
/**
* Function to get user data by id
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsersManager Module
* @param int $id - user id
* @return array - user data
* @version 1.1
*/
public function getUserDataById($id){
return $this->oDb->_querySelectRow('site_users', false, array('id' => $id));
}
/**
* Function to get user permissions by userid
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsersManager Module
* @param int $userId - user id
* @return array
* @version 1.1
*/
public function getUserPermissionsByUserId($userId){
$userId = $userId ? $userId : 0;
$sSql = "
SELECT
*
FROM (
SELECT
DISTINCT sp.id,
COALESCE(mc.cl_name, '') as type_name,
sp.p_name,
sp.p_type_id,
sp.p_description,
stp.id > 0 as `sel`
FROM
site_permissions sp
LEFT JOIN mod_classificators mc ON
mc.id = sp.p_type_id
LEFT JOIN site_users_permissions stp ON
stp.permissions_id = sp.id
AND stp.user_id = '" . $this->oDb->prepData($userId) . "'
AND stp.groups_id = 0
) dt
ORDER BY
dt.p_type_id, dt.p_name
";
$this->oDb->query($sSql);
return $this->oDb->getArray();
}
/**
* Function to get user permission groups by user id
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsersManager Module
* @param int $userId - user id
* @return array
* @version 1.1
*/
public function getUserPermissionGroupsByUserId($userId){
$userId = $userId ? $userId : 0;
$sSql = "
SELECT
DISTINCT sug.id,
sug.group_name,
sug.group_description,
sup.id > 0 as `sel`
FROM
site_users_groups sug
LEFT JOIN site_users_permissions sup ON
sup.groups_id = sug.id
AND user_id = '" . $this->oDb->prepData($userId) . "'
AND user_id > 0
ORDER BY
sug.group_name
";
$this->oDb->query($sSql);
return $this->oDb->getArray();
}
/**
* Function to get user data by login
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsersManager Module
* @param int $userId - user id
* @param string $login - user login
* @return array user data
* @version 1.1
*/
public function getUserDataByLogin($userId, $login){
$userId = $userId ? $userId : 0;
$sSql = "
SELECT
*
FROM
site_users su
WHERE
su.user_login = '" . $this->oDb->prepData($login) . "'
AND su.id <> '" . $this->oDb->prepData($userId) . "'
";
$this->oDb->query($sSql);
return $this->oDb->getRow();
}
/**
* Function to add or save user data
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsersManager Module
* @param int $id - user id
* @param array $data - user data
* @return bool|int - user id
* @version 1.1
*/
public function saveUserDataById($id, $data){
if($id){
if(!$this->oDb->_queryUpdate('site_users', $data, array('id' => $id))){
return false;
}
}else{
if(!($id = $this->oDb->_queryInsert('site_users', $data))){
return false;
}
}
return $id;
}
/**
* Function to handle & rewrite user permissions
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsersManager Module
* @param int $userId - user id
* @param array $permissions
* @return bool true / false
* @version 1.1
*/
public function updateUserPermissions($userId, $permissions = array()){
if($userId){
$this->oDb->_queryDelete("site_users_permissions", array('user_id' => $userId));
if(count($permissions)){
$this->oDb->_queryInsertArray("site_users_permissions", $permissions);
}
return true;
}
return false;
}
/**
* Function to load user permissions
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsersManager Module
* @param int $userId - user id
* @return array
* @version 1.1
*/
public function loadUserPermissionArray($userId){
$sSql = "
SELECT
DISTINCT userp.permissions_id as pId,
sitep.p_name as sId
FROM
(
SELECT
sp.permissions_id
FROM
site_users_permissions sp
WHERE
sp.user_id = '{$userId}'
AND sp.groups_id = '0'
UNION ALL
SELECT
sg.permissions_id
FROM
site_users_permissions sp
LEFT JOIN site_users_permissions sg ON
sg.groups_id = sp.groups_id
AND sg.user_id = 0
LEFT JOIN site_users_groups sug ON
sug.id = sp.groups_id
WHERE
sp.user_id = '{$userId}'
AND sp.groups_id <> '0'
AND sug.group_blocked = '0'
) userp
LEFT JOIN site_permissions sitep ON
userp.permissions_id = sitep.id
WHERE
sitep.p_blocked = '0'
";
$this->oDb->query($sSql);
return $this->oDb->getKeyValBasedArray('pId', 'sId');
}
/**
* Function to change record status in db table
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsersManager Module
* @param array $ids - record ids to delete
* @param string $field - field to update for status ENUM
* @return bool true / false
* @version 1.1
*/
public function changeRecordsStatus($ids, $field){
$time = time();
$ids = implode(',', $ids);
$status = $this->oDb->query("UPDATE site_users su SET {$field} = '1', user_modified = '{$time}' WHERE {$field} = '0' AND id IN ({$ids})");
if(!$status)
return $status;
$status = $this->oDb->query("UPDATE site_users su SET {$field} = '0', user_modified = '{$time}' WHERE {$field} = '1' AND id IN ({$ids}) AND user_modified <> '{$time}'");
return $status;
}
/**
* Function to delete table records form db
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsersManager Module
* @param array $ids - record ids to delete
* @return bool true / false
* @version 1.1
*/
public function deleteRecords($ids){
$this->oDb->execute("DELETE FROM `site_users_ipaccess` WHERE `user_id` IN (" . implode(',', $ids) . ")");
$this->oDb->execute("DELETE FROM `temp_users_online` WHERE `o_user_id` IN (" . implode(',', $ids) . ")");
$this->oDb->execute("DELETE FROM `site_users_permissions` WHERE `user_id` IN (" . implode(',', $ids) . ") AND `user_id` <> 0");
return $this->oDb->execute("DELETE FROM `site_users` WHERE `id` IN (" . implode(',', $ids) . ")");
}
}