ElixirVault/www/system-brs-core/app/pubUsers/inc/pubUsersModule.php

608 lines
18 KiB
PHP

<?php
namespace BRSystems\Core\App\pubUsers\inc;
use BRSystems\Core\Library\cDb\cDb;
/**
* pubUsers module
*
* @category CMS pubUsers
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @since Version 1.0
*/
class pubUsersModule
{
public cDb $db;
public $compId;
const ARTICLE_TYPE_README = 309;
public function __construct($compId = 0)
{
$this->compId = $compId;
$this->db = cDb::getInstance(DB_HOST, DB_USR, DB_PWD, DB_PORT, DB_NAME);
}
/**
* Function to add new user to the list
*
* @category APP pubUsers
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @param array $data - user data array to insert into modules
* @return null|int
*/
public function addNewUser(array $data)
{
return $this->db->_queryInsert('mod_users', $data) ?? null;
}
public function getUserByLoginData(array $loginData): array
{
return $this->db->_querySelectRow('mod_users', false, $loginData) ?? [];
}
public function updateUserDataById(int $id, array $update): bool
{
return $this->db->_queryUpdate('mod_users', $update, ['id' => $id]);
}
public function getUserByLogin(string $login): array
{
return $this->db->_querySelectRow('mod_users', false, ['user_login' => $login, 'user_deleted' => 0]) ?? [];
}
public function getUserLoginById(int $id): string
{
return $this->db->_querySelectOne('mod_users', ['user_login'], ['id' => $id, 'user_deleted' => 0]) ?? '';
}
public function setUserActiveById(int $id): bool
{
return $this->db->_queryUpdate('mod_users', ['user_activated' => 1], ['id' => $id]);
}
/**
* Function to load user permissions
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category APP pubUsers
* @param int $userId - user id
* @param int $accId - account id
* @return array
* @version 1.1
*/
public function loadUserPermissionArray(int $userId, int $accId = 0): array
{
$sSql = "
/* GET ALL USER PERMISSIONS */
SELECT
DISTINCT upp.p_id as pId,
pp.p_name as sId, app.p_id
FROM (
SELECT
u_p.user_id as u_id,
u_p.permissions_id as p_id
FROM
mod_users_permissions u_p
WHERE
u_p.user_id = {$userId}
AND u_p.groups_id = 0
UNION ALL
SELECT
ugr.user_id as u_id,
gr_p.permissions_id as p_id
FROM
mod_users_permissions ugr
LEFT JOIN mod_permissions_groups gr_data ON
gr_data.id = ugr.groups_id
LEFT JOIN mod_users_permissions gr_p ON
ugr.groups_id = gr_p.groups_id
AND gr_p.user_id = 0
WHERE
ugr.user_id = {$userId}
AND ugr.groups_id > 0
AND gr_data.group_blocked = '0'
) upp
LEFT JOIN (
/* GET ALL ACCOUNT PERMISSIONS */
SELECT
acc_p.p_id
FROM
mod_account_permissions acc_p
WHERE
acc_p.a_id = {$accId}
AND acc_p.g_id = 0
UNION ALL
SELECT
gr_p.permissions_id as p_id
FROM
mod_account_permissions acc_gr
LEFT JOIN mod_permissions_groups gr_data ON
acc_gr.g_id = gr_data.id
LEFT JOIN mod_users_permissions gr_p ON
acc_gr.g_id = gr_p.groups_id
AND gr_p.user_id = 0
WHERE
acc_gr.a_id = {$accId}
AND acc_gr.g_id > 0
AND gr_data.group_blocked = '0'
) app ON upp.p_id = app.p_id
LEFT JOIN mod_permissions pp ON
pp.id = upp.p_id
WHERE
pp.p_blocked = '0'
AND app.p_id IS NOT NULL
";
$this->db->query($sSql);
return $this->db->getKeyValBasedArray('pId', 'sId') ?? [];
}
/**
* Function to load sys user config
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category APP pubUsers
* @param int $userId - user id
* @return bool|array of data
* @version 1.1
*/
public function getUserCfg(int $userId)
{
return $this->db->_querySelectOne('mod_users', array('user_cfg'), array('id' => $userId));
}
/**
* Function to save user cfg
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category APP pubUsers
* @param int $id - user id
* @param array $data - user data
* @return bool
* @version 1.1
*/
public function saveUserCFG(int $id, array $data): bool
{
if (
$id &&
$this->db->_queryUpdate('mod_users', $data, array('id' => $id), true)
) {
return true;
}
return false;
}
/**
* Function to get user by email
*
* @category APP pubUsers
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @param string $string - user email or login to look for
* @param bool $email - whether its email or not
* @return array
*/
public function getUserByEmail(string $string, bool $email = false): ?array
{
$where = array('user_deleted' => 0);
$where[($email ? 'user_email' : 'user_login')] = $string;
return $this->db->_querySelect('mod_users', false, $where);
}
/**
* Function to load pub user permissions
*
* @author Aivars Žukovskis <keiss.mareks@gmail.com>
* @category APP pubUsers
* @param int $userId - user id
* @return array of data
* @version 1.1
*/
public function pubLoadUserPermissionArray(int $userId): ?array
{
$sSql = "
SELECT
mp.p_name,
mp.p_description
FROM
mod_users_permissions mup
LEFT JOIN mod_permissions mp ON
mp.id = mup.permissions_id
WHERE
mup.user_id = {$userId}
AND mup.groups_id = '0'
";
$this->db->query($sSql);
return $this->db->getArray();
}
/**
* Function to load pub user group permissions
*
* @author Aivars Žukovskis <keiss.mareks@gmail.com>
* @category APP pubUsers
* @param int $userId - user id
* @return array of data
* @version 1.1
*/
public function pubLoadUserGroupPerArray(int $userId): ?array
{
$sSql = "
SELECT
mpg.group_name,
mpg.group_description
FROM
mod_users_permissions mup
LEFT JOIN mod_permissions_groups mpg ON
mpg.id = mup.groups_id
WHERE
mup.user_id = {$userId}
AND mup.groups_id != '0'
";
$this->db->query($sSql);
return $this->db->getArray();
}
/**
* Function to load pub user group permissions
*
* @author Aivars Žukovskis <keiss.mareks@gmail.com>
* @category APP pubUsers
* @param int $userId - user id
* @return array of data
* @version 1.1
*/
public function pubLoadUserObjectsPerArray(int $userId): ?array
{
$sSql = "
SELECT
mc.a_title,
mc.a_created
FROM
mod_account_to_users mu
LEFT JOIN mod_account_manager mc ON
mu.comp_id = mc.id
WHERE
mu.user_id = {$userId}
AND mc.a_blocked = '0'
";
$this->db->query($sSql);
return $this->db->getArray();
}
/**
* Function to get user companies
*
* @author Aivars Žukovskis <mareks.keiss@brsystems.lv>
* @category APP pubUsers Module
* @param int $uID = user id
* @return bool|array - record data
* @version 1.1
*/
public function getUserCompanies(int $uID): ?array
{
$sSql = "
SELECT
mc.id,
mc.a_title,
mc.a_db_name,
mc.a_accounting_type,
mc.a_unique_identifier,
mc.a_year_cfg,
mc.company_start_date,
mc.a_test_account,
mc.a_trial_till,
mc.a_monthly_payment,
mc.a_created
FROM
mod_account_manager mc
LEFT JOIN mod_account_to_users mctu ON
mc.id = mctu.comp_id
LEFT JOIN INFORMATION_SCHEMA.SCHEMATA ss ON
mc.a_db_name = ss.SCHEMA_NAME
WHERE
mc.a_blocked = '0'
AND mctu.user_id = {$uID}
AND NOT ISNULL(ss.SCHEMA_NAME)
ORDER BY
mc.a_title ASC
";
$this->db->query($sSql);
return $this->db->getFieldBasedArray('id');
}
/**
* Function to get user company detailed data
*
* @author Mareks Keiss <mareks.zukovskis@gmail.com>
* @category APP pubUsers Module
* @param int $id = company id
* @param bool|array $vFields = fields to select
* @return bool|array - record data
* @version 1.1
*/
public function getCompanyDataByCpId(int $id, $vFields = false): ?array
{
if (!empty($vFields) && count($vFields) == 1) {
return $this->db->_querySelectOne('mod_account_manager', $vFields, array('id' => $id));
}
return $this->db->_querySelectRow('mod_account_manager', $vFields, array('id' => $id));
}
/**
* Function to get user company detailed data
*
* @author Mareks Keiss <mareks.zukovskis@gmail.com>
* @category APP pubUsers Module
* @param int $id = company id
* @return bool|int - record data
* @version 1.1
*/
public function checkSubscriptionPaidBills(int $id)
{
return $this->db->_querySelectOne('mod_account_to_bills', ['id'], ['r_account_id' => $id, 'r_paid' => '1']);
}
/**
* Function to get user company detailed data
*
* @author Mareks Keiss <mareks.zukovskis@gmail.com>
* @category APP pubUsers Module
* @param array $uCompanyDbTitles = user company db titles
* @return bool|array - record data
* @version 1.1
*/
public function getCompanyData(array $uCompanyDbTitles)
{
if (!!$uCompanyDbTitles) {
$sSqlUnion = [];
foreach ($uCompanyDbTitles as $db_name) {
$sSqlUnion[] = "
SELECT a_img, a_reg_nr, a_pvn_reg_nr, '{$db_name}' as db_title
FROM `{$db_name}`.mod_partners
WHERE a_requisites = '1'
";
}
$sSqlUnion = implode("UNION ALL ", $sSqlUnion);
$sSql = "
SELECT
cp.id,
dd.a_img as img,
dd.a_reg_nr as a_reg_nr,
dd.a_pvn_reg_nr as a_pvn_reg_nr
FROM
({$sSqlUnion}) as dd
LEFT JOIN mod_account_manager cp ON
cp.a_db_name = dd.db_title
";
$this->db->query($sSql);
return $this->db->getFieldBasedArray('id');
}
return false;
}
/**
* Function to get article data
*
* @author Aivars Žukovskis <mareks.keiss@brsystems.lv>
* @category APP pubUsers Module
* @param int $langId = selected language id
* @return array - record data
* @version 1.1
*/
public function getArticleData(int $langId): ?array
{
$sSql = "
SELECT
rec.a_lhtml as d
FROM
mod_articles art
LEFT JOIN mod_articles_records rec ON
art.id = rec.a_id
WHERE
a_type = " . self::ARTICLE_TYPE_README . "
AND a_disabled = '0'
AND a_lang_id = {$langId}
ORDER BY a_npk
";
$this->db->query($sSql);
return $this->db->getArray();
}
/**
* Function to get user data by email
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsers Module
* @param string $sEmail - user email
* @return bool|int user id
* @version 1.1
*/
public function getUserDataByEmail(string $sEmail)
{
return $this->db->_querySelectOne('mod_users', array('id'), array('user_email' => $sEmail));
}
/**
* Function to get user data by email
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category sysUsers Module
* @param int $id - account id
* @param array $vYear - years to check
* @return bool|int user id
* @version 1.1
*/
public function chkIfCurrentQuarterPaid(int $id, array $vYear)
{
$sSql = "
SELECT
r_type,
r_year,
max(r_qr_1) as q1,
max(r_qr_2) as q2,
max(r_qr_3) as q3,
max(r_qr_4) as q4
FROM
mod_account_to_bills
WHERE
r_year IN (" . implode(",", $vYear) . ")
AND r_account_id = {$id}
AND r_paid = '1'
GROUP BY
r_type, r_account_id, r_year
";
$this->db->query($sSql);
return $this->db->getFieldBasedArrayFieldsAdv(array('r_type', 'r_year'), array('q1', 'q2', 'q3', 'q4'));
}
/**
* Function to check if any data entered in payment missing period
*
* @author Aivars Žukovskis <info@brsystems.lv>
* @category sysUsers Module
* @param string $sTable - table
* @param string $sField - field
* @param array $vDatesToExclude - to check data between dates
* @return array
* @version 1.1
*/
public function chkDataForPaymentMissingInSelectedPeriod(
string $sTable,
string $sField,
array $vDatesToExclude
): ?array {
$sSql = '';
foreach ($vDatesToExclude as $q => $dd) {
$sSql .= "UNION ALL
(
SELECT
'$q' as q,
{$dd['d1']} as d1,
{$dd['d2']} as d2
FROM
`" . COMP_DB_NAME . "`.{$sTable}
WHERE
$sField BETWEEN {$dd['d1']} AND {$dd['d2']}
LIMIT 1
)
";
}
$this->db->query(substr($sSql, strlen('UNION ALL')));
return $this->db->getFieldBasedArrayFieldsAdv('q', array('d1', 'd2'));
}
/**
* Function to update comapny activity time upon choose
*
* @author Aivars Žukovskis <info@brsystems.lv>
* @category sysUsers Module
* @param int $iCompId - company id to update
* @returns void
*/
public function updCompanyActivityDate(int $iCompId): void
{
if ($iCompId) {
$this->db->_queryUpdate('mod_account_manager', ['a_last_activity' => time()], ['id' => $iCompId]);
}
}
/**
* Add product to user wishlist
*
* @param int $userId
* @param int $productId
* @return bool
*/
public function addToWishlist(int $userId, int $productId): bool
{
return (bool)$this->db->_queryInsert('mod_users_whishlist', [
'user_id' => $userId,
'product_id' => $productId,
'created_at' => time(),
]);
}
/**
* Remove product from user wishlist
*
* @param int $userId
* @param int $productId
* @return bool
*/
public function removeFromWishlist(int $userId, int $productId): bool
{
return (bool)$this->db->_queryDelete('mod_users_whishlist', [
'user_id' => $userId,
'product_id' => $productId,
]);
}
/**
* Check if product is in user wishlist
*
* @param int $userId
* @param int $productId
* @return bool
*/
public function isProductInWishlist(int $userId, int $productId): bool
{
$result = $this->db->_querySelect('mod_users_whishlist', ['product_id'], [
'user_id' => $userId,
'product_id' => $productId,
]);
return !empty($result);
}
/**
* Get user wishlist product IDs
*
* @param int $userId
* @return array
*/
public function getWishlistProductIds(int $userId): array
{
$this->db->query("SELECT product_id FROM mod_users_whishlist WHERE user_id = {$userId}");
$result = $this->db->getFieldBasedArray('product_id');
return !empty($result) ? array_keys($result) : [];
}
/**
* Get wishlist item count for user
*
* @param int $userId
* @return int
*/
public function getWishlistCount(int $userId): int
{
$this->db->query("SELECT COUNT(*) as cnt FROM mod_users_whishlist WHERE user_id = {$userId}");
$result = $this->db->getRow();
return (int)($result['cnt'] ?? 0);
}
public function clearWishlist(int $userId): bool
{
return $this->db->_queryDelete('mod_users_whishlist', ['user_id' => $userId]);
}
}